Просмотр исходного кода

updated material icons, wip profile header

Rafał Pitoń 9 лет назад
Родитель
Сommit
dab0998f6c
29 измененных файлов с 64604 добавлено и 54 удалено
  1. 41 2
      frontend/src/components/profile/header.js
  2. 26 0
      frontend/src/components/profile/moderation/nav.js
  3. 47 0
      frontend/src/components/profile/navs.js
  4. 39 10
      frontend/src/components/profile/root.js
  5. BIN
      frontend/static/fonts/MaterialIcons-Regular.eot
  6. 1 0
      frontend/static/fonts/MaterialIcons-Regular.ijmap
  7. 2373 0
      frontend/static/fonts/MaterialIcons-Regular.svg
  8. BIN
      frontend/static/fonts/MaterialIcons-Regular.ttf
  9. BIN
      frontend/static/fonts/MaterialIcons-Regular.woff
  10. BIN
      frontend/static/fonts/MaterialIcons-Regular.woff2
  11. 2 4
      frontend/static/fonts/README.md
  12. 137 0
      frontend/static/fonts/codepoints
  13. 7 0
      frontend/style/misago/dropdowns.less
  14. 3 0
      frontend/style/misago/material-icons.less
  15. 1 0
      frontend/style/misago/page-header.less
  16. 6282 1
      misago/static/misago/css/misago.css
  17. BIN
      misago/static/misago/fonts/MaterialIcons-Regular.eot
  18. 1 0
      misago/static/misago/fonts/MaterialIcons-Regular.ijmap
  19. 2373 0
      misago/static/misago/fonts/MaterialIcons-Regular.svg
  20. BIN
      misago/static/misago/fonts/MaterialIcons-Regular.ttf
  21. BIN
      misago/static/misago/fonts/MaterialIcons-Regular.woff
  22. BIN
      misago/static/misago/fonts/MaterialIcons-Regular.woff2
  23. 2 4
      misago/static/misago/fonts/README.md
  24. 137 0
      misago/static/misago/fonts/codepoints
  25. BIN
      misago/static/misago/img/site-icon.png
  26. BIN
      misago/static/misago/img/site-logo.png
  27. 14102 9
      misago/static/misago/js/misago.js
  28. 39021 14
      misago/static/misago/js/vendor.js
  29. 9 10
      misago/users/permissions/moderation.py

+ 41 - 2
frontend/src/components/profile/header.js

@@ -1,6 +1,7 @@
 import React from 'react';
 import Avatar from 'misago/components/avatar'; // jshint ignore:line
 import FollowButton from 'misago/components/profile/follow-button'; // jshint ignore:line
+import ModerationNav from 'misago/components/profile/moderation/nav'; // jshint ignore:line
 import Status, { StatusIcon, StatusLabel } from 'misago/components/user-status'; // jshint ignore:line
 
 export default class extends React.Component {
@@ -72,10 +73,24 @@ export default class extends React.Component {
     /* jshint ignore:end */
   }
 
+  getEmail() {
+    if (this.props.profile.email) {
+      /* jshint ignore:start */
+      return <li className="user-email">
+        <a href={'mailto:' + this.props.profile.email} className="item-title">
+          {this.props.profile.email}
+        </a>
+      </li>;
+      /* jshint ignore:end */
+    } else {
+      return null;
+    }
+  }
+
   getFollowButton() {
     if (this.props.profile.acl.can_follow) {
       /* jshint ignore:start */
-      return <FollowButton className='btn btn-aligned'
+      return <FollowButton className="btn btn-aligned hidden-xs hidden-sm"
                            profile={this.props.profile} />;
       /* jshint ignore:end */
     } else {
@@ -83,6 +98,29 @@ export default class extends React.Component {
     }
   }
 
+  getModerationButton() {
+    if (this.props.profile.acl.can_moderate) {
+      console.log(this.props.profile.acl);
+      /* jshint ignore:start */
+      return <div className="btn-group btn-aligned hidden-xs hidden-sm">
+        <button className="btn btn-default btn-moderate dropdown-toggle"
+                type="button"
+                data-toggle="dropdown"
+                aria-haspopup="true"
+                aria-expanded="false">
+          <span className="material-icon">
+            tonality
+          </span>
+          {gettext("Moderation")}
+        </button>
+        <ModerationNav profile={this.props.profile} />
+      </div>;
+      /* jshint ignore:end */
+    } else {
+      return null;
+    }
+  }
+
   render() {
     /* jshint ignore:start */
     return<div className="page-header">
@@ -96,8 +134,8 @@ export default class extends React.Component {
               <span className="user-name">{this.props.profile.username}</span>
             </h1>
 
-
             {this.getFollowButton()}
+            {this.getModerationButton()}
 
             <button className="btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg"
                     type="button"
@@ -123,6 +161,7 @@ export default class extends React.Component {
                 {this.getUserRank()}
                 {this.getUserTitle()}
                 {this.getJoinedOn()}
+                {this.getEmail()}
               </ul>
 
             </div>

+ 26 - 0
frontend/src/components/profile/moderation/nav.js

@@ -0,0 +1,26 @@
+import React from 'react';
+
+export default class extends React.Component {
+  render() {
+    // jshint ignore:start
+    return <ul className="dropdown-menu dropdown-menu-right" role="menu">
+      <li>
+        <button className="btn-link">
+          <span className="material-icon">
+            explore
+          </span>
+          Moderate somehow
+        </button>
+      </li>
+      <li>
+        <button className="btn-link">
+          <span className="material-icon">
+            explore
+          </span>
+          Moderate else
+        </button>
+      </li>
+    </ul>;
+    // jshint ignore:end
+  }
+}

+ 47 - 0
frontend/src/components/profile/navs.js

@@ -1,6 +1,7 @@
 import React from 'react';
 import { Link } from 'react-router'; // jshint ignore:line
 import Li from 'misago/components/li'; //jshint ignore:line
+import FollowButton from 'misago/components/profile/follow-button'; // jshint ignore:line
 import misago from 'misago/index'; //jshint ignore:line
 
 export class SideNav extends React.Component {
@@ -35,9 +36,55 @@ export class SideNav extends React.Component {
 }
 
 export class CompactNav extends SideNav {
+  showSpecialOptions() {
+    return this.props.profile.acl.can_follow || this.props.profile.acl.can_moderate;
+  }
+
+  getFollowButton() {
+    if (this.props.profile.acl.can_follow) {
+      /* jshint ignore:start */
+      return <FollowButton className="btn btn-block"
+                           profile={this.props.profile} />;
+      /* jshint ignore:end */
+    } else {
+      return null;
+    }
+  }
+
+  getModerationButton() {
+    if (this.props.profile.acl.can_follow) {
+      /* jshint ignore:start */
+      return <button type="button" className="btn btn-default btn-block"
+                     onClick={this.props.toggleModeration}>
+        <span className="material-icon">
+          tonality
+        </span>
+        {gettext("Moderation")}
+      </button>;
+      /* jshint ignore:end */
+    } else {
+      return null;
+    }
+  }
+
+  getSpecialOptions() {
+    if (this.showSpecialOptions()) {
+      /* jshint ignore:start */
+      return <li className="dropdown-footer">
+        {this.getFollowButton()}
+        {this.getModerationButton()}
+      </li>;
+      /* jshint ignore:end */
+    } else {
+      return null;
+    }
+  }
+
   render() {
     // jshint ignore:start
     return <ul className="dropdown-menu" role="menu">
+      {this.getSpecialOptions()}
+      {this.showSpecialOptions() ? <li className="divider" /> : null}
       {this.props.pages.map((page) => {
         return <Li path={this.props.baseUrl + page.component + '/'}
                    key={page.component}>

+ 39 - 10
frontend/src/components/profile/root.js

@@ -2,6 +2,7 @@ import React from 'react';
 import { connect } from 'react-redux';
 import Avatar from 'misago/components/avatar'; // jshint ignore:line
 import Header from 'misago/components/profile/Header'; // jshint ignore:line
+import ModerationNav from 'misago/components/profile/moderation/nav'; // jshint ignore:line
 import { SideNav, CompactNav } from 'misago/components/profile/navs'; // jshint ignore:line
 import misago from 'misago/index';
 import { dehydrate } from 'misago/reducers/profile'; // jshint ignore:line
@@ -36,13 +37,26 @@ export default class extends React.Component {
 
   /* jshint ignore:start */
   toggleNav = () => {
-    if (this.state.dropdown) {
+    if (this.state.dropdown === 'pages') {
+      this.setState({
+        dropdown: false
+      });
+    } else {
+      this.setState({
+        dropdown: 'pages'
+      });
+    }
+  };
+
+  toggleModeration = () => {
+    if (this.state.dropdown === 'moderation') {
       this.setState({
         dropdown: false
       });
     } else {
+      console.log('show moderation!');
       this.setState({
-        dropdown: true
+        dropdown: 'moderation'
       });
     }
   };
@@ -70,6 +84,26 @@ export default class extends React.Component {
     }
   }
 
+  getNavDropdown() {
+    if (this.state.dropdown === 'pages') {
+      /* jshint ignore:start */
+      return <CompactNav pages={misago.get('PROFILE_PAGES')}
+                         baseUrl={misago.get('PROFILE').absolute_url}
+                         profile={this.props.profile}
+                         toggleModeration={this.toggleModeration}
+                         hideNav={this.hideNav} />;
+      /* jshint ignore:end */
+    } else if (this.state.dropdown === 'moderation') {
+      /* jshint ignore:start */
+      return <ModerationNav profile={this.props.profile}
+                            toggleNav={this.toggleNav}
+                            hideNav={this.hideNav} />;
+      /* jshint ignore:end */
+    } else {
+      return null;
+    }
+  }
+
   getClassName() {
     const baseClass = 'page page-user-profile';
     if (false && this.props.profile.rank.css_class) {
@@ -85,16 +119,11 @@ export default class extends React.Component {
 
       <Header user={this.props.user}
               profile={this.props.profile}
-              toggleNav={this.toggleNav} />
+              toggleNav={this.toggleNav}
+              toggleModeration={this.toggleModeration} />
 
       <div className={this.getCompactNavClassName()}>
-
-        <CompactNav pages={misago.get('PROFILE_PAGES')}
-                    baseUrl={misago.get('PROFILE').absolute_url}
-                    profile={this.props.profile}
-                    hideNav={this.hideNav}
-                    dropdown={this.state.dropdown} />
-
+        {this.getNavDropdown()}
       </div>
       <div className="container">
 

BIN
frontend/static/fonts/MaterialIcons-Regular.eot


+ 1 - 0
frontend/static/fonts/MaterialIcons-Regular.ijmap

@@ -0,0 +1 @@
+{"icons":{"e84d":{"name":"3d Rotation"},"eb3b":{"name":"Ac Unit"},"e190":{"name":"Access Alarm"},"e191":{"name":"Access Alarms"},"e192":{"name":"Access Time"},"e84e":{"name":"Accessibility"},"e914":{"name":"Accessible"},"e84f":{"name":"Account Balance"},"e850":{"name":"Account Balance Wallet"},"e851":{"name":"Account Box"},"e853":{"name":"Account Circle"},"e60e":{"name":"Adb"},"e145":{"name":"Add"},"e439":{"name":"Add A Photo"},"e193":{"name":"Add Alarm"},"e003":{"name":"Add Alert"},"e146":{"name":"Add Box"},"e147":{"name":"Add Circle"},"e148":{"name":"Add Circle Outline"},"e567":{"name":"Add Location"},"e854":{"name":"Add Shopping Cart"},"e39d":{"name":"Add To Photos"},"e05c":{"name":"Add To Queue"},"e39e":{"name":"Adjust"},"e630":{"name":"Airline Seat Flat"},"e631":{"name":"Airline Seat Flat Angled"},"e632":{"name":"Airline Seat Individual Suite"},"e633":{"name":"Airline Seat Legroom Extra"},"e634":{"name":"Airline Seat Legroom Normal"},"e635":{"name":"Airline Seat Legroom Reduced"},"e636":{"name":"Airline Seat Recline Extra"},"e637":{"name":"Airline Seat Recline Normal"},"e195":{"name":"Airplanemode Active"},"e194":{"name":"Airplanemode Inactive"},"e055":{"name":"Airplay"},"eb3c":{"name":"Airport Shuttle"},"e855":{"name":"Alarm"},"e856":{"name":"Alarm Add"},"e857":{"name":"Alarm Off"},"e858":{"name":"Alarm On"},"e019":{"name":"Album"},"eb3d":{"name":"All Inclusive"},"e90b":{"name":"All Out"},"e859":{"name":"Android"},"e85a":{"name":"Announcement"},"e5c3":{"name":"Apps"},"e149":{"name":"Archive"},"e5c4":{"name":"Arrow Back"},"e5db":{"name":"Arrow Downward"},"e5c5":{"name":"Arrow Drop Down"},"e5c6":{"name":"Arrow Drop Down Circle"},"e5c7":{"name":"Arrow Drop Up"},"e5c8":{"name":"Arrow Forward"},"e5d8":{"name":"Arrow Upward"},"e060":{"name":"Art Track"},"e85b":{"name":"Aspect Ratio"},"e85c":{"name":"Assessment"},"e85d":{"name":"Assignment"},"e85e":{"name":"Assignment Ind"},"e85f":{"name":"Assignment Late"},"e860":{"name":"Assignment Return"},"e861":{"name":"Assignment Returned"},"e862":{"name":"Assignment Turned In"},"e39f":{"name":"Assistant"},"e3a0":{"name":"Assistant Photo"},"e226":{"name":"Attach File"},"e227":{"name":"Attach Money"},"e2bc":{"name":"Attachment"},"e3a1":{"name":"Audiotrack"},"e863":{"name":"Autorenew"},"e01b":{"name":"Av Timer"},"e14a":{"name":"Backspace"},"e864":{"name":"Backup"},"e19c":{"name":"Battery Alert"},"e1a3":{"name":"Battery Charging Full"},"e1a4":{"name":"Battery Full"},"e1a5":{"name":"Battery Std"},"e1a6":{"name":"Battery Unknown"},"eb3e":{"name":"Beach Access"},"e52d":{"name":"Beenhere"},"e14b":{"name":"Block"},"e1a7":{"name":"Bluetooth"},"e60f":{"name":"Bluetooth Audio"},"e1a8":{"name":"Bluetooth Connected"},"e1a9":{"name":"Bluetooth Disabled"},"e1aa":{"name":"Bluetooth Searching"},"e3a2":{"name":"Blur Circular"},"e3a3":{"name":"Blur Linear"},"e3a4":{"name":"Blur Off"},"e3a5":{"name":"Blur On"},"e865":{"name":"Book"},"e866":{"name":"Bookmark"},"e867":{"name":"Bookmark Border"},"e228":{"name":"Border All"},"e229":{"name":"Border Bottom"},"e22a":{"name":"Border Clear"},"e22b":{"name":"Border Color"},"e22c":{"name":"Border Horizontal"},"e22d":{"name":"Border Inner"},"e22e":{"name":"Border Left"},"e22f":{"name":"Border Outer"},"e230":{"name":"Border Right"},"e231":{"name":"Border Style"},"e232":{"name":"Border Top"},"e233":{"name":"Border Vertical"},"e06b":{"name":"Branding Watermark"},"e3a6":{"name":"Brightness 1"},"e3a7":{"name":"Brightness 2"},"e3a8":{"name":"Brightness 3"},"e3a9":{"name":"Brightness 4"},"e3aa":{"name":"Brightness 5"},"e3ab":{"name":"Brightness 6"},"e3ac":{"name":"Brightness 7"},"e1ab":{"name":"Brightness Auto"},"e1ac":{"name":"Brightness High"},"e1ad":{"name":"Brightness Low"},"e1ae":{"name":"Brightness Medium"},"e3ad":{"name":"Broken Image"},"e3ae":{"name":"Brush"},"e6dd":{"name":"Bubble Chart"},"e868":{"name":"Bug Report"},"e869":{"name":"Build"},"e43c":{"name":"Burst Mode"},"e0af":{"name":"Business"},"eb3f":{"name":"Business Center"},"e86a":{"name":"Cached"},"e7e9":{"name":"Cake"},"e0b0":{"name":"Call"},"e0b1":{"name":"Call End"},"e0b2":{"name":"Call Made"},"e0b3":{"name":"Call Merge"},"e0b4":{"name":"Call Missed"},"e0e4":{"name":"Call Missed Outgoing"},"e0b5":{"name":"Call Received"},"e0b6":{"name":"Call Split"},"e06c":{"name":"Call To Action"},"e3af":{"name":"Camera"},"e3b0":{"name":"Camera Alt"},"e8fc":{"name":"Camera Enhance"},"e3b1":{"name":"Camera Front"},"e3b2":{"name":"Camera Rear"},"e3b3":{"name":"Camera Roll"},"e5c9":{"name":"Cancel"},"e8f6":{"name":"Card Giftcard"},"e8f7":{"name":"Card Membership"},"e8f8":{"name":"Card Travel"},"eb40":{"name":"Casino"},"e307":{"name":"Cast"},"e308":{"name":"Cast Connected"},"e3b4":{"name":"Center Focus Strong"},"e3b5":{"name":"Center Focus Weak"},"e86b":{"name":"Change History"},"e0b7":{"name":"Chat"},"e0ca":{"name":"Chat Bubble"},"e0cb":{"name":"Chat Bubble Outline"},"e5ca":{"name":"Check"},"e834":{"name":"Check Box"},"e835":{"name":"Check Box Outline Blank"},"e86c":{"name":"Check Circle"},"e5cb":{"name":"Chevron Left"},"e5cc":{"name":"Chevron Right"},"eb41":{"name":"Child Care"},"eb42":{"name":"Child Friendly"},"e86d":{"name":"Chrome Reader Mode"},"e86e":{"name":"Class"},"e14c":{"name":"Clear"},"e0b8":{"name":"Clear All"},"e5cd":{"name":"Close"},"e01c":{"name":"Closed Caption"},"e2bd":{"name":"Cloud"},"e2be":{"name":"Cloud Circle"},"e2bf":{"name":"Cloud Done"},"e2c0":{"name":"Cloud Download"},"e2c1":{"name":"Cloud Off"},"e2c2":{"name":"Cloud Queue"},"e2c3":{"name":"Cloud Upload"},"e86f":{"name":"Code"},"e3b6":{"name":"Collections"},"e431":{"name":"Collections Bookmark"},"e3b7":{"name":"Color Lens"},"e3b8":{"name":"Colorize"},"e0b9":{"name":"Comment"},"e3b9":{"name":"Compare"},"e915":{"name":"Compare Arrows"},"e30a":{"name":"Computer"},"e638":{"name":"Confirmation Number"},"e0d0":{"name":"Contact Mail"},"e0cf":{"name":"Contact Phone"},"e0ba":{"name":"Contacts"},"e14d":{"name":"Content Copy"},"e14e":{"name":"Content Cut"},"e14f":{"name":"Content Paste"},"e3ba":{"name":"Control Point"},"e3bb":{"name":"Control Point Duplicate"},"e90c":{"name":"Copyright"},"e150":{"name":"Create"},"e2cc":{"name":"Create New Folder"},"e870":{"name":"Credit Card"},"e3be":{"name":"Crop"},"e3bc":{"name":"Crop 16 9"},"e3bd":{"name":"Crop 3 2"},"e3bf":{"name":"Crop 5 4"},"e3c0":{"name":"Crop 7 5"},"e3c1":{"name":"Crop Din"},"e3c2":{"name":"Crop Free"},"e3c3":{"name":"Crop Landscape"},"e3c4":{"name":"Crop Original"},"e3c5":{"name":"Crop Portrait"},"e437":{"name":"Crop Rotate"},"e3c6":{"name":"Crop Square"},"e871":{"name":"Dashboard"},"e1af":{"name":"Data Usage"},"e916":{"name":"Date Range"},"e3c7":{"name":"Dehaze"},"e872":{"name":"Delete"},"e92b":{"name":"Delete Forever"},"e16c":{"name":"Delete Sweep"},"e873":{"name":"Description"},"e30b":{"name":"Desktop Mac"},"e30c":{"name":"Desktop Windows"},"e3c8":{"name":"Details"},"e30d":{"name":"Developer Board"},"e1b0":{"name":"Developer Mode"},"e335":{"name":"Device Hub"},"e1b1":{"name":"Devices"},"e337":{"name":"Devices Other"},"e0bb":{"name":"Dialer Sip"},"e0bc":{"name":"Dialpad"},"e52e":{"name":"Directions"},"e52f":{"name":"Directions Bike"},"e532":{"name":"Directions Boat"},"e530":{"name":"Directions Bus"},"e531":{"name":"Directions Car"},"e534":{"name":"Directions Railway"},"e566":{"name":"Directions Run"},"e533":{"name":"Directions Subway"},"e535":{"name":"Directions Transit"},"e536":{"name":"Directions Walk"},"e610":{"name":"Disc Full"},"e875":{"name":"Dns"},"e612":{"name":"Do Not Disturb"},"e611":{"name":"Do Not Disturb Alt"},"e643":{"name":"Do Not Disturb Off"},"e644":{"name":"Do Not Disturb On"},"e30e":{"name":"Dock"},"e7ee":{"name":"Domain"},"e876":{"name":"Done"},"e877":{"name":"Done All"},"e917":{"name":"Donut Large"},"e918":{"name":"Donut Small"},"e151":{"name":"Drafts"},"e25d":{"name":"Drag Handle"},"e613":{"name":"Drive Eta"},"e1b2":{"name":"Dvr"},"e3c9":{"name":"Edit"},"e568":{"name":"Edit Location"},"e8fb":{"name":"Eject"},"e0be":{"name":"Email"},"e63f":{"name":"Enhanced Encryption"},"e01d":{"name":"Equalizer"},"e000":{"name":"Error"},"e001":{"name":"Error Outline"},"e926":{"name":"Euro Symbol"},"e56d":{"name":"Ev Station"},"e878":{"name":"Event"},"e614":{"name":"Event Available"},"e615":{"name":"Event Busy"},"e616":{"name":"Event Note"},"e903":{"name":"Event Seat"},"e879":{"name":"Exit To App"},"e5ce":{"name":"Expand Less"},"e5cf":{"name":"Expand More"},"e01e":{"name":"Explicit"},"e87a":{"name":"Explore"},"e3ca":{"name":"Exposure"},"e3cb":{"name":"Exposure Neg 1"},"e3cc":{"name":"Exposure Neg 2"},"e3cd":{"name":"Exposure Plus 1"},"e3ce":{"name":"Exposure Plus 2"},"e3cf":{"name":"Exposure Zero"},"e87b":{"name":"Extension"},"e87c":{"name":"Face"},"e01f":{"name":"Fast Forward"},"e020":{"name":"Fast Rewind"},"e87d":{"name":"Favorite"},"e87e":{"name":"Favorite Border"},"e06d":{"name":"Featured Play List"},"e06e":{"name":"Featured Video"},"e87f":{"name":"Feedback"},"e05d":{"name":"Fiber Dvr"},"e061":{"name":"Fiber Manual Record"},"e05e":{"name":"Fiber New"},"e06a":{"name":"Fiber Pin"},"e062":{"name":"Fiber Smart Record"},"e2c4":{"name":"File Download"},"e2c6":{"name":"File Upload"},"e3d3":{"name":"Filter"},"e3d0":{"name":"Filter 1"},"e3d1":{"name":"Filter 2"},"e3d2":{"name":"Filter 3"},"e3d4":{"name":"Filter 4"},"e3d5":{"name":"Filter 5"},"e3d6":{"name":"Filter 6"},"e3d7":{"name":"Filter 7"},"e3d8":{"name":"Filter 8"},"e3d9":{"name":"Filter 9"},"e3da":{"name":"Filter 9 Plus"},"e3db":{"name":"Filter B And W"},"e3dc":{"name":"Filter Center Focus"},"e3dd":{"name":"Filter Drama"},"e3de":{"name":"Filter Frames"},"e3df":{"name":"Filter Hdr"},"e152":{"name":"Filter List"},"e3e0":{"name":"Filter None"},"e3e2":{"name":"Filter Tilt Shift"},"e3e3":{"name":"Filter Vintage"},"e880":{"name":"Find In Page"},"e881":{"name":"Find Replace"},"e90d":{"name":"Fingerprint"},"e5dc":{"name":"First Page"},"eb43":{"name":"Fitness Center"},"e153":{"name":"Flag"},"e3e4":{"name":"Flare"},"e3e5":{"name":"Flash Auto"},"e3e6":{"name":"Flash Off"},"e3e7":{"name":"Flash On"},"e539":{"name":"Flight"},"e904":{"name":"Flight Land"},"e905":{"name":"Flight Takeoff"},"e3e8":{"name":"Flip"},"e882":{"name":"Flip To Back"},"e883":{"name":"Flip To Front"},"e2c7":{"name":"Folder"},"e2c8":{"name":"Folder Open"},"e2c9":{"name":"Folder Shared"},"e617":{"name":"Folder Special"},"e167":{"name":"Font Download"},"e234":{"name":"Format Align Center"},"e235":{"name":"Format Align Justify"},"e236":{"name":"Format Align Left"},"e237":{"name":"Format Align Right"},"e238":{"name":"Format Bold"},"e239":{"name":"Format Clear"},"e23a":{"name":"Format Color Fill"},"e23b":{"name":"Format Color Reset"},"e23c":{"name":"Format Color Text"},"e23d":{"name":"Format Indent Decrease"},"e23e":{"name":"Format Indent Increase"},"e23f":{"name":"Format Italic"},"e240":{"name":"Format Line Spacing"},"e241":{"name":"Format List Bulleted"},"e242":{"name":"Format List Numbered"},"e243":{"name":"Format Paint"},"e244":{"name":"Format Quote"},"e25e":{"name":"Format Shapes"},"e245":{"name":"Format Size"},"e246":{"name":"Format Strikethrough"},"e247":{"name":"Format Textdirection L To R"},"e248":{"name":"Format Textdirection R To L"},"e249":{"name":"Format Underlined"},"e0bf":{"name":"Forum"},"e154":{"name":"Forward"},"e056":{"name":"Forward 10"},"e057":{"name":"Forward 30"},"e058":{"name":"Forward 5"},"eb44":{"name":"Free Breakfast"},"e5d0":{"name":"Fullscreen"},"e5d1":{"name":"Fullscreen Exit"},"e24a":{"name":"Functions"},"e927":{"name":"G Translate"},"e30f":{"name":"Gamepad"},"e021":{"name":"Games"},"e90e":{"name":"Gavel"},"e155":{"name":"Gesture"},"e884":{"name":"Get App"},"e908":{"name":"Gif"},"eb45":{"name":"Golf Course"},"e1b3":{"name":"Gps Fixed"},"e1b4":{"name":"Gps Not Fixed"},"e1b5":{"name":"Gps Off"},"e885":{"name":"Grade"},"e3e9":{"name":"Gradient"},"e3ea":{"name":"Grain"},"e1b8":{"name":"Graphic Eq"},"e3eb":{"name":"Grid Off"},"e3ec":{"name":"Grid On"},"e7ef":{"name":"Group"},"e7f0":{"name":"Group Add"},"e886":{"name":"Group Work"},"e052":{"name":"Hd"},"e3ed":{"name":"Hdr Off"},"e3ee":{"name":"Hdr On"},"e3f1":{"name":"Hdr Strong"},"e3f2":{"name":"Hdr Weak"},"e310":{"name":"Headset"},"e311":{"name":"Headset Mic"},"e3f3":{"name":"Healing"},"e023":{"name":"Hearing"},"e887":{"name":"Help"},"e8fd":{"name":"Help Outline"},"e024":{"name":"High Quality"},"e25f":{"name":"Highlight"},"e888":{"name":"Highlight Off"},"e889":{"name":"History"},"e88a":{"name":"Home"},"eb46":{"name":"Hot Tub"},"e53a":{"name":"Hotel"},"e88b":{"name":"Hourglass Empty"},"e88c":{"name":"Hourglass Full"},"e902":{"name":"Http"},"e88d":{"name":"Https"},"e3f4":{"name":"Image"},"e3f5":{"name":"Image Aspect Ratio"},"e0e0":{"name":"Import Contacts"},"e0c3":{"name":"Import Export"},"e912":{"name":"Important Devices"},"e156":{"name":"Inbox"},"e909":{"name":"Indeterminate Check Box"},"e88e":{"name":"Info"},"e88f":{"name":"Info Outline"},"e890":{"name":"Input"},"e24b":{"name":"Insert Chart"},"e24c":{"name":"Insert Comment"},"e24d":{"name":"Insert Drive File"},"e24e":{"name":"Insert Emoticon"},"e24f":{"name":"Insert Invitation"},"e250":{"name":"Insert Link"},"e251":{"name":"Insert Photo"},"e891":{"name":"Invert Colors"},"e0c4":{"name":"Invert Colors Off"},"e3f6":{"name":"Iso"},"e312":{"name":"Keyboard"},"e313":{"name":"Keyboard Arrow Down"},"e314":{"name":"Keyboard Arrow Left"},"e315":{"name":"Keyboard Arrow Right"},"e316":{"name":"Keyboard Arrow Up"},"e317":{"name":"Keyboard Backspace"},"e318":{"name":"Keyboard Capslock"},"e31a":{"name":"Keyboard Hide"},"e31b":{"name":"Keyboard Return"},"e31c":{"name":"Keyboard Tab"},"e31d":{"name":"Keyboard Voice"},"eb47":{"name":"Kitchen"},"e892":{"name":"Label"},"e893":{"name":"Label Outline"},"e3f7":{"name":"Landscape"},"e894":{"name":"Language"},"e31e":{"name":"Laptop"},"e31f":{"name":"Laptop Chromebook"},"e320":{"name":"Laptop Mac"},"e321":{"name":"Laptop Windows"},"e5dd":{"name":"Last Page"},"e895":{"name":"Launch"},"e53b":{"name":"Layers"},"e53c":{"name":"Layers Clear"},"e3f8":{"name":"Leak Add"},"e3f9":{"name":"Leak Remove"},"e3fa":{"name":"Lens"},"e02e":{"name":"Library Add"},"e02f":{"name":"Library Books"},"e030":{"name":"Library Music"},"e90f":{"name":"Lightbulb Outline"},"e919":{"name":"Line Style"},"e91a":{"name":"Line Weight"},"e260":{"name":"Linear Scale"},"e157":{"name":"Link"},"e438":{"name":"Linked Camera"},"e896":{"name":"List"},"e0c6":{"name":"Live Help"},"e639":{"name":"Live Tv"},"e53f":{"name":"Local Activity"},"e53d":{"name":"Local Airport"},"e53e":{"name":"Local Atm"},"e540":{"name":"Local Bar"},"e541":{"name":"Local Cafe"},"e542":{"name":"Local Car Wash"},"e543":{"name":"Local Convenience Store"},"e556":{"name":"Local Dining"},"e544":{"name":"Local Drink"},"e545":{"name":"Local Florist"},"e546":{"name":"Local Gas Station"},"e547":{"name":"Local Grocery Store"},"e548":{"name":"Local Hospital"},"e549":{"name":"Local Hotel"},"e54a":{"name":"Local Laundry Service"},"e54b":{"name":"Local Library"},"e54c":{"name":"Local Mall"},"e54d":{"name":"Local Movies"},"e54e":{"name":"Local Offer"},"e54f":{"name":"Local Parking"},"e550":{"name":"Local Pharmacy"},"e551":{"name":"Local Phone"},"e552":{"name":"Local Pizza"},"e553":{"name":"Local Play"},"e554":{"name":"Local Post Office"},"e555":{"name":"Local Printshop"},"e557":{"name":"Local See"},"e558":{"name":"Local Shipping"},"e559":{"name":"Local Taxi"},"e7f1":{"name":"Location City"},"e1b6":{"name":"Location Disabled"},"e0c7":{"name":"Location Off"},"e0c8":{"name":"Location On"},"e1b7":{"name":"Location Searching"},"e897":{"name":"Lock"},"e898":{"name":"Lock Open"},"e899":{"name":"Lock Outline"},"e3fc":{"name":"Looks"},"e3fb":{"name":"Looks 3"},"e3fd":{"name":"Looks 4"},"e3fe":{"name":"Looks 5"},"e3ff":{"name":"Looks 6"},"e400":{"name":"Looks One"},"e401":{"name":"Looks Two"},"e028":{"name":"Loop"},"e402":{"name":"Loupe"},"e16d":{"name":"Low Priority"},"e89a":{"name":"Loyalty"},"e158":{"name":"Mail"},"e0e1":{"name":"Mail Outline"},"e55b":{"name":"Map"},"e159":{"name":"Markunread"},"e89b":{"name":"Markunread Mailbox"},"e322":{"name":"Memory"},"e5d2":{"name":"Menu"},"e252":{"name":"Merge Type"},"e0c9":{"name":"Message"},"e029":{"name":"Mic"},"e02a":{"name":"Mic None"},"e02b":{"name":"Mic Off"},"e618":{"name":"Mms"},"e253":{"name":"Mode Comment"},"e254":{"name":"Mode Edit"},"e263":{"name":"Monetization On"},"e25c":{"name":"Money Off"},"e403":{"name":"Monochrome Photos"},"e7f2":{"name":"Mood"},"e7f3":{"name":"Mood Bad"},"e619":{"name":"More"},"e5d3":{"name":"More Horiz"},"e5d4":{"name":"More Vert"},"e91b":{"name":"Motorcycle"},"e323":{"name":"Mouse"},"e168":{"name":"Move To Inbox"},"e02c":{"name":"Movie"},"e404":{"name":"Movie Creation"},"e43a":{"name":"Movie Filter"},"e6df":{"name":"Multiline Chart"},"e405":{"name":"Music Note"},"e063":{"name":"Music Video"},"e55c":{"name":"My Location"},"e406":{"name":"Nature"},"e407":{"name":"Nature People"},"e408":{"name":"Navigate Before"},"e409":{"name":"Navigate Next"},"e55d":{"name":"Navigation"},"e569":{"name":"Near Me"},"e1b9":{"name":"Network Cell"},"e640":{"name":"Network Check"},"e61a":{"name":"Network Locked"},"e1ba":{"name":"Network Wifi"},"e031":{"name":"New Releases"},"e16a":{"name":"Next Week"},"e1bb":{"name":"Nfc"},"e641":{"name":"No Encryption"},"e0cc":{"name":"No Sim"},"e033":{"name":"Not Interested"},"e06f":{"name":"Note"},"e89c":{"name":"Note Add"},"e7f4":{"name":"Notifications"},"e7f7":{"name":"Notifications Active"},"e7f5":{"name":"Notifications None"},"e7f6":{"name":"Notifications Off"},"e7f8":{"name":"Notifications Paused"},"e90a":{"name":"Offline Pin"},"e63a":{"name":"Ondemand Video"},"e91c":{"name":"Opacity"},"e89d":{"name":"Open In Browser"},"e89e":{"name":"Open In New"},"e89f":{"name":"Open With"},"e7f9":{"name":"Pages"},"e8a0":{"name":"Pageview"},"e40a":{"name":"Palette"},"e925":{"name":"Pan Tool"},"e40b":{"name":"Panorama"},"e40c":{"name":"Panorama Fish Eye"},"e40d":{"name":"Panorama Horizontal"},"e40e":{"name":"Panorama Vertical"},"e40f":{"name":"Panorama Wide Angle"},"e7fa":{"name":"Party Mode"},"e034":{"name":"Pause"},"e035":{"name":"Pause Circle Filled"},"e036":{"name":"Pause Circle Outline"},"e8a1":{"name":"Payment"},"e7fb":{"name":"People"},"e7fc":{"name":"People Outline"},"e8a2":{"name":"Perm Camera Mic"},"e8a3":{"name":"Perm Contact Calendar"},"e8a4":{"name":"Perm Data Setting"},"e8a5":{"name":"Perm Device Information"},"e8a6":{"name":"Perm Identity"},"e8a7":{"name":"Perm Media"},"e8a8":{"name":"Perm Phone Msg"},"e8a9":{"name":"Perm Scan Wifi"},"e7fd":{"name":"Person"},"e7fe":{"name":"Person Add"},"e7ff":{"name":"Person Outline"},"e55a":{"name":"Person Pin"},"e56a":{"name":"Person Pin Circle"},"e63b":{"name":"Personal Video"},"e91d":{"name":"Pets"},"e0cd":{"name":"Phone"},"e324":{"name":"Phone Android"},"e61b":{"name":"Phone Bluetooth Speaker"},"e61c":{"name":"Phone Forwarded"},"e61d":{"name":"Phone In Talk"},"e325":{"name":"Phone Iphone"},"e61e":{"name":"Phone Locked"},"e61f":{"name":"Phone Missed"},"e620":{"name":"Phone Paused"},"e326":{"name":"Phonelink"},"e0db":{"name":"Phonelink Erase"},"e0dc":{"name":"Phonelink Lock"},"e327":{"name":"Phonelink Off"},"e0dd":{"name":"Phonelink Ring"},"e0de":{"name":"Phonelink Setup"},"e410":{"name":"Photo"},"e411":{"name":"Photo Album"},"e412":{"name":"Photo Camera"},"e43b":{"name":"Photo Filter"},"e413":{"name":"Photo Library"},"e432":{"name":"Photo Size Select Actual"},"e433":{"name":"Photo Size Select Large"},"e434":{"name":"Photo Size Select Small"},"e415":{"name":"Picture As Pdf"},"e8aa":{"name":"Picture In Picture"},"e911":{"name":"Picture In Picture Alt"},"e6c4":{"name":"Pie Chart"},"e6c5":{"name":"Pie Chart Outlined"},"e55e":{"name":"Pin Drop"},"e55f":{"name":"Place"},"e037":{"name":"Play Arrow"},"e038":{"name":"Play Circle Filled"},"e039":{"name":"Play Circle Outline"},"e906":{"name":"Play For Work"},"e03b":{"name":"Playlist Add"},"e065":{"name":"Playlist Add Check"},"e05f":{"name":"Playlist Play"},"e800":{"name":"Plus One"},"e801":{"name":"Poll"},"e8ab":{"name":"Polymer"},"eb48":{"name":"Pool"},"e0ce":{"name":"Portable Wifi Off"},"e416":{"name":"Portrait"},"e63c":{"name":"Power"},"e336":{"name":"Power Input"},"e8ac":{"name":"Power Settings New"},"e91e":{"name":"Pregnant Woman"},"e0df":{"name":"Present To All"},"e8ad":{"name":"Print"},"e645":{"name":"Priority High"},"e80b":{"name":"Public"},"e255":{"name":"Publish"},"e8ae":{"name":"Query Builder"},"e8af":{"name":"Question Answer"},"e03c":{"name":"Queue"},"e03d":{"name":"Queue Music"},"e066":{"name":"Queue Play Next"},"e03e":{"name":"Radio"},"e837":{"name":"Radio Button Checked"},"e836":{"name":"Radio Button Unchecked"},"e560":{"name":"Rate Review"},"e8b0":{"name":"Receipt"},"e03f":{"name":"Recent Actors"},"e91f":{"name":"Record Voice Over"},"e8b1":{"name":"Redeem"},"e15a":{"name":"Redo"},"e5d5":{"name":"Refresh"},"e15b":{"name":"Remove"},"e15c":{"name":"Remove Circle"},"e15d":{"name":"Remove Circle Outline"},"e067":{"name":"Remove From Queue"},"e417":{"name":"Remove Red Eye"},"e928":{"name":"Remove Shopping Cart"},"e8fe":{"name":"Reorder"},"e040":{"name":"Repeat"},"e041":{"name":"Repeat One"},"e042":{"name":"Replay"},"e059":{"name":"Replay 10"},"e05a":{"name":"Replay 30"},"e05b":{"name":"Replay 5"},"e15e":{"name":"Reply"},"e15f":{"name":"Reply All"},"e160":{"name":"Report"},"e8b2":{"name":"Report Problem"},"e56c":{"name":"Restaurant"},"e561":{"name":"Restaurant Menu"},"e8b3":{"name":"Restore"},"e929":{"name":"Restore Page"},"e0d1":{"name":"Ring Volume"},"e8b4":{"name":"Room"},"eb49":{"name":"Room Service"},"e418":{"name":"Rotate 90 Degrees Ccw"},"e419":{"name":"Rotate Left"},"e41a":{"name":"Rotate Right"},"e920":{"name":"Rounded Corner"},"e328":{"name":"Router"},"e921":{"name":"Rowing"},"e0e5":{"name":"Rss Feed"},"e642":{"name":"Rv Hookup"},"e562":{"name":"Satellite"},"e161":{"name":"Save"},"e329":{"name":"Scanner"},"e8b5":{"name":"Schedule"},"e80c":{"name":"School"},"e1be":{"name":"Screen Lock Landscape"},"e1bf":{"name":"Screen Lock Portrait"},"e1c0":{"name":"Screen Lock Rotation"},"e1c1":{"name":"Screen Rotation"},"e0e2":{"name":"Screen Share"},"e623":{"name":"Sd Card"},"e1c2":{"name":"Sd Storage"},"e8b6":{"name":"Search"},"e32a":{"name":"Security"},"e162":{"name":"Select All"},"e163":{"name":"Send"},"e811":{"name":"Sentiment Dissatisfied"},"e812":{"name":"Sentiment Neutral"},"e813":{"name":"Sentiment Satisfied"},"e814":{"name":"Sentiment Very Dissatisfied"},"e815":{"name":"Sentiment Very Satisfied"},"e8b8":{"name":"Settings"},"e8b9":{"name":"Settings Applications"},"e8ba":{"name":"Settings Backup Restore"},"e8bb":{"name":"Settings Bluetooth"},"e8bd":{"name":"Settings Brightness"},"e8bc":{"name":"Settings Cell"},"e8be":{"name":"Settings Ethernet"},"e8bf":{"name":"Settings Input Antenna"},"e8c0":{"name":"Settings Input Component"},"e8c1":{"name":"Settings Input Composite"},"e8c2":{"name":"Settings Input Hdmi"},"e8c3":{"name":"Settings Input Svideo"},"e8c4":{"name":"Settings Overscan"},"e8c5":{"name":"Settings Phone"},"e8c6":{"name":"Settings Power"},"e8c7":{"name":"Settings Remote"},"e1c3":{"name":"Settings System Daydream"},"e8c8":{"name":"Settings Voice"},"e80d":{"name":"Share"},"e8c9":{"name":"Shop"},"e8ca":{"name":"Shop Two"},"e8cb":{"name":"Shopping Basket"},"e8cc":{"name":"Shopping Cart"},"e261":{"name":"Short Text"},"e6e1":{"name":"Show Chart"},"e043":{"name":"Shuffle"},"e1c8":{"name":"Signal Cellular 4 Bar"},"e1cd":{"name":"Signal Cellular Connected No Internet 4 Bar"},"e1ce":{"name":"Signal Cellular No Sim"},"e1cf":{"name":"Signal Cellular Null"},"e1d0":{"name":"Signal Cellular Off"},"e1d8":{"name":"Signal Wifi 4 Bar"},"e1d9":{"name":"Signal Wifi 4 Bar Lock"},"e1da":{"name":"Signal Wifi Off"},"e32b":{"name":"Sim Card"},"e624":{"name":"Sim Card Alert"},"e044":{"name":"Skip Next"},"e045":{"name":"Skip Previous"},"e41b":{"name":"Slideshow"},"e068":{"name":"Slow Motion Video"},"e32c":{"name":"Smartphone"},"eb4a":{"name":"Smoke Free"},"eb4b":{"name":"Smoking Rooms"},"e625":{"name":"Sms"},"e626":{"name":"Sms Failed"},"e046":{"name":"Snooze"},"e164":{"name":"Sort"},"e053":{"name":"Sort By Alpha"},"eb4c":{"name":"Spa"},"e256":{"name":"Space Bar"},"e32d":{"name":"Speaker"},"e32e":{"name":"Speaker Group"},"e8cd":{"name":"Speaker Notes"},"e92a":{"name":"Speaker Notes Off"},"e0d2":{"name":"Speaker Phone"},"e8ce":{"name":"Spellcheck"},"e838":{"name":"Star"},"e83a":{"name":"Star Border"},"e839":{"name":"Star Half"},"e8d0":{"name":"Stars"},"e0d3":{"name":"Stay Current Landscape"},"e0d4":{"name":"Stay Current Portrait"},"e0d5":{"name":"Stay Primary Landscape"},"e0d6":{"name":"Stay Primary Portrait"},"e047":{"name":"Stop"},"e0e3":{"name":"Stop Screen Share"},"e1db":{"name":"Storage"},"e8d1":{"name":"Store"},"e563":{"name":"Store Mall Directory"},"e41c":{"name":"Straighten"},"e56e":{"name":"Streetview"},"e257":{"name":"Strikethrough S"},"e41d":{"name":"Style"},"e5d9":{"name":"Subdirectory Arrow Left"},"e5da":{"name":"Subdirectory Arrow Right"},"e8d2":{"name":"Subject"},"e064":{"name":"Subscriptions"},"e048":{"name":"Subtitles"},"e56f":{"name":"Subway"},"e8d3":{"name":"Supervisor Account"},"e049":{"name":"Surround Sound"},"e0d7":{"name":"Swap Calls"},"e8d4":{"name":"Swap Horiz"},"e8d5":{"name":"Swap Vert"},"e8d6":{"name":"Swap Vertical Circle"},"e41e":{"name":"Switch Camera"},"e41f":{"name":"Switch Video"},"e627":{"name":"Sync"},"e628":{"name":"Sync Disabled"},"e629":{"name":"Sync Problem"},"e62a":{"name":"System Update"},"e8d7":{"name":"System Update Alt"},"e8d8":{"name":"Tab"},"e8d9":{"name":"Tab Unselected"},"e32f":{"name":"Tablet"},"e330":{"name":"Tablet Android"},"e331":{"name":"Tablet Mac"},"e420":{"name":"Tag Faces"},"e62b":{"name":"Tap And Play"},"e564":{"name":"Terrain"},"e262":{"name":"Text Fields"},"e165":{"name":"Text Format"},"e0d8":{"name":"Textsms"},"e421":{"name":"Texture"},"e8da":{"name":"Theaters"},"e8db":{"name":"Thumb Down"},"e8dc":{"name":"Thumb Up"},"e8dd":{"name":"Thumbs Up Down"},"e62c":{"name":"Time To Leave"},"e422":{"name":"Timelapse"},"e922":{"name":"Timeline"},"e425":{"name":"Timer"},"e423":{"name":"Timer 10"},"e424":{"name":"Timer 3"},"e426":{"name":"Timer Off"},"e264":{"name":"Title"},"e8de":{"name":"Toc"},"e8df":{"name":"Today"},"e8e0":{"name":"Toll"},"e427":{"name":"Tonality"},"e913":{"name":"Touch App"},"e332":{"name":"Toys"},"e8e1":{"name":"Track Changes"},"e565":{"name":"Traffic"},"e570":{"name":"Train"},"e571":{"name":"Tram"},"e572":{"name":"Transfer Within A Station"},"e428":{"name":"Transform"},"e8e2":{"name":"Translate"},"e8e3":{"name":"Trending Down"},"e8e4":{"name":"Trending Flat"},"e8e5":{"name":"Trending Up"},"e429":{"name":"Tune"},"e8e6":{"name":"Turned In"},"e8e7":{"name":"Turned In Not"},"e333":{"name":"Tv"},"e169":{"name":"Unarchive"},"e166":{"name":"Undo"},"e5d6":{"name":"Unfold Less"},"e5d7":{"name":"Unfold More"},"e923":{"name":"Update"},"e1e0":{"name":"Usb"},"e8e8":{"name":"Verified User"},"e258":{"name":"Vertical Align Bottom"},"e259":{"name":"Vertical Align Center"},"e25a":{"name":"Vertical Align Top"},"e62d":{"name":"Vibration"},"e070":{"name":"Video Call"},"e071":{"name":"Video Label"},"e04a":{"name":"Video Library"},"e04b":{"name":"Videocam"},"e04c":{"name":"Videocam Off"},"e338":{"name":"Videogame Asset"},"e8e9":{"name":"View Agenda"},"e8ea":{"name":"View Array"},"e8eb":{"name":"View Carousel"},"e8ec":{"name":"View Column"},"e42a":{"name":"View Comfy"},"e42b":{"name":"View Compact"},"e8ed":{"name":"View Day"},"e8ee":{"name":"View Headline"},"e8ef":{"name":"View List"},"e8f0":{"name":"View Module"},"e8f1":{"name":"View Quilt"},"e8f2":{"name":"View Stream"},"e8f3":{"name":"View Week"},"e435":{"name":"Vignette"},"e8f4":{"name":"Visibility"},"e8f5":{"name":"Visibility Off"},"e62e":{"name":"Voice Chat"},"e0d9":{"name":"Voicemail"},"e04d":{"name":"Volume Down"},"e04e":{"name":"Volume Mute"},"e04f":{"name":"Volume Off"},"e050":{"name":"Volume Up"},"e0da":{"name":"Vpn Key"},"e62f":{"name":"Vpn Lock"},"e1bc":{"name":"Wallpaper"},"e002":{"name":"Warning"},"e334":{"name":"Watch"},"e924":{"name":"Watch Later"},"e42c":{"name":"Wb Auto"},"e42d":{"name":"Wb Cloudy"},"e42e":{"name":"Wb Incandescent"},"e436":{"name":"Wb Iridescent"},"e430":{"name":"Wb Sunny"},"e63d":{"name":"Wc"},"e051":{"name":"Web"},"e069":{"name":"Web Asset"},"e16b":{"name":"Weekend"},"e80e":{"name":"Whatshot"},"e1bd":{"name":"Widgets"},"e63e":{"name":"Wifi"},"e1e1":{"name":"Wifi Lock"},"e1e2":{"name":"Wifi Tethering"},"e8f9":{"name":"Work"},"e25b":{"name":"Wrap Text"},"e8fa":{"name":"Youtube Searched For"},"e8ff":{"name":"Zoom In"},"e900":{"name":"Zoom Out"},"e56b":{"name":"Zoom Out Map"}}}

+ 2373 - 0
frontend/static/fonts/MaterialIcons-Regular.svg

@@ -0,0 +1,2373 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<!--
+2016-2-8: Created with FontForge (http://fontforge.org)
+-->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
+<metadata>
+Created by FontForge 20151118 at Mon Feb  8 11:58:02 2016
+ By shyndman
+Copyright 2015 Google, Inc. All Rights Reserved.
+</metadata>
+<defs>
+<font id="MaterialIcons-Regular" horiz-adv-x="512" >
+  <font-face 
+    font-family="Material Icons"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="512"
+    panose-1="2 0 5 3 0 0 0 0 0 0"
+    ascent="512"
+    descent="0"
+    bbox="0 0 512 512"
+    underline-thickness="50"
+    underline-position="-100"
+    unicode-range="U+0030-10FFFD"
+  />
+    <missing-glyph />
+    <glyph glyph-name="3d_rotation" unicode="&#x33;d_rotation" 
+d="M256 512c134 0 244 -103 255 -234h-32c-7 80 -57 147 -127 180l-29 -28l-81 81zM353 260c0 34.9356 -13.6691 57 -47 57h-20v-123h19c25.6434 0 40.2719 13.9518 46 34c2 7 2 15 2 24v8zM306 341c38.1819 0 60.9327 -19.3318 72 -47c4 -10 5 -22 5 -34v-8
+c0 -26.4057 -7.57104 -45.571 -21 -59c-13.4122 -13.4122 -30.5519 -22 -57 -22h-49v170h50zM207 258c15.3033 -6.12131 28 -18.2465 28 -39c0 -8 -2 -14 -5 -20s-6 -12 -11 -16c-9.37815 -7.50252 -23.5479 -12 -40 -12c-31.0959 0 -54 15.7441 -54 47h27
+c0 -15.4518 11.6022 -25 27 -25c17.8699 0 28 8.53939 28 27c0 18.8434 -12.3951 27 -31 27h-16v22h16c17.3039 0 29 8.03066 29 25c0 16.5246 -8.84017 25 -26 25c-14.4441 0 -25 -8.58131 -25 -23h-28c0 14.8936 7.55163 24.5516 15 32c9.92709 7.94167 20.8987 13 38 13
+c25.6475 0 40.3859 -9.7718 49 -27c3 -6 4 -12 4 -20c0 -18.1878 -12.3353 -29.6677 -25 -36zM160 54l29 28l81 -81l-14 -1c-134 0 -244 104 -255 235h32c8 -80 57 -148 127 -181z" />
+    <glyph glyph-name="ac_unit" unicode="ac_unit" 
+d="M469 277v-42h-89l69 -69l-30 -31l-99 100h-43v-43l100 -99l-31 -30l-69 69v-89h-42v89l-69 -69l-31 30l100 99v43h-43l-99 -100l-30 31l69 69h-89v42h89l-69 69l30 31l99 -100h43v43l-100 99l31 30l69 -69v89h42v-89l69 69l31 -30l-100 -99v-43h43l99 100l30 -31l-69 -69
+h89z" />
+    <glyph glyph-name="access_alarm" unicode="access_alarm" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM267 341v-112l85 -50l-16 -26l-101 60v128h32zM168 440l-98 -82l-27 32l98 82zM469 390
+l-27 -33l-98 83l27 32z" />
+    <glyph glyph-name="access_alarms" unicode="access_alarms" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c107 0 192 -85 192 -192s-85 -192 -192 -192s-192 85 -192 192s85 192 192 192zM267 341v-113l85 -51l-17 -26l-100 62v128h32zM169 439l-99 -81l-27 32l98 81zM469 390
+l-27 -32l-99 84l28 32z" />
+    <glyph glyph-name="access_time" unicode="access_time" 
+d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="accessibility" unicode="accessibility" 
+d="M448 320h-128v-277h-43v128h-42v-128h-43v277h-128v43h384v-43zM256 469c23 0 43 -19 43 -42s-20 -43 -43 -43s-43 20 -43 43s20 42 43 42z" />
+    <glyph glyph-name="accessible" unicode="accessible" 
+d="M274 128h44c-10 -49 -53 -85 -105 -85c-59 0 -106 47 -106 106c0 52 36 95 85 105v-44c-25 -9 -43 -33 -43 -61c0 -35 29 -64 64 -64c28 0 52 18 61 43zM213 318c0 29.9891 33.3578 56.5098 64 39h1v-1c5 -2 9 -5 13 -9l28 -31c21 -23 53 -39 86 -39v-42
+c-37 0 -78 18 -106 41v-73h64c23 0 42 -20 42 -43v-117h-42v106h-107c-23 0 -43 20 -43 43v126zM213 427c0 24 19 42 43 42s43 -18 43 -42s-19 -43 -43 -43s-43 19 -43 43z" />
+    <glyph glyph-name="account_balance" unicode="account_balance" 
+d="M245 491l203 -107v-43h-405v43zM341 299h64v-150h-64v150zM43 43v64h405v-64h-405zM213 299h64v-150h-64v150zM85 299h64v-150h-64v150z" />
+    <glyph glyph-name="account_balance_wallet" unicode="account_balance_wallet" 
+d="M341 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 171v170h213v-170h-213zM448 128v-21c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298c23 0 43 -20 43 -43v-21h-192c-24 0 -43 -20 -43 -43v-170
+c0 -23 19 -43 43 -43h192z" />
+    <glyph glyph-name="account_box" unicode="account_box" 
+d="M128 149v-21h256v21c0 43 -85 66 -128 66s-128 -23 -128 -66zM320 320c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM64 405c0 23 19 43 43 43h298c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298z" />
+    <glyph glyph-name="account_circle" unicode="account_circle" 
+d="M256 102c53 0 100 28 128 69c-1 42 -86 66 -128 66c-43 0 -127 -24 -128 -66c28 -41 75 -69 128 -69zM256 405c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z
+" />
+    <glyph glyph-name="adb" unicode="adb" 
+d="M320 320c12 0 21 9 21 21s-9 22 -21 22s-21 -10 -21 -22s9 -21 21 -21zM192 320c12 0 21 9 21 21s-9 22 -21 22s-21 -10 -21 -22s9 -21 21 -21zM344 419c37 -27 61 -71 61 -120v-22h-298v22c0 49 24 93 61 120l-45 45l18 17l49 -49c20 10 42 16 66 16s46 -6 66 -16l49 49
+l18 -17zM107 171v85h298v-85c0 -83 -66 -150 -149 -150s-149 67 -149 150z" />
+    <glyph glyph-name="add" unicode="add" 
+d="M405 235h-128v-128h-42v128h-128v42h128v128h42v-128h128v-42z" />
+    <glyph glyph-name="add_a_photo" unicode="add_a_photo" 
+d="M209 213c0 38 30 69 68 69s69 -31 69 -69s-31 -68 -69 -68s-68 30 -68 68zM277 107c59 0 107 47 107 106s-48 107 -107 107s-106 -48 -106 -107s47 -106 106 -106zM128 299v64h64v64h149l39 -43h68c23 0 43 -20 43 -43v-256c0 -23 -20 -42 -43 -42h-341
+c-23 0 -43 19 -43 42v214h64zM64 427v64h43v-64h64v-43h-64v-64h-43v64h-64v43h64z" />
+    <glyph glyph-name="add_alarm" unicode="add_alarm" 
+d="M277 320v-64h64v-43h-64v-64h-42v64h-64v43h64v64h42zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM469 390l-27 -33l-98 83l27 32z
+M168 440l-98 -82l-27 32l98 82z" />
+    <glyph glyph-name="add_alert" unicode="add_alert" 
+d="M341 234v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM403 153l45 -45v-23h-384v23l45 45v124c0 69 48 128 113 143v15c0 19 15 34 34 34s34 -15 34 -34v-15c65 -15 113 -74 113 -143v-124zM214 64h84c0 -23 -19 -43 -42 -43s-42 20 -42 43z" />
+    <glyph glyph-name="add_box" unicode="add_box" 
+d="M363 235v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="add_circle" unicode="add_circle" 
+d="M363 235v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="add_circle_outline" unicode="add_circle_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM277 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="add_location" unicode="add_location" 
+d="M341 299v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM256 469c82 0 149 -67 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 82 67 149 149 149z" />
+    <glyph glyph-name="add_shopping_cart" unicode="add_shopping_cart" 
+d="M153 197c0 -3 2 -5 5 -5h247v-43h-256c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53l-77 162h-43v42h70c13.5017 -28.165 26.8327 -56.5006 40 -85c17.0313 -35.6353 33.8016 -71.5317 51 -107h150c27.393 49.9404 55.2665 99.4002 82 150l37 -21l-82 -149
+c-7 -13 -21 -22 -37 -22h-159l-19 -35zM363 128c23 0 42 -20 42 -43s-19 -42 -42 -42s-43 19 -43 42s20 43 43 43zM149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43zM235 320v64h-64v43h64v64h42v-64h64v-43h-64v-64h-42z" />
+    <glyph glyph-name="add_to_photos" unicode="add_to_photos" 
+d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="add_to_queue" unicode="add_to_queue" 
+d="M341 299v-43h-64v-64h-42v64h-64v43h64v64h42v-64h64zM448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="adjust" unicode="adjust" 
+d="M320 256c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="airline_seat_flat" unicode="airline_seat_flat" 
+d="M152 254c-25 -25 -65 -26 -90 -1s-26 65 -1 90s65 26 90 1s26 -65 1 -90zM43 213h426v-42h-128v-43h-170v43h-128v42zM469 277v-42h-277v128h192c47 0 85 -39 85 -86z" />
+    <glyph glyph-name="airline_seat_flat_angled" unicode="airline_seat_flat_angled" 
+d="M156 294c-32 -15 -71 -2 -86 30s-2 71 30 86s71 2 86 -30s2 -71 -30 -86zM32 253l15 40l405 -146l-14 -40l-97 34v-34h-170v96zM475 207l-15 -40l-264 95l45 121l182 -66c45 -16 68 -65 52 -110z" />
+    <glyph glyph-name="airline_seat_individual_suite" unicode="airline_seat_individual_suite" 
+d="M405 363c47 0 86 -39 86 -86v-128h-470v214h43v-150h171v150h170zM149 235c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="airline_seat_legroom_extra" unicode="airline_seat_legroom_extra" 
+d="M487 144c9 -16 1 -36 -15 -44l-79 -36l-73 149h-149c-35 0 -64 29 -64 64v171h128v-128h75c16 0 31 -9 38 -24l72 -149l24 11c16 7 35 1 43 -14zM85 256c0 -35 29 -64 64 -64h128v-43h-128c-59 0 -106 48 -106 107v192h42v-192z" />
+    <glyph glyph-name="airline_seat_legroom_normal" unicode="airline_seat_legroom_normal" 
+d="M437 128c18 0 32 -14 32 -32s-14 -32 -32 -32h-96v149h-149c-35 0 -64 29 -64 64v171h128v-128h107c23 0 42 -20 42 -43v-149h32zM107 256c0 -35 29 -64 64 -64h128v-43h-128c-59 0 -107 48 -107 107v192h43v-192z" />
+    <glyph glyph-name="airline_seat_legroom_reduced" unicode="airline_seat_legroom_reduced" 
+d="M107 256c0 -35 29 -64 64 -64h85v-43h-85c-59 0 -107 48 -107 107v192h43v-192zM426 102c4 -20 -11 -38 -31 -38h-96v64l21 85h-128c-35 0 -64 29 -64 64v171h128v-128h107c23 0 42 -20 42 -43l-42 -149h30c16 0 30 -11 33 -26z" />
+    <glyph glyph-name="airline_seat_recline_extra" unicode="airline_seat_recline_extra" 
+d="M346 192l123 -96l-32 -32l-81 64h-146c-31 0 -57 22 -63 52l-29 126c-4 26 13 51 39 56h1c15.1794 2.16848 28.3139 -2.05108 37 -9l35 -27c27 -21 65 -34 100 -27v-46c-40 -7 -76 7 -110 26l22 -87h104zM341 107v-43h-150c-53 0 -98 38 -106 90l-42 209h42l42 -202
+c5 -31 32 -54 64 -54h150zM114 392c-19 14 -23 40 -10 59s40 24 59 11c19 -14 24 -41 11 -60c-14 -19 -41 -23 -60 -10z" />
+    <glyph glyph-name="airline_seat_recline_normal" unicode="airline_seat_recline_normal" 
+d="M427 84l-31 -31l-75 75h-108c-35 0 -64 29 -64 64v123c0 26 22 48 48 48h1c14.8367 0 27.399 -8.39902 35 -16l30 -33c23 -25 65 -43 100 -43v-47c-41 0 -88 22 -118 47v-79h74zM128 171c0 -35 29 -64 64 -64h128v-43h-128c-59 0 -107 48 -107 107v192h43v-192zM162 397
+c-17 17 -17 43 0 60s43 17 60 0s17 -43 0 -60s-43 -17 -60 0z" />
+    <glyph glyph-name="airplanemode_active" unicode="airplanemode_active" 
+d="M217 320zM448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117c0 18 14 32 32 32s32 -14 32 -32v-117l171 -107v-42z" />
+    <glyph glyph-name="airplanemode_inactive" unicode="airplanemode_inactive" 
+d="M64 400l27 27l336 -336l-27 -27l-123 122v-79l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l127 80zM277 320l171 -107v-42l-68 21l-167 167v78c0 18 14 32 32 32s32 -14 32 -32v-117z" />
+    <glyph glyph-name="airplay" unicode="airplay" 
+d="M448 448c23 0 43 -20 43 -43v-256c0 -23 -20 -42 -43 -42h-85v42h85v256h-384v-256h85v-42h-85c-23 0 -43 19 -43 42v256c0 23 20 43 43 43h384zM128 43l128 128l128 -128h-256z" />
+    <glyph glyph-name="airport_shuttle" unicode="airport_shuttle" 
+d="M320 277h107l-86 86h-21v-86zM373 139c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM277 277v86h-85v-86h85zM128 139c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM64 277h85v86h-85v-86zM363 405l128 -128v-106h-54
+c0 -35 -29 -64 -64 -64s-64 29 -64 64h-117c0 -35 -29 -64 -64 -64s-64 29 -64 64h-43v192c0 24 20 42 43 42h299z" />
+    <glyph glyph-name="alarm" unicode="alarm" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM267 341v-112l85 -50l-16 -26l-101 60v128h32zM168 440l-98 -82l-27 32l98 82zM469 390
+l-27 -33l-98 83l27 32z" />
+    <glyph glyph-name="alarm_add" unicode="alarm_add" 
+d="M277 320v-64h64v-43h-64v-64h-42v64h-64v43h64v64h42zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM469 390l-27 -33l-98 83l27 32z
+M168 440l-98 -82l-27 32l98 82z" />
+    <glyph glyph-name="alarm_off" unicode="alarm_off" 
+d="M171 442l-18 -15l-31 30l19 15zM351 120l-210 210c-21 -26 -34 -59 -34 -95c0 -83 66 -150 149 -150c36 0 69 14 95 35zM62 463c131.276 -131.057 262.677 -261.99 394 -393l-27 -27l-47 47c-34 -29 -78 -47 -126 -47c-106 0 -192 86 -192 192c0 48 18 91 47 125l-17 17
+l-24 -20l-30 31l24 19l-29 29zM469 390l-27 -33l-98 83l27 32zM256 384c-18 0 -35 -3 -51 -9l-33 32c25 12 54 20 84 20c106 0 192 -86 192 -192c0 -30 -7 -59 -19 -84l-33 32c6 16 9 34 9 52c0 83 -66 149 -149 149z" />
+    <glyph glyph-name="alarm_on" unicode="alarm_on" 
+d="M225 202l105 106l23 -23l-128 -128l-68 68l22 22zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM168 440l-98 -82l-27 32l98 82zM469 390
+l-27 -33l-98 83l27 32z" />
+    <glyph glyph-name="album" unicode="album" 
+d="M256 277c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM256 160c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="all_inclusive" unicode="all_inclusive" 
+d="M397 371c64 0 115 -52 115 -115s-51 -115 -115 -115c-31 0 -60 12 -82 34l-27 24l32 28l25 -21c15 -15 33 -22 52 -22c40 0 72 32 72 72s-32 72 -72 72c-19 0 -37 -7 -51 -21c-30.1331 -26.5336 -60.4726 -52.8608 -90 -80l-60 -53c-21 -21 -50 -33 -81 -33
+c-64 0 -115 52 -115 115s51 115 115 115c31 0 60 -12 82 -34l27 -24l-33 -28l-24 21c-15 15 -33 22 -52 22c-40 0 -72 -32 -72 -72s32 -72 72 -72c19 0 37 7 51 21c30.1331 26.5336 60.4726 52.8608 90 80l60 53c21 21 50 33 81 33z" />
+    <glyph glyph-name="all_out" unicode="all_out" 
+d="M343 170c45 45 45 120 0 165s-120 45 -165 0s-45 -120 0 -165s120 -45 165 0zM366 358c58 -58 58 -153 0 -211s-153 -58 -211 0s-58 153 0 211s153 58 211 0zM90 338v85h85zM175 82h-85v85zM431 167v-85h-85zM346 423h85v-85z" />
+    <glyph glyph-name="android" unicode="android" 
+d="M320 405v22h-21v-22h21zM213 405v22h-21v-22h21zM331 466c32 -23 53 -61 53 -103h-256c0 42 20 80 52 103l-28 28c-4 4 -4 11 0 15s11 4 15 0l32 -32c17 9 37 14 57 14s39 -5 56 -14l32 32c4 4 11 4 15 0s4 -11 0 -15zM437 341c18 0 32 -14 32 -32v-149
+c0 -18 -14 -32 -32 -32s-32 14 -32 32v149c0 18 14 32 32 32zM75 341c18 0 32 -14 32 -32v-149c0 -18 -14 -32 -32 -32s-32 14 -32 32v149c0 18 14 32 32 32zM128 128v213h256v-213c0 -12 -9 -21 -21 -21h-22v-75c0 -18 -14 -32 -32 -32s-32 14 -32 32v75h-42v-75
+c0 -18 -14 -32 -32 -32s-32 14 -32 32v75h-22c-12 0 -21 9 -21 21z" />
+    <glyph glyph-name="announcement" unicode="announcement" 
+d="M277 192v43h-42v-43h42zM277 277v128h-42v-128h42zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="apps" unicode="apps" 
+d="M341 85v86h86v-86h-86zM341 213v86h86v-86h-86zM213 341v86h86v-86h-86zM341 427h86v-86h-86v86zM213 213v86h86v-86h-86zM85 213v86h86v-86h-86zM85 85v86h86v-86h-86zM213 85v86h86v-86h-86zM85 341v86h86v-86h-86z" />
+    <glyph glyph-name="archive" unicode="archive" 
+d="M109 405h294l-20 22h-256zM256 139l117 117h-74v43h-86v-43h-74zM438 400c6 -7 10 -17 10 -27v-266c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v266c0 10 4 20 10 27l29 36c6 7 15 12 25 12h256c10 0 19 -5 25 -12z" />
+    <glyph glyph-name="arrow_back" unicode="arrow_back" 
+d="M427 277v-42h-260l119 -120l-30 -30l-171 171l171 171l30 -30l-119 -120h260z" />
+    <glyph glyph-name="arrow_downward" unicode="arrow_downward" 
+d="M427 256l-171 -171l-171 171l31 30l119 -119v260h42v-260l120 119z" />
+    <glyph glyph-name="arrow_drop_down" unicode="arrow_drop_down" 
+d="M149 299h214l-107 -107z" />
+    <glyph glyph-name="arrow_drop_down_circle" unicode="arrow_drop_down_circle" 
+d="M256 213l85 86h-170zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="arrow_drop_up" unicode="arrow_drop_up" 
+d="M149 213l107 107l107 -107h-214z" />
+    <glyph glyph-name="arrow_forward" unicode="arrow_forward" 
+d="M256 427l171 -171l-171 -171l-30 30l119 120h-260v42h260l-119 120z" />
+    <glyph glyph-name="arrow_upward" unicode="arrow_upward" 
+d="M85 256l171 171l171 -171l-31 -30l-119 119v-260h-42v260l-120 -119z" />
+    <glyph glyph-name="art_track" unicode="art_track" 
+d="M224 192l-48 64l-37 -48l-27 32l-37 -48h149zM256 320v-128c0 -23 -20 -43 -43 -43h-128c-23 0 -42 20 -42 43v128c0 23 19 43 42 43h128c23 0 43 -20 43 -43zM299 149v43h170v-43h-170zM469 363v-43h-170v43h170zM469 235h-170v42h170v-42z" />
+    <glyph glyph-name="aspect_ratio" unicode="aspect_ratio" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM149 320v-64h-42v107h106v-43h-64zM405 256v-107h-106v43h64v64h42z" />
+    <glyph glyph-name="assessment" unicode="assessment" 
+d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="assignment" unicode="assignment" 
+d="M363 320v43h-214v-43h214zM363 235v42h-214v-42h214zM299 149v43h-150v-43h150zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89
+c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="assignment_ind" unicode="assignment_ind" 
+d="M384 107v30c0 43 -85 66 -128 66s-128 -23 -128 -66v-30h256zM256 363c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43
+h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="assignment_late" unicode="assignment_late" 
+d="M256 405c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22zM277 213v128h-42v-128h42zM277 128v43h-42v-43h42zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43
+h89z" />
+    <glyph glyph-name="assignment_return" unicode="assignment_return" 
+d="M341 192v85h-85v64l-107 -106l107 -107v64h85zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43h89z
+" />
+    <glyph glyph-name="assignment_returned" unicode="assignment_returned" 
+d="M256 128l107 107h-64v85h-86v-85h-64zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="assignment_turned_in" unicode="assignment_turned_in" 
+d="M213 149l171 171l-30 30l-141 -140l-55 55l-30 -30zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43
+h89z" />
+    <glyph glyph-name="assistant" unicode="assistant" 
+d="M296 237l88 40l-88 40l-40 88l-40 -88l-88 -40l88 -40l40 -88zM405 469c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-85l-64 -64l-64 64h-85c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h298z" />
+    <glyph glyph-name="assistant_photo" unicode="assistant_photo" 
+d="M307 384h120v-213h-150l-8 42h-120v-149h-42v363h192z" />
+    <glyph glyph-name="attach_file" unicode="attach_file" 
+d="M352 384h32v-245c0 -65 -52 -118 -117 -118s-118 53 -118 118v266c0 47 39 86 86 86s85 -39 85 -86v-224c0 -29 -24 -53 -53 -53s-54 24 -54 53v203h32v-203c0 -12 10 -21 22 -21s21 9 21 21v224c0 29 -24 54 -53 54s-54 -25 -54 -54v-266c0 -47 39 -86 86 -86
+s85 39 85 86v245z" />
+    <glyph glyph-name="attach_money" unicode="attach_money" 
+d="M252 279c48 -13 100 -32 100 -93c0 -44 -33 -68 -75 -76v-46h-64v46c-41 9 -75 35 -78 82h47c2 -25 19 -45 63 -45c47 0 58 23 58 38c0 20 -11 39 -64 52c-60 14 -100 39 -100 88c0 41 33 68 74 77v46h64v-47c45 -11 68 -44 69 -81h-47c-1 27 -16 45 -54 45
+c-36 0 -57 -17 -57 -40c0 -20 16 -33 64 -46z" />
+    <glyph glyph-name="attachment" unicode="attachment" 
+d="M43 245c0 65 52 118 117 118h224c47 0 85 -39 85 -86s-38 -85 -85 -85h-181c-29 0 -54 24 -54 53s25 54 54 54h160v-43h-162c-12 0 -12 -21 0 -21h183c23 0 43 19 43 42s-20 43 -43 43h-224c-41 0 -75 -34 -75 -75s34 -74 75 -74h203v-43h-203c-65 0 -117 52 -117 117z
+" />
+    <glyph glyph-name="audiotrack" unicode="audiotrack" 
+d="M256 448h149v-64h-85v-235h-1c-5 -48 -46 -85 -95 -85c-53 0 -96 43 -96 96s43 96 96 96c11 0 22 -2 32 -6v198z" />
+    <glyph glyph-name="autorenew" unicode="autorenew" 
+d="M400 347c17 -26 27 -58 27 -91c0 -94 -77 -171 -171 -171v-64l-85 86l85 85v-64c71 0 128 57 128 128c0 22 -6 42 -15 60zM256 384c-71 0 -128 -57 -128 -128c0 -22 5 -42 15 -60l-31 -31c-17 26 -27 58 -27 91c0 94 77 171 171 171v64l85 -86l-85 -85v64z" />
+    <glyph glyph-name="av_timer" unicode="av_timer" 
+d="M128 256c0 12 9 21 21 21s22 -9 22 -21s-10 -21 -22 -21s-21 9 -21 21zM384 256c0 -12 -9 -21 -21 -21s-22 9 -22 21s10 21 22 21s21 -9 21 -21zM235 448h21c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192c0 63 30 118 77 153v1l145 -145l-30 -30
+l-116 115c-21 -26 -33 -58 -33 -94c0 -83 66 -149 149 -149s149 66 149 149c0 75 -56 138 -128 148v-41h-42v85zM235 149c0 12 9 22 21 22s21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21z" />
+    <glyph glyph-name="backspace" unicode="backspace" 
+d="M405 179l-76 77l76 77l-30 30l-76 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l76 -77zM469 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-320c-15 0 -26 8 -34 19l-115 173l115 173c8 11 19 19 34 19h320z" />
+    <glyph glyph-name="backup" unicode="backup" 
+d="M299 235h64l-107 106l-107 -106h64v-86h86v86zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="battery_alert" unicode="battery_alert" 
+d="M277 213v107h-42v-107h42zM277 128v43h-42v-43h42zM334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_charging_full" unicode="battery_charging_full" 
+d="M235 85l85 160h-43v118l-85 -160h43v-118zM334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_full" unicode="battery_full" 
+d="M334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_std" unicode="battery_std" 
+d="M334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_unknown" unicode="battery_unknown" 
+d="M305 241c9 9 15 22 15 36c0 35 -29 64 -64 64s-64 -29 -64 -64h32c0 18 14 32 32 32s32 -14 32 -32c0 -9 -3 -16 -9 -22l-20 -20c-10 -10 -20 -25 -20 -43h34c0 10 8 24 18 34c6 6 14 15 14 15zM276 129v41h-40v-41h40zM334 427c16 0 29 -13 29 -29v-327
+c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="beach_access" unicode="beach_access" 
+d="M372 324c-66.8504 66.8504 -159.585 88.9016 -243.437 61.1868c63.7841 7.27512 145.981 -25.7308 212.437 -92.1868l-122 -122c-66.456 66.456 -99.4619 148.653 -92.1868 212.437c-27.7148 -83.8524 -5.66368 -176.587 61.1868 -243.437l-61 -61
+c-83.9541 83.9541 -84 220.85 -0.137673 304.862c0.129398 1.10582 0.166618 1.14572 1.27547 1.27547c84.012 83.8623 220.908 83.8164 304.862 -0.137673zM280 201l31 31l137 -138l-31 -30z" />
+    <glyph glyph-name="beenhere" unicode="beenhere" 
+d="M213 171l192 192l-30 30l-162 -162l-76 76l-30 -30zM405 491c23 0 43 -20 43 -43v-276c0 -15 -8 -27 -19 -35l-173 -116l-173 116c-11 8 -19 20 -19 35v276c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="block" unicode="block" 
+d="M256 85c94 0 171 77 171 171c0 39 -13 76 -36 105l-240 -240c29 -23 66 -36 105 -36zM85 256c0 -39 13 -76 36 -105l240 240c-29 23 -66 36 -105 36c-94 0 -171 -77 -171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="bluetooth" unicode="bluetooth" 
+d="M317 164l-40 41v-81zM277 388v-81l40 41zM378 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21z" />
+    <glyph glyph-name="bluetooth_audio" unicode="bluetooth_audio" 
+d="M275 164l-40 41v-81zM235 388v-81l40 41zM335 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM417 369c20 -32 31 -71 31 -111c0 -42 -12 -80 -33 -113l-25 25c13 26 21 55 21 86s-8 60 -21 86zM304 256l49 49
+c6 -15 10 -32 10 -49s-4 -35 -10 -50z" />
+    <glyph glyph-name="bluetooth_connected" unicode="bluetooth_connected" 
+d="M405 299l43 -43l-43 -43l-42 43zM317 164l-40 41v-81zM277 388v-81l40 41zM378 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM149 256l-42 -43l-43 43l43 43z" />
+    <glyph glyph-name="bluetooth_disabled" unicode="bluetooth_disabled" 
+d="M277 124l40 40l-40 41v-81zM115 427l312 -312l-30 -30l-49 49l-92 -91h-21v162l-98 -98l-30 30l119 119l-141 141zM277 388v-69l-42 43v107h21l122 -121l-65 -65l-30 30l34 35z" />
+    <glyph glyph-name="bluetooth_searching" unicode="bluetooth_searching" 
+d="M275 164l-40 41v-81zM235 388v-81l40 41zM335 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM417 369c20 -32 31 -71 31 -111c0 -42 -12 -80 -33 -113l-25 25c13 26 21 55 21 86s-8 60 -21 86zM304 256l49 49
+c6 -15 10 -32 10 -49s-4 -35 -10 -50z" />
+    <glyph glyph-name="blur_circular" unicode="blur_circular" 
+d="M299 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-22 9 -22 21s10 22 22 22zM299 160c6 0 10 -5 10 -11s-4 -10 -10 -10s-11 4 -11 10s5 11 11 11zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213
+s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM363 309c6 0 10 -4 10 -10s-4 -11 -10 -11s-11 5 -11 11s5 10 11 10zM363 224c6 0 10 -5 10 -11s-4 -10 -10 -10s-11 4 -11 10s5 11 11 11zM299 352c-6 0 -11 5 -11 11s5 10 11 10s10 -4 10 -10s-4 -11 -10 -11z
+M299 320c12 0 21 -9 21 -21s-9 -22 -21 -22s-22 10 -22 22s10 21 22 21zM213 352c-6 0 -10 5 -10 11s4 10 10 10s11 -4 11 -10s-5 -11 -11 -11zM149 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-10 4 -10 10s4 11 10 11zM213 160c6 0 11 -5 11 -11s-5 -10 -11 -10s-10 4 -10 10
+s4 11 10 11zM149 309c6 0 11 -4 11 -10s-5 -11 -11 -11s-10 5 -10 11s4 10 10 10zM213 235c12 0 22 -10 22 -22s-10 -21 -22 -21s-21 9 -21 21s9 22 21 22zM213 320c12 0 22 -9 22 -21s-10 -22 -22 -22s-21 10 -21 22s9 21 21 21z" />
+    <glyph glyph-name="blur_linear" unicode="blur_linear" 
+d="M277 149c-12 0 -21 10 -21 22s9 21 21 21s22 -9 22 -21s-10 -22 -22 -22zM277 235c-12 0 -21 9 -21 21s9 21 21 21s22 -9 22 -21s-10 -21 -22 -21zM277 320c-12 0 -21 9 -21 21s9 22 21 22s22 -10 22 -22s-10 -21 -22 -21zM363 245c-6 0 -11 5 -11 11s5 11 11 11
+s10 -5 10 -11s-4 -11 -10 -11zM363 331c-6 0 -11 4 -11 10s5 11 11 11s10 -5 10 -11s-4 -10 -10 -10zM64 448h384v-43h-384v43zM363 160c-6 0 -11 5 -11 11s5 10 11 10s10 -4 10 -10s-4 -11 -10 -11zM192 149c-12 0 -21 10 -21 22s9 21 21 21s21 -9 21 -21s-9 -22 -21 -22z
+M107 224c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM107 309c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM64 64v43h384v-43h-384zM192 320c-12 0 -21 9 -21 21s9 22 21 22s21 -10 21 -22s-9 -21 -21 -21zM192 235
+c-12 0 -21 9 -21 21s9 21 21 21s21 -9 21 -21s-9 -21 -21 -21zM107 139c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32z" />
+    <glyph glyph-name="blur_off" unicode="blur_off" 
+d="M64 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM128 149c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM213 75c6 0 11 -5 11 -11s-5 -11 -11 -11s-10 5 -10 11s4 11 10 11zM64 309c6 0 11 -4 11 -10s-5 -11 -11 -11s-11 5 -11 11
+s5 10 11 10zM128 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21s9 22 21 22zM448 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM213 149c12 0 22 -9 22 -21s-10 -21 -22 -21s-21 9 -21 21s9 21 21 21zM53 400l27 27l347 -347l-28 -27l-80 81
+c1 -2 1 -4 1 -6c0 -12 -9 -21 -21 -21s-22 9 -22 21s10 21 22 21c2 0 4 0 6 -1l-60 60c-2 -15 -16 -27 -32 -27c-18 0 -32 14 -32 32c0 16 12 30 27 32l-60 60c1 -2 1 -4 1 -6c0 -12 -9 -22 -21 -22s-21 10 -21 22s9 21 21 21l6 -1zM299 75c6 0 10 -5 10 -11s-4 -11 -10 -11
+s-11 5 -11 11s5 11 11 11zM384 363c-12 0 -21 9 -21 21s9 21 21 21s21 -9 21 -21s-9 -21 -21 -21zM384 277c-12 0 -21 10 -21 22s9 21 21 21s21 -9 21 -21s-9 -22 -21 -22zM384 192c-12 0 -21 9 -21 21s9 22 21 22s21 -10 21 -22s-9 -21 -21 -21zM213 363
+c-12 0 -21 9 -21 21s9 21 21 21s22 -9 22 -21s-10 -21 -22 -21zM448 288c-6 0 -11 5 -11 11s5 10 11 10s11 -4 11 -10s-5 -11 -11 -11zM213 437c-6 0 -10 5 -10 11s4 11 10 11s11 -5 11 -11s-5 -11 -11 -11zM299 437c-6 0 -11 5 -11 11s5 11 11 11s10 -5 10 -11
+s-4 -11 -10 -11zM294 267c-14 2 -25 13 -27 27v5c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32h-5zM299 363c-12 0 -22 9 -22 21s10 21 22 21s21 -9 21 -21s-9 -21 -21 -21z" />
+    <glyph glyph-name="blur_on" unicode="blur_on" 
+d="M299 331c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM299 245c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM213 149c12 0 22 -9 22 -21s-10 -21 -22 -21s-21 9 -21 21s9 21 21 21zM213 331c18 0 32 -14 32 -32s-14 -32 -32 -32
+s-32 14 -32 32s14 32 32 32zM299 75c6 0 10 -5 10 -11s-4 -11 -10 -11s-11 5 -11 11s5 11 11 11zM299 149c12 0 21 -9 21 -21s-9 -21 -21 -21s-22 9 -22 21s10 21 22 21zM448 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM384 405c12 0 21 -9 21 -21
+s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM384 320c12 0 21 -9 21 -21s-9 -22 -21 -22s-21 10 -21 22s9 21 21 21zM384 149c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM384 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21s9 22 21 22zM213 245
+c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM213 363c-12 0 -21 9 -21 21s9 21 21 21s22 -9 22 -21s-10 -21 -22 -21zM213 437c-6 0 -10 5 -10 11s4 11 10 11s11 -5 11 -11s-5 -11 -11 -11zM213 75c6 0 11 -5 11 -11s-5 -11 -11 -11s-10 5 -10 11
+s4 11 10 11zM64 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM299 437c-6 0 -11 5 -11 11s5 11 11 11s10 -5 10 -11s-4 -11 -10 -11zM299 363c-12 0 -22 9 -22 21s10 21 22 21s21 -9 21 -21s-9 -21 -21 -21zM448 288c-6 0 -11 5 -11 11s5 10 11 10
+s11 -4 11 -10s-5 -11 -11 -11zM128 405c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM64 309c6 0 11 -4 11 -10s-5 -11 -11 -11s-11 5 -11 11s5 10 11 10zM128 320c12 0 21 -9 21 -21s-9 -22 -21 -22s-21 10 -21 22s9 21 21 21zM128 149c12 0 21 -9 21 -21
+s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM128 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21s9 22 21 22z" />
+    <glyph glyph-name="book" unicode="book" 
+d="M128 427v-171l53 32l54 -32v171h-107zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="bookmark" unicode="bookmark" 
+d="M363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="bookmark_border" unicode="bookmark_border" 
+d="M363 128v277h-214v-277l107 47zM363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="border_all" unicode="border_all" 
+d="M405 277v128h-128v-128h128zM405 107v128h-128v-128h128zM235 277v128h-128v-128h128zM235 107v128h-128v-128h128zM64 448h384v-384h-384v384z" />
+    <glyph glyph-name="border_bottom" unicode="border_bottom" 
+d="M107 192v-43h-43v43h43zM64 64v43h384v-43h-384zM107 277v-42h-43v42h43zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM107 363v-43h-43v43h43zM405 149v43h43v-43h-43zM405 235v42h43v-42h-43zM363 448v-43h-43v43h43zM277 448v-43h-42v43h42zM363 277v-42h-43v42
+h43zM277 363v-43h-42v43h42zM107 448v-43h-43v43h43zM277 277v-42h-42v42h42zM192 448v-43h-43v43h43zM277 192v-43h-42v43h42zM192 277v-42h-43v42h43z" />
+    <glyph glyph-name="border_clear" unicode="border_clear" 
+d="M320 405v43h43v-43h-43zM320 235v42h43v-42h-43zM320 64v43h43v-43h-43zM235 405v43h42v-43h-42zM405 448h43v-43h-43v43zM235 320v43h42v-43h-42zM405 320v43h43v-43h-43zM405 64v43h43v-43h-43zM405 235v42h43v-42h-43zM405 149v43h43v-43h-43zM235 235v42h42v-42h-42z
+M64 405v43h43v-43h-43zM64 320v43h43v-43h-43zM64 235v42h43v-42h-43zM64 149v43h43v-43h-43zM64 64v43h43v-43h-43zM235 64v43h42v-43h-42zM235 149v43h42v-43h-42zM149 64v43h43v-43h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43z" />
+    <glyph glyph-name="border_color" unicode="border_color" 
+d="M0 85h512v-85h-512v85zM442 426l-42 -42l-80 80l42 42c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM379 363l-214 -214h-80v80l214 214z" />
+    <glyph glyph-name="border_horizontal" unicode="border_horizontal" 
+d="M405 64v43h43v-43h-43zM320 64v43h43v-43h-43zM235 149v43h42v-43h-42zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM64 235v42h384v-42h-384zM235 64v43h42v-43h-42zM405 149v43h43v-43h-43zM277 448v-43h-42v43h42zM277 363v-43h-42v43h42zM363 448v-43h-43v43h43z
+M192 448v-43h-43v43h43zM107 448v-43h-43v43h43zM149 64v43h43v-43h-43zM64 149v43h43v-43h-43zM107 363v-43h-43v43h43zM64 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_inner" unicode="border_inner" 
+d="M405 149v43h43v-43h-43zM405 64v43h43v-43h-43zM277 448v-171h171v-42h-171v-171h-42v171h-171v42h171v171h42zM320 64v43h43v-43h-43zM405 448h43v-43h-43v43zM405 320v43h43v-43h-43zM363 448v-43h-43v43h43zM107 448v-43h-43v43h43zM192 448v-43h-43v43h43zM64 149v43
+h43v-43h-43zM107 363v-43h-43v43h43zM149 64v43h43v-43h-43zM64 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_left" unicode="border_left" 
+d="M320 405v43h43v-43h-43zM320 235v42h43v-42h-43zM405 64v43h43v-43h-43zM405 235v42h43v-42h-43zM405 448h43v-43h-43v43zM405 149v43h43v-43h-43zM320 64v43h43v-43h-43zM405 320v43h43v-43h-43zM64 64v384h43v-384h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43z
+M149 64v43h43v-43h-43zM235 235v42h42v-42h-42zM235 320v43h42v-43h-42zM235 405v43h42v-43h-42zM235 149v43h42v-43h-42zM235 64v43h42v-43h-42z" />
+    <glyph glyph-name="border_outer" unicode="border_outer" 
+d="M192 277v-42h-43v42h43zM277 192v-43h-42v43h42zM405 107v298h-298v-298h298zM64 448h384v-384h-384v384zM363 277v-42h-43v42h43zM277 277v-42h-42v42h42zM277 363v-43h-42v43h42z" />
+    <glyph glyph-name="border_right" unicode="border_right" 
+d="M235 320v43h42v-43h-42zM235 405v43h42v-43h-42zM235 235v42h42v-42h-42zM320 405v43h43v-43h-43zM320 64v43h43v-43h-43zM405 448h43v-384h-43v384zM320 235v42h43v-42h-43zM235 149v43h42v-43h-42zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z
+M235 64v43h42v-43h-42zM64 64v43h43v-43h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43zM64 405v43h43v-43h-43zM149 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_style" unicode="border_style" 
+d="M405 320v43h43v-43h-43zM64 448h384v-43h-341v-341h-43v384zM405 235v42h43v-42h-43zM405 149v43h43v-43h-43zM235 64v43h42v-43h-42zM149 64v43h43v-43h-43zM405 64v43h43v-43h-43zM320 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_top" unicode="border_top" 
+d="M320 235v42h43v-42h-43zM405 64v43h43v-43h-43zM235 320v43h42v-43h-42zM320 64v43h43v-43h-43zM405 149v43h43v-43h-43zM64 448h384v-43h-384v43zM405 235v42h43v-42h-43zM405 320v43h43v-43h-43zM235 149v43h42v-43h-42zM64 320v43h43v-43h-43zM64 235v42h43v-42h-43z
+M64 64v43h43v-43h-43zM64 149v43h43v-43h-43zM235 64v43h42v-43h-42zM235 235v42h42v-42h-42zM149 235v42h43v-42h-43zM149 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_vertical" unicode="border_vertical" 
+d="M320 235v42h43v-42h-43zM320 64v43h43v-43h-43zM320 405v43h43v-43h-43zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM405 235v42h43v-42h-43zM405 64v43h43v-43h-43zM235 64v384h42v-384h-42zM405 149v43h43v-43h-43zM149 405v43h43v-43h-43zM64 149v43h43v-43h-43z
+M64 64v43h43v-43h-43zM64 235v42h43v-42h-43zM149 235v42h43v-42h-43zM149 64v43h43v-43h-43zM64 405v43h43v-43h-43zM64 320v43h43v-43h-43z" />
+    <glyph glyph-name="branding_watermark" unicode="branding_watermark" 
+d="M448 107v128h-192v-128h192zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="brightness_1" unicode="brightness_&#x31;" 
+d="M43 256c0 118 95 213 213 213s213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213z" />
+    <glyph glyph-name="brightness_2" unicode="brightness_&#x32;" 
+d="M213 469c118 0 214 -95 214 -213s-96 -213 -214 -213c-39 0 -75 10 -106 28c64 37 106 106 106 185s-42 148 -106 185c31 18 67 28 106 28z" />
+    <glyph glyph-name="brightness_3" unicode="brightness_&#x33;" 
+d="M192 469c118 0 213 -95 213 -213s-95 -213 -213 -213c-22 0 -44 3 -64 9c87 27 149 108 149 204s-62 177 -149 204c20 6 42 9 64 9z" />
+    <glyph glyph-name="brightness_4" unicode="brightness_&#x34;" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128c-19 0 -37 -5 -53 -12c44 -20 74 -64 74 -116s-30 -96 -74 -116c16 -7 34 -12 53 -12zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100z" />
+    <glyph glyph-name="brightness_5" unicode="brightness_&#x35;" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="brightness_6" unicode="brightness_&#x36;" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128v-256zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="brightness_7" unicode="brightness_&#x37;" 
+d="M256 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85zM256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100
+v-100z" />
+    <glyph glyph-name="brightness_auto" unicode="brightness_auto" 
+d="M305 171h41l-69 192h-42l-69 -192h41l15 42h68zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100zM231 242l25 78l25 -78h-50z" />
+    <glyph glyph-name="brightness_high" unicode="brightness_high" 
+d="M256 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85zM256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100
+v-100z" />
+    <glyph glyph-name="brightness_low" unicode="brightness_low" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="brightness_medium" unicode="brightness_medium" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128v-256zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="broken_image" unicode="broken_image" 
+d="M384 268l64 -64v-97c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v140l64 -64l85 86l86 -86zM448 405v-140l-64 64l-85 -86l-86 86l-85 -86l-64 65v97c0 23 20 43 43 43h298c23 0 43 -20 43 -43z" />
+    <glyph glyph-name="brush" unicode="brush" 
+d="M442 413c8 -8 8 -22 0 -30l-191 -191l-59 59l191 191c8 8 22 8 30 0zM149 213c35 0 64 -29 64 -64c0 -47 -38 -85 -85 -85c-32 0 -65 17 -85 43c18 0 42 14 42 42c0 35 29 64 64 64z" />
+    <glyph glyph-name="bubble_chart" unicode="bubble_chart" 
+d="M222 324c0 57 45 103 102 103s103 -46 103 -103s-46 -102 -103 -102s-102 45 -102 102zM273 128c0 24 19 43 43 43s42 -19 42 -43s-18 -43 -42 -43s-43 19 -43 43zM85 205c0 38 31 68 69 68s68 -30 68 -68s-30 -68 -68 -68s-69 30 -69 68z" />
+    <glyph glyph-name="bug_report" unicode="bug_report" 
+d="M299 256v43h-86v-43h86zM299 171v42h-86v-42h86zM427 341v-42h-45c1 -7 2 -15 2 -22v-21h43v-43h-43v-21c0 -7 -1 -14 -2 -21h45v-43h-60c-22 -38 -64 -64 -111 -64s-89 26 -111 64h-60v43h45c-1 7 -2 14 -2 21v21h-43v43h43v21c0 7 1 15 2 22h-45v42h60
+c10 17 23 31 39 42l-35 35l30 30l47 -46c10 2 20 3 30 3s20 -1 30 -3l47 46l30 -30l-35 -35c16 -11 29 -25 39 -42h60z" />
+    <glyph glyph-name="build" unicode="build" 
+d="M484 107c9 -6 9 -21 -2 -30l-49 -49c-9 -9 -21 -9 -30 0l-194 194c-49 -19 -106 -9 -147 32c-43 43 -54 107 -28 158l94 -92l64 64l-92 92c51 23 115 15 158 -28c41 -41 51 -98 32 -147z" />
+    <glyph glyph-name="burst_mode" unicode="burst_mode" 
+d="M235 149h213l-68 90l-54 -68l-38 46zM469 405c12 0 22 -9 22 -21v-256c0 -12 -10 -21 -22 -21h-256c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h256zM107 405h42v-298h-42v298zM21 405h43v-298h-43v298z" />
+    <glyph glyph-name="business" unicode="business" 
+d="M384 192v-43h-43v43h43zM384 277v-42h-43v42h43zM427 107v213h-171v-43h43v-42h-43v-43h43v-43h-43v-42h171zM213 363v42h-42v-42h42zM213 277v43h-42v-43h42zM213 192v43h-42v-43h42zM213 107v42h-42v-42h42zM128 363v42h-43v-42h43zM128 277v43h-43v-43h43zM128 192v43
+h-43v-43h43zM128 107v42h-43v-42h43zM256 363h213v-299h-426v384h213v-85z" />
+    <glyph glyph-name="business_center" unicode="business_center" 
+d="M299 363v42h-86v-42h86zM427 363c23 0 42 -20 42 -43v-64c0 -23 -19 -43 -42 -43h-128v43h-86v-43h-128c-24 0 -42 19 -42 43v64c0 23 19 43 42 43h85v42l43 43h85l43 -43v-42h86zM213 171h86v21h149v-85c0 -24 -19 -43 -43 -43h-298c-24 0 -43 19 -43 43v85h149v-21z
+" />
+    <glyph glyph-name="cached" unicode="cached" 
+d="M128 256h64l-85 -85l-86 85h64c0 94 77 171 171 171c33 0 65 -10 91 -27l-31 -31c-18 10 -38 15 -60 15c-71 0 -128 -57 -128 -128zM405 341l86 -85h-64c0 -94 -77 -171 -171 -171c-33 0 -65 10 -91 27l31 31c18 -10 38 -15 60 -15c71 0 128 57 128 128h-64z" />
+    <glyph glyph-name="cake" unicode="cake" 
+d="M384 320c35 0 64 -29 64 -64v-33c0 -23 -19 -42 -42 -42c-11 0 -21 4 -29 12l-46 46l-46 -46c-16 -16 -43 -16 -59 0l-45 46l-46 -46c-8 -8 -18 -12 -29 -12c-23 0 -42 19 -42 42v33c0 35 29 64 64 64h107v43h42v-43h107zM354 171c14 -14 32 -22 52 -22c16 0 30 5 42 13
+v-98c0 -12 -9 -21 -21 -21h-342c-12 0 -21 9 -21 21v98c12 -8 26 -13 42 -13c20 0 38 8 52 22l23 23l23 -23c28 -28 76 -28 104 0l23 23zM256 384c-23 0 -43 20 -43 43c0 8 3 16 7 22l36 63l36 -63c4 -6 7 -14 7 -22c0 -23 -19 -43 -43 -43z" />
+    <glyph glyph-name="call" unicode="call" 
+d="M141 282c31 -60 81 -110 141 -141l47 47c6 6 15 8 22 5c24 -8 50 -12 76 -12c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22z" />
+    <glyph glyph-name="call_end" unicode="call_end" 
+d="M256 320c-34 0 -67 -5 -98 -15v-66c0 -8 -5 -17 -12 -20c-21 -10 -40 -23 -57 -39c-4 -4 -9 -6 -15 -6s-11 2 -15 6l-53 53c-4 4 -6 9 -6 15s2 11 6 15c65 62 153 100 250 100s185 -38 250 -100c4 -4 6 -9 6 -15s-2 -11 -6 -15l-53 -53c-4 -4 -9 -6 -15 -6s-11 2 -15 6
+c-17 16 -36 29 -57 39c-7 3 -12 10 -12 19v66c-31 10 -64 16 -98 16z" />
+    <glyph glyph-name="call_made" unicode="call_made" 
+d="M192 405h213v-213h-42v141l-248 -248l-30 30l248 248h-141v42z" />
+    <glyph glyph-name="call_merge" unicode="call_merge" 
+d="M160 341l96 96l96 -96h-75v-136l-128 -128l-30 30l116 115v119h-75zM363 77l-73 72l30 30l73 -72z" />
+    <glyph glyph-name="call_missed" unicode="call_missed" 
+d="M418 363l30 -30l-192 -192l-149 149v-98h-43v171h171v-43h-98l119 -119z" />
+    <glyph glyph-name="call_missed_outgoing" unicode="call_missed_outgoing" 
+d="M64 333l30 30l162 -162l119 119h-98v43h171v-171h-43v98l-149 -149z" />
+    <glyph glyph-name="call_received" unicode="call_received" 
+d="M427 397l-248 -248h141v-42h-213v213h42v-141l248 248z" />
+    <glyph glyph-name="call_split" unicode="call_split" 
+d="M213 427l-49 -49l113 -113v-180h-42v162l-101 101l-49 -49v128h128zM299 427h128v-128l-49 49l-62 -62l-30 30l62 62z" />
+    <glyph glyph-name="call_to_action" unicode="call_to_action" 
+d="M448 107v64h-384v-64h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="camera" unicode="camera" 
+d="M210 48c34.3543 59.3123 68.2469 119.086 103 178l78 -135c-37 -30 -84 -48 -135 -48c-16 0 -31 2 -46 5zM52 192h207l-79 -135c-61 23 -108 73 -128 135zM99 400c35.9996 -62.3337 71.7933 -124.873 108 -187h-160c-3 14 -4 28 -4 43c0 56 21 106 56 144zM465 299
+c3 -14 4 -28 4 -43c0 -56 -21 -106 -56 -144l-102 176l-6 11h160zM460 320h-207l79 135c61 -23 108 -73 128 -135zM201 288l-2 -2l-78 135c37 30 84 48 135 48c16 0 31 -2 46 -5z" />
+    <glyph glyph-name="camera_alt" unicode="camera_alt" 
+d="M256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM192 469h128l39 -42h68c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68zM188 256c0 38 30 68 68 68s68 -30 68 -68
+s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="camera_enhance" unicode="camera_enhance" 
+d="M256 149l-27 59l-58 27l58 26l27 59l27 -59l58 -26l-58 -27zM256 128c59 0 107 48 107 107s-48 106 -107 106s-107 -47 -107 -106s48 -107 107 -107zM192 448h128l39 -43h68c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256
+c0 23 19 42 42 42h68z" />
+    <glyph glyph-name="camera_front" unicode="camera_front" 
+d="M149 469v-224c0 36 71 54 107 54s107 -18 107 -54v224h-214zM363 512c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-150l64 -64l-64 -64v43h-106v42h106v43h-64c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h214zM256 341c-23 0 -42 20 -42 43s19 43 42 43
+s43 -20 43 -43s-20 -43 -43 -43zM299 85h106v-42h-106v42z" />
+    <glyph glyph-name="camera_rear" unicode="camera_rear" 
+d="M256 384c23 0 42 20 42 43s-19 42 -42 42s-43 -19 -43 -42s19 -43 43 -43zM363 512c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-150l64 -64l-64 -64v43h-106v42h106v43h-64c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h214zM299 85h106v-42h-106v42z" />
+    <glyph glyph-name="camera_roll" unicode="camera_roll" 
+d="M427 320v43h-43v-43h43zM427 128v43h-43v-43h43zM341 320v43h-42v-43h42zM341 128v43h-42v-43h42zM256 320v43h-43v-43h43zM256 128v43h-43v-43h43zM299 405h170v-320h-170c0 -23 -20 -42 -43 -42h-171c-23 0 -42 19 -42 42v320c0 23 19 43 42 43h22v21c0 12 9 22 21 22
+h85c12 0 22 -10 22 -22v-21h21c23 0 43 -20 43 -43z" />
+    <glyph glyph-name="cancel" unicode="cancel" 
+d="M363 179l-77 77l77 77l-30 30l-77 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l77 -77zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="card_giftcard" unicode="card_giftcard" 
+d="M427 213v128h-109l45 -60l-35 -25c-24.0378 32.6288 -48.3187 65.0147 -72 98c-23.6829 -32.9837 -47.9614 -65.3719 -72 -98l-35 25l45 60h-109v-128h342zM427 107v42h-342v-42h342zM192 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM320 427
+c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h47c-2 7 -4 14 -4 21c0 35 29 64 64 64c22 0 41 -11 53 -28l11 -15l11 15c12 17 31 28 53 28
+c35 0 64 -29 64 -64c0 -7 -2 -14 -4 -21h47z" />
+    <glyph glyph-name="card_membership" unicode="card_membership" 
+d="M427 299v128h-342v-128h342zM427 192v43h-342v-43h342zM427 469c24 0 42 -18 42 -42v-235c0 -24 -18 -43 -42 -43h-86v-106l-85 42l-85 -42v106h-86c-24 0 -42 19 -42 43v235c0 24 18 42 42 42h342z" />
+    <glyph glyph-name="card_travel" unicode="card_travel" 
+d="M427 213v128h-64v-42h-43v42h-128v-42h-43v42h-64v-128h342zM427 107v42h-342v-42h342zM192 427v-43h128v43h-128zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h64v43c0 24 19 42 43 42h128
+c24 0 43 -18 43 -42v-43h64z" />
+    <glyph glyph-name="casino" unicode="casino" 
+d="M352 320c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM352 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 320c18 0 32 14 32 32s-14 32 -32 32
+s-32 -14 -32 -32s14 -32 32 -32zM160 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="cast" unicode="cast" 
+d="M21 299c129 0 235 -105 235 -235h-43c0 106 -86 192 -192 192v43zM21 213c83 0 150 -66 150 -149h-43c0 59 -48 107 -107 107v42zM21 128c35 0 64 -29 64 -64h-64v64zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-149v43h149v298h-384v-64h-43v64
+c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="cast_connected" unicode="cast_connected" 
+d="M448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-149v43h149v298h-384v-64h-43v64c0 23 20 43 43 43h384zM21 299c129 0 235 -105 235 -235h-43c0 106 -86 192 -192 192v43zM405 363v-214h-120c-27 84 -94 152 -178 179v35h298zM21 213c83 0 150 -66 150 -149
+h-43c0 59 -48 107 -107 107v42zM21 128c35 0 64 -29 64 -64h-64v64z" />
+    <glyph glyph-name="center_focus_strong" unicode="center_focus_strong" 
+d="M405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM107 405v-85h-43v85c0 23 20 43 43 43h85v-43h-85zM107 192v-85h85v-43h-85c-23 0 -43 20 -43 43v85h43zM256 341c47 0 85 -38 85 -85s-38 -85 -85 -85
+s-85 38 -85 85s38 85 85 85z" />
+    <glyph glyph-name="center_focus_weak" unicode="center_focus_weak" 
+d="M256 213c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM256 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85zM405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM107 405
+v-85h-43v85c0 23 20 43 43 43h85v-43h-85zM107 192v-85h85v-43h-85c-23 0 -43 20 -43 43v85h43z" />
+    <glyph glyph-name="change_history" unicode="change_history" 
+d="M256 427l213 -342h-426zM256 346l-136 -218h272z" />
+    <glyph glyph-name="chat" unicode="chat" 
+d="M384 341v43h-256v-43h256zM299 213v43h-171v-43h171zM128 320v-43h256v43h-256zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="chat_bubble" unicode="chat_bubble" 
+d="M427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="chat_bubble_outline" unicode="chat_bubble_outline" 
+d="M427 171v256h-342v-299l43 43h299zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="check" unicode="check" 
+d="M192 167l226 226l30 -30l-256 -256l-119 119l30 30z" />
+    <glyph glyph-name="check_box" unicode="check_box" 
+d="M213 149l192 192l-30 31l-162 -162l-76 76l-30 -30zM405 448c24 0 43 -20 43 -43v-298c0 -23 -19 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="check_box_outline_blank" unicode="check_box_outline_blank" 
+d="M405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM405 405h-298v-298h298v298z" />
+    <glyph glyph-name="check_circle" unicode="check_circle" 
+d="M213 149l192 192l-30 31l-162 -162l-76 76l-30 -30zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="chevron_left" unicode="chevron_left" 
+d="M329 354l-98 -98l98 -98l-30 -30l-128 128l128 128z" />
+    <glyph glyph-name="chevron_right" unicode="chevron_right" 
+d="M213 384l128 -128l-128 -128l-30 30l98 98l-98 98z" />
+    <glyph glyph-name="child_care" unicode="child_care" 
+d="M160 213h192c-16 -38 -53 -64 -96 -64s-80 26 -96 64zM256 107c68.0018 0 125.232 44.8128 143 107c2 0 4 -1 6 -1c23 0 43 20 43 43s-20 43 -43 43c-2 0 -4 -1 -6 -1c-17.7643 62.1749 -74.9972 107 -143 107c-68.0018 0 -125.232 -44.8128 -143 -107c-2 0 -4 1 -6 1
+c-23 0 -43 -20 -43 -43s20 -43 43 -43c2 0 4 1 6 1c17.7643 -62.1749 74.9972 -107 143 -107zM489 242c-5 -32 -28 -59 -59 -68c-28.2678 -59.1055 -94.8338 -110 -174 -110c-78.8834 0 -145.522 50.0487 -173 110c-31 9 -55 36 -60 68c-1 4 -2 9 -2 14s1 10 2 14
+c5 32 29 59 60 68c11 24 26 45 46 62c34 30 78 48 127 48c80.292 0 145.109 -49.147 173 -110c31 -9 55 -36 60 -68c1 -4 2 -9 2 -14s-1 -10 -2 -14zM176 288c0 15 12 27 27 27s26 -12 26 -27s-11 -27 -26 -27s-27 12 -27 27zM283 288c0 15 11 27 26 27s27 -12 27 -27
+s-12 -27 -27 -27s-26 12 -26 27z" />
+    <glyph glyph-name="child_friendly" unicode="child_friendly" 
+d="M363 85c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM171 85c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM412 173c15 -14 25 -34 25 -56c0 -41 -33 -74 -74 -74c-38 0 -69 28 -74 64h-45c-5 -36 -35 -64 -73 -64
+c-41 0 -75 33 -75 74c0 28 16 53 39 66c-5 7 -45 94 -45 94h-47v43h74l20 -43h311c0 -39 -14 -75 -36 -104zM277 469c94 0 171 -76 171 -170h-171v170z" />
+    <glyph glyph-name="chrome_reader_mode" unicode="chrome_reader_mode" 
+d="M448 107v277h-192v-277h192zM448 427c23 0 43 -20 43 -43v-277c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v277c0 23 20 43 43 43h384zM277 203h150v-32h-150v32zM277 309h150v-32h-150v32zM277 256h150v-32h-150v32z" />
+    <glyph glyph-name="class" unicode="class" 
+d="M128 427v-171l53 32l54 -32v171h-107zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="clear" unicode="clear" 
+d="M405 375l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" />
+    <glyph glyph-name="clear_all" unicode="clear_all" 
+d="M149 363h299v-43h-299v43zM64 149v43h299v-43h-299zM107 235v42h298v-42h-298z" />
+    <glyph glyph-name="close" unicode="close" 
+d="M405 375l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" />
+    <glyph glyph-name="closed_caption" unicode="closed_caption" 
+d="M384 277v22c0 12 -9 21 -21 21h-64c-12 0 -22 -9 -22 -21v-86c0 -12 10 -21 22 -21h64c12 0 21 9 21 21v22h-32v-11h-43v64h43v-11h32zM235 277v22c0 12 -10 21 -22 21h-64c-12 0 -21 -9 -21 -21v-86c0 -12 9 -21 21 -21h64c12 0 22 9 22 21v22h-32v-11h-43v64h43v-11h32
+zM405 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="cloud" unicode="cloud" 
+d="M413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_circle" unicode="cloud_circle" 
+d="M352 171c29 0 53 24 53 53s-24 53 -53 53h-11c0 47 -38 86 -85 86c-40 0 -73 -28 -82 -65l-3 1c-35 0 -64 -29 -64 -64s29 -64 64 -64h181zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="cloud_done" unicode="cloud_done" 
+d="M213 149l141 141l-30 30l-111 -110l-44 44l-30 -30zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_download" unicode="cloud_download" 
+d="M363 235h-64v85h-86v-85h-64l107 -107zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_off" unicode="cloud_off" 
+d="M165 299h-37c-47 0 -85 -39 -85 -86s38 -85 85 -85h208zM64 400l27 27l357 -357l-27 -27l-43 42h-250c-71 0 -128 57 -128 128c0 69 55 125 123 128zM413 298c55 -4 99 -50 99 -106c0 -36 -18 -68 -45 -87l-31 31c20 11 33 32 33 56c0 35 -29 64 -64 64h-32v11
+c0 65 -52 117 -117 117c-20 0 -38 -4 -54 -13l-32 31c25 16 54 25 86 25c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_queue" unicode="cloud_queue" 
+d="M405 128c35 0 64 29 64 64s-29 64 -64 64h-32v11c0 65 -52 117 -117 117c-54 0 -99 -36 -113 -85h-15c-47 0 -85 -39 -85 -86s38 -85 85 -85h277zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127
+c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_upload" unicode="cloud_upload" 
+d="M299 235h64l-107 106l-107 -106h64v-86h86v86zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="code" unicode="code" 
+d="M311 158l99 98l-99 98l30 30l128 -128l-128 -128zM201 158l-30 -30l-128 128l128 128l30 -30l-99 -98z" />
+    <glyph glyph-name="collections" unicode="collections" 
+d="M43 384h42v-299h299v-42h-299c-23 0 -42 19 -42 42v299zM235 256l-64 -85h256l-86 106l-63 -79zM469 171c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256c23 0 42 -19 42 -42v-256z" />
+    <glyph glyph-name="collections_bookmark" unicode="collections_bookmark" 
+d="M427 256v171h-107v-171l53 32zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="color_lens" unicode="color_lens" 
+d="M373 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM203 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 256c18 0 32 14 32 32s-14 32 -32 32
+s-32 -14 -32 -32s14 -32 32 -32zM256 448c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-37c-18 0 -32 -14 -32 -32c0 -8 3 -15 8 -21s8 -14 8 -22c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192z" />
+    <glyph glyph-name="colorize" unicode="colorize" 
+d="M148 107l172 172l-41 41l-172 -172zM442 392c8 -8 9 -21 0 -30l-67 -67l41 -41l-30 -30l-30 30l-191 -190h-101v101l190 191l-30 30l30 30l41 -41l67 67c8 8 22 8 30 0z" />
+    <glyph glyph-name="comment" unicode="comment" 
+d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM469 427v-384l-85 85h-299c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h342c23 0 42 -19 42 -42z" />
+    <glyph glyph-name="compare" unicode="compare" 
+d="M405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-106v192l106 -128v277h-106v43h106zM213 128v128l-106 -128h106zM213 448v43h43v-470h-43v43h-106c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h106z" />
+    <glyph glyph-name="compare_arrows" unicode="compare_arrows" 
+d="M320 235l-85 85l85 85v-64h149v-42h-149v-64zM192 213v64l85 -85l-85 -85v64h-149v42h149z" />
+    <glyph glyph-name="computer" unicode="computer" 
+d="M85 384v-213h342v213h-342zM427 128h85v-43h-512v43h85c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="confirmation_number" unicode="confirmation_number" 
+d="M277 331v42h-42v-42h42zM277 235v42h-42v-42h42zM277 139v42h-42v-42h42zM469 299c-23 0 -42 -20 -42 -43s19 -43 42 -43v-85c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v85c24 0 42 20 42 43s-19 43 -42 43v85c0 24 19 43 42 43h342c23 0 42 -19 42 -43v-85z" />
+    <glyph glyph-name="contact_mail" unicode="contact_mail" 
+d="M469 256v128h-170v-128h170zM299 128v21c0 43 -85 66 -128 66s-128 -23 -128 -66v-21h256zM171 384c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM469 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-426c-23 0 -43 20 -43 43v298
+c0 23 20 43 43 43h426zM448 341l-64 -42l-64 42v22l64 -43l64 43v-22z" />
+    <glyph glyph-name="contact_phone" unicode="contact_phone" 
+d="M381 213c-5 13 -8 28 -8 43s3 30 8 43h35l32 42l-42 43c-28 -21 -49 -50 -59 -85c-4 -14 -6 -28 -6 -43s2 -29 6 -43c10 -34 31 -64 59 -85l42 43l-32 42h-35zM299 128v21c0 43 -85 66 -128 66s-128 -23 -128 -66v-21h256zM171 384c-35 0 -64 -29 -64 -64s29 -64 64 -64
+s64 29 64 64s-29 64 -64 64zM469 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-426c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h426z" />
+    <glyph glyph-name="contacts" unicode="contacts" 
+d="M363 149v32c0 36 -71 54 -107 54s-107 -18 -107 -54v-32h214zM256 368c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342zM85 0v43h342v-43
+h-342zM427 512v-43h-342v43h342z" />
+    <glyph glyph-name="content_copy" unicode="content_copy" 
+d="M405 64v299h-234v-299h234zM405 405c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-234c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h234zM341 491v-43h-256v-299h-42v299c0 23 19 43 42 43h256z" />
+    <glyph glyph-name="content_cut" unicode="content_cut" 
+d="M405 448h64v-21l-149 -150l-43 43zM256 245c6 0 11 5 11 11s-5 11 -11 11s-11 -5 -11 -11s5 -11 11 -11zM128 85c23 0 43 19 43 43s-20 43 -43 43s-43 -19 -43 -43s20 -43 43 -43zM128 341c23 0 43 19 43 43s-20 43 -43 43s-43 -19 -43 -43s20 -43 43 -43zM206 349
+l263 -264v-21h-64l-149 149l-50 -50c5 -11 7 -22 7 -35c0 -47 -38 -85 -85 -85s-85 38 -85 85s38 85 85 85c13 0 24 -2 35 -7l50 50l-50 50c-11 -5 -22 -7 -35 -7c-47 0 -85 38 -85 85s38 85 85 85s85 -38 85 -85c0 -13 -2 -24 -7 -35z" />
+    <glyph glyph-name="content_paste" unicode="content_paste" 
+d="M405 85v342h-42v-64h-214v64h-42v-342h298zM256 469c-12 0 -21 -9 -21 -21s9 -21 21 -21s21 9 21 21s-9 21 -21 21zM405 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h89c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="control_point" unicode="control_point" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM277 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="control_point_duplicate" unicode="control_point_duplicate" 
+d="M320 107c82 0 149 67 149 149s-67 149 -149 149s-149 -67 -149 -149s67 -149 149 -149zM320 448c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM43 256c0 -60 34 -111 85 -135v-46c-74 26 -128 98 -128 181s54 155 128 181v-46
+c-51 -24 -85 -75 -85 -135zM341 341v-64h64v-42h-64v-64h-42v64h-64v42h64v64h42z" />
+    <glyph glyph-name="copyright" unicode="copyright" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM253 317c-30.7612 0 -40 -27.2286 -40 -58v-6c0 -30.7691 9.25381 -58 40 -58
+c18.7788 0 35 11.4624 35 30h38c0 -19.5209 -10.5691 -34.2021 -22 -44c-12.8931 -11.0512 -27.9049 -18 -51 -18c-54.5845 0 -82 36.0734 -82 90v6c0 25.8562 7.26023 49.4403 20 64c13.1991 15.0847 34.3422 27 62 27c22.1368 0 40.6281 -7.62806 52 -19
+c11.0024 -11.0024 21 -27.9871 21 -49h-38c0 5 -1 9 -3 13s-4 9 -7 12c-5.41728 5.41728 -14.6761 10 -25 10z" />
+    <glyph glyph-name="create" unicode="create" 
+d="M442 362l-39 -39l-80 80l39 39c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM64 144l236 236l80 -80l-236 -236h-80v80z" />
+    <glyph glyph-name="create_new_folder" unicode="create_new_folder" 
+d="M405 213v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM427 384c24 0 42 -19 42 -43v-213c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="credit_card" unicode="credit_card" 
+d="M427 341v43h-342v-43h342zM427 128v128h-342v-128h342zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z" />
+    <glyph glyph-name="crop" unicode="crop" 
+d="M149 149h342v-42h-86v-86h-42v86h-214c-23 0 -42 19 -42 42v214h-86v42h86v86h42v-342zM363 192v171h-171v42h171c23 0 42 -19 42 -42v-171h-42z" />
+    <glyph glyph-name="crop_16_9" unicode="crop_&#x31;&#x36;_&#x39;" 
+d="M405 171v170h-298v-170h298zM405 384c23 0 43 -20 43 -43v-170c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v170c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_3_2" unicode="crop_&#x33;_&#x32;" 
+d="M405 128v256h-298v-256h298zM405 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_5_4" unicode="crop_&#x35;_&#x34;" 
+d="M405 149v214h-298v-214h298zM405 405c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h298z" />
+    <glyph glyph-name="crop_7_5" unicode="crop_&#x37;_&#x35;" 
+d="M405 192v128h-298v-128h298zM405 363c23 0 43 -20 43 -43v-128c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v128c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_din" unicode="crop_din" 
+d="M405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_free" unicode="crop_free" 
+d="M405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM107 192v-85h85v-43h-85c-23 0 -43 20 -43 43v85h43zM64 405c0 23 20 43 43 43h85v-43h-85v-85h-43v85z" />
+    <glyph glyph-name="crop_landscape" unicode="crop_landscape" 
+d="M405 149v214h-298v-214h298zM405 405c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h298z" />
+    <glyph glyph-name="crop_original" unicode="crop_original" 
+d="M298 250l75 -101h-234l58 76l42 -51zM405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_portrait" unicode="crop_portrait" 
+d="M363 107v298h-214v-298h214zM363 448c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="crop_rotate" unicode="crop_rotate" 
+d="M171 171h256v-43h-43v-43h-43v43h-170c-24 0 -43 20 -43 43v170h-43v43h43v43h43v-256zM341 213v128h-128v43h128c23 0 43 -19 43 -43v-128h-43zM257 512c134 0 244 -104 255 -235h-32c-8 80 -57 148 -127 181l-29 -28l-81 81c5 0 9 1 14 1zM159 54l29 28l81 -81
+c-5 0 -9 -1 -14 -1c-134 0 -244 104 -255 235h32c8 -80 57 -148 127 -181z" />
+    <glyph glyph-name="crop_square" unicode="crop_square" 
+d="M384 128v256h-256v-256h256zM384 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h256z" />
+    <glyph glyph-name="dashboard" unicode="dashboard" 
+d="M277 448h171v-128h-171v128zM277 64v213h171v-213h-171zM64 64v128h171v-128h-171zM64 235v213h171v-213h-171z" />
+    <glyph glyph-name="data_usage" unicode="data_usage" 
+d="M256 107c47 0 89 22 116 56l56 -33c-39 -53 -101 -87 -172 -87c-118 0 -213 95 -213 213c0 111 84 201 192 212v-64c-72 -10 -128 -73 -128 -148c0 -83 66 -149 149 -149zM277 468c108 -11 192 -101 192 -212c0 -31 -6 -61 -18 -87l-56 33c6 17 10 35 10 54
+c0 75 -56 138 -128 148v64z" />
+    <glyph glyph-name="date_range" unicode="date_range" 
+d="M405 85v235h-298v-235h298zM405 427c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-298c-24 0 -43 19 -43 42v299c0 23 19 43 43 43h21v42h43v-42h170v42h43v-42h21zM363 277v-42h-43v42h43zM277 277v-42h-42v42h42zM192 277v-42h-43v42h43z" />
+    <glyph glyph-name="dehaze" unicode="dehaze" 
+d="M43 395h426v-43h-426v43zM43 288h426v-43h-426v43zM43 181h426v-42h-426v42z" />
+    <glyph glyph-name="delete" unicode="delete" 
+d="M405 427v-43h-298v43h74l22 21h106l22 -21h74zM128 107v256h256v-256c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43z" />
+    <glyph glyph-name="delete_forever" unicode="delete_forever" 
+d="M331 427h74v-43h-298v43h74l22 21h106zM180 259l46 -46l-45 -45l30 -30l45 45l45 -45l30 30l-45 45l45 46l-30 30l-45 -46l-45 46zM128 107v256h256v-256c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43z" />
+    <glyph glyph-name="delete_sweep" unicode="delete_sweep" 
+d="M299 405v-42h-256v42h64l21 22h85l22 -22h64zM64 128v213h213v-213c0 -23 -19 -43 -42 -43h-128c-23 0 -43 20 -43 43zM320 256h128v-43h-128v43zM320 341h149v-42h-149v42zM320 171h85v-43h-85v43z" />
+    <glyph glyph-name="description" unicode="description" 
+d="M277 320h118l-118 117v-117zM341 213v43h-170v-43h170zM341 128v43h-170v-43h170zM299 469l128 -128v-256c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42h171z" />
+    <glyph glyph-name="desktop_mac" unicode="desktop_mac" 
+d="M448 213v214h-384v-214h384zM448 469c23 0 43 -19 43 -42v-256c0 -23 -20 -43 -43 -43h-149l42 -64v-21h-170v21l42 64h-149c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h384z" />
+    <glyph glyph-name="desktop_windows" unicode="desktop_windows" 
+d="M448 171v256h-384v-256h384zM448 469c23 0 43 -19 43 -42v-256c0 -23 -20 -43 -43 -43h-149v-43h42v-42h-170v42h42v43h-149c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h384z" />
+    <glyph glyph-name="details" unicode="details" 
+d="M136 384l120 -213l120 213h-240zM64 427h384l-192 -342z" />
+    <glyph glyph-name="developer_board" unicode="developer_board" 
+d="M256 277h85v-128h-85v128zM128 363h107v-107h-107v107zM256 363h85v-64h-85v64zM128 235h107v-86h-107v86zM384 107v298h-299v-298h299zM469 320h-42v-43h42v-42h-42v-43h42v-43h-42v-42c0 -23 -20 -43 -43 -43h-299c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h299
+c23 0 43 -20 43 -43v-42h42v-43z" />
+    <glyph glyph-name="developer_mode" unicode="developer_mode" 
+d="M363 107v42h42v-85c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v85h42v-42h214zM213 188l-30 -30l-98 98l98 98l30 -30l-67 -68zM329 158l-30 30l67 68l-67 68l30 30l98 -98zM149 405v-42h-42v85c0 23 19 43 42 43l214 -1c23 0 42 -19 42 -42v-85h-42v42h-214z" />
+    <glyph glyph-name="device_hub" unicode="device_hub" 
+d="M363 171h85v-107h-107v65l-85 90l-85 -90v-65h-107v107h85l86 85v68c-25 9 -43 32 -43 60c0 35 29 64 64 64s64 -29 64 -64c0 -28 -18 -51 -43 -60v-68z" />
+    <glyph glyph-name="devices" unicode="devices" 
+d="M469 149v150h-85v-150h85zM491 341c12 0 21 -9 21 -21v-213c0 -12 -9 -22 -21 -22h-128c-12 0 -22 10 -22 22v213c0 12 10 21 22 21h128zM85 384v-235h214v-64h-299v64h43v235c0 23 19 43 42 43h384v-43h-384z" />
+    <glyph glyph-name="devices_other" unicode="devices_other" 
+d="M448 128v171h-85v-171h85zM469 341c11 0 22 -10 22 -21v-213c0 -11 -11 -22 -22 -22h-128c-11 0 -21 11 -21 22v213c0 11 10 21 21 21h128zM235 139c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM277 256v-38c13 -12 22 -28 22 -47s-9 -36 -22 -48
+v-38h-85v38c-13 12 -21 29 -21 48s8 35 21 47v38h85zM64 384v-256h85v-43h-85c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h384v-43h-384z" />
+    <glyph glyph-name="dialer_sip" unicode="dialer_sip" 
+d="M427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12zM427 405v22h-22v-22h22z
+M384 448h64v-64h-43v-43h-21v107zM320 405v-64h-64v22h43v21h-43v64h64v-21h-43v-22h43zM363 448v-107h-22v107h22z" />
+    <glyph glyph-name="dialpad" unicode="dialpad" 
+d="M256 491c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 363c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 363c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 235c23 0 43 -20 43 -43
+s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 235c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 405c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43zM128 235c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z
+M128 363c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM128 491c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 107c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z" />
+    <glyph glyph-name="directions" unicode="directions" 
+d="M299 203l74 74l-74 75v-53h-107c-12 0 -21 -10 -21 -22v-85h42v64h86v-53zM463 271c8 -9 8 -22 0 -30l-192 -192c-8 -8 -22 -8 -30 0l-192 192c-8 8 -8 22 0 30l192 192c8 8 22 8 30 0z" />
+    <glyph glyph-name="directions_bike" unicode="directions_bike" 
+d="M405 75c41 0 75 33 75 74s-34 75 -75 75s-74 -34 -74 -75s33 -74 74 -74zM405 256c60 0 107 -47 107 -107s-47 -106 -107 -106s-106 46 -106 106s46 107 106 107zM230 288l47 -49v-132h-42v106l-69 60c-9 6 -12 17 -12 30c0 11 3 21 12 30l60 60c6 9 17 12 30 12
+s23 -3 34 -12l41 -41c19 -19 44 -32 76 -32v-43c-45 0 -80 17 -108 45l-17 17zM107 75c41 0 74 33 74 74s-33 75 -74 75s-75 -34 -75 -75s34 -74 75 -74zM107 256c60 0 106 -47 106 -107s-46 -106 -106 -106s-107 46 -107 106s47 107 107 107zM331 395c-23 0 -43 19 -43 42
+s20 43 43 43s42 -20 42 -43s-19 -42 -42 -42z" />
+    <glyph glyph-name="directions_boat" unicode="directions_boat" 
+d="M128 384v-85l128 42l128 -42v85h-256zM84 107l-40 142c-4.78212 14.3464 3.99001 23.6633 14 27l27 9v99c0 23 20 43 43 43h64v64h128v-64h64c23 0 43 -20 43 -43v-99l27 -9c10.0202 -3.34008 18.7871 -12.6386 14 -27l-40 -142h-1c-34 0 -65 18 -86 42
+c-21 -24 -51 -42 -85 -42s-64 18 -85 42c-21 -24 -52 -42 -86 -42h-1zM427 64h42v-43h-42c-29 0 -59 7 -86 21c-54 -28 -116 -28 -170 0c-27 -14 -57 -21 -86 -21h-42v43h42c30 0 60 10 86 28c52 -36 118 -36 170 0c26 -18 56 -28 86 -28z" />
+    <glyph glyph-name="directions_bus" unicode="directions_bus" 
+d="M384 277v107h-256v-107h256zM352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM85 171v213c0 75 77 85 171 85s171 -10 171 -85v-213c0 -19 -9 -36 -22 -48v-38
+c0 -12 -9 -21 -21 -21h-21c-12 0 -22 9 -22 21v22h-170v-22c0 -12 -10 -21 -22 -21h-21c-12 0 -21 9 -21 21v38c-13 12 -22 29 -22 48z" />
+    <glyph glyph-name="directions_car" unicode="directions_car" 
+d="M107 277h298l-32 96h-234zM373 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 384l44 -128v-171c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v22h-256v-22
+c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v171l44 128c4 13 17 21 31 21h234c14 0 27 -8 31 -21z" />
+    <glyph glyph-name="directions_railway" unicode="directions_railway" 
+d="M384 299v106h-256v-106h256zM256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM85 181v224c0 75 77 86 171 86s171 -11 171 -86v-224c0 -41 -34 -74 -75 -74l32 -32v-11h-256v11l32 32c-41 0 -75 33 -75 74z" />
+    <glyph glyph-name="directions_run" unicode="directions_run" 
+d="M211 99l-149 29l8 43l105 -21l34 173l-39 -15v-73h-42v100l111 47c6 0 11 2 17 2c15 0 27 -8 36 -21l21 -34c17 -30 51 -51 92 -51v-43c-47 0 -89 21 -117 53l-13 -64l45 -42v-160h-43v128l-45 42zM288 395c-23 0 -43 20 -43 43s20 42 43 42s42 -19 42 -42
+s-19 -43 -42 -43z" />
+    <glyph glyph-name="directions_subway" unicode="directions_subway" 
+d="M384 277v107h-107v-107h107zM352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM235 277v107h-107v-107h107zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 469c94 0 171 -10 171 -85v-203c0 -41 -34 -74 -75 -74
+l32 -32v-11h-256v11l32 32c-41 0 -75 33 -75 74v203c0 75 77 85 171 85z" />
+    <glyph glyph-name="directions_transit" unicode="directions_transit" 
+d="M384 277v107h-107v-107h107zM352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM235 277v107h-107v-107h107zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 469c94 0 171 -10 171 -85v-203c0 -41 -34 -74 -75 -74
+l32 -32v-11h-256v11l32 32c-41 0 -75 33 -75 74v203c0 75 77 85 171 85z" />
+    <glyph glyph-name="directions_walk" unicode="directions_walk" 
+d="M209 322l-60 -301h45l39 171l44 -43v-128h43v160l-45 43l13 64c28 -32 70 -53 117 -53v42c-41 0 -74 22 -91 52l-22 34c-9 13 -21 21 -36 21c-6 0 -11 -2 -17 -2l-111 -47v-100h43v72l38 15zM288 395c-23 0 -43 19 -43 42s20 43 43 43s43 -20 43 -43s-20 -42 -43 -42z
+" />
+    <glyph glyph-name="disc_full" unicode="disc_full" 
+d="M213 213c23 0 43 20 43 43s-20 43 -43 43s-42 -20 -42 -43s19 -43 42 -43zM213 427c94 0 171 -77 171 -171s-77 -171 -171 -171s-170 77 -170 171s76 171 170 171zM427 363h42v-107h-42v107zM427 171v42h42v-42h-42z" />
+    <glyph glyph-name="dns" unicode="dns" 
+d="M149 320c23 0 43 20 43 43s-20 42 -43 42s-42 -19 -42 -42s19 -43 42 -43zM427 448c12 0 21 -9 21 -21v-128c0 -12 -9 -22 -21 -22h-342c-12 0 -21 10 -21 22v128c0 12 9 21 21 21h342zM149 107c23 0 43 19 43 42s-20 43 -43 43s-42 -20 -42 -43s19 -42 42 -42zM427 235
+c12 0 21 -10 21 -22v-128c0 -12 -9 -21 -21 -21h-342c-12 0 -21 9 -21 21v128c0 12 9 22 21 22h342z" />
+    <glyph glyph-name="do_not_disturb" unicode="do_not_disturb" 
+d="M391 151c23 29 36 66 36 105c0 94 -77 171 -171 171c-39 0 -76 -13 -105 -36zM256 85c39 0 76 13 105 36l-240 240c-23 -29 -36 -66 -36 -105c0 -94 77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="do_not_disturb_alt" unicode="do_not_disturb_alt" 
+d="M256 85c94 0 171 77 171 171c0 38 -14 75 -37 105l-239 -239c30 -23 67 -37 105 -37zM85 256c0 -38 14 -75 37 -105l239 239c-30 23 -67 37 -105 37c-94 0 -171 -77 -171 -171zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="do_not_disturb_off" unicode="do_not_disturb_off" 
+d="M149 235h74l-43 42h-31v-42zM48 464l416 -416l-28 -27l-59 60c-34 -24 -76 -38 -121 -38c-118 0 -213 95 -213 213c0 45 14 87 38 121l-60 59zM363 277h-74l-154 154c34 24 76 38 121 38c118 0 213 -95 213 -213c0 -45 -14 -87 -38 -121l-99 100h31v42z" />
+    <glyph glyph-name="do_not_disturb_on" unicode="do_not_disturb_on" 
+d="M363 235v42h-214v-42h214zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="dock" unicode="dock" 
+d="M341 192v213h-170v-213h170zM341 490c23 0 43 -19 43 -42v-299c0 -23 -20 -42 -43 -42h-170c-23 0 -43 19 -43 42v299c0 23 20 43 43 43zM171 21v43h170v-43h-170z" />
+    <glyph glyph-name="domain" unicode="domain" 
+d="M384 192v-43h-43v43h43zM384 277v-42h-43v42h43zM427 107v213h-171v-43h43v-42h-43v-43h43v-43h-43v-42h171zM213 363v42h-42v-42h42zM213 277v43h-42v-43h42zM213 192v43h-42v-43h42zM213 107v42h-42v-42h42zM128 363v42h-43v-42h43zM128 277v43h-43v-43h43zM128 192v43
+h-43v-43h43zM128 107v42h-43v-42h43zM256 363h213v-299h-426v384h213v-85z" />
+    <glyph glyph-name="done" unicode="done" 
+d="M192 166l226 227l30 -30l-256 -256l-119 119l29 30z" />
+    <glyph glyph-name="done_all" unicode="done_all" 
+d="M9 226l30 30l119 -119l-30 -30zM474 393l31 -30l-256 -256l-120 119l31 30l89 -89zM384 363l-135 -136l-30 30l135 136z" />
+    <glyph glyph-name="donut_large" unicode="donut_large" 
+d="M277 108c64 9 119 63 128 127h64c-10 -107 -85 -182 -192 -192v65zM405 277c-9 64 -64 118 -128 127v65c107 -10 182 -85 192 -192h-64zM235 404c-64 -10 -128 -73 -128 -148s64 -138 128 -148v-65c-107 11 -192 102 -192 213s85 202 192 213v-65z" />
+    <glyph glyph-name="donut_small" unicode="donut_small" 
+d="M277 195c21 6 33 22 40 40h152c-10 -101 -85 -182 -192 -192v152zM317 277c-7 18 -19 34 -40 40v152c107 -10 182 -91 192 -192h-152zM235 317c-21 -9 -43 -33 -43 -61s22 -52 43 -61v-152c-107 11 -192 102 -192 213s85 202 192 213v-152z" />
+    <glyph glyph-name="drafts" unicode="drafts" 
+d="M256 235l176 110l-176 103l-176 -103zM469 341v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v213c0 15 8 30 20 37l193 113l193 -113c12 -7 20 -22 20 -37z" />
+    <glyph glyph-name="drag_handle" unicode="drag_handle" 
+d="M85 192v43h342v-43h-342zM427 320v-43h-342v43h342z" />
+    <glyph glyph-name="drive_eta" unicode="drive_eta" 
+d="M107 299h298l-32 96h-234zM373 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 405l44 -128v-170c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v21h-256v-21
+c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v170l44 128c4 13 17 22 31 22h234c14 0 27 -9 31 -22z" />
+    <glyph glyph-name="dvr" unicode="dvr" 
+d="M149 256v-43h-42v43h42zM149 341v-42h-42v42h42zM405 256v-43h-234v43h234zM405 341v-42h-234v42h234zM448 149v256h-384v-256h384zM448 448c23 0 43 -20 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-23 0 -43 19 -43 42v256c0 23 20 43 43 43h384z
+" />
+    <glyph glyph-name="edit" unicode="edit" 
+d="M442 362l-39 -39l-80 80l39 39c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM64 144l236 236l80 -80l-236 -236h-80v80z" />
+    <glyph glyph-name="edit_location" unicode="edit_location" 
+d="M318 351c3 3 3 8 0 11l-20 20c-3 3 -8 3 -11 0l-15 -15l31 -31zM223 256l71 71l-31 31l-71 -71v-31h31zM256 469c82 0 149 -67 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 82 67 149 149 149z" />
+    <glyph glyph-name="eject" unicode="eject" 
+d="M256 405l142 -213h-284zM107 149h298v-42h-298v42z" />
+    <glyph glyph-name="email" unicode="email" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="enhanced_encryption" unicode="enhanced_encryption" 
+d="M341 171v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM190 384v-43h132v43c0 36 -30 66 -66 66s-66 -30 -66 -66zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107s107 -48 107 -107
+v-43h21z" />
+    <glyph glyph-name="equalizer" unicode="equalizer" 
+d="M341 320h86v-235h-86v235zM85 85v171h86v-171h-86zM213 85v342h86v-342h-86z" />
+    <glyph glyph-name="error" unicode="error" 
+d="M277 235v128h-42v-128h42zM277 149v43h-42v-43h42zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="error_outline" unicode="error_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM235 363h42v-128h-42v128zM235 192h42v-43h-42v43z" />
+    <glyph glyph-name="euro_symbol" unicode="euro_symbol" 
+d="M320 117c35 0 66 13 90 34l38 -38c-34 -31 -79 -49 -128 -49c-84 0 -155 54 -181 128h-75v43h65c-1 7 -1 14 -1 21s0 14 1 21h-65v43h75c26 74 97 128 181 128c49 0 94 -18 128 -49l-38 -38c-24 21 -56 34 -90 34c-53 0 -100 -31 -123 -75h123v-43h-137
+c-1 -7 -2 -14 -2 -21s1 -14 2 -21h137v-43h-123c23 -44 69 -75 123 -75z" />
+    <glyph glyph-name="ev_station" unicode="ev_station" 
+d="M171 128l85 149h-43v107l-85 -160h43v-96zM384 299c12 0 21 9 21 21s-9 21 -21 21s-21 -9 -21 -21s9 -21 21 -21zM422 358c10 -10 15 -23 15 -38v-203c0 -29 -24 -53 -53 -53s-53 24 -53 53v107h-32v-160h-214v341c0 23 20 43 43 43h128c23 0 43 -20 43 -43v-149h21
+c23 0 43 -20 43 -43v-96c0 -12 9 -21 21 -21s21 9 21 21v154c-7 -3 -13 -4 -21 -4c-29 0 -53 24 -53 53c0 23 14 42 34 50l-45 45l23 22z" />
+    <glyph glyph-name="event" unicode="event" 
+d="M405 107v234h-298v-234h298zM341 491h43v-43h21c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43zM363 256v-107h-107v107h107z" />
+    <glyph glyph-name="event_available" unicode="event_available" 
+d="M405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21zM353 276l-127 -127l-68 68l23 23l45 -45l104 104z" />
+    <glyph glyph-name="event_busy" unicode="event_busy" 
+d="M405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21zM199 149l-23 23l52 52l-52 52l23 23l52 -52l52 52l22 -23l-52 -52l52 -52l-22 -23l-52 52z" />
+    <glyph glyph-name="event_note" unicode="event_note" 
+d="M299 213v-42h-150v42h150zM405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21zM363 299v-43h-214v43h214z" />
+    <glyph glyph-name="event_seat" unicode="event_seat" 
+d="M363 235h-214v170c0 23 20 43 43 43h128c23 0 43 -20 43 -43v-170zM43 299h64v-64h-64v64zM405 299h64v-64h-64v64zM85 64v128h342v-128h-64v64h-214v-64h-64z" />
+    <glyph glyph-name="exit_to_app" unicode="exit_to_app" 
+d="M405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v85h43v-85h298v298h-298v-85h-43v85c0 23 19 43 43 43h298zM215 179l55 56h-206v42h206l-55 56l30 30l107 -107l-107 -107z" />
+    <glyph glyph-name="expand_less" unicode="expand_less" 
+d="M256 341l128 -128l-30 -30l-98 98l-98 -98l-30 30z" />
+    <glyph glyph-name="expand_more" unicode="expand_more" 
+d="M354 329l30 -30l-128 -128l-128 128l30 30l98 -98z" />
+    <glyph glyph-name="explicit" unicode="explicit" 
+d="M320 320v43h-128v-214h128v43h-85v43h85v42h-85v43h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="explore" unicode="explore" 
+d="M303 209l81 175l-175 -81l-81 -175zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM256 279c13 0 23 -10 23 -23s-10 -23 -23 -23s-23 10 -23 23s10 23 23 23z" />
+    <glyph glyph-name="exposure" unicode="exposure" 
+d="M427 85v342l-342 -342h342zM107 405v-42h128v42h-128zM427 469c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342zM320 149h-43v43h43v43h43v-43h42v-43h-42v-42h-43v42z" />
+    <glyph glyph-name="exposure_neg_1" unicode="exposure_neg_&#x31;" 
+d="M405 128h-42v227l-64 -22v36l100 36h6v-277zM85 277h171v-42h-171v42z" />
+    <glyph glyph-name="exposure_neg_2" unicode="exposure_neg_&#x32;" 
+d="M43 277h170v-42h-170v42zM351 405c51.6805 0 86 -23.4377 86 -75c0 -8 -1 -17 -4 -25s-6 -17 -11 -25c-10.9564 -17.5303 -25.11 -35.11 -40 -50l-61 -66h127v-36h-184v32l89 97c13.5256 13.5256 22.2329 25.3882 31 40c5.07755 8.46258 7 15.5272 7 28c0 6 0 13 -2 18
+c-5.9589 14.8973 -17.1504 26 -38 26c-30.4379 0 -46 -18.4676 -46 -49h-46c0 25.6678 10.3448 46.3448 24 60c15.6925 15.6925 36.8462 25 68 25z" />
+    <glyph glyph-name="exposure_plus_1" unicode="exposure_plus_&#x31;" 
+d="M427 128h-43v227l-64 -22v36l100 36h7v-277zM213 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="exposure_plus_2" unicode="exposure_plus_&#x32;" 
+d="M171 363v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43zM342 164h127v-36h-184v32l89 97c13.5256 13.5256 22.2329 25.3882 31 40c4.82857 8.04762 8 16.6883 8 28c0 13.988 -4.98597 22.9813 -11 31c-6.38798 8.51731 -15.0381 13 -30 13
+c-15.4008 0 -27.3364 -6.33642 -35 -14c-6.99604 -6.99604 -11 -21.7099 -11 -35h-46c0 25.6678 10.3448 46.3448 24 60c8 8 17 15 29 19s25 6 40 6c14 0 25 -2 36 -5c10 -4 20 -8 27 -15c13.4025 -11.4878 23 -30.9925 23 -55c0 -20.2222 -7.3586 -36.1738 -16 -50
+c-5 -8 -10 -17 -17 -25s-15 -17 -23 -25z" />
+    <glyph glyph-name="exposure_zero" unicode="exposure_zero" 
+d="M299 296c0 25.8021 -1.44348 42.6652 -11 57c-4 6 -9 9 -14 12s-11 4 -18 4s-13 -1 -18 -4s-10 -6 -14 -12c-9.53524 -14.3029 -11 -31.2267 -11 -57v-57c0 -34.3202 4.66098 -58.7966 25 -71c5 -3 11 -4 18 -4c16.7682 0 24.8052 6.20777 32 17
+c8.87006 13.3051 12 34.4084 12 58v57h-1zM168 289c0 68.5293 21.3782 116 88 116c46.5088 0 71.845 -23.9186 82 -62c4 -15 7 -32 7 -54v-44h-1c0 -39.7402 -7.68654 -69.0255 -24 -90c-8 -9 -17 -17 -28 -21s-23 -6 -36 -6s-25 2 -36 6s-20 12 -28 21
+c-17.4464 19.6272 -24 51.2554 -24 90v44z" />
+    <glyph glyph-name="extension" unicode="extension" 
+d="M437 277c29 0 54 -24 54 -53s-25 -53 -54 -53h-32v-86c0 -23 -19 -42 -42 -42h-81v32c0 32 -26 57 -58 57s-58 -25 -58 -57v-32h-81c-23 0 -42 19 -42 42v81h32c32 0 57 26 57 58s-25 58 -57 58h-32v81c0 23 19 42 42 42h86v32c0 29 24 54 53 54s53 -25 53 -54v-32h86
+c23 0 42 -19 42 -42v-86h32z" />
+    <glyph glyph-name="face" unicode="face" 
+d="M256 85c94 0 171 77 171 171c0 17 -3 33 -7 48c-15 -4 -31 -5 -48 -5c-72 0 -135 35 -174 90c-21 -51 -62 -93 -112 -115c-1 -6 -1 -12 -1 -18c0 -94 77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM320 261
+c15 0 27 -11 27 -26s-12 -27 -27 -27s-27 12 -27 27s12 26 27 26zM192 261c15 0 27 -11 27 -26s-12 -27 -27 -27s-27 12 -27 27s12 26 27 26z" />
+    <glyph glyph-name="fast_forward" unicode="fast_forward" 
+d="M277 384l182 -128l-182 -128v256zM85 128v256l182 -128z" />
+    <glyph glyph-name="fast_rewind" unicode="fast_rewind" 
+d="M245 256l182 128v-256zM235 128l-182 128l182 128v-256z" />
+    <glyph glyph-name="favorite" unicode="favorite" 
+d="M256 57l-31 28c-110 100 -182 165 -182 246c0 66 51 117 117 117c37 0 73 -18 96 -45c23 27 59 45 96 45c66 0 117 -51 117 -117c0 -81 -72 -147 -182 -247z" />
+    <glyph glyph-name="favorite_border" unicode="favorite_border" 
+d="M258 116c102 92 169 153 169 215c0 43 -32 74 -75 74c-33 0 -65 -21 -76 -50h-40c-11 29 -43 50 -76 50c-43 0 -75 -31 -75 -74c0 -62 67 -123 169 -215l2 -2zM352 448c66 0 117 -51 117 -117c0 -81 -72 -146 -182 -246l-31 -28l-31 27c-110 100 -182 166 -182 247
+c0 66 51 117 117 117c37 0 73 -18 96 -45c23 27 59 45 96 45z" />
+    <glyph glyph-name="featured_play_list" unicode="featured_play_list" 
+d="M256 363v42h-192v-42h192zM256 277v43h-192v-43h192zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="featured_video" unicode="featured_video" 
+d="M256 256v149h-192v-149h192zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="feedback" unicode="feedback" 
+d="M277 299v85h-42v-85h42zM277 213v43h-42v-43h42zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="fiber_dvr" unicode="fiber_dvr" 
+d="M448 267v21c0 18 -14 32 -32 32h-75v-128h32v43h25l18 -43h32l-19 45c11 5 19 17 19 30zM269 192l38 128h-32l-22 -73l-21 73h-32l37 -128h32zM171 224v64c0 18 -14 32 -32 32h-75v-128h75c18 0 32 14 32 32zM448 448c24 0 43 -19 43 -43v-298c0 -23 -19 -43 -43 -43
+h-384c-24 0 -43 20 -43 43v298c0 24 19 43 43 43h384zM96 288h43v-64h-43v64zM373 288h43v-21h-43v21z" />
+    <glyph glyph-name="fiber_manual_record" unicode="fiber_manual_record" 
+d="M85 256c0 94 77 171 171 171s171 -77 171 -171s-77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="fiber_new" unicode="fiber_new" 
+d="M437 213v107h-26v-96h-24v75h-27v-75h-24v96h-27v-107c0 -12 10 -21 22 -21h85c12 0 21 9 21 21zM288 293v27h-85v-128h85v27h-53v23h53v27h-53v24h53zM181 192v128h-26v-75l-54 75h-26v-128h26v75l55 -75h25zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43
+h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z" />
+    <glyph glyph-name="fiber_pin" unicode="fiber_pin" 
+d="M427 192v128h-27v-75l-53 75h-27v-128h27v75l54 -75h26zM267 192v128h-32v-128h32zM192 267v21c0 18 -14 32 -32 32h-75v-128h32v43h43c18 0 32 14 32 32zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z
+M117 288h43v-21h-43v21z" />
+    <glyph glyph-name="fiber_smart_record" unicode="fiber_smart_record" 
+d="M363 421c74 -19 128 -85 128 -165s-54 -146 -128 -165v44c50 17 85 65 85 121s-35 104 -85 121v44zM21 256c0 94 77 171 171 171s171 -77 171 -171s-77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="file_download" unicode="file_download" 
+d="M107 128h298v-43h-298v43zM405 320l-149 -149l-149 149h85v128h128v-128h85z" />
+    <glyph glyph-name="file_upload" unicode="file_upload" 
+d="M107 128h298v-43h-298v43zM192 171v128h-85l149 149l149 -149h-85v-128h-128z" />
+    <glyph glyph-name="filter" unicode="filter" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43zM340 292l76 -100h-235l59 75l42 -50z" />
+    <glyph glyph-name="filter_1" unicode="filter_&#x31;" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM299 192v171h-43v42h85v-213h-42zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_2" unicode="filter_&#x32;" 
+d="M363 235v-43h-128v85c0 24 19 43 42 43h43v43h-85v42h85c23 0 43 -18 43 -42v-43c0 -24 -20 -43 -43 -43h-43v-42h86zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405
+v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_3" unicode="filter_&#x33;" 
+d="M363 235c0 -24 -20 -43 -43 -43h-85v43h85v42h-43v43h43v43h-85v42h85c23 0 43 -18 43 -42v-32c0 -18 -14 -32 -32 -32c18 0 32 -14 32 -32v-32zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299
+c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299z" />
+    <glyph glyph-name="filter_4" unicode="filter_&#x34;" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM320 192v85h-85v128h42v-85h43v85h43v-213h-43zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_5" unicode="filter_&#x35;" 
+d="M363 235c0 -24 -20 -43 -43 -43h-85v43h85v42h-85v128h128v-42h-86v-43h43c23 0 43 -19 43 -43v-42zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299
+c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299z" />
+    <glyph glyph-name="filter_6" unicode="filter_&#x36;" 
+d="M277 277v-42h43v42h-43zM277 192c-23 0 -42 19 -42 43v128c0 24 19 42 42 42h86v-42h-86v-43h43c23 0 43 -19 43 -43v-42c0 -24 -20 -43 -43 -43h-43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299
+c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_7" unicode="filter_&#x37;" 
+d="M277 192h-42l85 171h-85v42h128v-42zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_8" unicode="filter_&#x38;" 
+d="M277 277v-42h43v42h-43zM277 363v-43h43v43h-43zM277 192c-23 0 -42 19 -42 43v32c0 18 14 32 32 32c-18 0 -32 14 -32 32v32c0 24 19 42 42 42h43c23 0 43 -18 43 -42v-32c0 -18 -14 -32 -32 -32c18 0 32 -14 32 -32v-32c0 -24 -20 -43 -43 -43h-43zM448 149v299h-299
+v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_9" unicode="filter_&#x39;" 
+d="M320 320v43h-43v-43h43zM320 405c23 0 43 -18 43 -42v-128c0 -24 -20 -43 -43 -43h-85v43h85v42h-43c-23 0 -42 19 -42 43v43c0 24 19 42 42 42h43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299
+c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_9_plus" unicode="filter_&#x39;_plus" 
+d="M448 320v128h-299v-299h299v128h-43v-42h-42v42h-43v43h43v43h42v-43h43zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM235 320h21v21h-21v-21zM299 256c0 -24 -20 -43 -43 -43h-64v43h64v21h-21
+c-23 0 -43 19 -43 43v21c0 24 20 43 43 43h21c23 0 43 -19 43 -43v-85zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_b_and_w" unicode="filter_b_and_w" 
+d="M405 107v298h-149v-128zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM256 277l-149 -170h149v170z" />
+    <glyph glyph-name="filter_center_focus" unicode="filter_center_focus" 
+d="M256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM107 405v-85h-43v85c0 23 20 43 43 43h85v-43h-85zM107 192v-85h85v-43h-85
+c-23 0 -43 20 -43 43v85h43z" />
+    <glyph glyph-name="filter_drama" unicode="filter_drama" 
+d="M405 128c35 0 64 29 64 64s-29 64 -64 64h-32v11c0 65 -52 117 -117 117c-38 0 -72 -18 -94 -47c54 -15 94 -65 94 -124h-43c0 47 -38 86 -85 86s-85 -39 -85 -86s38 -85 85 -85h277zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277
+c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="filter_frames" unicode="filter_frames" 
+d="M384 341h-256v-213h256zM427 85v299h-96l-74 75l-75 -75h-97v-299h342zM427 427c23 0 42 -20 42 -43v-299c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h86l85 85l85 -85h86z" />
+    <glyph glyph-name="filter_hdr" unicode="filter_hdr" 
+d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" />
+    <glyph glyph-name="filter_list" unicode="filter_list" 
+d="M128 235v42h256v-42h-256zM64 384h384v-43h-384v43zM213 128v43h86v-43h-86z" />
+    <glyph glyph-name="filter_none" unicode="filter_none" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_tilt_shift" unicode="filter_tilt_shift" 
+d="M121 91l30 30c24 -18 53 -30 84 -34v-43c-43 4 -82 21 -114 47zM277 87c31 4 60 16 83 34l31 -30c-32 -26 -71 -43 -114 -47v43zM391 151c18 24 30 52 34 83h43c-4 -43 -21 -81 -47 -113zM320 256c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64z
+M87 235c4 -31 16 -60 34 -83l-30 -31c-26 32 -43 71 -47 114h43zM121 361c-18 -24 -30 -53 -34 -84h-43c4 43 21 82 47 114zM425 277c-4 31 -16 60 -34 84l30 30c26 -32 43 -71 47 -114h-43zM391 421l-30 -30c-24 18 -53 30 -84 34v43c43 -4 82 -21 114 -47zM235 425
+c-31 -4 -60 -16 -84 -34l-30 30c32 26 71 43 114 47v-43z" />
+    <glyph glyph-name="filter_vintage" unicode="filter_vintage" 
+d="M256 171c47 0 85 38 85 85s-38 85 -85 85s-85 -38 -85 -85s38 -85 85 -85zM49 137c0 49.2164 31.3621 102.121 82 119c-6 2 -12 6 -18 9c-41 24 -64 66 -64 110c38 22 87 24 128 0c6 -3 12 -7 17 -11c-1 7 -2 13 -2 20c0 47 26 89 64 111c38 -22 64 -64 64 -111
+c0 -7 -1 -13 -2 -20c5 4 11 8 17 11c41 24 90 22 128 0c0 -44 -23 -86 -64 -110c-6 -3 -12 -7 -18 -9c6 -2 12 -6 18 -9c41 -24 64 -66 64 -110c-38 -22 -87 -24 -128 0c-6 3 -12 7 -17 11c1 -7 2 -13 2 -20c0 -47 -26 -89 -64 -111c-38 22 -64 64 -64 111c0 7 1 13 2 20
+c-5 -4 -11 -8 -17 -11c-41 -24 -90 -22 -128 0z" />
+    <glyph glyph-name="find_in_page" unicode="find_in_page" 
+d="M192 235c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64zM427 94l-82 82c11 17 18 37 18 59c0 59 -48 106 -107 106s-107 -47 -107 -106s48 -107 107 -107c22 0 42 7 59 18l94 -95c-7 -5 -15 -8 -25 -8h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42
+h171l128 -128v-247z" />
+    <glyph glyph-name="find_replace" unicode="find_replace" 
+d="M355 189l103 -104l-31 -31l-104 103c-25 -18 -55 -29 -88 -29c-41 0 -79 17 -106 44l-44 -44v128h128l-54 -54c19 -19 47 -31 76 -31c52 0 94 36 104 85h43c-3 -25 -13 -48 -27 -67zM235 384c-52 0 -95 -36 -105 -85h-43c10 72 73 128 148 128c41 0 78 -17 105 -44l44 44
+v-128h-128l54 54c-19 19 -46 31 -75 31z" />
+    <glyph glyph-name="fingerprint" unicode="fingerprint" 
+d="M318 43h-3c-34 9 -56 22 -79 45c-30 30 -46 69 -46 111c0 35 29 63 65 63s66 -28 66 -63c0 -23 19 -41 44 -41s45 18 45 41c0 80 -70 146 -155 146c-61 0 -116 -34 -141 -86c-8 -17 -12 -38 -12 -60c0 -17 1 -43 14 -77c4.57857 -13.7357 -15.4693 -18.3268 -20 -7
+c-10 28 -16 55 -16 84c0 26 5 49 15 69c28 60 91 99 160 99c97 0 176 -76 176 -168c0 -35 -30 -62 -66 -62s-65 27 -65 62c0 23 -20 42 -45 42s-44 -19 -44 -42c0 -36 14 -70 40 -96c20 -20 40 -31 70 -39c6 -1 8 -7 7 -13c-1 -5 -6 -8 -10 -8zM265 199
+c0 -48.7573 40.2888 -91 96 -91c9.9641 0 32.7732 7.36098 35 -6c1 -6 -3 -12 -9 -13c-12 -2 -23 -2 -26 -2c-25 0 -48 6 -66 19c-32 22 -51 56 -51 93c0 6 5 11 11 11s10 -5 10 -11zM208 47c-3 0 -5 1 -7 3c-19 19 -29 31 -43 57c-15 26 -23 58 -23 92c0 63 54 115 121 115
+s121 -52 121 -115c0 -6 -5 -10 -11 -10s-11 4 -11 10c0 52 -44 94 -99 94s-99 -42 -99 -94c0 -31 6 -59 19 -82c14 -25 24 -35 40 -52c4 -4 4 -11 0 -15c-2 -2 -5 -3 -8 -3zM75 305c-8.81177 0 -13.8926 7.8456 -9 16c21 30 48 54 80 70c67 35 153 35 220 0
+c32 -16 59 -39 80 -69c3 -5 2 -12 -3 -15s-12 -2 -15 3c-19 27 -43 47 -72 62c-61 31 -139 32 -200 0c-29 -15 -54 -36 -73 -63c-2 -3 -5 -4 -8 -4zM380 417c-2 0 -4 0 -5 1c-41 21 -77 30 -119 30s-83 -10 -119 -30c-11.6907 -7.0144 -21.6392 12.0165 -10 19
+c40 22 83 32 129 32c45 0 85 -10 129 -32c9.10556 -5.46333 5.20303 -20 -5 -20z" />
+    <glyph glyph-name="first_page" unicode="first_page" 
+d="M128 384h43v-256h-43v256zM393 158l-30 -30l-128 128l128 128l30 -30l-98 -98z" />
+    <glyph glyph-name="fitness_center" unicode="fitness_center" 
+d="M439 195l30 -31l-45 -45l30 -31l-30 -30l-31 30l-45 -45l-31 30l-30 -30l-31 30l76 76l-183 183l-76 -76l-30 31l30 30l-30 31l45 45l-30 31l30 30l31 -30l45 45l31 -30l30 30l31 -30l-76 -76l183 -183l76 76l30 -31z" />
+    <glyph glyph-name="flag" unicode="flag" 
+d="M307 384h120v-213h-150l-8 42h-120v-149h-42v363h192z" />
+    <glyph glyph-name="flare" unicode="flare" 
+d="M235 21v128h42v-128h-42zM120 150l46 46l30 -30l-46 -46zM316 166l30 30l46 -46l-30 -30zM256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM363 277h128v-42h-128v42zM392 362l-46 -46l-30 30l46 46zM277 491v-128h-42v128h42zM196 346l-30 -30
+l-46 46l30 30zM149 277v-42h-128v42h128z" />
+    <glyph glyph-name="flash_auto" unicode="flash_auto" 
+d="M359 349h50l-25 78zM405 469l69 -192h-41l-15 43h-68l-15 -43h-41l69 192h42zM64 469h213l-85 -192h85l-149 -256v192h-64v256z" />
+    <glyph glyph-name="flash_off" unicode="flash_off" 
+d="M363 299l-33 -57l-181 181v46h214l-86 -170h86zM70 448l335 -336l-27 -27l-88 89l-77 -131v192h-64v79l-106 107z" />
+    <glyph glyph-name="flash_on" unicode="flash_on" 
+d="M149 469h214l-86 -170h86l-150 -256v192h-64v234z" />
+    <glyph glyph-name="flight" unicode="flight" 
+d="M217 320zM448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117c0 18 14 32 32 32s32 -14 32 -32v-117l171 -107v-42z" />
+    <glyph glyph-name="flight_land" unicode="flight_land" 
+d="M299 204c-68.2362 18.7638 -137.045 36.9549 -206 55l-34 10v110l31 -8l20 -50l106 -28v176l41 -11l59 -192l113 -30c17 -5 27 -23 23 -40c-5 -17 -22 -26 -39 -22zM53 107h406v-43h-406v43z" />
+    <glyph glyph-name="flight_takeoff" unicode="flight_takeoff" 
+d="M471 306c4 -17 -6 -34 -23 -39c-68.7788 -18.2212 -137.501 -36.499 -206 -55l-113 -30l-34 -10c-18.76 31.9067 -37.3464 63.9869 -56 96l31 8l42 -32l106 28l-88 153l41 11l147 -137l114 30c17 5 35 -6 39 -23zM53 107h406v-43h-406v43z" />
+    <glyph glyph-name="flip" unicode="flip" 
+d="M405 64v43h43c0 -23 -20 -43 -43 -43zM405 235v42h43v-42h-43zM320 405v43h43v-43h-43zM405 149v43h43v-43h-43zM235 21v470h42v-470h-42zM405 448c23 0 43 -20 43 -43h-43v43zM64 405c0 23 20 43 43 43h85v-43h-85v-298h85v-43h-85c-23 0 -43 20 -43 43v298zM405 320v43
+h43v-43h-43zM320 64v43h43v-43h-43z" />
+    <glyph glyph-name="flip_to_back" unicode="flip_to_back" 
+d="M320 149v43h43v-43h-43zM320 405v43h43v-43h-43zM107 363v-256h256v-43h-256c-24 0 -43 20 -43 43v256h43zM405 149v43h43c0 -23 -20 -43 -43 -43zM405 320v43h43v-43h-43zM405 235v42h43v-42h-43zM192 149c-24 0 -43 20 -43 43h43v-43zM277 448v-43h-42v43h42zM405 448
+c23 0 43 -20 43 -43h-43v43zM277 192v-43h-42v43h42zM192 448v-43h-43c0 23 19 43 43 43zM192 277v-42h-43v42h43zM192 363v-43h-43v43h43z" />
+    <glyph glyph-name="flip_to_front" unicode="flip_to_front" 
+d="M149 64v43h43v-43h-43zM235 64v43h42v-43h-42zM405 192v213h-213v-213h213zM405 448c23 0 43 -20 43 -43v-213c0 -23 -20 -43 -43 -43h-213c-24 0 -43 20 -43 43v213c0 23 19 43 43 43h213zM320 64v43h43v-43h-43zM64 320v43h43v-43h-43zM107 64c-24 0 -43 20 -43 43h43
+v-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z" />
+    <glyph glyph-name="folder" unicode="folder" 
+d="M213 427l43 -43h171c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128z" />
+    <glyph glyph-name="folder_open" unicode="folder_open" 
+d="M427 128v213h-342v-213h342zM427 384c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="folder_shared" unicode="folder_shared" 
+d="M405 149v22c0 28 -57 42 -85 42s-85 -14 -85 -42v-22h170zM320 320c-23 0 -43 -20 -43 -43s20 -42 43 -42s43 19 43 42s-20 43 -43 43zM427 384c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="folder_special" unicode="folder_special" 
+d="M383 149l-17 71l55 48l-72 6l-29 67l-29 -67l-72 -6l55 -48l-17 -71l63 37zM427 384c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="font_download" unicode="font_download" 
+d="M340 117h45l-109 278h-40l-109 -278h45l24 64h120zM427 469c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342zM212 224l44 118l44 -118h-88z" />
+    <glyph glyph-name="format_align_center" unicode="format_align_center" 
+d="M64 448h384v-43h-384v43zM149 363h214v-43h-214v43zM64 235v42h384v-42h-384zM64 64v43h384v-43h-384zM149 192h214v-43h-214v43z" />
+    <glyph glyph-name="format_align_justify" unicode="format_align_justify" 
+d="M64 448h384v-43h-384v43zM64 320v43h384v-43h-384zM64 235v42h384v-42h-384zM64 149v43h384v-43h-384zM64 64v43h384v-43h-384z" />
+    <glyph glyph-name="format_align_left" unicode="format_align_left" 
+d="M64 448h384v-43h-384v43zM64 64v43h384v-43h-384zM64 235v42h384v-42h-384zM320 363v-43h-256v43h256zM320 192v-43h-256v43h256z" />
+    <glyph glyph-name="format_align_right" unicode="format_align_right" 
+d="M64 448h384v-43h-384v43zM192 320v43h256v-43h-256zM64 235v42h384v-42h-384zM192 149v43h256v-43h-256zM64 64v43h384v-43h-384z" />
+    <glyph glyph-name="format_bold" unicode="format_bold" 
+d="M288 181c18 0 32 14 32 32s-14 32 -32 32h-75v-64h75zM213 373v-64h64c18 0 32 14 32 32s-14 32 -32 32h-64zM333 282c28 -13 46 -41 46 -73c0 -45 -34 -81 -79 -81h-151v299h134c48 0 85 -38 85 -86c0 -22 -14 -45 -35 -59z" />
+    <glyph glyph-name="format_clear" unicode="format_clear" 
+d="M128 405h299v-64h-124l-34 -80l-45 44l15 36h-51l-60 60v4zM70 405l6 -5l308 -309l-27 -27l-121 121l-33 -78h-64l52 123l-148 148z" />
+    <glyph glyph-name="format_color_fill" unicode="format_color_fill" 
+d="M0 85h512v-85h-512v85zM405 267c0 0 43 -47 43 -75c0 -23 -20 -43 -43 -43s-42 20 -42 43c0 28 42 75 42 75zM111 299h205l-103 102zM353 321c13 -13 13 -33 0 -45l-117 -117c-6 -6 -15 -10 -23 -10s-16 4 -22 10l-118 117c-13 12 -13 32 0 45l110 110l-51 51l31 30z" />
+    <glyph glyph-name="format_color_reset" unicode="format_color_reset" 
+d="M112 400l312 -312l-27 -27l-57 56c-23 -20 -52 -32 -84 -32c-71 0 -128 57 -128 128c0 26 12 57 28 88l-71 71zM384 213c0 -10 -1 -19 -3 -28l-183 184c30 43 58 75 58 75s128 -146 128 -231z" />
+    <glyph glyph-name="format_color_text" unicode="format_color_text" 
+d="M205 256h102l-51 135zM235 448h42l117 -299h-48l-23 64h-134l-24 -64h-48zM0 85h512v-85h-512v85z" />
+    <glyph glyph-name="format_indent_decrease" unicode="format_indent_decrease" 
+d="M235 235v42h213v-42h-213zM235 320v43h213v-43h-213zM64 448h384v-43h-384v43zM64 64v43h384v-43h-384zM64 256l85 85v-170zM235 149v43h213v-43h-213z" />
+    <glyph glyph-name="format_indent_increase" unicode="format_indent_increase" 
+d="M235 235v42h213v-42h-213zM235 320v43h213v-43h-213zM64 448h384v-43h-384v43zM235 149v43h213v-43h-213zM64 341l85 -85l-85 -85v170zM64 64v43h384v-43h-384z" />
+    <glyph glyph-name="format_italic" unicode="format_italic" 
+d="M213 427h171v-64h-60l-72 -171h47v-64h-171v64h60l72 171h-47v64z" />
+    <glyph glyph-name="format_line_spacing" unicode="format_line_spacing" 
+d="M213 235v42h256v-42h-256zM213 107v42h256v-42h-256zM213 405h256v-42h-256v42zM128 363v-214h53l-74 -74l-75 74h53v214h-53l75 74l74 -74h-53z" />
+    <glyph glyph-name="format_list_bulleted" unicode="format_list_bulleted" 
+d="M149 405h299v-42h-299v42zM149 235v42h299v-42h-299zM149 107v42h299v-42h-299zM85 160c18 0 32 -15 32 -32s-15 -32 -32 -32s-32 15 -32 32s14 32 32 32zM85 416c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM85 288c18 0 32 -14 32 -32
+s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32z" />
+    <glyph glyph-name="format_list_numbered" unicode="format_list_numbered" 
+d="M149 235v42h299v-42h-299zM149 107v42h299v-42h-299zM149 405h299v-42h-299v42zM43 277v22h64v-20l-39 -44h39v-22h-64v20l38 44h-38zM64 341v64h-21v22h42v-86h-21zM43 149v22h64v-86h-64v22h42v10h-21v22h21v10h-42z" />
+    <glyph glyph-name="format_paint" unicode="format_paint" 
+d="M384 427h64v-171h-171v-192c0 -12 -9 -21 -21 -21h-43c-12 0 -21 9 -21 21v235h213v85h-21v-21c0 -12 -9 -22 -21 -22h-256c-12 0 -22 10 -22 22v85c0 12 10 21 22 21h256c12 0 21 -9 21 -21v-21z" />
+    <glyph glyph-name="format_quote" unicode="format_quote" 
+d="M299 149l42 86h-64v128h128v-128l-42 -86h-64zM128 149l43 86h-64v128h128v-128l-43 -86h-64z" />
+    <glyph glyph-name="format_shapes" unicode="format_shapes" 
+d="M228 240h56l-28 82zM293 213h-75l-15 -42h-35l73 192h30l72 -192h-34zM405 405h43v43h-43v-43zM448 64v43h-43v-43h43zM363 107v42h42v214h-42v42h-214v-42h-42v-214h42v-42h214zM107 64v43h-43v-43h43zM64 448v-43h43v43h-43zM491 363h-43v-214h43v-128h-128v43h-214
+v-43h-128v128h43v214h-43v128h128v-43h214v43h128v-128z" />
+    <glyph glyph-name="format_size" unicode="format_size" 
+d="M64 256v64h192v-64h-64v-149h-64v149h-64zM192 427h277v-64h-106v-256h-64v256h-107v64z" />
+    <glyph glyph-name="format_strikethrough" unicode="format_strikethrough" 
+d="M64 213v43h384v-43h-384zM107 427h298v-64h-106v-64h-86v64h-106v64zM213 107v64h86v-64h-86z" />
+    <glyph glyph-name="format_textdirection_l_to_r" unicode="format_textdirection_l_to_r" 
+d="M448 128l-85 -85v64h-256v42h256v64zM192 299c-47 0 -85 38 -85 85s38 85 85 85h171v-42h-43v-235h-43v235h-42v-235h-43v107z" />
+    <glyph glyph-name="format_textdirection_r_to_l" unicode="format_textdirection_r_to_l" 
+d="M171 149h256v-42h-256v-64l-86 85l86 85v-64zM213 299c-47 0 -85 38 -85 85s38 85 85 85h171v-42h-43v-235h-42v235h-43v-235h-43v107z" />
+    <glyph glyph-name="format_underlined" unicode="format_underlined" 
+d="M107 107h298v-43h-298v43zM256 149c-71 0 -128 57 -128 128v171h53v-171c0 -41 34 -74 75 -74s75 33 75 74v171h53v-171c0 -71 -57 -128 -128 -128z" />
+    <glyph glyph-name="forum" unicode="forum" 
+d="M363 256c0 -12 -10 -21 -22 -21h-213l-85 -86v299c0 12 9 21 21 21h277c12 0 22 -9 22 -21v-192zM448 384c12 0 21 -9 21 -21v-320l-85 85h-235c-12 0 -21 9 -21 21v43h277v192h43z" />
+    <glyph glyph-name="forward" unicode="forward" 
+d="M256 341v86l171 -171l-171 -171v86h-171v170h171z" />
+    <glyph glyph-name="forward_10" unicode="forward_&#x31;&#x30;" 
+d="M282 188c0 -3.2653 6.32517 -7 10 -7c2 0 5 0 7 2l4 5s2 4 2 6v43c0 0 -2 4 -2 6c0 2.75261 -8.21183 7 -11 7c-2 0 -4 -1 -6 -3l-4 -4s-3 -4 -3 -6v-43s3 -4 3 -6zM322 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2s-9 0 -13 2s-6 4 -10 6
+c-6.74403 3.37202 -9 19.7461 -9 30v15c0 6 0 13 2 17l7 13s6 6 10 6s9 2 13 2s9 0 13 -2s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM233 171h-20v70l-21 -6v15l38 12h3v-91zM85 235c0 94 77 170 171 170v86l107 -107l-107 -107v86c-70 0 -128 -58 -128 -128
+s58 -128 128 -128s128 58 128 128h43c0 -94 -77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="forward_30" unicode="forward_&#x33;&#x30;" 
+d="M85 235c0 94 77 170 171 170v86l107 -107l-107 -107v86c-70 0 -128 -58 -128 -128s58 -128 128 -128s128 58 128 128h43c0 -94 -77 -171 -171 -171s-171 77 -171 171zM284 188c0 -3.2653 6.32517 -7 10 -7c2 0 5 0 7 2l4 5s2 4 2 6v43c0 0 -2 4 -2 6
+c0 2.75261 -8.21183 7 -11 7c-2 0 -4 -1 -6 -3l-4 -4s-2 -4 -2 -6v-43s2 -4 2 -6zM326 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2c-10.126 0 -16.1493 4.57466 -23 8c-4 2 -4 7 -6 13s-3 11 -3 17v15c0 6 1 13 3 17l6 13s7 6 11 6s8 2 12 2s9 0 13 -2
+s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM213 224c8.11936 0 15 4.95913 15 13v4s-2 2 -2 4s-2 2 -4 2h-11s-2 -2 -4 -2s-2 -2 -2 -4v-4h-22c0 9.89385 8.81974 23 18 23c2 0 8 2 10 2c8.67272 0 17.6319 -2.81597 24 -6c5.06488 -2.53244 8 -12.109 8 -19v-7s-2 -4 -2 -6
+s-2 -4 -4 -4s-5 -3 -7 -5c4 -2 9 -4 11 -8s4 -9 4 -13s0 -9 -2 -11s-4 -6 -6 -8s-7 -4 -11 -4s-9 -2 -13 -2s-8 0 -10 2s-7 2 -11 4c-5.58093 2.79046 -9 13.5084 -9 21h18v-4s2 -2 2 -4s2 -2 4 -2h11s2 2 4 2s2 2 2 4v11s-2 2 -2 4s-2 2 -4 2h-13v15h8z" />
+    <glyph glyph-name="forward_5" unicode="forward_&#x35;" 
+d="M250 222c-1.79204 -0.716817 -7 -2.40231 -7 -4c0 -2 -2 -3 -2 -3h-13l5 47h51v-15h-37l-2 -19s2 0 2 2s3 1 3 3s2 0 4 0h4c4 0 9 -1 11 -3s6 -4 8 -6c4.43641 -4.43641 9 -13.6284 9 -23c0 -4 0 -9 -2 -11s-3 -7 -7 -11c-5.62284 -5.62284 -13.295 -8 -23 -8
+c-4 0 -9 0 -11 2s-6 2 -10 4c-5.5956 2.7978 -9 11.277 -9 19h17c0 -7.40446 5.29508 -10 13 -10c2 0 4 0 6 2l5 4s2 4 2 6v13l-2 4l-5 5s-4 2 -6 2h-4zM85 235c0 94 77 170 171 170v86l107 -107l-107 -107v86c-70 0 -128 -58 -128 -128s58 -128 128 -128s128 58 128 128h43
+c0 -94 -77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="free_breakfast" unicode="free_breakfast" 
+d="M85 107h342v-43h-342v43zM427 341v64h-43v-64h43zM427 448c24 0 42 -19 42 -43v-64c0 -23 -18 -42 -42 -42h-43v-64c0 -47 -38 -86 -85 -86h-128c-47 0 -86 39 -86 86v213h342z" />
+    <glyph glyph-name="fullscreen" unicode="fullscreen" 
+d="M299 405h106v-106h-42v64h-64v42zM363 149v64h42v-106h-106v42h64zM107 299v106h106v-42h-64v-64h-42zM149 213v-64h64v-42h-106v106h42z" />
+    <glyph glyph-name="fullscreen_exit" unicode="fullscreen_exit" 
+d="M341 341h64v-42h-106v106h42v-64zM299 107v106h106v-42h-64v-64h-42zM171 341v64h42v-106h-106v42h64zM107 171v42h106v-106h-42v64h-64z" />
+    <glyph glyph-name="functions" unicode="functions" 
+d="M384 427v-64h-149l106 -107l-106 -107h149v-64h-256v43l139 128l-139 128v43h256z" />
+    <glyph glyph-name="g_translate" unicode="g_translate" 
+d="M448 85v278c0 12 -9 21 -21 21h-188l25 -86h41v22h23v-22h77v-22h-27c-7 -27 -22 -53 -41 -75l58 -57l-15 -16l-58 57l-19 -19l17 -59l-43 -43h150c12 0 21 9 21 21zM298 253c5 -10 13 -23 24 -36c26 31 33 59 33 59h-85l7 -23h21zM282 237l13 -47l12 11
+c-10 11 -18 23 -25 36zM237 286c0 4.92043 -0.140331 11.2807 -2 15h-84v-33h47c-3 -13 -16 -32 -45 -32c-28 0 -51 24 -51 52s23 52 51 52c16 0 26 -7 32 -13l2 -1l26 25l-2 1c-16 15 -36 23 -58 23c-48 0 -87 -39 -87 -87s39 -87 87 -87c49 0 84 35 84 85zM427 405
+c23 0 42 -19 42 -42v-278c0 -23 -19 -42 -42 -42h-171l-21 64h-150c-23 0 -42 19 -42 42v278c0 23 19 42 42 42h128l19 -64h195z" />
+    <glyph glyph-name="gamepad" unicode="gamepad" 
+d="M352 320h117v-128h-117l-64 64zM192 160l64 64l64 -64v-117h-128v117zM160 320l64 -64l-64 -64h-117v128h117zM320 352l-64 -64l-64 64v117h128v-117z" />
+    <glyph glyph-name="games" unicode="games" 
+d="M352 320h117v-128h-117l-64 64zM192 160l64 64l64 -64v-117h-128v117zM160 320l64 -64l-64 -64h-117v128h117zM320 352l-64 -64l-64 64v117h128v-117z" />
+    <glyph glyph-name="gavel" unicode="gavel" 
+d="M82 310l120 -121l-60 -60l-121 120zM263 491l120 -121l-60 -60l-121 120zM112 340l60 60l302 -302l-60 -60zM21 64h256v-43h-256v43z" />
+    <glyph glyph-name="gesture" unicode="gesture" 
+d="M296 116c15 0 40 18 46 75c-46 -12 -62 -46 -62 -59c0 -10 9 -16 16 -16zM98 365l-37 36c5 6 10 12 18 20c5 5 30 27 58 27c19 0 54 -15 54 -61c0 -29 -11 -46 -28 -70c-10 -14 -32 -52 -39 -75c-8 -23 -3 -41 7 -41c9 0 19 12 24 18c5 5 37 42 49 58c16 20 57 60 105 60
+c63 0 83 -54 86 -89h53v-53h-52c-9 -102 -66 -131 -101 -131c-38 0 -68 30 -68 66s34 101 115 115c-2 17 -3 38 -38 38c-27 0 -61 -41 -87 -73c-24 -29 -42 -52 -65 -59c-49.7758 -15.7187 -85 28.2434 -85 73c0 52 56 126 61 135c6 10 17 28 6 32c-7 3 -21 -11 -36 -26z
+" />
+    <glyph glyph-name="get_app" unicode="get_app" 
+d="M107 128h298v-43h-298v43zM405 320l-149 -149l-149 149h85v128h128v-128h85z" />
+    <glyph glyph-name="gif" unicode="gif" 
+d="M405 288h-64v-21h43v-32h-43v-43h-32v128h96v-32zM192 320c13 0 21 -10 21 -21v-11h-74v-64h42v32h32v-43c0 -11 -8 -21 -21 -21h-64c-13 0 -21 10 -21 21v86c0 11 8 21 21 21h64zM245 320h32v-128h-32v128z" />
+    <glyph glyph-name="goat" unicode="goat" 
+d="M511 318c1 -1 1 -4 0 -5l-25 -32c-1 -1 -3 -2 -4 -2l-15 3l-7 -22c-3 -5 -10 -5 -13 0l-14 30l-23 5l-47 -112l17 -136c0 -3 -2 -4 -4 -4h-20c-2 0 -3 1 -4 3l-20 81l-10 17l-25 -98c0 -2 -2 -3 -4 -3h-21c-2 0 -4 2 -4 4l23 135h-135l-35 -66l8 -68c1 -3 -1 -5 -4 -5
+h-20c-1 0 -3 0 -4 2l-28 102l-34 -39l6 -60c1 -3 -1 -5 -4 -5h-22c-2 0 -4 1 -4 2l-13 56l21 82v144s-23 9 -23 30h274c0 0 48 -1 95 33c0 0 -8 22 6 36c0 0 28 -20 36 -25c10 -6 17 5 14 14c-2 6 -9 28 -45 42c-4.57884 1.52628 -15.2106 2.3682 -13 9c0 2 2 3 4 3
+c44 -6 70 -42 77 -58c1 -2 20 -15 18 -38c0 -3 0 -5 2 -7z" />
+    <glyph glyph-name="golf_course" unicode="golf_course" 
+d="M363 386l-128 -66v-193c61 -3 106 -21 106 -42c0 -23 -57 -42 -128 -42s-128 19 -128 42c0 16 26 30 64 37v-37h43v384zM384 96c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32z" />
+    <glyph glyph-name="gps_fixed" unicode="gps_fixed" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170zM256 341
+c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85z" />
+    <glyph glyph-name="gps_not_fixed" unicode="gps_not_fixed" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="gps_off" unicode="gps_off" 
+d="M347 138l-209 209c-19 -25 -31 -57 -31 -91c0 -83 66 -149 149 -149c34 0 66 12 91 31zM64 421l27 27l357 -357l-27 -27l-44 44c-28 -23 -62 -39 -100 -43v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c4 38 20 72 43 100zM447 277h44v-42h-44c-3 -24 -10 -48 -21 -68
+l-32 32c7 17 11 37 11 57c0 83 -66 149 -149 149c-20 0 -40 -4 -57 -11l-32 32c21 11 44 18 68 21v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="grade" unicode="grade" 
+d="M256 144l-132 -80l35 150l-116 101l153 13l60 141l60 -141l153 -13l-116 -101l35 -150z" />
+    <glyph glyph-name="gradient" unicode="gradient" 
+d="M405 277v128h-298v-128h42v-42h43v-43h43v43h42v-43h43v43h43v42h42zM363 128v43h-43v-43h43zM277 128v43h-42v-43h42zM192 128v43h-43v-43h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM149 320h43
+v-43h-43v43zM320 320h43v-43h-43v43zM235 320h42v-43h43v-42h-43v42h-42v-42h-43v42h43v43zM363 235v-43h42v43h-42zM149 235h-42v-43h42v43z" />
+    <glyph glyph-name="grain" unicode="grain" 
+d="M213 427c23 0 43 -20 43 -43s-20 -43 -43 -43s-42 20 -42 43s19 43 42 43zM299 341c23 0 42 -19 42 -42s-19 -43 -42 -43s-43 20 -43 43s20 42 43 42zM384 256c23 0 43 -20 43 -43s-20 -42 -43 -42s-43 19 -43 42s20 43 43 43zM299 171c23 0 42 -20 42 -43
+s-19 -43 -42 -43s-43 20 -43 43s20 43 43 43zM384 341c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43zM128 171c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM128 341c23 0 43 -19 43 -42s-20 -43 -43 -43s-43 20 -43 43s20 42 43 42z
+M213 256c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43z" />
+    <glyph glyph-name="graphic_eq" unicode="graphic_eq" 
+d="M405 299h43v-86h-43v86zM320 128v256h43v-256h-43zM64 213v86h43v-86h-43zM235 43v426h42v-426h-42zM149 128v256h43v-256h-43z" />
+    <glyph glyph-name="grid_off" unicode="grid_off" 
+d="M341 85h31l-31 31v-31zM299 85v74l-12 12h-74v-86h86zM171 213v74l-12 12h-74v-86h86zM171 85v86h-86v-86h86zM85 372v-31h31zM213 244v-31h31zM27 485l458 -458l-27 -27l-43 43h-330c-23 0 -42 19 -42 42v330l-43 43zM341 427v-86h86v86h-86zM171 427h-31l-43 42h330
+c23 0 42 -19 42 -42v-330l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31z" />
+    <glyph glyph-name="grid_on" unicode="grid_on" 
+d="M427 341v86h-86v-86h86zM427 213v86h-86v-86h86zM427 85v86h-86v-86h86zM299 341v86h-86v-86h86zM299 213v86h-86v-86h86zM299 85v86h-86v-86h86zM171 341v86h-86v-86h86zM171 213v86h-86v-86h86zM171 85v86h-86v-86h86zM427 469c23 0 42 -19 42 -42v-342
+c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="group" unicode="group" 
+d="M341 235c50 0 150 -25 150 -75v-53h-128v53c0 32 -17 56 -42 74c7 1 14 1 20 1zM171 235c50 0 149 -25 149 -75v-53h-299v53c0 50 100 75 150 75zM171 277c-35 0 -64 29 -64 64s29 64 64 64s63 -29 63 -64s-28 -64 -63 -64zM341 277c-35 0 -64 29 -64 64s29 64 64 64
+s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="group_add" unicode="group_add" 
+d="M277 235c43 0 128 -21 128 -64v-43h-256v43c0 43 85 64 128 64zM419 231c43 -7 93 -27 93 -60v-43h-64v43c0 25 -11 44 -29 60zM277 277c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM384 277c-7 0 -13 1 -19 3c12 17 19 38 19 61s-7 44 -19 61
+c6 2 12 3 19 3c35 0 64 -29 64 -64s-29 -64 -64 -64zM171 299v-43h-64v-64h-43v64h-64v43h64v64h43v-64h64z" />
+    <glyph glyph-name="group_work" unicode="group_work" 
+d="M341 139c29 0 54 24 54 53s-25 53 -54 53s-53 -24 -53 -53s24 -53 53 -53zM203 341c0 -29 24 -53 53 -53s53 24 53 53s-24 54 -53 54s-53 -25 -53 -54zM171 139c29 0 53 24 53 53s-24 53 -53 53s-54 -24 -54 -53s25 -53 54 -53zM256 469c118 0 213 -95 213 -213
+s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="hd" unicode="hd" 
+d="M309 224v64h43v-64h-43zM277 320v-128h86c12 0 21 9 21 21v86c0 12 -9 21 -21 21h-86zM235 192v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="hdr_off" unicode="hdr_off" 
+d="M53 459c135.424 -135.909 271.816 -270.85 408 -406l-24 -23l-162 162h-72v73l-32 32v-105h-32v53h-43v-53h-32v128h32v-43h43v43h8l-117 117zM277 288h-8l-32 32h40c17 0 32 -15 32 -32v-41l-32 32v9zM373 288v-21h43v21h-43zM373 192h-8l-24 23v105h75
+c17 0 32 -15 32 -32v-21c0 -13 -8 -26 -19 -30l19 -45h-32l-19 43h-24v-43z" />
+    <glyph glyph-name="hdr_on" unicode="hdr_on" 
+d="M277 224v64h-42v-64h42zM277 320c17 0 32 -15 32 -32v-64c0 -17 -15 -32 -32 -32h-74v128h74zM139 277v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43zM416 267v21h-43v-21h43zM448 267c0 -13 -8 -24 -19 -30l19 -45h-32l-19 43h-24v-43h-32v128h75c17 0 32 -15 32 -32
+v-21z" />
+    <glyph glyph-name="hdr_strong" unicode="hdr_strong" 
+d="M107 213c23 0 42 20 42 43s-19 43 -42 43s-43 -20 -43 -43s20 -43 43 -43zM107 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-86 38 -86 85s39 85 86 85zM363 384c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128z" />
+    <glyph glyph-name="hdr_weak" unicode="hdr_weak" 
+d="M363 171c47 0 85 38 85 85s-38 85 -85 85s-86 -38 -86 -85s39 -85 86 -85zM363 384c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM107 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-86 38 -86 85s39 85 86 85z" />
+    <glyph glyph-name="headset" unicode="headset" 
+d="M256 491c106 0 192 -86 192 -192v-150c0 -35 -29 -64 -64 -64h-64v171h85v43c0 83 -66 149 -149 149s-149 -66 -149 -149v-43h85v-171h-64c-35 0 -64 29 -64 64v150c0 106 86 192 192 192z" />
+    <glyph glyph-name="headset_mic" unicode="headset_mic" 
+d="M256 491c106 0 192 -86 192 -192v-214c0 -35 -29 -64 -64 -64h-128v43h149v21h-85v171h85v43c0 83 -66 149 -149 149s-149 -66 -149 -149v-43h85v-171h-64c-35 0 -64 29 -64 64v150c0 106 86 192 192 192z" />
+    <glyph glyph-name="healing" unicode="healing" 
+d="M355 78l78 78l-78 77l-77 -78zM299 277c-12 0 -22 -9 -22 -21s10 -21 22 -21s21 9 21 21s-9 21 -21 21zM256 192c12 0 21 9 21 21s-9 22 -21 22s-21 -10 -21 -22s9 -21 21 -21zM213 235c12 0 22 9 22 21s-10 21 -22 21s-21 -9 -21 -21s9 -21 21 -21zM156 278l77 78
+l-77 77l-78 -78zM256 320c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM378 256l85 -85c8 -8 8 -22 0 -30l-92 -93c-4 -4 -9 -6 -15 -6s-12 2 -16 6l-84 85l-85 -85c-8 -8 -22 -8 -30 0l-93 93c-8 8 -8 22 0 30l85 85l-85 84c-8 8 -8 23 0 31l93 92
+c4 4 10 6 15 6c6 0 11 -2 15 -6l85 -85l84 85c8 8 23 8 31 0l92 -92c8 -8 8 -23 0 -31z" />
+    <glyph glyph-name="hearing" unicode="hearing" 
+d="M245 320c0 29 25 53 54 53s53 -24 53 -53s-24 -53 -53 -53s-54 24 -54 53zM163 456c-35 -35 -56 -83 -56 -136s21 -101 56 -136l-30 -30c-42 42 -69 101 -69 166s27 124 69 166zM363 85c23 0 42 20 42 43h43c0 -47 -38 -85 -85 -85c-12 0 -24 2 -35 7
+c-29 15 -46 37 -59 76c-7 21 -19 31 -36 44c-19 14 -42 32 -61 67c-15 27 -23 56 -23 83c0 84 66 149 150 149s149 -65 149 -149h-43c0 60 -46 107 -106 107s-107 -47 -107 -107c0 -20 6 -43 17 -63c15 -28 33 -41 50 -54c20 -15 40 -31 51 -64c11 -32 21 -42 36 -50
+c4 -2 11 -4 17 -4z" />
+    <glyph glyph-name="help" unicode="help" 
+d="M321 272c12 12 20 29 20 48c0 47 -38 85 -85 85s-85 -38 -85 -85h42c0 23 20 43 43 43s43 -20 43 -43c0 -12 -5 -22 -13 -30l-26 -27c-15 -16 -25 -37 -25 -60v-11h42c0 32 10 44 25 60zM277 107v42h-42v-42h42zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213
+s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="help_outline" unicode="help_outline" 
+d="M256 384c47 0 85 -38 85 -85c0 -53 -64 -59 -64 -107h-42c0 69 64 64 64 107c0 23 -20 42 -43 42s-43 -19 -43 -42h-42c0 47 38 85 85 85zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213
+s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM235 128v43h42v-43h-42z" />
+    <glyph glyph-name="high_quality" unicode="high_quality" 
+d="M309 224v64h43v-64h-43zM384 213v86c0 12 -9 21 -21 21h-64c-12 0 -22 -9 -22 -21v-86c0 -12 10 -21 22 -21h16v-32h32v32h16c12 0 21 9 21 21zM235 192v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM405 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298
+c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="highlight" unicode="highlight" 
+d="M362 372l45 45l30 -30l-45 -46zM75 387l30 30l45 -45l-30 -31zM235 469h42v-64h-42v64zM128 213v107h256v-107l-64 -64v-106h-128v106z" />
+    <glyph glyph-name="highlight_off" unicode="highlight_off" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM311 341l30 -30l-55 -55l55 -55l-30 -30l-55 55l-55 -55l-30 30l55 55l-55 55l30 30l55 -55z
+" />
+    <glyph glyph-name="history" unicode="history" 
+d="M256 341h32v-90l75 -45l-16 -26l-91 55v106zM277 448c106 0 192 -86 192 -192s-86 -192 -192 -192c-53 0 -100 21 -135 56l30 31c27 -27 64 -44 105 -44c83 0 150 66 150 149s-67 149 -150 149s-149 -66 -149 -149h64l-86 -86l-2 3l-83 83h64c0 106 86 192 192 192z" />
+    <glyph glyph-name="home" unicode="home" 
+d="M213 85h-106v171h-64l213 192l213 -192h-64v-171h-106v128h-86v-128z" />
+    <glyph glyph-name="hot_tub" unicode="hot_tub" 
+d="M313 387c22 -21 31 -50 27 -79l-1 -9h-41l3 12c3.05626 17.3188 -3.40602 35.406 -16 48c-22 22 -32 51 -28 80l1 9h41l-2 -13c-3 -17 2 -34 14 -47zM398 387c22 -21 32 -50 28 -79l-2 -9h-40l2 12c3 17 -2 34 -14 47l-2 1c-22 22 -32 51 -28 80l2 9h40l-2 -13
+c-3 -17 2 -34 14 -47zM405 85v128h-42v-128h42zM320 85v128h-43v-128h43zM235 85v128h-43v-128h43zM149 85v128h-42v-128h42zM238 256h231v-171c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v171h64v16c0 26 22 48 48 48c15.3845 0 28.1542 -8.15417 36 -16l29 -33
+c5 -6 11 -10 18 -15zM107 384c0 24 18 43 42 43s43 -19 43 -43s-19 -43 -43 -43s-42 19 -42 43z" />
+    <glyph glyph-name="hotel" unicode="hotel" 
+d="M405 363c47 0 86 -39 86 -86v-192h-43v64h-384v-64h-43v320h43v-192h171v150h170zM149 235c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="hourglass_empty" unicode="hourglass_empty" 
+d="M256 267l85 85v75h-170v-75zM341 160l-85 85l-85 -85v-75h170v75zM128 469h256v-128l-85 -85l85 -85v-128h-256v128l85 85l-85 85v128z" />
+    <glyph glyph-name="hourglass_full" unicode="hourglass_full" 
+d="M128 469h256v-128l-85 -85l85 -85v-128h-256v128l85 85l-85 85v128z" />
+    <glyph glyph-name="http" unicode="http" 
+d="M459 267v21h-43v-21h43zM459 320c17 0 32 -15 32 -32v-21c0 -17 -15 -32 -32 -32h-43v-43h-32v128h75zM267 288v32h96v-32h-32v-96h-32v96h-32zM149 288v32h96v-32h-32v-96h-32v96h-32zM96 277v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43z" />
+    <glyph glyph-name="https" unicode="https" 
+d="M322 341v43c0 36 -30 66 -66 66s-66 -30 -66 -66v-43h132zM256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107
+s107 -48 107 -107v-43h21z" />
+    <glyph glyph-name="image" unicode="image" 
+d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298z" />
+    <glyph glyph-name="image_aspect_ratio" unicode="image_aspect_ratio" 
+d="M427 128v256h-342v-256h342zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342zM256 299v-43h-43v43h43zM171 299v-43h-43v43h43zM341 213v-42h-42v42h42zM341 299v-43h-42v43h42z" />
+    <glyph glyph-name="import_contacts" unicode="import_contacts" 
+d="M448 117v246c-23 7 -49 10 -75 10c-36 0 -88 -14 -117 -32v-245c29 18 81 32 117 32c26 0 52 -4 75 -11zM373 416c44.2046 0 90.7488 -11.0375 118 -32v-311c0 -5 -6 -11 -11 -11c-2 0 -3 0 -5 1c-30 16 -67 22 -102 22c-36 0 -88 -14 -117 -32c-31 23 -75 32 -117 32
+c-31 0 -73 -9 -102 -23c-2 0 -3 -1 -5 -1c-5 0 -11 5 -11 10v313c31 23 76 32 118 32s86 -9 117 -32c31 23 75 32 117 32z" />
+    <glyph glyph-name="import_export" unicode="import_export" 
+d="M341 149h64l-85 -85l-85 85h64v150h42v-150zM192 448l85 -85h-64v-150h-42v150h-64z" />
+    <glyph glyph-name="important_devices" unicode="important_devices" 
+d="M255 320h65l-53 -38l20 -62l-52 39l-53 -39l20 62l-53 38h65l21 64zM427 469c23 0 42 -18 42 -42v-107h-42v107h-384v-256h277v-43h-43v-43h43v-42h-171v42h43v43h-149c-24 0 -43 20 -43 43v256c0 24 19 42 43 42h384zM491 85v150h-107v-150h107zM491 277
+c12 0 21 -9 21 -21v-192c0 -12 -9 -21 -21 -21h-107c-12 0 -21 9 -21 21v192c0 12 9 21 21 21h107z" />
+    <glyph glyph-name="inbox" unicode="inbox" 
+d="M405 192v213h-299v-213h86c0 -35 29 -64 64 -64s64 29 64 64h85zM405 448c23 0 43 -19 43 -43v-298c0 -23 -20 -43 -43 -43h-299c-24 0 -42 20 -42 43v298c0 24 18 43 42 43h299z" />
+    <glyph glyph-name="indeterminate_check_box" unicode="indeterminate_check_box" 
+d="M363 235v42h-214v-42h214zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="info" unicode="info" 
+d="M277 320v43h-42v-43h42zM277 149v128h-42v-128h42zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="info_outline" unicode="info_outline" 
+d="M235 320v43h42v-43h-42zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM235 149v128h42v-128h-42z" />
+    <glyph glyph-name="input" unicode="input" 
+d="M235 171v64h-214v42h214v64l85 -85zM448 448c23 0 43 -19 43 -43v-299c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v86h43v-86h384v300h-384v-86h-43v85c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="insert_chart" unicode="insert_chart" 
+d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="insert_comment" unicode="insert_comment" 
+d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM427 469c23 0 42 -19 42 -42v-384l-85 85h-299c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="insert_drive_file" unicode="insert_drive_file" 
+d="M277 320h118l-118 117v-117zM128 469h171l128 -128v-256c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42z" />
+    <glyph glyph-name="insert_emoticon" unicode="insert_emoticon" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="insert_invitation" unicode="insert_invitation" 
+d="M405 107v234h-298v-234h298zM341 491h43v-43h21c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43zM363 256v-107h-107v107h107z" />
+    <glyph glyph-name="insert_link" unicode="insert_link" 
+d="M363 363c59 0 106 -48 106 -107s-47 -107 -106 -107h-86v41h86c36 0 66 30 66 66s-30 66 -66 66h-86v41h86zM171 235v42h170v-42h-170zM83 256c0 -36 30 -66 66 -66h86v-41h-86c-59 0 -106 48 -106 107s47 107 106 107h86v-41h-86c-36 0 -66 -30 -66 -66z" />
+    <glyph glyph-name="insert_photo" unicode="insert_photo" 
+d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298z" />
+    <glyph glyph-name="invert_colors" unicode="invert_colors" 
+d="M256 94v309l-90 -90c-24 -24 -38 -57 -38 -91c0 -68.7916 59.1998 -128 128 -128zM377 343c67 -67 67 -174 0 -241c-33 -33 -77 -50 -121 -50s-88 17 -121 50c-67 67 -67 174 0 241l121 121z" />
+    <glyph glyph-name="invert_colors_off" unicode="invert_colors_off" 
+d="M256 403l-49 -48l-30 30l79 79l121 -121c52 -52 63 -129 34 -192l-155 154v98zM256 94v103l-102 102c-17 -22 -26 -49 -26 -77c0 -68.7916 59.1998 -128 128 -128zM441 67l7 -8l-27 -27l-58 58c-31 -25 -69 -38 -107 -38c-44 0 -88 17 -121 50c-62 63 -66 161 -12 228
+l-59 59l27 27c116.495 -116.495 232.353 -233.66 350 -349z" />
+    <glyph glyph-name="iso" unicode="iso" 
+d="M363 149h-107v32h107v-32zM405 107v298l-298 -298h298zM117 352v-32h43v-43h32v43h43v32h-43v43h-32v-43h-43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="keyboard" unicode="keyboard" 
+d="M405 299v42h-42v-42h42zM405 235v42h-42v-42h42zM341 299v42h-42v-42h42zM341 235v42h-42v-42h42zM341 149v43h-170v-43h170zM149 299v42h-42v-42h42zM149 235v42h-42v-42h42zM171 277v-42h42v42h-42zM171 341v-42h42v42h-42zM235 277v-42h42v42h-42zM235 341v-42h42v42
+h-42zM427 405c23 0 42 -19 42 -42v-214c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v214c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="keyboard_arrow_down" unicode="keyboard_arrow_down" 
+d="M158 345l98 -98l98 98l30 -30l-128 -128l-128 128z" />
+    <glyph glyph-name="keyboard_arrow_left" unicode="keyboard_arrow_left" 
+d="M329 169l-30 -30l-128 128l128 128l30 -30l-98 -98z" />
+    <glyph glyph-name="keyboard_arrow_right" unicode="keyboard_arrow_right" 
+d="M183 163l98 98l-98 98l30 30l128 -128l-128 -128z" />
+    <glyph glyph-name="keyboard_arrow_up" unicode="keyboard_arrow_up" 
+d="M158 183l-30 30l128 128l128 -128l-30 -30l-98 98z" />
+    <glyph glyph-name="keyboard_backspace" unicode="keyboard_backspace" 
+d="M448 277v-42h-302l76 -77l-30 -30l-128 128l128 128l30 -30l-76 -77h302z" />
+    <glyph glyph-name="keyboard_capslock" unicode="keyboard_capslock" 
+d="M128 128v43h256v-43h-256zM256 333l-98 -98l-30 30l128 128l128 -128l-30 -30z" />
+    <glyph glyph-name="keyboard_hide" unicode="keyboard_hide" 
+d="M256 21l-85 86h170zM405 341v43h-42v-43h42zM405 277v43h-42v-43h42zM341 341v43h-42v-43h42zM341 277v43h-42v-43h42zM341 192v43h-170v-43h170zM149 341v43h-42v-43h42zM149 277v43h-42v-43h42zM171 320v-43h42v43h-42zM171 384v-43h42v43h-42zM235 320v-43h42v43h-42z
+M235 384v-43h42v43h-42zM427 448c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="keyboard_return" unicode="keyboard_return" 
+d="M405 363h43v-128h-324l77 -77l-30 -30l-128 128l128 128l30 -30l-77 -77h281v86z" />
+    <glyph glyph-name="keyboard_tab" unicode="keyboard_tab" 
+d="M427 384h42v-256h-42v256zM247 354l30 30l128 -128l-128 -128l-30 30l77 77h-303v42h303z" />
+    <glyph glyph-name="keyboard_voice" unicode="keyboard_voice" 
+d="M369 256h36c0 -73 -58 -133 -128 -143v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -109 113 -109s113 45 113 109zM256 192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z" />
+    <glyph glyph-name="kitchen" unicode="kitchen" 
+d="M171 256h42v-107h-42v107zM171 405h42v-64h-42v64zM384 320v107h-256v-107h256zM384 85v193h-256v-193h256zM384 469c23 0 43 -18 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 24 20 42 43 42h256z" />
+    <glyph glyph-name="label" unicode="label" 
+d="M376 387l93 -131l-93 -131c-8 -11 -21 -18 -35 -18h-234c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h234c14 0 27 -7 35 -18z" />
+    <glyph glyph-name="label_outline" unicode="label_outline" 
+d="M341 149l76 107l-76 107h-234v-214h234zM376 387l93 -131l-93 -131c-8 -11 -21 -18 -35 -18h-234c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h234c14 0 27 -7 35 -18z" />
+    <glyph glyph-name="landscape" unicode="landscape" 
+d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" />
+    <glyph glyph-name="language" unicode="language" 
+d="M349 213h72c3 14 6 28 6 43s-3 29 -6 43h-72c2 -14 3 -28 3 -43s-1 -29 -3 -43zM311 95c39 13 73 41 93 76h-63c-7 -27 -17 -52 -30 -76zM306 213c2 14 3 28 3 43s-1 29 -3 43h-100c-2 -14 -3 -28 -3 -43s1 -29 3 -43h100zM256 86c18 26 32 54 41 85h-82
+c9 -31 23 -59 41 -85zM171 341c7 27 17 52 30 76c-39 -13 -73 -41 -93 -76h63zM108 171c20 -35 54 -63 93 -76c-13 24 -23 49 -30 76h-63zM91 213h72c-2 14 -3 28 -3 43s1 29 3 43h-72c-3 -14 -6 -28 -6 -43s3 -29 6 -43zM256 426c-18 -26 -32 -54 -41 -85h82
+c-9 31 -23 59 -41 85zM404 341c-20 35 -54 63 -93 76c13 -24 23 -49 30 -76h63zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="laptop" unicode="laptop" 
+d="M85 384v-213h342v213h-342zM427 128h85v-43h-512v43h85c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="laptop_chromebook" unicode="laptop_chromebook" 
+d="M427 192v213h-342v-213h342zM299 128v21h-86v-21h86zM469 128h43v-43h-512v43h43v320h426v-320z" />
+    <glyph glyph-name="laptop_mac" unicode="laptop_mac" 
+d="M256 107c12 0 21 9 21 21s-9 21 -21 21s-21 -9 -21 -21s9 -21 21 -21zM85 405v-234h342v234h-342zM427 128h85c0 -23 -20 -43 -43 -43h-426c-23 0 -43 20 -43 43h85c-23 0 -42 20 -42 43v234c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-234c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="laptop_windows" unicode="laptop_windows" 
+d="M85 405v-213h342v213h-342zM427 128h85v-43h-512v43h85v21c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43v-21z" />
+    <glyph glyph-name="last_page" unicode="last_page" 
+d="M341 384h43v-256h-43v256zM119 354l30 30l128 -128l-128 -128l-30 30l98 98z" />
+    <glyph glyph-name="launch" unicode="launch" 
+d="M299 448h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43zM405 107v149h43v-149c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h149v-43h-149v-298h298z" />
+    <glyph glyph-name="layers" unicode="layers" 
+d="M256 171c-64.012 49.6547 -127.813 99.5201 -192 149l192 149l192 -149c-64.1875 -49.4791 -127.987 -99.3464 -192 -149zM256 116l157 123l35 -27l-192 -149l-192 149l35 27z" />
+    <glyph glyph-name="layers_clear" unicode="layers_clear" 
+d="M70 491l399 -400l-27 -27l-80 81l-106 -82l-192 149l35 27l157 -123l75 59l-30 30l-45 -34c-64.012 49.6547 -127.813 99.5201 -192 149l69 54l-90 90zM448 320c-28.8803 -22.1197 -57.4315 -44.5685 -86 -67l-168 168l62 48zM423 192l-31 31l25 19l31 -30z" />
+    <glyph glyph-name="leak_add" unicode="leak_add" 
+d="M299 64c0 83 66 149 149 149v-42c-59 0 -107 -48 -107 -107h-42zM384 64c0 35 29 64 64 64v-64h-64zM213 64c0 129 106 235 235 235v-43c-106 0 -192 -86 -192 -192h-43zM213 448c0 -83 -66 -149 -149 -149v42c59 0 107 48 107 107h42zM299 448
+c0 -129 -105 -235 -235 -235v43c106 0 192 86 192 192h43zM128 448c0 -35 -29 -64 -64 -64v64h64z" />
+    <glyph glyph-name="leak_remove" unicode="leak_remove" 
+d="M328 265c35 21 76 34 120 34v-43c-32 0 -62 -8 -89 -22zM425 168l-34 34c17 7 37 11 57 11v-42c-8 0 -16 -1 -23 -3zM299 448c0 -44 -13 -85 -34 -120l-31 31c14 27 22 57 22 89h43zM64 421l27 27l357 -357l-27 -27l-61 61c-12 -17 -19 -38 -19 -61h-42c0 34 12 66 31 91
+l-31 30c-27 -33 -43 -75 -43 -121h-43c0 58 21 111 56 152l-53 53c-41 -35 -94 -56 -152 -56v43c46 0 89 16 122 43l-31 31c-25 -19 -57 -31 -91 -31v42c23 0 44 7 61 19zM213 448c0 -20 -4 -40 -11 -57l-34 34c2 7 3 15 3 23h42z" />
+    <glyph glyph-name="lens" unicode="lens" 
+d="M256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="library_add" unicode="library_add" 
+d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="library_books" unicode="library_books" 
+d="M405 363v42h-213v-42h213zM320 192v43h-128v-43h128zM405 277v43h-213v-43h213zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="library_music" unicode="library_music" 
+d="M85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42zM384 363v42h-85v-117c-9 7 -20 11 -32 11c-29 0 -54 -25 -54 -54s25 -53 54 -53s53 24 53 53v118h64zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42
+h256z" />
+    <glyph glyph-name="lightbulb_outline" unicode="lightbulb_outline" 
+d="M317 233c29 20 46 52 46 87c0 59 -48 107 -107 107s-107 -48 -107 -107c0 -35 17 -67 46 -87l18 -13v-49h86v49zM256 469c82 0 149 -67 149 -149c0 -51 -25 -95 -64 -122v-49c0 -12 -9 -21 -21 -21h-128c-12 0 -21 9 -21 21v49c-39 27 -64 71 -64 122
+c0 82 67 149 149 149zM192 64v21h128v-21c0 -12 -9 -21 -21 -21h-86c-12 0 -21 9 -21 21z" />
+    <glyph glyph-name="line_style" unicode="line_style" 
+d="M64 427h384v-86h-384v86zM277 256v43h171v-43h-171zM64 256v43h171v-43h-171zM405 85v43h43v-43h-43zM320 85v43h43v-43h-43zM235 85v43h42v-43h-42zM149 85v43h43v-43h-43zM64 85v43h43v-43h-43zM341 171v42h107v-42h-107zM203 171v42h106v-42h-106zM64 171v42h107v-42
+h-107z" />
+    <glyph glyph-name="line_weight" unicode="line_weight" 
+d="M64 427h384v-86h-384v86zM64 235v64h384v-64h-384zM64 85v22h384v-22h-384zM64 149v43h384v-43h-384z" />
+    <glyph glyph-name="linear_scale" unicode="linear_scale" 
+d="M416 309c29 0 53 -24 53 -53s-24 -53 -53 -53c-22 0 -41 13 -49 32h-62c-8 -19 -27 -32 -49 -32s-41 13 -49 32h-62c-8 -19 -27 -32 -49 -32c-29 0 -53 24 -53 53s24 53 53 53c22 0 41 -13 49 -32h62c8 19 27 32 49 32s41 -13 49 -32h62c8 19 27 32 49 32z" />
+    <glyph glyph-name="link" unicode="link" 
+d="M363 363c59 0 106 -48 106 -107s-47 -107 -106 -107h-86v41h86c36 0 66 30 66 66s-30 66 -66 66h-86v41h86zM171 235v42h170v-42h-170zM83 256c0 -36 30 -66 66 -66h86v-41h-86c-59 0 -106 48 -106 107s47 107 106 107h86v-41h-86c-36 0 -66 -30 -66 -66z" />
+    <glyph glyph-name="linked_camera" unicode="linked_camera" 
+d="M341 384c24 0 43 -19 43 -43h28c0 39 -32 71 -71 71v-28zM256 107c59 0 107 47 107 106s-48 107 -107 107s-107 -48 -107 -107s48 -106 107 -106zM363 320h106v-235c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v256c0 23 19 43 42 43h68l39 43h128v-64
+c24 0 43 -19 43 -43zM341 441v28c71 0 128 -57 128 -128h-28c0 55 -45 100 -100 100zM188 213c0 38 30 69 68 69s68 -31 68 -69s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="list" unicode="list" 
+d="M149 363h299v-43h-299v43zM149 149v43h299v-43h-299zM149 235v42h299v-42h-299zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z" />
+    <glyph glyph-name="live_help" unicode="live_help" 
+d="M321 293c12 12 20 29 20 48c0 47 -38 86 -85 86s-85 -39 -85 -86h42c0 23 20 43 43 43s43 -20 43 -43c0 -12 -5 -22 -13 -30l-26 -27c-15 -16 -25 -37 -25 -60v-11h42c0 32 10 45 25 61zM277 128v43h-42v-43h42zM405 469c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43
+h-85l-64 -64l-64 64h-85c-24 0 -43 20 -43 43v299c0 23 19 42 43 42h298z" />
+    <glyph glyph-name="live_tv" unicode="live_tv" 
+d="M192 299l149 -86l-149 -85v171zM448 85v256h-384v-256h384zM448 384c23 0 43 -19 43 -43v-256c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v256c0 24 20 43 43 43h162l-70 70l15 15l85 -85l85 85l15 -15l-70 -70h162z" />
+    <glyph glyph-name="local_activity" unicode="local_activity" 
+d="M332 154l-23 87l70 58l-90 5l-33 84l-33 -84l-91 -5l71 -58l-23 -87l76 49zM427 256c0 -23 19 -43 42 -43v-85c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v85c24 0 42 20 42 43s-19 43 -42 43v85c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-85
+c-23 0 -42 -20 -42 -43z" />
+    <glyph glyph-name="local_airport" unicode="local_airport" 
+d="M448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117c0 18 14 32 32 32s32 -14 32 -32v-117l171 -107v-42z" />
+    <glyph glyph-name="local_atm" unicode="local_atm" 
+d="M427 128v256h-342v-256h342zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342zM235 149v22h-43v42h85v22h-64c-12 0 -21 9 -21 21v64c0 12 9 21 21 21h22v22h42v-22h43v-42h-85v-22h64c12 0 21 -9 21 -21v-64
+c0 -12 -9 -21 -21 -21h-22v-22h-42z" />
+    <glyph glyph-name="local_bar" unicode="local_bar" 
+d="M159 363h194l38 42h-270zM448 405l-171 -192v-106h107v-43h-256v43h107v106l-171 192v43h384v-43z" />
+    <glyph glyph-name="local_cafe" unicode="local_cafe" 
+d="M43 64v43h384v-43h-384zM427 341v64h-43v-64h43zM427 448c24 0 42 -19 42 -43v-64c0 -24 -18 -42 -42 -42h-43v-64c0 -47 -38 -86 -85 -86h-128c-47 0 -86 39 -86 86v213h342z" />
+    <glyph glyph-name="local_car_wash" unicode="local_car_wash" 
+d="M107 235h298l-32 96h-234zM373 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 341l44 -128v-170c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v21h-256v-21
+c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v170l44 128c4 13 17 22 31 22h234c14 0 27 -9 31 -22zM149 405c-18 0 -32 14 -32 32c0 21 32 58 32 58s32 -37 32 -58c0 -18 -14 -32 -32 -32zM256 405c-18 0 -32 14 -32 32c0 21 32 58 32 58s32 -37 32 -58
+c0 -18 -14 -32 -32 -32zM363 405c-18 0 -32 14 -32 32c0 21 32 58 32 58s32 -37 32 -58c0 -18 -14 -32 -32 -32z" />
+    <glyph glyph-name="local_convenience_store" unicode="local_convenience_store" 
+d="M341 256v107h-21v-43h-21v43h-22v-64h43v-43h21zM235 299v64h-64v-22h42v-21h-42v-64h64v21h-43v22h43zM405 363h64v-278h-170v86h-86v-86h-170v278h64v64h298v-64z" />
+    <glyph glyph-name="local_dining" unicode="local_dining" 
+d="M317 266l-31 -31l147 -147l-30 -30l-147 147l-147 -147l-30 30l208 208c-15 33 -4 79 30 113c41 41 99 48 130 17s24 -90 -17 -131c-34 -34 -80 -44 -113 -29zM173 227l-90 90c-33 33 -33 87 0 120l150 -149z" />
+    <glyph glyph-name="local_drink" unicode="local_drink" 
+d="M391 341l9 86h-288l9 -86h270zM256 107c35 0 64 29 64 64c0 43 -64 115 -64 115s-64 -72 -64 -115c0 -35 29 -64 64 -64zM64 469h384l-43 -389c-3 -21 -20 -37 -42 -37h-214c-22 0 -39 16 -42 37z" />
+    <glyph glyph-name="local_florist" unicode="local_florist" 
+d="M256 395c-29 0 -53 -25 -53 -54s24 -53 53 -53s53 24 53 53s-24 54 -53 54zM119 293c0 21 13 39 31 48c-18 9 -31 27 -31 48c0 29 25 54 54 54c11 0 21 -4 30 -10v4c0 29 24 54 53 54s53 -25 53 -54v-4c9 6 19 10 30 10c29 0 54 -25 54 -54c0 -21 -13 -39 -31 -48
+c18 -9 31 -27 31 -48c0 -29 -25 -53 -54 -53c-11 0 -21 3 -30 9v-4c0 -29 -24 -53 -53 -53s-53 24 -53 53v4c-9 -6 -19 -9 -30 -9c-29 0 -54 24 -54 53zM256 43c-106 0 -192 86 -192 192c106 0 192 -86 192 -192zM256 43c0 106 86 192 192 192c0 -106 -86 -192 -192 -192z
+" />
+    <glyph glyph-name="local_gas_station" unicode="local_gas_station" 
+d="M384 299c12 0 21 9 21 21s-9 21 -21 21s-21 -9 -21 -21s9 -21 21 -21zM256 299v106h-128v-106h128zM422 358c10 -10 15 -23 15 -38v-203c0 -29 -24 -53 -53 -53s-53 24 -53 53v107h-32v-160h-214v341c0 23 20 43 43 43h128c23 0 43 -20 43 -43v-149h21
+c23 0 43 -20 43 -43v-96c0 -12 9 -21 21 -21s21 9 21 21v154c-7 -3 -13 -4 -21 -4c-29 0 -53 24 -53 53c0 23 14 42 34 50l-45 45l23 22z" />
+    <glyph glyph-name="local_grocery_store" unicode="local_grocery_store" 
+d="M363 128c23 0 42 -20 42 -43s-19 -42 -42 -42s-43 19 -43 42s20 43 43 43zM21 469h70l20 -42h316c12 0 21 -10 21 -22c0 -4 -1 -7 -3 -10l-76 -138c-7 -13 -21 -22 -37 -22h-159l-19 -35l-1 -3c0 -3 2 -5 5 -5h247v-43h-256c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53
+l-77 162h-43v42zM149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43z" />
+    <glyph glyph-name="local_hospital" unicode="local_hospital" 
+d="M384 213v86h-85v85h-86v-85h-85v-86h85v-85h86v85h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="local_hotel" unicode="local_hotel" 
+d="M405 363c47 0 86 -39 86 -86v-192h-43v64h-384v-64h-43v320h43v-192h171v150h170zM149 235c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="local_laundry_service" unicode="local_laundry_service" 
+d="M256 85c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM149 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s22 9 22 21s-10 22 -22 22zM213 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s22 9 22 21s-10 22 -22 22zM384 469c24 0 43 -18 43 -42v-342
+c0 -24 -19 -42 -43 -42h-256c-24 0 -43 18 -43 42v342c0 24 19 42 43 42h256zM196 153l120 121c33 -33 33 -88 0 -121s-87 -33 -120 0z" />
+    <glyph glyph-name="local_library" unicode="local_library" 
+d="M256 341c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM256 266c50 47 118 75 192 75v-234c-74 0 -142 -29 -192 -76c-50 47 -118 76 -192 76v234c74 0 142 -28 192 -75z" />
+    <glyph glyph-name="local_mall" unicode="local_mall" 
+d="M256 235c59 0 107 47 107 106h-43c0 -35 -29 -64 -64 -64s-64 29 -64 64h-43c0 -59 48 -106 107 -106zM256 448c-35 0 -64 -29 -64 -64h128c0 35 -29 64 -64 64zM405 384c23 0 43 -20 43 -43v-256c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v256c0 23 20 43 43 43
+h42c0 59 48 107 107 107s107 -48 107 -107h42z" />
+    <glyph glyph-name="local_movies" unicode="local_movies" 
+d="M384 320v43h-43v-43h43zM384 235v42h-43v-42h43zM384 149v43h-43v-43h43zM171 320v43h-43v-43h43zM171 235v42h-43v-42h43zM171 149v43h-43v-43h43zM384 448h43v-384h-43v43h-43v-43h-170v43h-43v-43h-43v384h43v-43h43v43h170v-43h43v43z" />
+    <glyph glyph-name="local_offer" unicode="local_offer" 
+d="M117 363c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM457 265c8 -8 12 -18 12 -30s-4 -22 -12 -30l-150 -150c-8 -8 -18 -12 -30 -12s-22 4 -30 12l-192 192c-8 8 -12 18 -12 30v150c0 23 19 42 42 42h150c12 0 22 -4 30 -12z" />
+    <glyph glyph-name="local_parking" unicode="local_parking" 
+d="M282 277c23 0 42 20 42 43s-19 43 -42 43h-69v-86h69zM277 448c71 0 128 -57 128 -128s-57 -128 -128 -128h-64v-128h-85v384h149z" />
+    <glyph glyph-name="local_pharmacy" unicode="local_pharmacy" 
+d="M341 213v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM448 405v-42l-43 -128l43 -128v-43h-384v43l43 128l-43 128v42h271l31 86l50 -19l-24 -67h56z" />
+    <glyph glyph-name="local_phone" unicode="local_phone" 
+d="M141 282c31 -60 81 -110 141 -141l47 47c6 6 15 8 22 5c24 -8 50 -12 76 -12c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22z" />
+    <glyph glyph-name="local_pizza" unicode="local_pizza" 
+d="M256 192c23 0 43 20 43 43s-20 42 -43 42s-43 -19 -43 -42s20 -43 43 -43zM149 363c0 -23 20 -43 43 -43s43 20 43 43s-20 42 -43 42s-43 -19 -43 -42zM256 469c76 0 145 -33 192 -85l-192 -341l-192 341c47 52 116 85 192 85z" />
+    <glyph glyph-name="local_play" unicode="local_play" 
+d="M332 154l-23 87l70 58l-90 5l-33 84l-33 -84l-91 -5l71 -58l-23 -87l76 49zM427 256c0 -23 19 -43 42 -43v-85c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v85c24 0 42 20 42 43s-19 43 -42 43v85c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-85
+c-23 0 -42 -20 -42 -43z" />
+    <glyph glyph-name="local_post_office" unicode="local_post_office" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="local_printshop" unicode="local_printshop" 
+d="M384 448v-85h-256v85h256zM405 256c12 0 22 9 22 21s-10 22 -22 22s-21 -10 -21 -22s9 -21 21 -21zM341 107v106h-170v-106h170zM405 341c35 0 64 -29 64 -64v-128h-85v-85h-256v85h-85v128c0 35 29 64 64 64h298z" />
+    <glyph glyph-name="local_see" unicode="local_see" 
+d="M256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM192 469h128l39 -42h68c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68zM188 256c0 38 30 68 68 68s68 -30 68 -68
+s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="local_shipping" unicode="local_shipping" 
+d="M384 117c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM416 309h-53v-53h95zM128 117c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM427 341l64 -85v-107h-43c0 -35 -29 -64 -64 -64s-64 29 -64 64h-128c0 -35 -29 -64 -64 -64
+s-64 29 -64 64h-43v235c0 23 20 43 43 43h299v-86h64z" />
+    <glyph glyph-name="local_taxi" unicode="local_taxi" 
+d="M107 277h298l-32 96h-234zM373 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 384l44 -128v-171c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v22h-256v-22
+c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v171l44 128c4 13 17 21 31 21h53v43h128v-43h53c14 0 27 -8 31 -21z" />
+    <glyph glyph-name="location_city" unicode="location_city" 
+d="M405 192v43h-42v-43h42zM405 107v42h-42v-42h42zM277 363v42h-42v-42h42zM277 277v43h-42v-43h42zM277 192v43h-42v-43h42zM277 107v42h-42v-42h42zM149 277v43h-42v-43h42zM149 192v43h-42v-43h42zM149 107v42h-42v-42h42zM320 277h128v-213h-384v299h128v42l64 64
+l64 -64v-128z" />
+    <glyph glyph-name="location_disabled" unicode="location_disabled" 
+d="M347 138l-209 209c-19 -25 -31 -57 -31 -91c0 -83 66 -149 149 -149c34 0 66 12 91 31zM64 421l27 27l357 -357l-27 -27l-44 44c-28 -23 -62 -39 -100 -43v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c4 38 20 72 43 100zM447 277h44v-42h-44c-3 -24 -10 -48 -21 -68
+l-32 32c7 17 11 37 11 57c0 83 -66 149 -149 149c-20 0 -40 -4 -57 -11l-32 32c21 11 44 18 68 21v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="location_off" unicode="location_off" 
+d="M250 267c59.1765 -58.4901 118.284 -117.049 177 -176l-27 -27l-72 71c-36 -53 -72 -92 -72 -92s-149 165 -149 277c0 11 2 22 4 33l-68 68l27 27l178 -178zM256 373c-16 0 -29 -7 -39 -18l-69 68c27 28 66 46 108 46c83 0 149 -66 149 -149c0 -36 -15 -77 -36 -117
+l-77 78c11 10 17 23 17 39c0 29 -24 53 -53 53z" />
+    <glyph glyph-name="location_on" unicode="location_on" 
+d="M256 267c29 0 53 24 53 53s-24 53 -53 53s-53 -24 -53 -53s24 -53 53 -53zM256 469c83 0 149 -66 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 83 66 149 149 149z" />
+    <glyph glyph-name="location_searching" unicode="location_searching" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="lock" unicode="lock" 
+d="M322 341v43c0 36 -30 66 -66 66s-66 -30 -66 -66v-43h132zM256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107
+s107 -48 107 -107v-43h21z" />
+    <glyph glyph-name="lock_open" unicode="lock_open" 
+d="M384 85v214h-256v-214h256zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h194v43c0 36 -30 66 -66 66s-66 -30 -66 -66h-41c0 59 48 107 107 107s107 -48 107 -107v-43h21zM256 149c-23 0 -43 20 -43 43
+s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43z" />
+    <glyph glyph-name="lock_outline" unicode="lock_outline" 
+d="M384 85v214h-256v-214h256zM190 384v-43h132v43c0 36 -30 66 -66 66s-66 -30 -66 -66zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107s107 -48 107 -107v-43h21zM256 149
+c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43z" />
+    <glyph glyph-name="looks" unicode="looks" 
+d="M256 384c129 0 235 -106 235 -235h-43c0 106 -86 192 -192 192s-192 -86 -192 -192h-43c0 129 106 235 235 235zM256 299c82 0 149 -68 149 -150h-42c0 59 -48 107 -107 107s-107 -48 -107 -107h-42c0 82 67 150 149 150z" />
+    <glyph glyph-name="looks_3" unicode="looks_&#x33;" 
+d="M320 288v32c0 24 -19 43 -42 43h-86v-43h86v-43h-43v-42h43v-43h-86v-43h86c23 0 42 19 42 43v32c0 18 -14 32 -32 32c18 0 32 14 32 32zM406 448c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-299c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h299z" />
+    <glyph glyph-name="looks_4" unicode="looks_&#x34;" 
+d="M320 149v214h-43v-86h-42v86h-43v-128h85v-86h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="looks_5" unicode="looks_&#x35;" 
+d="M320 320v43h-128v-128h85v-43h-85v-43h85c23 0 43 19 43 43v43c0 24 -20 42 -43 42h-42v43h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="looks_6" unicode="looks_&#x36;" 
+d="M320 320v43h-85c-23 0 -43 -19 -43 -43v-128c0 -24 20 -43 43 -43h42c23 0 43 19 43 43v43c0 24 -20 42 -43 42h-42v43h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM235 192v43h42v-43h-42z" />
+    <glyph glyph-name="looks_one" unicode="looks_one" 
+d="M299 149v214h-86v-43h43v-171h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="looks_two" unicode="looks_two" 
+d="M320 277v43c0 24 -20 43 -43 43h-85v-43h85v-43h-42c-23 0 -43 -18 -43 -42v-86h128v43h-85v43h42c23 0 43 18 43 42zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="loop" unicode="loop" 
+d="M256 128v64l85 -85l-85 -86v64c-94 0 -171 77 -171 171c0 33 10 65 27 91l31 -31c-10 -18 -15 -38 -15 -60c0 -71 57 -128 128 -128zM256 427c94 0 171 -77 171 -171c0 -33 -10 -65 -27 -91l-31 31c10 18 15 38 15 60c0 71 -57 128 -128 128v-64l-85 85l85 86v-64z" />
+    <glyph glyph-name="loupe" unicode="loupe" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213v-171c0 -23 -19 -42 -42 -42h-171c-118 0 -213 95 -213 213s95 213 213 213zM277 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="low_priority" unicode="low_priority" 
+d="M43 267c0 76 62 138 138 138h75v-42h-75c-53 0 -96 -43 -96 -96s43 -96 96 -96h11v42l64 -64l-64 -64v43h-11c-76 0 -138 63 -138 139zM299 171h170v-43h-170v43zM299 288h170v-43h-170v43zM299 405h170v-42h-170v42z" />
+    <glyph glyph-name="loyalty" unicode="loyalty" 
+d="M368 186c10 10 16 23 16 38c0 29 -24 53 -53 53c-15 0 -28 -5 -38 -15l-16 -16l-15 16c-10 10 -23 15 -38 15c-29 0 -53 -24 -53 -53c0 -15 5 -28 15 -38l91 -91zM117 363c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM457 265c8 -8 12 -18 12 -30
+s-4 -22 -12 -30l-150 -150c-8 -8 -18 -12 -30 -12s-22 4 -30 12l-192 192c-8 8 -12 18 -12 30v150c0 23 19 42 42 42h150c12 0 22 -4 30 -12z" />
+    <glyph glyph-name="mail" unicode="mail" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="mail_outline" unicode="mail_outline" 
+d="M256 277l171 107h-342zM427 128v213l-171 -106l-171 106v-213h342zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="map" unicode="map" 
+d="M320 107v253l-128 45v-253zM437 448c6 0 11 -5 11 -11v-322c0 -5 -4 -9 -8 -10l-120 -41l-128 45l-114 -44l-3 -1c-6 0 -11 5 -11 11v322c0 5 4 9 8 10l120 41l128 -45l114 44z" />
+    <glyph glyph-name="markunread" unicode="markunread" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="markunread_mailbox" unicode="markunread_mailbox" 
+d="M427 384c23 0 42 -20 42 -43v-256c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v256c0 23 19 43 42 43h43v128h171v-85h-128v-171h42v128h214z" />
+    <glyph glyph-name="memory" unicode="memory" 
+d="M363 149v214h-214v-214h214zM448 277h-43v-42h43v-43h-43v-43c0 -23 -19 -42 -42 -42h-43v-43h-43v43h-42v-43h-43v43h-43c-23 0 -42 19 -42 42v43h-43v43h43v42h-43v43h43v43c0 23 19 42 42 42h43v43h43v-43h42v43h43v-43h43c23 0 42 -19 42 -42v-43h43v-43zM277 235v42
+h-42v-42h42zM320 320v-128h-128v128h128z" />
+    <glyph glyph-name="menu" unicode="menu" 
+d="M64 384h384v-43h-384v43zM64 235v42h384v-42h-384zM64 128v43h384v-43h-384z" />
+    <glyph glyph-name="merge_type" unicode="merge_type" 
+d="M160 341l96 96l96 -96h-75v-136l-128 -128l-30 30l116 115v119h-75zM363 77l-73 72l30 30l73 -72z" />
+    <glyph glyph-name="message" unicode="message" 
+d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="mic" unicode="mic" 
+d="M369 277h36c0 -73 -58 -133 -128 -143v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -108 113 -108s113 44 113 108zM256 213c-35 0 -64 29 -64 64v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z" />
+    <glyph glyph-name="mic_none" unicode="mic_none" 
+d="M369 277h36c0 -73 -58 -133 -128 -143v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -108 113 -108s113 44 113 108zM230 407v-132c0 -14 12 -25 26 -25s25 11 25 25l1 132c0 14 -12 26 -26 26s-26 -12 -26 -26zM256 213c-35 0 -64 29 -64 64v128c0 35 29 64 64 64
+s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z" />
+    <glyph glyph-name="mic_off" unicode="mic_off" 
+d="M91 448l357 -357l-27 -27l-89 89c-16 -10 -36 -16 -55 -19v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -108 113 -108c17 0 34 4 49 11l-35 35c-4 -1 -9 -2 -14 -2c-35 0 -64 29 -64 64v16l-128 128zM320 274l-128 127v4c0 35 29 64 64 64s64 -29 64 -64v-131z
+M405 277c0 -25 -7 -49 -19 -70l-26 27c6 13 9 27 9 43h36z" />
+    <glyph glyph-name="mms" unicode="mms" 
+d="M107 213h298l-96 128l-74 -96l-54 64zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="mode_comment" unicode="mode_comment" 
+d="M469 427v-384l-85 85h-299c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h342c23 0 42 -19 42 -42z" />
+    <glyph glyph-name="mode_edit" unicode="mode_edit" 
+d="M442 362l-39 -39l-80 80l39 39c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM64 144l236 236l80 -80l-236 -236h-80v80z" />
+    <glyph glyph-name="monetization_on" unicode="monetization_on" 
+d="M286 126c37 7 67 28 67 67c0 54 -47 73 -90 84s-56 23 -56 41c0 20 19 35 51 35c34 0 46 -16 47 -40h42c-1 33 -21 62 -61 72v42h-57v-42c-37 -8 -66 -31 -66 -68c0 -44 36 -65 89 -78c48 -11 57 -28 57 -46c0 -13 -9 -34 -51 -34c-39 0 -55 18 -57 40h-42
+c2 -41 34 -64 70 -72v-42h57v41zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="money_off" unicode="money_off" 
+d="M114 425l311 -312l-27 -27l-47 48c-13 -12 -32 -20 -52 -24v-46h-64v46c-41 9 -76 35 -79 82h47c2 -25 20 -45 64 -45c29 0 44 10 51 20l-75 74c-50 15 -83 40 -83 84l-73 73zM267 365c-13 0 -24 -2 -33 -6l-31 31c10 5 21 9 32 12v46h64v-47c45 -11 67 -44 68 -81h-47
+c-1 27 -15 45 -53 45z" />
+    <glyph glyph-name="monochrome_photos" unicode="monochrome_photos" 
+d="M427 107v256h-171v-22c60 0 107 -46 107 -106s-47 -107 -107 -107v38c-38 0 -68 31 -68 69s30 68 68 68v-137c38 0 68 31 68 69s-30 68 -68 68v38c-60 0 -107 -46 -107 -106s47 -107 107 -107v-21h171zM427 405c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-342
+c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h69l38 43h128l38 -43h69z" />
+    <glyph glyph-name="mood" unicode="mood" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="mood_bad" unicode="mood_bad" 
+d="M256 213c50 0 92 -30 109 -74h-218c17 44 59 74 109 74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="more" unicode="more" 
+d="M405 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM299 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM192 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM469 448c23 0 43 -20 43 -43v-298
+c0 -23 -20 -43 -43 -43h-318c-15 0 -28 8 -36 19l-115 173l115 173c8 11 19 19 34 19h320z" />
+    <glyph glyph-name="more_horiz" unicode="more_horiz" 
+d="M256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM128 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z" />
+    <glyph glyph-name="more_vert" unicode="more_vert" 
+d="M256 171c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 341c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43z" />
+    <glyph glyph-name="motorcycle" unicode="motorcycle" 
+d="M405 149c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM167 192h-60v43h60c-9 25 -33 42 -60 42c-35 0 -64 -29 -64 -64s29 -64 64 -64c27 0 51 18 60 43zM415 319c55 -4 97 -49 97 -106c0 -60 -47 -106 -107 -106s-106 46 -106 106c0 13 2 26 6 38
+l-59 -59h-35c-10 -49 -52 -85 -104 -85c-60 0 -107 46 -107 106s47 107 107 107h247l-43 43h-76v42h94z" />
+    <glyph glyph-name="mouse" unicode="mouse" 
+d="M235 489v-169h-150c0 87 66 159 150 169zM85 192v85h342v-85c0 -94 -77 -171 -171 -171s-171 77 -171 171zM277 489c84 -10 150 -82 150 -169h-150v169z" />
+    <glyph glyph-name="move_to_inbox" unicode="move_to_inbox" 
+d="M341 299l-85 -86l-85 86h42v64h86v-64h42zM405 192v213h-299v-213h86c0 -35 29 -64 64 -64s64 29 64 64h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-299c-24 0 -42 20 -42 43v298c0 23 18 43 42 43h299z" />
+    <glyph glyph-name="movie" unicode="movie" 
+d="M384 427h85v-299c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h22l42 -86h64l-42 86h42l43 -86h64l-43 86h43l43 -86h64z" />
+    <glyph glyph-name="movie_creation" unicode="movie_creation" 
+d="M384 427h85v-299c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h22l42 -86h64l-42 86h42l43 -86h64l-43 86h43l43 -86h64z" />
+    <glyph glyph-name="movie_filter" unicode="movie_filter" 
+d="M361 257l44 20l-44 20l-20 44l-20 -44l-44 -20l44 -20l20 -44zM240 187l59 26l-59 27l-27 59l-26 -59l-59 -27l59 -26l26 -59zM384 427h85v-299c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h22l42 -64h64l-42 64h42l43 -64h64l-43 64h43
+l43 -64h64z" />
+    <glyph glyph-name="multiline_chart" unicode="multiline_chart" 
+d="M469 364l-65 -73c23 -37 39 -82 44 -131h-43c-4 35 -15 68 -31 97l-86 -97l-85 86l-128 -128l-32 32l160 160l85 -86l61 70c-36 42 -86 69 -144 69c-50 0 -96 -20 -132 -52l-30 30c44 39 100 64 162 64c69 0 129 -30 173 -79l61 68z" />
+    <glyph glyph-name="music_note" unicode="music_note" 
+d="M256 448h128v-85h-85v-214c0 -47 -39 -85 -86 -85s-85 38 -85 85s38 86 85 86c16 0 30 -5 43 -12v225z" />
+    <glyph glyph-name="music_video" unicode="music_video" 
+d="M171 192c0 35 29 64 64 64c7 0 14 -2 21 -4v132h107v-43h-64v-150c0 -35 -29 -63 -64 -63s-64 29 -64 64zM448 107v298h-384v-298h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="my_location" unicode="my_location" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170zM256 341
+c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85z" />
+    <glyph glyph-name="nature" unicode="nature" 
+d="M277 168v-83h128v-42h-298v42h128v84c-71 12 -125 73 -125 147c0 83 67 150 150 150s149 -67 149 -150c0 -77 -58 -139 -132 -148z" />
+    <glyph glyph-name="nature_people" unicode="nature_people" 
+d="M96 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM473 316c0 -77 -58 -139 -132 -148v-83h64v-42h-341v106h-21v86c0 12 9 21 21 21h64c12 0 21 -9 21 -21v-86h-21v-64h171v84c-71 12 -125 73 -125 147c0 83 67 150 150 150s149 -67 149 -150z
+" />
+    <glyph glyph-name="navigate_before" unicode="navigate_before" 
+d="M329 354l-98 -98l98 -98l-30 -30l-128 128l128 128z" />
+    <glyph glyph-name="navigate_next" unicode="navigate_next" 
+d="M213 384l128 -128l-128 -128l-30 30l98 98l-98 98z" />
+    <glyph glyph-name="navigation" unicode="navigation" 
+d="M256 469l160 -390l-15 -15l-145 64l-145 -64l-15 15z" />
+    <glyph glyph-name="near_me" unicode="near_me" 
+d="M448 448l-161 -384h-21l-56 146l-146 56v21z" />
+    <glyph glyph-name="network_cell" unicode="network_cell" 
+d="M469 43h-426l426 426v-426z" />
+    <glyph glyph-name="network_check" unicode="network_check" 
+d="M107 235c43 43 100 63 156 61l-28 -61c-31 -4 -62 -19 -86 -43zM363 192c-8 8 -17 15 -26 21l12 62c20 -10 39 -23 56 -40zM448 277c-26 26 -56 46 -88 59l11 60c44 -16 85 -41 120 -76zM21 320c80 80 190 110 293 92l-25 -57c-80 10 -164 -17 -225 -78zM339 405
+c6 0 11 -4 11 -10l-52 -275v-1c-4 -19 -22 -34 -42 -34c-24 0 -43 19 -43 43c0 7 2 15 5 21l111 248c1.57297 4.7189 4.56186 8 10 8z" />
+    <glyph glyph-name="network_locked" unicode="network_locked" 
+d="M448 171v32c0 18 -14 32 -32 32s-32 -14 -32 -32v-32h64zM469 171c12 0 22 -10 22 -22v-85c0 -12 -10 -21 -22 -21h-106c-12 0 -22 9 -22 21v85c0 12 10 22 22 22v32c0 29 24 53 53 53s53 -24 53 -53v-32zM416 299c-53 0 -96 -43 -96 -96v-6c-13 -12 -21 -29 -21 -48v-64
+h-278l406 406v-193c-4 0 -7 1 -11 1z" />
+    <glyph glyph-name="network_wifi" unicode="network_wifi" 
+d="M436.25 278.586c0.284113 -0.222489 0.53415 -0.418301 0.749753 -0.585993l-181 -224l-181 224c0.215604 0.167692 0.46564 0.363504 0.749753 0.585993l-67.7498 84.414c10 7 105 85 248 85s238 -78 248 -85z" />
+    <glyph glyph-name="new_releases" unicode="new_releases" 
+d="M277 235v128h-42v-128h42zM277 149v43h-42v-43h42zM491 256l-52 -59l7 -79l-77 -17l-40 -68l-73 31l-73 -31l-40 67l-77 18l7 79l-52 59l52 60l-7 78l77 17l40 68l73 -31l73 31l40 -68l77 -17l-7 -79z" />
+    <glyph glyph-name="next_week" unicode="next_week" 
+d="M235 117l85 86l-85 85l-22 -21l64 -64l-64 -64zM213 405v-42h86v42h-86zM299 448c23.3225 0 42 -19.4985 42 -43v-42h86c23 0 42 -20 42 -43v-235c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v235c0 23 19 43 42 43h86v42c0 23 19 43 42 43h86z" />
+    <glyph glyph-name="nfc" unicode="nfc" 
+d="M384 384v-256h-256v256h85v-43h-42v-170h170v170h-64v-48c13 -7 22 -21 22 -37c0 -23 -20 -43 -43 -43s-43 20 -43 43c0 16 9 30 22 37v48c0 23 19 43 42 43h107zM427 85v342h-342v-342h342zM427 469c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-342
+c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="no_encryption" unicode="no_encryption" 
+d="M190 384v-26l-39 39c6 53 50 94 105 94c59 0 107 -48 107 -107v-43h21c23 0 43 -19 43 -42v-178l-221 220h116v43c0 36 -30 66 -66 66s-66 -30 -66 -66zM448 47l-26 -26l-24 24c-4 -1 -9 -2 -14 -2h-256c-23 0 -43 19 -43 42v214c0 16 10 30 23 37l-44 43l26 26z" />
+    <glyph glyph-name="no_sim" unicode="no_sim" 
+d="M78 429l373 -372l-28 -28l-40 41c-6 -3 -13 -6 -20 -6h-214c-23 0 -42 20 -42 43v239l-56 56zM405 405v-249l-242 242l50 50h150c23 0 42 -20 42 -43z" />
+    <glyph glyph-name="not_interested" unicode="not_interested" 
+d="M391 151c23 29 36 66 36 105c0 94 -77 171 -171 171c-39 0 -76 -13 -105 -36zM256 85c39 0 76 13 105 36l-240 240c-23 -29 -36 -66 -36 -105c0 -94 77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="note" unicode="note" 
+d="M320 395v-118h117zM469 299v-171c0 -23 -19 -42 -42 -42l-342 -1c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h256z" />
+    <glyph glyph-name="note_add" unicode="note_add" 
+d="M277 320h118l-118 117v-117zM341 171v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM299 469l128 -128v-256c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42h171z" />
+    <glyph glyph-name="notifications" unicode="notifications" 
+d="M384 171l43 -43v-21h-342v21l43 43v106c0 66 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135v-106zM256 43c-24 0 -43 19 -43 42h86c0 -23 -20 -42 -43 -42z" />
+    <glyph glyph-name="notifications_active" unicode="notifications_active" 
+d="M256 43c-24 0 -43 19 -43 42h85c0 -24.8376 -18.6125 -42 -42 -42zM384 277v-106l43 -43v-21h-342v21l43 43v106c0 66 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135zM426 288c-3 57 -32 106 -75 137l30 30c51 -39 85 -99 88 -167h-43z
+M162 425c-44 -31 -73 -80 -76 -137h-43c3 68 37 128 88 167z" />
+    <glyph glyph-name="notifications_none" unicode="notifications_none" 
+d="M341 149v128c0 53 -32 96 -85 96s-85 -43 -85 -96v-128h170zM384 171l43 -43v-21h-342v21l43 43v106c0 66 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135v-106zM256 43c-23 0 -43 19 -43 42h86c0 -23 -20 -42 -43 -42z" />
+    <glyph glyph-name="notifications_off" unicode="notifications_off" 
+d="M384 199l-191 201c5 2 10 5 15 7h1l6 3c3 1 6 1 9 2v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -69 96 -135v-78zM256 43c-24 0 -43 18 -43 42h86c0 -24 -19 -42 -43 -42zM167 381c93.6174 -96.7159 187.67 -192.997 281 -290l-27 -27l-43 43h-293v21l43 43v107
+c0 27 6 52 17 73l-60 59l27 28z" />
+    <glyph glyph-name="notifications_paused" unicode="notifications_paused" 
+d="M309 303v38h-106v-38h59l-59 -73v-38h106v38h-59zM384 171l43 -43v-21h-342v21l43 43v106c0 65 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135v-106zM256 43c-24 0 -43 19 -43 42h86c0 -23 -20 -42 -43 -42z" />
+    <glyph glyph-name="offline_pin" unicode="offline_pin" 
+d="M220 213l143 143l-30 30l-113 -113l-41 41l-30 -30zM363 128v43h-214v-43h214zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="ondemand_video" unicode="ondemand_video" 
+d="M341 277l-149 -85v171zM448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="opacity" unicode="opacity" 
+d="M128 213h256c0 43 -14 69 -38 93l-90 94l-90 -93c-24 -24 -38 -51 -38 -94zM377 341c33 -33 50 -77 50 -120s-17 -88 -50 -121s-77 -50 -121 -50s-88 17 -121 50s-50 78 -50 121s17 87 50 120l121 121z" />
+    <glyph glyph-name="open_in_browser" unicode="open_in_browser" 
+d="M256 299l85 -86h-64v-128h-42v128h-64zM405 427c24 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-85v43h85v213h-298v-213h85v-43h-85c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="open_in_new" unicode="open_in_new" 
+d="M299 448h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43zM405 107v149h43v-149c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h149v-43h-149v-298h298z" />
+    <glyph glyph-name="open_with" unicode="open_with" 
+d="M299 192v-64h64l-107 -107l-107 107h64v64h86zM491 256l-107 -107v64h-64v86h64v64zM192 299v-86h-64v-64l-107 107l107 107v-64h64zM213 320v64h-64l107 107l107 -107h-64v-64h-86z" />
+    <glyph glyph-name="pages" unicode="pages" 
+d="M405 448c23 0 43 -20 43 -43v-128h-107l22 86l-86 -22v107h128zM363 149l-22 86h107v-128c0 -23 -20 -43 -43 -43h-128v107zM171 235l-22 -86l86 22v-107h-128c-23 0 -43 20 -43 43v128h107zM64 405c0 23 20 43 43 43h128v-107l-86 22l22 -86h-107v128z" />
+    <glyph glyph-name="pageview" unicode="pageview" 
+d="M358 124l30 30l-62 62c9 15 15 32 15 51c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96c19 0 36 6 51 15zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342zM245 320c29 0 54 -24 54 -53
+s-25 -54 -54 -54s-53 25 -53 54s24 53 53 53z" />
+    <glyph glyph-name="palette" unicode="palette" 
+d="M373 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM203 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 256c18 0 32 14 32 32s-14 32 -32 32
+s-32 -14 -32 -32s14 -32 32 -32zM256 448c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-37c-18 0 -32 -14 -32 -32c0 -8 3 -15 8 -21s8 -14 8 -22c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192z" />
+    <glyph glyph-name="pan_tool" unicode="pan_tool" 
+d="M491 395v-310c0 -47 -39 -85 -86 -85h-155c-23 0 -45 9 -61 25l-168 171s27 26 28 26c5 4 11 6 17 6c5 0 9 -1 13 -3c1 0 92 -52 92 -52v254c0 18 14 32 32 32s32 -14 32 -32v-150h21v203c0 18 14 32 32 32s32 -14 32 -32v-203h21v182c0 18 14 32 32 32s32 -14 32 -32
+v-182h22v118c0 18 14 32 32 32s32 -14 32 -32z" />
+    <glyph glyph-name="panorama" unicode="panorama" 
+d="M181 245l-74 -96h298l-96 128l-74 -96zM491 128c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h384c23 0 43 -20 43 -43v-256z" />
+    <glyph glyph-name="panorama_fish_eye" unicode="panorama_fish_eye" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="panorama_horizontal" unicode="panorama_horizontal" 
+d="M457 427c7 0 12 -5 12 -14v-314c0 -9 -5 -14 -12 -14c-2 0 -4 1 -6 2c-63 23 -129 35 -195 35s-132 -12 -195 -35c-2 -1 -4 -2 -6 -2c-7 0 -12 6 -12 14v314c0 9 5 14 12 14c2 0 4 -1 6 -2c63 -23 129 -35 195 -35s132 12 195 35c2 1 4 2 6 2zM427 372
+c-55 -17 -113 -24 -171 -24s-116 8 -171 24v-232c55 16 113 24 171 24s116 -8 171 -24v232z" />
+    <glyph glyph-name="panorama_vertical" unicode="panorama_vertical" 
+d="M140 85h232c-16 55 -24 113 -24 171s8 116 24 171h-232c16 -55 24 -113 24 -171s-8 -116 -24 -171zM425 61c1 -2 2 -4 2 -6c0 -7 -6 -12 -14 -12h-314c-9 0 -14 5 -14 12c0 2 1 4 2 6c23 63 35 129 35 195s-12 132 -35 195c-1 2 -2 4 -2 6c0 7 5 12 14 12h314
+c9 0 14 -5 14 -12c0 -2 -1 -4 -2 -6c-23 -63 -35 -129 -35 -195s12 -132 35 -195z" />
+    <glyph glyph-name="panorama_wide_angle" unicode="panorama_wide_angle" 
+d="M256 427c58 0 112 -6 170 -16l19 -3l6 -19c12 -44 18 -89 18 -133s-6 -89 -18 -133l-6 -19l-19 -3c-58 -10 -112 -16 -170 -16s-112 6 -170 16l-19 3l-6 19c-12 44 -18 89 -18 133s6 89 18 133l6 19l19 3c58 10 112 16 170 16zM256 384c-52 0 -101 -5 -156 -14
+c-10 -38 -15 -76 -15 -114s5 -76 15 -114c55 -9 104 -14 156 -14s101 5 156 14c10 38 15 76 15 114s-5 76 -15 114c-55 9 -104 14 -156 14z" />
+    <glyph glyph-name="party_mode" unicode="party_mode" 
+d="M256 149c59 0 107 48 107 107c0 7 -1 14 -2 21h-45c2 -7 4 -14 4 -21c0 -35 -29 -64 -64 -64h-85c20 -26 50 -43 85 -43zM256 363c-59 0 -107 -48 -107 -107c0 -7 1 -14 2 -21h45c-2 7 -4 14 -4 21c0 35 29 64 64 64h85c-20 26 -50 43 -85 43zM427 427
+c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68l39 42h128l39 -42h68z" />
+    <glyph glyph-name="pause" unicode="pause" 
+d="M299 405h85v-298h-85v298zM128 107v298h85v-298h-85z" />
+    <glyph glyph-name="pause_circle_filled" unicode="pause_circle_filled" 
+d="M320 171v170h-43v-170h43zM235 171v170h-43v-170h43zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="pause_circle_outline" unicode="pause_circle_outline" 
+d="M277 171v170h43v-170h-43zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM192 171v170h43v-170h-43z" />
+    <glyph glyph-name="payment" unicode="payment" 
+d="M427 341v43h-342v-43h342zM427 128v128h-342v-128h342zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z" />
+    <glyph glyph-name="people" unicode="people" 
+d="M341 235c50 0 150 -25 150 -75v-53h-128v53c0 32 -17 56 -42 74c7 1 14 1 20 1zM171 235c50 0 149 -25 149 -75v-53h-299v53c0 50 100 75 150 75zM171 277c-35 0 -64 29 -64 64s29 64 64 64s63 -29 63 -64s-28 -64 -63 -64zM341 277c-35 0 -64 29 -64 64s29 64 64 64
+s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="people_outline" unicode="people_outline" 
+d="M352 373c-23 0 -43 -19 -43 -42s20 -43 43 -43s43 20 43 43s-20 42 -43 42zM352 256c-41 0 -75 34 -75 75s34 74 75 74s75 -33 75 -74s-34 -75 -75 -75zM160 373c-23 0 -43 -19 -43 -42s20 -43 43 -43s43 20 43 43s-20 42 -43 42zM160 256c-41 0 -75 34 -75 75
+s34 74 75 74s75 -33 75 -74s-34 -75 -75 -75zM459 139v26c0 12 -55 38 -107 38c-23 0 -45 -6 -64 -12c7 -8 11 -16 11 -26v-26h160zM267 139v26c0 12 -55 38 -107 38s-107 -26 -107 -38v-26h214zM352 235c46 0 139 -24 139 -70v-58h-470v58c0 46 93 70 139 70
+c26 0 65 -8 96 -22c31 14 70 22 96 22z" />
+    <glyph glyph-name="perm_camera_mic" unicode="perm_camera_mic" 
+d="M299 235v85c0 23 -20 43 -43 43s-43 -20 -43 -43v-85c0 -23 20 -43 43 -43s43 20 43 43zM427 405c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-150v45c60 10 107 63 107 126h-43c0 -47 -38 -86 -85 -86s-85 39 -85 86h-43c0 -63 47 -116 107 -126v-45h-150
+c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h68l39 43h128l39 -43h68z" />
+    <glyph glyph-name="perm_contact_calendar" unicode="perm_contact_calendar" 
+d="M384 128v21c0 43 -85 66 -128 66s-128 -23 -128 -66v-21h256zM256 384c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43
+h43v-43h21z" />
+    <glyph glyph-name="perm_data_setting" unicode="perm_data_setting" 
+d="M405 75c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM484 96l23 -17c2 -2 2 -5 1 -7l-21 -37c-1 -2 -5 -4 -7 -3l-26 11c-5 -4 -12 -7 -18 -10l-4 -29c0 -3 -3 -4 -6 -4h-42c-3 0 -6 1 -6 4l-4 29c-7 3 -12 6 -18 10l-26 -11c-3 -1 -6 1 -7 3l-21 37
+c-1 2 -1 5 1 7l23 17c0 3 -1 7 -1 11s1 7 1 10l-23 18c-2 2 -2 5 -1 7l21 37c1 2 5 3 7 2l26 -11c6 4 12 8 18 11l4 28c0 3 3 4 6 4h42c3 0 6 -1 6 -4l4 -28c7 -3 12 -7 18 -11l26 11c3 1 6 0 7 -2l21 -37c1 -2 1 -5 -1 -7l-23 -18c1 -3 1 -6 1 -10s-1 -8 -1 -11zM405 267
+c-88 0 -160 -72 -160 -160c0 -7 1 -15 2 -22h-247l427 427l-1 -247c-7 1 -14 2 -21 2z" />
+    <glyph glyph-name="perm_device_information" unicode="perm_device_information" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43zM277 277v-128h-42v128h42zM277 363v-43h-42v43h42z" />
+    <glyph glyph-name="perm_identity" unicode="perm_identity" 
+d="M256 235c57 0 171 -29 171 -86v-64h-342v64c0 57 114 86 171 86zM256 427c47 0 85 -39 85 -86s-38 -85 -85 -85s-85 38 -85 85s38 86 85 86zM256 194c-63 0 -130 -31 -130 -45v-23h260v23c0 14 -67 45 -130 45zM256 386c-25 0 -45 -20 -45 -45s20 -44 45 -44s45 19 45 44
+s-20 45 -45 45z" />
+    <glyph glyph-name="perm_media" unicode="perm_media" 
+d="M149 192h299l-75 96l-53 -64l-75 96zM469 427c23 0 43 -20 43 -43v-213c0 -23 -20 -43 -43 -43h-341c-23 0 -43 20 -43 43l1 256c0 23 19 42 42 42h128l43 -42h170zM43 384v-299h384v-42h-384c-23 0 -43 19 -43 42v299h43z" />
+    <glyph glyph-name="perm_phone_msg" unicode="perm_phone_msg" 
+d="M256 448h192v-149h-128l-64 -64v213zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -60 81 -110 141 -141l47 47c6 6 15 7 22 5
+c24 -8 49 -12 76 -12z" />
+    <glyph glyph-name="perm_scan_wifi" unicode="perm_scan_wifi" 
+d="M235 341h42v43h-42v-43zM277 171v128h-42v-128h42zM256 448c108 0 189 -40 256 -91l-256 -314l-256 315c67 51 148 90 256 90z" />
+    <glyph glyph-name="person" unicode="person" 
+d="M256 213c57 0 171 -28 171 -85v-43h-342v43c0 57 114 85 171 85zM256 256c-47 0 -85 38 -85 85s38 86 85 86s85 -39 85 -86s-38 -85 -85 -85z" />
+    <glyph glyph-name="person_add" unicode="person_add" 
+d="M320 213c57 0 171 -28 171 -85v-43h-342v43c0 57 114 85 171 85zM128 299h64v-43h-64v-64h-43v64h-64v43h64v64h43v-64zM320 256c-47 0 -85 38 -85 85s38 86 85 86s85 -39 85 -86s-38 -85 -85 -85z" />
+    <glyph glyph-name="person_outline" unicode="person_outline" 
+d="M256 235c57 0 171 -29 171 -86v-64h-342v64c0 57 114 86 171 86zM256 427c47 0 85 -39 85 -86s-38 -85 -85 -85s-85 38 -85 85s38 86 85 86zM256 194c-63 0 -130 -31 -130 -45v-23h260v23c0 14 -67 45 -130 45zM256 386c-25 0 -45 -20 -45 -45s20 -44 45 -44s45 19 45 44
+s-20 45 -45 45z" />
+    <glyph glyph-name="person_pin" unicode="person_pin" 
+d="M384 171v19c0 43 -85 66 -128 66s-128 -23 -128 -66v-19h256zM256 399c-32 0 -58 -26 -58 -58s26 -57 58 -57s58 25 58 57s-26 58 -58 58zM405 469c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-85l-64 -64l-64 64h-85c-24 0 -43 20 -43 43v299c0 23 19 42 43 42h298
+z" />
+    <glyph glyph-name="person_pin_circle" unicode="person_pin_circle" 
+d="M256 213c36 0 67 18 85 46c0 28 -57 44 -85 44s-85 -16 -85 -44c18 -28 49 -46 85 -46zM256 427c-23 0 -43 -20 -43 -43c0 -24 20 -43 43 -43s43 19 43 43c0 23 -20 43 -43 43zM256 469c82 0 149 -67 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277
+c0 82 67 149 149 149z" />
+    <glyph glyph-name="personal_video" unicode="personal_video" 
+d="M448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="pets" unicode="pets" 
+d="M370 195c28 -28 63 -58 56 -102c-6 -22 -22 -44 -50 -50c-16 -3 -65 9 -118 9h-4c-53 0 -102 -12 -118 -9c-28 6 -44 28 -50 50c-6 43 28 74 56 102c19 22 34 40 53 62c10 12 22 23 37 28c2 1 5 2 7 2c6 1 11 1 17 1s12 0 17 -1c2 0 5 -1 7 -2c15 -5 27 -16 37 -28
+c19 -22 34 -40 53 -62zM363 309c0 29 24 54 53 54s53 -25 53 -54s-24 -53 -53 -53s-53 24 -53 53zM267 395c0 29 24 53 53 53s53 -24 53 -53s-24 -54 -53 -54s-53 25 -53 54zM139 395c0 29 24 53 53 53s53 -24 53 -53s-24 -54 -53 -54s-53 25 -53 54zM43 309
+c0 29 24 54 53 54s53 -25 53 -54s-24 -53 -53 -53s-53 24 -53 53z" />
+    <glyph glyph-name="phone" unicode="phone" 
+d="M141 282c31 -60 81 -110 141 -141l47 47c6 6 15 8 22 5c24 -8 50 -12 76 -12c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22z" />
+    <glyph glyph-name="phone_android" unicode="phone_android" 
+d="M368 128v299h-224v-299h224zM299 64v21h-86v-21h86zM341 491c35 0 64 -29 64 -64v-342c0 -35 -29 -64 -64 -64h-170c-35 0 -64 29 -64 64v342c0 35 29 64 64 64h170z" />
+    <glyph glyph-name="phone_bluetooth_speaker" unicode="phone_bluetooth_speaker" 
+d="M427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12zM384 358v-40l20 20zM384 450
+v-40l20 20zM314 309l-15 15l59 60l-59 60l15 15l49 -49v81h10l61 -61l-46 -46l46 -46l-61 -61h-10v81z" />
+    <glyph glyph-name="phone_forwarded" unicode="phone_forwarded" 
+d="M427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12zM384 277v64h-85v86h85v64
+l107 -107z" />
+    <glyph glyph-name="phone_in_talk" unicode="phone_in_talk" 
+d="M320 256c0 35 -29 64 -64 64v43c59 0 107 -48 107 -107h-43zM405 256c0 83 -66 149 -149 149v43c106 0 192 -86 192 -192h-43zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76
+c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z" />
+    <glyph glyph-name="phone_iphone" unicode="phone_iphone" 
+d="M341 128v299h-192v-299h192zM245 43c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM331 491c29 0 53 -25 53 -54v-362c0 -29 -24 -54 -53 -54h-171c-29 0 -53 25 -53 54v362c0 29 24 54 53 54h171z" />
+    <glyph glyph-name="phone_locked" unicode="phone_locked" 
+d="M410 427v10c0 20 -17 37 -37 37s-36 -17 -36 -37v-10h73zM427 427c12 0 21 -10 21 -22v-85c0 -12 -9 -21 -21 -21h-107c-12 0 -21 9 -21 21v85c0 12 9 22 21 22v10c0 29 24 54 53 54s54 -25 54 -54v-10zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21
+c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z" />
+    <glyph glyph-name="phone_missed" unicode="phone_missed" 
+d="M506 156c4 -4 6 -9 6 -15s-2 -11 -6 -15l-53 -53c-4 -4 -9 -6 -15 -6s-11 2 -15 6c-17 16 -36 30 -57 40c-7 3 -12 11 -12 19v66c-31 10 -64 15 -98 15s-67 -5 -98 -15v-66c0 -9 -5 -17 -12 -20c-21 -10 -40 -23 -57 -39c-4 -4 -9 -6 -15 -6s-11 2 -15 6l-53 53
+c-4 4 -6 9 -6 15s2 11 6 15c65 62 153 100 250 100s185 -38 250 -100zM139 395v-75h-32v128h128v-32h-75l96 -96l128 128l21 -21l-149 -150z" />
+    <glyph glyph-name="phone_paused" unicode="phone_paused" 
+d="M405 448h43v-149h-43v149zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z
+M363 448v-149h-43v149h43z" />
+    <glyph glyph-name="phonelink" unicode="phonelink" 
+d="M469 149v150h-85v-150h85zM491 341c12 0 21 -9 21 -21v-213c0 -12 -9 -22 -21 -22h-128c-12 0 -22 10 -22 22v213c0 12 10 21 22 21h128zM85 384v-235h214v-64h-299v64h43v235c0 23 19 43 42 43h384v-43h-384z" />
+    <glyph glyph-name="phonelink_erase" unicode="phonelink_erase" 
+d="M405 491c23 0 43 -20 43 -43v-384c0 -23 -20 -43 -43 -43h-213c-23 0 -43 20 -43 43v64h43v-43h213v342h-213v-43h-43v64c0 23 20 43 43 43h213zM277 337l-85 -85l85 -86l-21 -21l-85 85l-86 -85l-21 21l85 86l-85 85l21 21l86 -85l85 85z" />
+    <glyph glyph-name="phonelink_lock" unicode="phonelink_lock" 
+d="M203 277v32c0 17 -15 28 -32 28s-32 -11 -32 -28v-32h64zM230 277c13 0 26 -12 26 -27v-75c0 -13 -13 -26 -28 -26h-117c-13 0 -26 13 -26 28v75c0 13 13 25 26 25v32c0 30 30 54 60 54s59 -24 59 -54v-32zM405 491c23 0 43 -20 43 -43v-384c0 -23 -20 -43 -43 -43h-213
+c-23 0 -43 20 -43 43v64h43v-43h213v342h-213v-43h-43v64c0 23 20 43 43 43h213z" />
+    <glyph glyph-name="phonelink_off" unicode="phonelink_off" 
+d="M491 341c12 0 21 -9 21 -21v-213c0 -12 -9 -22 -21 -22h-4l-64 64h46v150h-85v-111l-43 43v89c0 12 10 21 22 21h128zM85 378v-229h229zM41 477c138.107 -138.226 275.985 -276.682 414 -415l-27 -27l-50 50h-378v64h43v235c0 10 4 20 10 27l-39 39zM469 384h-281l-43 43
+h324v-43z" />
+    <glyph glyph-name="phonelink_ring" unicode="phonelink_ring" 
+d="M299 85v342h-214v-342h214zM299 491c23 0 42 -20 42 -43v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43h214zM384 303c26 -28 26 -66 0 -92l-21 22c11 15 11 34 0 49zM429 348c53 -51 53 -133 0 -182l-22 22c38 41 38 100 0 138z" />
+    <glyph glyph-name="phonelink_setup" unicode="phonelink_setup" 
+d="M405 491c23 0 43 -20 43 -43v-384c0 -23 -20 -43 -43 -43h-213c-23 0 -43 20 -43 43v64h43v-43h213v342h-213v-43h-43v64c0 23 20 43 43 43h213zM171 213c23 0 42 20 42 43s-19 43 -42 43s-43 -20 -43 -43s20 -43 43 -43zM252 245l23 -19c2 -2 4 -4 2 -6l-21 -37
+c-2 -2 -4 -2 -6 -2l-28 11c-6 -4 -13 -9 -19 -11l-5 -27c-2 -2 -4 -5 -6 -5h-43c-2 0 -6 3 -4 5l-4 27c-6 2 -13 7 -19 11l-30 -9c-2 -2 -5 1 -7 3l-21 36c0 2 0 4 2 8l24 17v22l-24 17c-2 2 -4 4 -2 6l21 37c2 2 5 2 7 2l27 -11c6 4 14 9 20 11l4 27c2 2 4 5 6 5h43
+c4 0 6 -3 6 -5l5 -27c6 -2 13 -7 19 -11l28 9c2 2 4 -1 6 -3l21 -36c0 -2 0 -4 -2 -6l-23 -17v-22z" />
+    <glyph glyph-name="photo" unicode="photo" 
+d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298z" />
+    <glyph glyph-name="photo_album" unicode="photo_album" 
+d="M128 107h256l-82 109l-64 -82l-46 55zM128 427v-171l53 32l54 -32v171h-107zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="photo_camera" unicode="photo_camera" 
+d="M256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM192 469h128l39 -42h68c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68zM188 256c0 38 30 68 68 68s68 -30 68 -68
+s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="photo_filter" unicode="photo_filter" 
+d="M283 283l58 -27l-58 -27l-27 -58l-27 58l-58 27l58 27l27 58zM363 299l-20 44l-44 20l44 20l20 44l20 -44l44 -20l-44 -20zM406 299h42v-192c0 -23 -19 -43 -42 -43h-299c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h192v-43h-192v-298h299v192z" />
+    <glyph glyph-name="photo_library" unicode="photo_library" 
+d="M43 384h42v-299h299v-42h-299c-23 0 -42 19 -42 42v299zM235 256l-64 -85h256l-86 106l-63 -79zM469 171c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256c23 0 42 -19 42 -42v-256z" />
+    <glyph glyph-name="photo_size_select_actual" unicode="photo_size_select_actual" 
+d="M107 149h298l-96 128l-74 -96l-54 64zM448 448c21 0 43 -22 43 -43v-298c0 -21 -22 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 21 22 43 43 43h384z" />
+    <glyph glyph-name="photo_size_select_large" unicode="photo_size_select_large" 
+d="M64 107h213l-68 91l-53 -69l-39 46zM21 277h299v-213h-256c-23 0 -43 20 -43 43v170zM107 448h42v-43h-42v43zM192 448h43v-43h-43v43zM64 448v-43h-43c0 21 22 43 43 43zM363 107h42v-43h-42v43zM363 448h42v-43h-42v43zM21 363h43v-43h-43v43zM448 448
+c21 0 43 -22 43 -43h-43v43zM448 363h43v-43h-43v43zM277 448h43v-43h-43v43zM491 107c0 -21 -22 -43 -43 -43v43h43zM448 277h43v-42h-43v42zM448 192h43v-43h-43v43z" />
+    <glyph glyph-name="photo_size_select_small" unicode="photo_size_select_small" 
+d="M149 448v-43h-42v43h42zM235 448v-43h-43v43h43zM64 277v-42h-43v42h43zM64 448v-43h-43c0 21 22 43 43 43zM405 107v-43h-42v43h42zM405 448v-43h-42v43h42zM320 107v-43h-43v43h43zM64 363v-43h-43v43h43zM64 64c-23 0 -43 20 -43 43v85h214v-128h-171zM448 448
+c21 0 43 -22 43 -43h-43v43zM491 363v-43h-43v43h43zM320 448v-43h-43v43h43zM491 107c0 -21 -22 -43 -43 -43v43h43zM491 277v-42h-43v42h43zM491 192v-43h-43v43h43z" />
+    <glyph glyph-name="picture_as_pdf" unicode="picture_as_pdf" 
+d="M299 267v64h21v-64h-21zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42zM192 309v22h21v-22h-21zM437 331v32h-64v-128h32v42h32v32h-32v22h32zM352 267v64c0 18 -14 32 -32 32h-53v-128h53c18 0 32 14 32 32zM245 309v22c0 18 -14 32 -32 32h-53v-128h32v42h21
+c18 0 32 14 32 32zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="picture_in_picture" unicode="picture_in_picture" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM405 363v-128h-170v128h170z" />
+    <glyph glyph-name="picture_in_picture_alt" unicode="picture_in_picture_alt" 
+d="M448 106v300h-384v-300h384zM491 107c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h384c23 0 43 -19 43 -42v-299zM405 277v-128h-170v128h170z" />
+    <glyph glyph-name="pie_chart" unicode="pie_chart" 
+d="M278 234h191c-10 -101 -90 -181 -191 -191v191zM278 469c101 -10 181 -90 191 -191h-191v191zM235 469v-426c-108 11 -192 102 -192 213s84 202 192 213z" />
+    <glyph glyph-name="pie_chart_outlined" unicode="pie_chart_outlined" 
+d="M277 87c77 10 138 71 148 148h-148v-148zM85 256c0 -87 66 -158 150 -169v338c-84 -10 -150 -82 -150 -169zM277 425v-148h148c-10 77 -71 138 -148 148zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="pin_drop" unicode="pin_drop" 
+d="M107 85h298v-42h-298v42zM213 341c0 -23 20 -42 43 -42c24 0 43 19 43 42s-20 43 -43 43s-43 -20 -43 -43zM384 341c0 -96 -128 -234 -128 -234s-128 138 -128 234c0 71 57 128 128 128s128 -57 128 -128z" />
+    <glyph glyph-name="place" unicode="place" 
+d="M256 267c29 0 53 24 53 53s-24 53 -53 53s-53 -24 -53 -53s24 -53 53 -53zM256 469c83 0 149 -66 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 83 66 149 149 149z" />
+    <glyph glyph-name="play_arrow" unicode="play_arrow" 
+d="M171 405l234 -149l-234 -149v298z" />
+    <glyph glyph-name="play_circle_filled" unicode="play_circle_filled" 
+d="M213 160l128 96l-128 96v-192zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="play_circle_outline" unicode="play_circle_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM213 160v192l128 -96z" />
+    <glyph glyph-name="play_for_work" unicode="play_for_work" 
+d="M128 213h43c0 -47 38 -85 85 -85s85 38 85 85h43c0 -71 -57 -128 -128 -128s-128 57 -128 128zM235 405h42v-119h75l-96 -96l-96 96h75v119z" />
+    <glyph glyph-name="playlist_add" unicode="playlist_add" 
+d="M43 171v42h170v-42h-170zM384 213h85v-42h-85v-86h-43v86h-85v42h85v86h43v-86zM299 384v-43h-256v43h256zM299 299v-43h-256v43h256z" />
+    <glyph glyph-name="playlist_add_check" unicode="playlist_add_check" 
+d="M459 267l32 -32l-149 -150l-97 96l32 32l65 -64zM43 171v42h170v-42h-170zM299 384v-43h-256v43h256zM299 299v-43h-256v43h256z" />
+    <glyph glyph-name="playlist_play" unicode="playlist_play" 
+d="M363 235l106 -64l-106 -64v128zM43 192v43h277v-43h-277zM405 405v-42h-362v42h362zM405 320v-43h-362v43h362z" />
+    <glyph glyph-name="plus_one" unicode="plus_one" 
+d="M309 382l96 23v-277h-42v226l-54 -11v39zM213 341v-85h86v-43h-86v-85h-42v85h-86v43h86v85h42z" />
+    <glyph glyph-name="poll" unicode="poll" 
+d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="polymer" unicode="polymer" 
+d="M405 427l96 -171l-96 -171h-85l96 171l-56 99l-168 -270h-85l-96 171l96 171h85l-96 -171l56 -99l168 270h85z" />
+    <glyph glyph-name="pool" unicode="pool" 
+d="M299 395c0 29 24 53 53 53s53 -24 53 -53s-24 -54 -53 -54s-53 25 -53 54zM185 256c-12 0 -17 3 -25 8c-4 3 -9 5 -16 8l69 69l-21 22c-24 24 -46 32 -85 32v53c53 0 84 -10 117 -43l137 -136c-3 -2 -6 -4 -9 -5c-8 -5 -13 -8 -25 -8s-16 3 -24 8c-10 6 -23 13 -47 13
+s-37 -7 -47 -13c-8 -5 -12 -8 -24 -8zM469 160c-24 0 -36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14s-36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14s-36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14v43
+c12 0 16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7s16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7s16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7v-43zM469 64c-24 0 -36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7
+c-10 -6 -23 -14 -47 -14s-36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14s-37 8 -47 14c-8 5 -12 7 -24 7s-17 -2 -25 -7c-10 -6 -22 -14 -46 -14v43c12 0 16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7s16 2 24 7c10 6 23 14 47 14
+s37 -8 47 -14c8 -5 12 -7 24 -7s17 2 25 7c10 6 22 14 46 14s37 -8 47 -14c8 -5 12 -7 24 -7v-43z" />
+    <glyph glyph-name="portable_wifi_off" unicode="portable_wifi_off" 
+d="M70 459l21 -22l357 -357l-27 -27l-160 161h-1l-4 -1c-23 0 -43 20 -43 43l1 4l-34 34c-6 -12 -9 -24 -9 -38c0 -32 17 -59 42 -74l-21 -37c-38 22 -64 64 -64 111c0 26 7 49 20 69l-30 31c-20 -28 -33 -62 -33 -100c0 -63 34 -118 85 -148l-21 -37
+c-64 37 -106 106 -106 185c0 49 16 95 44 131l-44 45zM256 427c-29 0 -56 -7 -80 -20l-31 31c32 20 70 31 111 31c118 0 213 -95 213 -213c0 -41 -11 -79 -31 -111l-32 31c13 24 21 51 21 80c0 94 -77 171 -171 171zM375 208l-35 35c1 4 1 9 1 13c0 47 -38 85 -85 85
+c-4 0 -9 0 -13 -1l-35 35c15 6 31 9 48 9c71 0 128 -57 128 -128c0 -17 -3 -33 -9 -48z" />
+    <glyph glyph-name="portrait" unicode="portrait" 
+d="M405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM352 165v-16h-192v16c0 32 64 48 96 48s96 -16 96 -48zM256 251c-26 0 -48 22 -48 48s22 48 48 48s48 -22 48 -48
+s-22 -48 -48 -48z" />
+    <glyph glyph-name="power" unicode="power" 
+d="M342 363c21 0 42 -22 42 -43v-117l-75 -75v-64h-106v64l-75 75v117c0 21 21 43 42 43h1v85h42v-85h86v85h42z" />
+    <glyph glyph-name="power_input" unicode="power_input" 
+d="M341 192v43h107v-43h-107zM192 192v43h107v-43h-107zM43 192v43h106v-43h-106zM43 320h405v-43h-405v43z" />
+    <glyph glyph-name="power_settings_new" unicode="power_settings_new" 
+d="M380 402c41 -35 68 -88 68 -146c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 58 27 111 68 146l30 -30c-33 -27 -55 -69 -55 -116c0 -83 66 -149 149 -149s149 66 149 149c0 47 -21 88 -55 115zM277 448v-213h-42v213h42z" />
+    <glyph glyph-name="pregnant_woman" unicode="pregnant_woman" 
+d="M341 235v-86h-64v-106h-64v106h-42v150c0 35 29 64 64 64s64 -29 64 -64c25 -10 42 -35 42 -64zM192 427c0 24 19 42 43 42s42 -18 42 -42s-18 -43 -42 -43s-43 19 -43 43z" />
+    <glyph glyph-name="present_to_all" unicode="present_to_all" 
+d="M213 256h-42l85 85l85 -85h-42v-85h-86v85zM448 106v300h-384v-300h384zM448 448c24 0 43 -19 43 -43v-298c0 -24 -19 -43 -43 -43h-384c-24 0 -43 19 -43 43v298c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="print" unicode="print" 
+d="M384 448v-85h-256v85h256zM405 256c12 0 22 9 22 21s-10 22 -22 22s-21 -10 -21 -22s9 -21 21 -21zM341 107v106h-170v-106h170zM405 341c35 0 64 -29 64 -64v-128h-85v-85h-256v85h-85v128c0 35 29 64 64 64h298z" />
+    <glyph glyph-name="priority_high" unicode="priority_high" 
+d="M213 448h86v-256h-86v256zM213 107c0 24 19 42 43 42s43 -18 43 -42s-19 -43 -43 -43s-43 19 -43 43z" />
+    <glyph glyph-name="public" unicode="public" 
+d="M382 141c28 30 45 71 45 115c0 71 -44 133 -107 158v-9c0 -23 -20 -42 -43 -42h-42v-43c0 -12 -10 -21 -22 -21h-42v-43h128c12 0 21 -9 21 -21v-64h21c19 0 35 -13 41 -30zM235 87v41c-23 0 -43 20 -43 43v21l-102 102c-3 -12 -5 -25 -5 -38c0 -87 66 -159 150 -169z
+M256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="publish" unicode="publish" 
+d="M107 213l149 150l149 -150h-85v-128h-128v128h-85zM107 427h298v-43h-298v43z" />
+    <glyph glyph-name="query_builder" unicode="query_builder" 
+d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="question_answer" unicode="question_answer" 
+d="M363 256c0 -12 -10 -21 -22 -21h-213l-85 -86v299c0 12 9 21 21 21h277c12 0 22 -9 22 -21v-192zM448 384c12 0 21 -9 21 -21v-320l-85 85h-235c-12 0 -21 9 -21 21v43h277v192h43z" />
+    <glyph glyph-name="queue" unicode="queue" 
+d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="queue_music" unicode="queue_music" 
+d="M363 384h106v-43h-64v-192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64c7 0 15 -2 22 -4v175zM64 171v42h171v-42h-171zM320 299v-43h-256v43h256zM320 384v-43h-256v43h256z" />
+    <glyph glyph-name="queue_play_next" unicode="queue_play_next" 
+d="M512 128l-96 -96l-32 32l64 64l-64 64l32 32zM277 299h64v-43h-64v-64h-42v64h-64v43h64v64h42v-64zM448 448c23 0 43 -19 43 -43v-170h-43v170h-384v-256h320v-42h-43v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="radio" unicode="radio" 
+d="M427 256v85h-342v-85h256v43h43v-43h43zM149 85c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM69 381l270 110l14 -36l-176 -71h250c24 0 42 -19 42 -43v-256c0 -23 -18 -42 -42 -42h-342c-24 0 -42 19 -42 42v256c0 18 10 34 26 40z" />
+    <glyph glyph-name="radio_button_checked" unicode="radio_button_checked" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM256 363c59 0 107 -48 107 -107s-48 -107 -107 -107s-107 48 -107 107s48 107 107 107z" />
+    <glyph glyph-name="radio_button_unchecked" unicode="radio_button_unchecked" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="rate_review" unicode="rate_review" 
+d="M384 213v43h-117l-43 -43h160zM128 213h53l147 147c4 4 4 11 0 15l-38 38c-4 4 -11 4 -15 0l-147 -147v-53zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="receipt" unicode="receipt" 
+d="M64 43v426l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32v-426l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32zM384 320v43h-256v-43h256zM384 235v42h-256v-42h256zM384 149v43h-256v-43h256z
+" />
+    <glyph glyph-name="recent_actors" unicode="recent_actors" 
+d="M267 149v16c0 32 -64 48 -96 48s-96 -16 -96 -48v-16h192zM171 347c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM299 405c12 0 21 -9 21 -21v-256c0 -12 -9 -21 -21 -21h-256c-12 0 -22 9 -22 21v256c0 12 10 21 22 21h256zM363 107v298h42v-298
+h-42zM448 405h43v-298h-43v298z" />
+    <glyph glyph-name="record_voice_over" unicode="record_voice_over" 
+d="M428 469c83 -86 83 -215 0 -298l-35 34c59 68 59 166 0 230zM358 398c43 -47 43 -112 0 -155l-36 36c18 25 18 58 0 83zM192 192c57 0 171 -28 171 -85v-43h-342v43c0 57 114 85 171 85zM107 320c0 47 38 85 85 85s85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85z" />
+    <glyph glyph-name="redeem" unicode="redeem" 
+d="M427 213v128h-109l45 -60l-35 -25c-24.0378 32.6288 -48.3187 65.0147 -72 98c-23.6829 -32.9837 -47.9614 -65.3719 -72 -98l-35 25l45 60h-109v-128h342zM427 107v42h-342v-42h342zM192 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM320 427
+c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h47c-2 7 -4 14 -4 21c0 35 29 64 64 64c22 0 41 -11 53 -28l11 -15l11 15c12 17 31 28 53 28
+c35 0 64 -29 64 -64c0 -7 -2 -14 -4 -21h47z" />
+    <glyph glyph-name="redo" unicode="redo" 
+d="M393 286l76 77v-192h-192l78 77c-30 25 -68 40 -110 40c-76 0 -140 -49 -162 -117l-50 16c29 89 113 154 212 154c57 0 109 -21 148 -55z" />
+    <glyph glyph-name="refresh" unicode="refresh" 
+d="M377 377l50 50v-150h-150l69 69c-23 23 -55 38 -90 38c-71 0 -128 -57 -128 -128s57 -128 128 -128c56 0 104 35 121 85h44c-19 -74 -85 -128 -165 -128c-94 0 -170 77 -170 171s76 171 170 171c47 0 90 -19 121 -50z" />
+    <glyph glyph-name="remove" unicode="remove" 
+d="M405 235h-298v42h298v-42z" />
+    <glyph glyph-name="remove_circle" unicode="remove_circle" 
+d="M363 235v42h-214v-42h214zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="remove_circle_outline" unicode="remove_circle_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM149 277h214v-42h-214v42z" />
+    <glyph glyph-name="remove_from_queue" unicode="remove_from_queue" 
+d="M341 299v-43h-170v43h170zM448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="remove_red_eye" unicode="remove_red_eye" 
+d="M256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM256 416c107 0 198 -66 235 -160c-37 -94 -128 -160 -235 -160s-198 66 -235 160c37 94 128 160 235 160z
+" />
+    <glyph glyph-name="remove_shopping_cart" unicode="remove_shopping_cart" 
+d="M149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43zM332 235l-192 192h287c12 0 21 -10 21 -22c0 -4 -1 -7 -3 -10l-76 -138c-7 -13 -21 -22 -37 -22zM158 192h108l-43 43h-50l-19 -35l-1 -3c0 -3 2 -5 5 -5zM485 27l-27 -27l-61 61
+c-8 -11 -20 -18 -34 -18c-23 0 -43 19 -43 42c0 14 7 27 18 35l-30 29h-159c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53l-47 99l-94 94l27 27z" />
+    <glyph glyph-name="reorder" unicode="reorder" 
+d="M64 405h384v-42h-384v42zM64 277v43h384v-43h-384zM64 107v42h384v-42h-384zM64 192v43h384v-43h-384z" />
+    <glyph glyph-name="repeat" unicode="repeat" 
+d="M363 149v86h42v-128h-256v-64l-85 85l85 85v-64h214zM149 363v-86h-42v128h256v64l85 -85l-85 -85v64h-214z" />
+    <glyph glyph-name="repeat_one" unicode="repeat_one" 
+d="M277 192h-32v85h-32v22l43 21h21v-128zM363 149v86h42v-128h-256v-64l-85 85l85 85v-64h214zM149 363v-86h-42v128h256v64l85 -85l-85 -85v64h-214z" />
+    <glyph glyph-name="replay" unicode="replay" 
+d="M256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -71 57 -128 128 -128s128 57 128 128s-57 128 -128 128v-86l-107 107l107 107v-86z" />
+    <glyph glyph-name="replay_10" unicode="replay_&#x31;&#x30;" 
+d="M282 188c0 -3.2653 6.32517 -7 10 -7c2 0 5 0 7 2l4 5s2 4 2 6v43c0 0 -2 4 -2 6c0 2.75261 -8.21183 7 -11 7c-2 0 -4 -1 -6 -3l-4 -4s-3 -4 -3 -6v-43s3 -4 3 -6zM324 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2s-9 0 -13 2s-6 4 -10 6
+c-6.74403 3.37202 -9 19.7461 -9 30v15c0 6 0 13 2 17l7 13s6 6 10 6s9 2 13 2s9 0 13 -2s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM233 171h-20v70l-21 -6v15l38 12h3v-91zM256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -70 58 -128 128 -128
+s128 58 128 128s-58 128 -128 128v-86l-107 107l107 107v-86z" />
+    <glyph glyph-name="replay_30" unicode="replay_&#x33;&#x30;" 
+d="M286 188c0 -3.76553 6.92157 -7 11 -7c2 0 4 0 6 2l4 5s2 4 2 6v43c0 2 -2 4 -2 6c0 2.33563 -7.56075 7 -10 7c-2 0 -5 -1 -7 -3l-4 -4s-2 -4 -2 -6v-43s2 -4 2 -6zM326 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2c-10.126 0 -16.1493 4.57466 -23 8
+c-4 2 -4 7 -6 13s-3 11 -3 17v15c0 6 1 13 3 17l6 13s7 6 11 6s8 2 12 2s9 0 13 -2s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM213 224c8.11936 0 15 4.95913 15 13v4s-2 2 -2 4s-2 2 -4 2h-11s-2 -2 -4 -2s-2 -2 -2 -4v-4h-22c0 9.89385 8.81974 23 18 23c2 0 8 2 10 2
+c8.67272 0 17.6319 -2.81597 24 -6c5.06488 -2.53244 8 -12.109 8 -19v-7s-2 -4 -2 -6s-2 -4 -4 -4s-5 -3 -7 -5c4 -2 9 -4 11 -8s4 -9 4 -13s0 -9 -2 -11s-4 -6 -6 -8s-7 -4 -11 -4s-9 -2 -13 -2s-8 0 -10 2s-7 2 -11 4c-5.58093 2.79046 -9 13.5084 -9 21h18v-4s2 -2 2 -4
+s2 -2 4 -2h11s2 2 4 2s2 2 2 4v11s-2 2 -2 4s-2 2 -4 2h-13v15h8zM256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -70 58 -128 128 -128s128 58 128 128s-58 128 -128 128v-86l-107 107l107 107v-86z" />
+    <glyph glyph-name="replay_5" unicode="replay_&#x35;" 
+d="M252 222c-1.79204 -0.716817 -7 -2.40231 -7 -4c0 -2 -2 -3 -2 -3h-15l5 47h51v-15h-37l-2 -19s2 0 2 2s3 1 3 3s2 0 4 0h4c4 0 9 -1 11 -3s6 -4 8 -6c4.43641 -4.43641 9 -13.6284 9 -23c0 -4 0 -9 -2 -11s-3 -7 -7 -11s-6 -4 -8 -6s-9 -2 -13 -2s-9 0 -11 2s-6 2 -10 4
+c-5.5956 2.7978 -9 11.277 -9 19h17c0 -7.40446 5.29508 -10 13 -10c2 0 4 0 6 2l5 4s2 4 2 6v13l-2 4l-5 5s-4 2 -6 2h-4zM256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -70 58 -128 128 -128s128 58 128 128s-58 128 -128 128v-86l-107 107
+l107 107v-86z" />
+    <glyph glyph-name="reply" unicode="reply" 
+d="M213 320c149 -21 214 -128 235 -235c-53 75 -128 109 -235 109v-87l-149 149l149 149v-85z" />
+    <glyph glyph-name="reply_all" unicode="reply_all" 
+d="M277 320c149 -21 214 -128 235 -235c-53 75 -128 109 -235 109v-87l-149 149l149 149v-85zM149 341l-85 -85l85 -85v-64l-149 149l149 149v-64z" />
+    <glyph glyph-name="report" unicode="report" 
+d="M277 235v128h-42v-128h42zM256 143c15 0 28 13 28 28s-13 27 -28 27s-28 -12 -28 -27s13 -28 28 -28zM336 448l112 -112v-160l-112 -112h-160l-112 112v160l112 112h160z" />
+    <glyph glyph-name="report_problem" unicode="report_problem" 
+d="M277 213v86h-42v-86h42zM277 128v43h-42v-43h42zM21 64l235 405l235 -405h-470z" />
+    <glyph glyph-name="restaurant" unicode="restaurant" 
+d="M341 384c0 38 48 85 107 85v-426h-53v170h-54v171zM235 320v149h42v-149c0 -45 -35 -82 -80 -85v-192h-53v192c-45 3 -80 40 -80 85v149h43v-149h42v149h43v-149h43z" />
+    <glyph glyph-name="restaurant_menu" unicode="restaurant_menu" 
+d="M317 266l-31 -31l147 -147l-30 -30l-147 147l-147 -147l-30 30l208 208c-15 33 -4 79 30 113c41 41 99 48 130 17s24 -90 -17 -131c-34 -34 -80 -44 -113 -29zM173 227l-90 90c-33 33 -33 87 0 120l150 -149z" />
+    <glyph glyph-name="restore" unicode="restore" 
+d="M256 341h32v-90l75 -45l-16 -26l-91 55v106zM277 448c106 0 192 -86 192 -192s-86 -192 -192 -192c-53 0 -100 21 -135 56l30 31c27 -27 64 -44 105 -44c83 0 150 66 150 149s-67 149 -150 149s-149 -66 -149 -149h64l-86 -86l-2 3l-83 83h64c0 106 86 192 192 192z" />
+    <glyph glyph-name="restore_page" unicode="restore_page" 
+d="M256 128c59 0 107 48 107 107s-48 106 -107 106c-38 0 -71 -20 -90 -49l-27 28v-85h85l-34 34c12 24 37 40 66 40c41 0 75 -33 75 -74s-34 -75 -75 -75c-25 0 -48 13 -61 32h-37c16 -38 54 -64 98 -64zM299 469l128 -128v-256c0 -23 -20 -42 -43 -42h-256
+c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42h171z" />
+    <glyph glyph-name="ring_volume" unicode="ring_volume" 
+d="M137 303c0 0 -74 74 -76 75l30 31l76 -76zM277 469v-106h-42v106h42zM451 378c-2 -1 -76 -75 -76 -75l-30 30l76 76zM506 156c4 -4 6 -9 6 -15s-2 -11 -6 -15l-53 -53c-4 -4 -9 -6 -15 -6s-11 2 -15 6c-17 16 -36 30 -57 40c-7 3 -12 11 -12 19v66c-31 10 -64 15 -98 15
+s-67 -5 -98 -15v-66c0 -9 -5 -17 -12 -20c-21 -10 -40 -23 -57 -39c-4 -4 -9 -6 -15 -6s-11 2 -15 6l-53 53c-4 4 -6 9 -6 15s2 11 6 15c65 62 153 100 250 100s185 -38 250 -100z" />
+    <glyph glyph-name="room" unicode="room" 
+d="M256 267c29 0 53 24 53 53s-24 53 -53 53s-53 -24 -53 -53s24 -53 53 -53zM256 469c83 0 149 -66 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 83 66 149 149 149z" />
+    <glyph glyph-name="room_service" unicode="room_service" 
+d="M295 346c83 -17 147 -88 153 -175h-384c6 87 70 158 153 175c-2 5 -4 11 -4 17c0 23 20 42 43 42s43 -19 43 -42c0 -6 -2 -12 -4 -17zM43 149h426v-42h-426v42z" />
+    <glyph glyph-name="rotate_90_degrees_ccw" unicode="rotate_&#x39;&#x30;_degrees_ccw" 
+d="M413 370c75 -75 75 -196 0 -271c-37 -38 -87 -56 -136 -56c-32 0 -63 8 -92 24l32 31c19 -9 39 -13 60 -13c38 0 77 15 106 44c58 58 58 153 0 211c-29 29 -68 44 -106 44v-69l-90 90l90 91v-69c49 0 99 -19 136 -57zM79 237l78 -78l78 78l-78 78zM157 375l138 -138
+l-138 -138l-139 138z" />
+    <glyph glyph-name="rotate_left" unicode="rotate_left" 
+d="M277 425c84 -10 150 -82 150 -169s-66 -159 -150 -169v43c61 10 107 63 107 126s-46 116 -107 126v-83l-97 95l97 97v-66zM151 121l31 31c16 -12 34 -19 53 -22v-43c-30 4 -59 15 -84 34zM130 235c3 -19 10 -37 21 -53l-30 -30c-19 25 -30 53 -34 83h43zM152 330
+c-11 -16 -19 -34 -22 -53h-43c4 30 16 58 35 83z" />
+    <glyph glyph-name="rotate_right" unicode="rotate_right" 
+d="M360 182c12 16 19 34 22 53h43c-4 -30 -15 -58 -34 -83zM277 130c19 3 37 10 53 22l31 -31c-25 -19 -54 -30 -84 -34v43zM425 277h-43c-3 19 -10 37 -22 53l31 30c19 -25 30 -53 34 -83zM332 394l-97 -95v83c-61 -10 -107 -63 -107 -126s46 -116 107 -126v-43
+c-84 10 -150 82 -150 169s66 159 150 169v66z" />
+    <glyph glyph-name="rounded_corner" unicode="rounded_corner" 
+d="M448 341v-106h-43v106c0 35 -29 64 -64 64h-106v43h106c59 0 107 -48 107 -107zM64 64v43h43v-43h-43zM149 64v43h43v-43h-43zM235 64v43h42v-43h-42zM149 405v43h43v-43h-43zM64 405v43h43v-43h-43zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z
+M405 149v43h43v-43h-43zM405 107h43v-43h-43v43z" />
+    <glyph glyph-name="router" unicode="router" 
+d="M320 128v43h-43v-43h43zM245 128v43h-42v-43h42zM171 128v43h-43v-43h43zM405 235c23 0 43 -20 43 -43v-85c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85c0 23 20 43 43 43h213v85h43v-85h42zM412 369l-17 -17c-15 15 -35 21 -54 21s-38 -6 -53 -21l-17 17
+c19 19 44 30 70 30s52 -11 71 -30zM431 386c-26 23 -58 36 -90 36s-63 -13 -89 -36l-17 17c30 30 68 45 106 45s77 -15 107 -45z" />
+    <glyph glyph-name="rowing" unicode="rowing" 
+d="M448 64l-64 -64l-64 64v32l-151 151c-7 -1 -14 -1 -20 -1v46c35 -1 77 18 100 43l30 33c7.60688 7.60688 20.1539 16 35 16h1c26 0 48 -22 48 -48v-123c0 -18 -8 -34 -20 -46l-76 76v49c-13 -11 -31 -22 -49 -30l134 -134h32zM320 491c23 0 43 -20 43 -43
+s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM181 203l54 -54h-43l-75 -74l-32 32z" />
+    <glyph glyph-name="rss_feed" unicode="rss_feed" 
+d="M85 297c117 0 212 -95 212 -212h-61c0 83 -68 151 -151 151v61zM85 417c183 0 332 -149 332 -332h-60c0 150 -122 272 -272 272v60zM85 132c0 26 21 46 47 46s46 -20 46 -46s-20 -47 -46 -47s-47 21 -47 47z" />
+    <glyph glyph-name="rv_hookup" unicode="rv_hookup" 
+d="M363 469l64 -64l-64 -64v43h-171v43h171v42zM384 213v64h-85v-64h85zM235 85c12 0 21 10 21 22s-9 21 -21 21s-22 -9 -22 -21s10 -22 22 -22zM427 149h42v-42h-170c0 -35 -29 -64 -64 -64s-64 29 -64 64h-43c-23 0 -43 19 -43 42v64h150v64h-86v-42l-64 64l64 64v-43h235
+c23 0 43 -20 43 -43v-128z" />
+    <glyph glyph-name="satellite" unicode="satellite" 
+d="M107 128h298l-96 128l-74 -96l-54 64zM107 256c83 0 149 67 149 150h-43c0 -59 -47 -107 -106 -107v-43zM107 406v-65c35 0 64 30 64 65h-64zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="save" unicode="save" 
+d="M320 320v85h-213v-85h213zM256 107c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM363 448l85 -85v-256c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h256z" />
+    <glyph glyph-name="scanner" unicode="scanner" 
+d="M405 149v43h-213v-43h213zM149 149v43h-42v-43h42zM422 284c15 -4 26 -22 26 -39v-117c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85c0 23 20 43 43 43h268l-300 109l15 40z" />
+    <glyph glyph-name="schedule" unicode="schedule" 
+d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="school" unicode="school" 
+d="M256 448l235 -128v-171h-43v148l-192 -105l-235 128zM107 231l149 -82l149 82v-86l-149 -81l-149 81v86z" />
+    <glyph glyph-name="screen_lock_landscape" unicode="screen_lock_landscape" 
+d="M230 299v-22h52v22c0 14 -12 25 -26 25s-26 -11 -26 -25zM213 171c-12 0 -21 9 -21 21v64c0 12 9 21 21 21v22c0 23 19 42 43 42c23 0 43 -18 43 -42v-22c12 0 21 -9 21 -21v-64c0 -12 -9 -21 -21 -21h-86zM405 149v214h-298v-214h298zM448 405c23 0 43 -19 43 -42v-214
+c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h384z" />
+    <glyph glyph-name="screen_lock_portrait" unicode="screen_lock_portrait" 
+d="M363 107v298h-214v-298h214zM363 491c23 0 42 -20 42 -43v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43h214zM230 299v-22h52v22c0 14 -12 25 -26 25s-26 -11 -26 -25zM213 171c-12 0 -21 9 -21 21v64c0 12 9 21 21 21v22
+c0 23 19 42 43 42c23 0 43 -18 43 -42v-22c12 0 21 -9 21 -21v-64c0 -12 -9 -21 -21 -21h-86z" />
+    <glyph glyph-name="screen_lock_rotation" unicode="screen_lock_rotation" 
+d="M358 459v-11h73v11c0 20 -16 36 -36 36s-37 -16 -37 -36zM341 320c-12 0 -21 9 -21 21v86c0 12 9 21 21 21v11c0 29 25 53 54 53s53 -24 53 -53v-11c12 0 21 -9 21 -21v-86c0 -12 -9 -21 -21 -21h-107zM181 75l28 28l81 -81l-14 -1c-134 0 -244 104 -255 235h32
+c8 -80 58 -148 128 -181zM496 240c13 -12 13 -33 0 -46l-136 -135c-12 -13 -32 -13 -45 0l-256 256c-13 12 -13 32 0 45l135 136c12 13 33 13 46 0l52 -52l-30 -30l-45 44l-121 -120l242 -242l120 121l-47 47l30 30z" />
+    <glyph glyph-name="screen_rotation" unicode="screen_rotation" 
+d="M160 54l29 28l81 -81l-14 -1c-134 0 -244 104 -255 235h32c8 -80 57 -148 127 -181zM316 60l136 136l-256 256l-136 -136zM218 475l257 -257c13 -12 13 -32 0 -45l-136 -136c-12 -13 -32 -13 -45 0l-257 257c-13 12 -13 32 0 45l136 136c12 13 32 13 45 0zM352 458
+l-29 -28l-81 81l14 1c134 0 244 -104 255 -235h-32c-8 80 -57 148 -127 181z" />
+    <glyph glyph-name="screen_share" unicode="screen_share" 
+d="M277 203l86 80l-86 80v-46c-83 -12 -116 -68 -128 -125c30 40 69 58 128 58v-47zM427 128h85v-43h-512v43h85c-24 0 -42 20 -42 43v213c0 24 18 43 42 43h342c23 0 42 -19 42 -43v-213c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="sd_card" unicode="sd_card" 
+d="M384 341v86h-43v-86h43zM320 341v86h-43v-86h43zM256 341v86h-43v-86h43zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 256l127 128h171z" />
+    <glyph glyph-name="sd_storage" unicode="sd_storage" 
+d="M384 341v86h-43v-86h43zM320 341v86h-43v-86h43zM256 341v86h-43v-86h43zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 256l127 128h171z" />
+    <glyph glyph-name="search" unicode="search" 
+d="M203 213c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM331 213l106 -106l-32 -32l-106 106v17l-6 6c-24 -21 -56 -33 -90 -33c-77 0 -139 61 -139 138s62 139 139 139s138 -62 138 -139c0 -34 -12 -66 -33 -90l6 -6h17z" />
+    <glyph glyph-name="security" unicode="security" 
+d="M256 491l192 -86v-128c0 -118 -82 -229 -192 -256c-110 27 -192 138 -192 256v128zM256 256v-191c79 25 138 103 149 191h-149zM256 256v188l-149 -66v-122h149z" />
+    <glyph glyph-name="select_all" unicode="select_all" 
+d="M192 320v-128h128v128h-128zM149 149v214h214v-214h-214zM320 405v43h43v-43h-43zM320 64v43h43v-43h-43zM405 149v43h43v-43h-43zM405 320v43h43v-43h-43zM405 64v43h43c0 -23 -20 -43 -43 -43zM405 235v42h43v-42h-43zM235 64v43h42v-43h-42zM192 448v-43h-43v43h43z
+M64 149v43h43v-43h-43zM107 64c-23 0 -43 20 -43 43h43v-43zM405 448c23 0 43 -20 43 -43h-43v43zM277 448v-43h-42v43h42zM64 320v43h43v-43h-43zM149 64v43h43v-43h-43zM64 235v42h43v-42h-43zM64 405c0 23 20 43 43 43v-43h-43z" />
+    <glyph glyph-name="send" unicode="send" 
+d="M43 64v149l320 43l-320 43v149l448 -192z" />
+    <glyph glyph-name="sentiment_dissatisfied" unicode="sentiment_dissatisfied" 
+d="M256 213c50 0 92 -30 109 -74h-35c-15 25 -42 42 -74 42s-59 -17 -74 -42h-35c17 44 59 74 109 74zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213
+s95 213 213 213zM149 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM299 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32z" />
+    <glyph glyph-name="sentiment_neutral" unicode="sentiment_neutral" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM149 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM299 309
+c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM192 213h128v-32h-128v32z" />
+    <glyph glyph-name="sentiment_satisfied" unicode="sentiment_satisfied" 
+d="M256 171c32 0 59 17 74 42h35c-17 -44 -59 -74 -109 -74s-92 30 -109 74h35c15 -25 42 -42 74 -42zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213
+s95 213 213 213zM149 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM299 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32z" />
+    <glyph glyph-name="sentiment_very_dissatisfied" unicode="sentiment_very_dissatisfied" 
+d="M256 213c50 0 92 -30 109 -74h-218c17 44 59 74 109 74zM167 256l-23 23l23 22l-23 23l23 22l22 -22l23 22l23 -22l-23 -23l23 -22l-23 -23l-23 23zM345 346l23 -22l-23 -23l23 -22l-23 -23l-22 23l-23 -23l-23 23l23 22l-23 23l23 22l23 -22zM256 85
+c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="sentiment_very_satisfied" unicode="sentiment_very_satisfied" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM189 300l-22 -23l-23 23l45 45l46 -45l-23 -23zM277 300l46 45l45 -45l-23 -23l-22 23l-23 -23zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469
+c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="settings" unicode="settings" 
+d="M256 181c41 0 75 34 75 75s-34 75 -75 75s-75 -34 -75 -75s34 -75 75 -75zM415 235l45 -35c4 -3 5 -9 2 -14l-43 -74c-3 -5 -8 -6 -13 -4l-53 21c-11 -8 -23 -16 -36 -21l-8 -56c-1 -5 -5 -9 -10 -9h-86c-5 0 -9 4 -10 9l-8 56c-13 5 -25 12 -36 21l-53 -21
+c-5 -2 -10 -1 -13 4l-43 74c-3 5 -2 11 2 14l45 35c-1 7 -1 14 -1 21s0 14 1 21l-45 35c-4 3 -5 9 -2 14l43 74c3 5 8 6 13 4l53 -21c11 8 23 16 36 21l8 56c1 5 5 9 10 9h86c5 0 9 -4 10 -9l8 -56c13 -5 25 -12 36 -21l53 21c5 2 10 1 13 -4l43 -74c3 -5 2 -11 -2 -14
+l-45 -35c1 -7 1 -14 1 -21s0 -14 -1 -21z" />
+    <glyph glyph-name="settings_applications" unicode="settings_applications" 
+d="M368 256c0 5 0 10 -1 15l32 24c3 2 3 7 1 10l-30 52c-2 3 -6 4 -9 3l-37 -15c-8 6 -16 11 -25 15l-6 39c-1 3 -3 6 -7 6h-60c-4 0 -6 -2 -7 -6l-6 -40c-9 -4 -17 -8 -25 -14l-37 15c-3 1 -7 -1 -9 -4l-30 -51c-2 -3 -2 -8 1 -10l32 -24c-1 -5 -1 -10 -1 -15s0 -10 1 -15
+l-32 -24c-3 -2 -3 -7 -1 -10l30 -52c2 -3 6 -4 9 -3l37 15c8 -6 16 -11 25 -15l6 -39c1 -3 3 -6 7 -6h60c4 0 6 2 7 6l6 40c9 4 17 8 25 14l37 -15c3 -1 7 1 9 4l30 51c2 3 2 8 -1 10l-32 24c1 5 1 10 1 15zM405 448c24 0 43 -20 43 -43v-298c0 -23 -19 -43 -43 -43h-298
+c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298zM256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z" />
+    <glyph glyph-name="settings_backup_restore" unicode="settings_backup_restore" 
+d="M256 448c106 0 192 -86 192 -192s-86 -192 -192 -192c-44 0 -85 15 -117 40l30 30c25 -17 55 -27 87 -27c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149h64l-86 -85l-85 85h64c0 106 86 192 192 192zM299 256c0 -23 -20 -43 -43 -43s-43 20 -43 43
+s20 43 43 43s43 -20 43 -43z" />
+    <glyph glyph-name="settings_bluetooth" unicode="settings_bluetooth" 
+d="M317 207l-40 40v-80zM277 430v-80l40 40zM378 390l-92 -91l92 -92l-122 -122h-21v162l-98 -98l-30 30l119 120l-119 119l30 30l98 -98v162h21zM320 0v43h43v-43h-43zM149 0v43h43v-43h-43zM235 0v43h42v-43h-42z" />
+    <glyph glyph-name="settings_brightness" unicode="settings_brightness" 
+d="M256 320v-128c35 0 64 29 64 64s-29 64 -64 64zM171 171v53l-32 32l32 32v53h53l32 32l32 -32h53v-53l32 -32l-32 -32v-53h-53l-32 -32l-32 32h-53zM448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298
+c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="settings_cell" unicode="settings_cell" 
+d="M341 171v256h-170v-256h170zM341 512c23 0 43 -20 43 -43v-341c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43v341c0 23 20 43 43 43h170zM320 0v43h43v-43h-43zM235 0v43h42v-43h-42zM149 0v43h43v-43h-43z" />
+    <glyph glyph-name="settings_ethernet" unicode="settings_ethernet" 
+d="M379 395l116 -139l-116 -139l-33 27l93 112l-93 112zM235 235v42h42v-42h-42zM363 277v-42h-43v42h43zM149 235v42h43v-42h-43zM166 368l-93 -112l93 -112l-33 -27l-116 139l116 139z" />
+    <glyph glyph-name="settings_input_antenna" unicode="settings_input_antenna" 
+d="M256 491c129 0 235 -106 235 -235h-43c0 106 -86 192 -192 192s-192 -86 -192 -192h-43c0 129 106 235 235 235zM277 207v-70l73 -73l-30 -30l-64 64l-64 -64l-30 30l73 73v70c-19 8 -32 27 -32 49c0 29 24 53 53 53s53 -24 53 -53c0 -22 -13 -41 -32 -49zM256 405
+c83 0 149 -66 149 -149h-42c0 59 -48 107 -107 107s-107 -48 -107 -107h-42c0 83 66 149 149 149z" />
+    <glyph glyph-name="settings_input_component" unicode="settings_input_component" 
+d="M363 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-43v90c-25 9 -42 32 -42 60zM277 469v-85h43v-128h-128v128h43v85c0 12 9 22 21 22s21 -10 21 -22zM448 384h43v-128h-128v128h42v85c0 12 10 22 22 22s21 -10 21 -22v-85zM21 171v42h128v-42c0 -28 -17 -51 -42 -60v-90
+h-43v90c-25 9 -43 32 -43 60zM192 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-42v90c-25 9 -43 32 -43 60zM107 469v-85h42v-128h-128v128h43v85c0 12 9 22 21 22s22 -10 22 -22z" />
+    <glyph glyph-name="settings_input_composite" unicode="settings_input_composite" 
+d="M363 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-43v90c-25 9 -42 32 -42 60zM277 469v-85h43v-128h-128v128h43v85c0 12 9 22 21 22s21 -10 21 -22zM448 384h43v-128h-128v128h42v85c0 12 10 22 22 22s21 -10 21 -22v-85zM21 171v42h128v-42c0 -28 -17 -51 -42 -60v-90
+h-43v90c-25 9 -43 32 -43 60zM192 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-42v90c-25 9 -43 32 -43 60zM107 469v-85h42v-128h-128v128h43v85c0 12 9 22 21 22s22 -10 22 -22z" />
+    <glyph glyph-name="settings_input_hdmi" unicode="settings_input_hdmi" 
+d="M171 427v-64h42v42h22v-42h42v42h22v-42h42v64h-170zM384 363h21v-128l-64 -128v-64h-170v64l-64 128v128h21v64c0 23 20 42 43 42h170c23 0 43 -19 43 -42v-64z" />
+    <glyph glyph-name="settings_input_svideo" unicode="settings_input_svideo" 
+d="M331 192c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM373 299c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM256 64c106 0 192 86 192 192s-86 192 -192 192s-192 -86 -192 -192s86 -192 192 -192zM256 491
+c129 0 235 -106 235 -235s-106 -235 -235 -235s-235 106 -235 235s106 235 235 235zM181 192c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM320 373c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32s14 32 32 32h64c18 0 32 -14 32 -32zM171 267
+c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32z" />
+    <glyph glyph-name="settings_overscan" unicode="settings_overscan" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM299 171l-43 -54l-43 54h86zM128 299v-86l-53 43zM384 299l53 -43l-53 -43v86zM256 395l43 -54h-86z" />
+    <glyph glyph-name="settings_phone" unicode="settings_phone" 
+d="M405 320h43v-43h-43v43zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -60 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z
+M363 320v-43h-43v43h43zM277 320v-43h-42v43h42z" />
+    <glyph glyph-name="settings_power" unicode="settings_power" 
+d="M320 0v43h43v-43h-43zM353 417c44 -31 74 -82 74 -140c0 -94 -77 -170 -171 -170s-171 76 -171 170c0 58 30 109 74 140l30 -30c-37 -23 -61 -64 -61 -110c0 -71 57 -128 128 -128s128 57 128 128c0 46 -25 87 -62 109zM277 469v-213h-42v213h42zM235 0v43h42v-43h-42z
+M149 0v43h43v-43h-43z" />
+    <glyph glyph-name="settings_remote" unicode="settings_remote" 
+d="M256 512c65 0 124 -26 166 -69l-30 -30c-35 35 -83 56 -136 56s-101 -21 -136 -56l-30 30c42 42 101 69 166 69zM150 383c27 27 65 44 106 44s79 -17 106 -44l-30 -30c-19 19 -47 31 -76 31s-57 -12 -76 -31zM256 192c23 0 43 20 43 43s-20 42 -43 42s-43 -19 -43 -42
+s20 -43 43 -43zM320 320c12 0 21 -9 21 -21v-256c0 -12 -9 -22 -21 -22h-128c-12 0 -21 10 -21 22v256c0 12 9 21 21 21h128z" />
+    <glyph glyph-name="settings_system_daydream" unicode="settings_system_daydream" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM192 171c-35 0 -64 29 -64 64c0 33 25 60 57 63h4c12 25 37 43 67 43c38 0 69 -28 74 -64h1c29 0 53 -24 53 -53
+s-24 -53 -53 -53h-139z" />
+    <glyph glyph-name="settings_voice" unicode="settings_voice" 
+d="M405 299c0 -73 -58 -134 -128 -144v-70h-42v70c-70 10 -128 71 -128 144h36c0 -64 54 -109 113 -109s113 45 113 109h36zM320 0v43h43v-43h-43zM235 0v43h42v-43h-42zM256 235c-35 0 -64 29 -64 64v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z
+M149 0v43h43v-43h-43z" />
+    <glyph glyph-name="share" unicode="share" 
+d="M384 169c34 0 62 -28 62 -62s-28 -63 -62 -63s-62 29 -62 63c0 5 0 10 1 14l-151 88c-12 -11 -27 -17 -44 -17c-35 0 -64 29 -64 64s29 64 64 64c17 0 32 -6 44 -17l150 87c-1 5 -2 10 -2 15c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64c-17 0 -32 7 -44 18
+l-150 -88c1 -5 2 -10 2 -15s-1 -10 -2 -15l152 -88c11 10 26 16 42 16z" />
+    <glyph glyph-name="shop" unicode="shop" 
+d="M192 128l160 107l-160 85v-192zM213 427v-43h86v43h-86zM341 384h128v-277c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v277h128v43c0 24 18 42 42 42h86c24 0 42 -18 42 -42v-43z" />
+    <glyph glyph-name="shop_two" unicode="shop_two" 
+d="M256 192l117 85l-117 64v-149zM256 448v-43h85v43h-85zM384 405h107v-234c0 -24 -19 -43 -43 -43h-299c-24 0 -42 19 -42 43v234h106v43c0 24 19 43 43 43h85c24 0 43 -19 43 -43v-43zM64 320v-235h341c0 -24 -18 -42 -42 -42h-299c-24 0 -43 18 -43 42v235h43z" />
+    <glyph glyph-name="shopping_basket" unicode="shopping_basket" 
+d="M256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM192 320h128l-64 94zM367 320h102c12 0 22 -9 22 -21c-17.3126 -69.0207 -36.8524 -135.814 -55 -204c-5 -18 -21 -31 -41 -31h-278c-20 0 -36 13 -41 31l-54 198c-1 2 -1 4 -1 6
+c0 12 10 21 22 21h102l93 140c4 6 11 9 18 9s14 -3 18 -9z" />
+    <glyph glyph-name="shopping_cart" unicode="shopping_cart" 
+d="M363 128c23 0 42 -20 42 -43s-19 -42 -42 -42s-43 19 -43 42s20 43 43 43zM21 469h70l20 -42h316c12 0 21 -10 21 -22c0 -4 -1 -7 -3 -10l-76 -138c-7 -13 -21 -22 -37 -22h-159l-19 -35l-1 -3c0 -3 2 -5 5 -5h247v-43h-256c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53
+l-77 162h-43v42zM149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43z" />
+    <glyph glyph-name="short_text" unicode="short_text" 
+d="M85 235h214v-43h-214v43zM85 320h342v-43h-342v43z" />
+    <glyph glyph-name="show_chart" unicode="show_chart" 
+d="M75 118l-32 32l160 160l85 -86l151 170l30 -30l-181 -204l-85 86z" />
+    <glyph glyph-name="shuffle" unicode="shuffle" 
+d="M316 226l67 -67l44 44v-118h-118l44 44l-67 67zM309 427h118v-118l-44 44l-268 -268l-30 30l268 268zM226 316l-30 -30l-111 111l30 30z" />
+    <glyph glyph-name="signal_cellular_4_bar" unicode="signal_cellular_&#x34;_bar" 
+d="M43 43l426 426v-426h-426z" />
+    <glyph glyph-name="signal_cellular_connected_no_internet_4_bar" unicode="signal_cellular_connected_no_internet_&#x34;_bar" 
+d="M43 43l426 426v-128h-85v-298h-341zM427 43v42h42v-42h-42zM427 128v171h42v-171h-42z" />
+    <glyph glyph-name="signal_cellular_no_sim" unicode="signal_cellular_no_sim" 
+d="M78 429l373 -372l-28 -28l-40 41c-6 -3 -13 -6 -20 -6h-214c-23 0 -42 20 -42 43v239l-56 56zM405 405v-249l-242 242l50 50h150c23 0 42 -20 42 -43z" />
+    <glyph glyph-name="signal_cellular_null" unicode="signal_cellular_null" 
+d="M469 469v-426h-426zM427 366l-281 -281h281v281z" />
+    <glyph glyph-name="signal_cellular_off" unicode="signal_cellular_off" 
+d="M102 416l367 -368l-27 -27l-42 43h-379l189 189l-135 136zM448 491v-367l-183 183z" />
+    <glyph glyph-name="signal_wifi_4_bar" unicode="signal_wifi_&#x34;_bar" 
+d="M256 54l-248 309c10 7 105 85 248 85s238 -78 248 -85z" />
+    <glyph glyph-name="signal_wifi_4_bar_lock" unicode="signal_wifi_&#x34;_bar_lock" 
+d="M331 203v-56l-75 -94l-247 310c9 6 104 85 247 85s238 -79 247 -85l-44 -56c-6 2 -13 2 -22 2c-60 0 -106 -46 -106 -106zM469 171v32c0 17 -15 32 -32 32s-32 -15 -32 -32v-32h64zM491 171c11 0 21 -11 21 -22v-85c0 -11 -10 -21 -21 -21h-107c-11 0 -21 10 -21 21v85
+c0 11 10 22 21 22v32c0 30 23 53 53 53s54 -23 54 -53v-32z" />
+    <glyph glyph-name="signal_wifi_off" unicode="signal_wifi_off" 
+d="M70 481c122.302 -122.698 245.474 -244.526 367 -368l-27 -27l-71 71l-83 -103l-248 309c5 4 32 26 78 47l-43 44zM504 363l-116 -145l-221 220c27 6 57 10 89 10c143 0 238 -78 248 -85z" />
+    <glyph glyph-name="sim_card" unicode="sim_card" 
+d="M363 192v85h-43v-85h43zM277 235v42h-42v-42h42zM277 107v85h-42v-85h42zM192 192v85h-43v-85h43zM363 107v42h-43v-42h43zM192 107v42h-43v-42h43zM426 427l1 -342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v256l128 128h171c23 0 42 -19 42 -42z" />
+    <glyph glyph-name="sim_card_alert" unicode="sim_card_alert" 
+d="M277 235v106h-42v-106h42zM277 149v43h-42v-43h42zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 256l127 128h171z" />
+    <glyph glyph-name="skip_next" unicode="skip_next" 
+d="M341 384h43v-256h-43v256zM128 128v256l181 -128z" />
+    <glyph glyph-name="skip_previous" unicode="skip_previous" 
+d="M203 256l181 128v-256zM128 384h43v-256h-43v256z" />
+    <glyph glyph-name="slideshow" unicode="slideshow" 
+d="M405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM213 341l107 -85l-107 -85v170z" />
+    <glyph glyph-name="slow_motion_video" unicode="slow_motion_video" 
+d="M469 256c0 -110 -84 -201 -191 -212v43c84 11 149 83 149 169s-65 158 -149 169v43c107 -11 191 -102 191 -212zM121 91l30 30c24 -18 53 -30 84 -34v-43c-43 4 -82 21 -114 47zM87 235c4 -31 16 -60 34 -83l-30 -31c-26 32 -43 71 -47 114h43zM121 361
+c-18 -24 -30 -53 -34 -84h-43c4 43 21 82 47 114zM235 425c-31 -4 -60 -16 -84 -34l-30 30c32 26 71 43 114 47v-43zM278 303l63 -47c-42.8195 -31.8471 -85.479 -63.8543 -128 -96z" />
+    <glyph glyph-name="smartphone" unicode="smartphone" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="smoke_free" unicode="smoke_free" 
+d="M363 172l-63 63h63v-63zM309 326c-39 0 -71 33 -71 72s32 71 71 71v-32c-22 0 -39 -15 -39 -37s17 -43 39 -43h33c40 0 74 -29 74 -67v-34h-32v27c0 28 -20 43 -42 43h-33zM402 408c40 -19 67 -60 67 -108v-44h-32v44c0 48 -37 87 -85 87v32c22 0 39 18 39 40h32
+c0 -20 -8 -38 -21 -51zM384 235h32v-64h-32v64zM437 235h32v-64h-32v64zM43 384l26 27l363 -363l-27 -27l-149 150h-213v64h149z" />
+    <glyph glyph-name="smoking_rooms" unicode="smoking_rooms" 
+d="M342 294c40 0 74 -28 74 -67v-35h-32v28c0 28 -20 43 -42 43h-33c-39 0 -71 33 -71 72s32 71 71 71v-32c-22 0 -39 -15 -39 -37s17 -43 39 -43h33zM402 347c40 -19 67 -60 67 -107v-48h-32v48c0 48 -37 86 -85 86v32c22 0 39 18 39 40s-17 39 -39 39v32
+c39 0 71 -32 71 -71c0 -20 -8 -38 -21 -51zM384 171h32v-64h-32v64zM437 171h32v-64h-32v64zM43 171h320v-64h-320v64z" />
+    <glyph glyph-name="sms" unicode="sms" 
+d="M363 277v43h-43v-43h43zM277 277v43h-42v-43h42zM192 277v43h-43v-43h43zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="sms_failed" unicode="sms_failed" 
+d="M277 299v85h-42v-85h42zM277 213v43h-42v-43h42zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="snooze" unicode="snooze" 
+d="M192 277v43h128v-38l-77 -90h77v-43h-128v39l77 89h-77zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM469 390l-27 -33l-98 83l27 32z
+M168 440l-98 -82l-27 32l98 82z" />
+    <glyph glyph-name="sort" unicode="sort" 
+d="M64 235v42h256v-42h-256zM64 384h384v-43h-384v43zM64 128v43h128v-43h-128z" />
+    <glyph glyph-name="sort_by_alpha" unicode="sort_by_alpha" 
+d="M336 168h130v-34h-182v27l126 183h-125v34h177v-27zM106 221h83l-42 111zM130 378h35l96 -244h-39l-20 52h-109l-20 -52h-39zM219 99h99l-50 -50zM319 413h-101l50 50z" />
+    <glyph glyph-name="spa" unicode="spa" 
+d="M330 307c-27 -15 -52 -34 -74 -57c-22 23 -47 42 -74 57c5 59 29 116 75 162c45 -45 69 -102 73 -162zM43 299c95.1702 0 171.746 -54.2229 213 -117c41.2966 62.8426 117.856 117 213 117c0 -113 -71 -209 -171 -245c-14 -5 -27 -8 -42 -11c-15 2 -29 6 -42 11
+c-100 36 -171 132 -171 245z" />
+    <glyph glyph-name="space_bar" unicode="space_bar" 
+d="M384 320h43v-128h-342v128h43v-85h256v85z" />
+    <glyph glyph-name="speaker" unicode="speaker" 
+d="M256 256c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM256 85c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM256 427c-24 0 -43 -20 -43 -43s19 -43 43 -43c23 0 43 20 43 43s-20 43 -43 43zM363 469
+c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-214c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h214z" />
+    <glyph glyph-name="speaker_group" unicode="speaker_group" 
+d="M128 405v-341h213v-43h-213c-24 0 -43 20 -43 43v341h43zM245 245c0 29 25 54 54 54s53 -25 53 -54s-24 -53 -53 -53s-54 24 -54 53zM299 160c47 0 85 38 85 85s-38 86 -85 86s-86 -39 -86 -86s39 -85 86 -85zM299 448c-23 0 -43 -19 -43 -43s20 -42 43 -42s42 18 42 42
+s-19 43 -42 43zM388 491c21 0 39 -18 39 -39v-307c0 -21 -18 -38 -39 -38h-179c-21 0 -38 17 -38 38v307c0 21 17 39 38 39h179z" />
+    <glyph glyph-name="speaker_notes" unicode="speaker_notes" 
+d="M384 341v43h-171v-43h171zM384 277v43h-171v-43h171zM320 213v43h-107v-43h107zM171 341v43h-43v-43h43zM171 277v43h-43v-43h43zM171 213v43h-43v-43h43zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="speaker_notes_off" unicode="speaker_notes_off" 
+d="M427 469c23 0 42 -19 42 -42v-256c0 -23 -18 -42 -41 -43l-149 149h105v43h-148l-21 21h169v43h-171v-41l-126 126h340zM128 277h43l-43 43v-43zM171 213v43h-43v-43h43zM27 475l442 -442l-27 -27l-122 122h-192l-85 -85v362l-43 43z" />
+    <glyph glyph-name="speaker_phone" unicode="speaker_phone" 
+d="M320 85v171h-128v-171h128zM317 298c13 0 24 -11 24 -24v-207c0 -13 -11 -24 -24 -24h-122c-13 0 -24 11 -24 24v207c0 13 11 25 24 25zM256 491c64 0 123 -27 165 -69l-30 -30c-35 35 -82 56 -135 56s-100 -21 -135 -56l-30 30c42 42 101 69 165 69zM149 361
+c27 27 65 44 107 44s80 -17 107 -44l-31 -30c-19 19 -46 31 -76 31s-57 -12 -76 -31z" />
+    <glyph glyph-name="spellcheck" unicode="spellcheck" 
+d="M461 265l30 -30l-203 -203l-108 109l30 30l78 -79zM137 277h88l-44 118zM266 171l-25 64h-120l-24 -64h-45l109 277h40l109 -277h-44z" />
+    <glyph glyph-name="star" unicode="star" 
+d="M256 144l-132 -80l35 150l-116 101l153 13l60 141l60 -141l153 -13l-116 -101l35 -150z" />
+    <glyph glyph-name="star_border" unicode="star_border" 
+d="M256 183l80 -48l-21 91l71 62l-94 8l-36 86l-36 -86l-94 -8l71 -62l-21 -91zM469 315l-116 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141z" />
+    <glyph glyph-name="star_half" unicode="star_half" 
+d="M256 183l80 -48l-21 91l71 62l-94 8l-36 86v-199zM469 315l-116 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141z" />
+    <glyph glyph-name="stars" unicode="stars" 
+d="M346 128l-24 103l80 69l-105 9l-41 96l-41 -97l-105 -8l80 -69l-24 -103l90 54zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="stay_current_landscape" unicode="stay_current_landscape" 
+d="M405 363h-298v-214h298v214zM22 363c0 23 19 42 42 42h384c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42z" />
+    <glyph glyph-name="stay_current_portrait" unicode="stay_current_portrait" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="stay_primary_landscape" unicode="stay_primary_landscape" 
+d="M405 363h-298v-214h298v214zM22 363c0 23 19 42 42 42h384c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42z" />
+    <glyph glyph-name="stay_primary_portrait" unicode="stay_primary_portrait" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="stop" unicode="stop" 
+d="M128 384h256v-256h-256v256z" />
+    <glyph glyph-name="stop_screen_share" unicode="stop_screen_share" 
+d="M149 192c20 28 45 44 78 52l-34 34c-25 -24 -37 -54 -44 -86zM51 475l421 -421l-27 -27l-58 58h-387v43h85c-24 0 -42 19 -42 42v214c0 13 5 23 14 31l-33 33zM469 170c0 -16 -9 -30 -22 -37l-118 118l34 32l-86 79v-45c-4 -1 -7 -1 -11 -2l-112 111h273
+c23 0 42 -18 42 -42v-214zM453 128h59v-43h-17z" />
+    <glyph glyph-name="storage" unicode="storage" 
+d="M85 277v-42h43v42h-43zM43 213v86h426v-86h-426zM128 363v42h-43v-42h43zM43 427h426v-86h-426v86zM85 149v-42h43v42h-43zM43 85v86h426v-86h-426z" />
+    <glyph glyph-name="store" unicode="store" 
+d="M256 128v85h-128v-85h128zM448 213h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM427 427v-43h-342v43h342z" />
+    <glyph glyph-name="store_mall_directory" unicode="store_mall_directory" 
+d="M256 128v85h-128v-85h128zM448 213h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM427 427v-43h-342v43h342z" />
+    <glyph glyph-name="straighten" unicode="straighten" 
+d="M448 171v170h-43v-85h-42v85h-43v-85h-43v85h-42v-85h-43v85h-43v-85h-42v85h-43v-170h384zM448 384c23 0 43 -20 43 -43v-170c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v170c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="streetview" unicode="streetview" 
+d="M245 384c0 -38 16 -73 41 -98l-209 -209c-8 8 -13 18 -13 30v298c0 23 20 43 43 43h154c-10 -19 -16 -41 -16 -64zM277 384c0 59 48 107 107 107s107 -48 107 -107s-48 -107 -107 -107s-107 48 -107 107zM268 206c32 24 73 39 116 39c22 0 44 -4 64 -11v-127
+c0 -23 -20 -43 -43 -43h-149v117c0 10 5 19 12 25z" />
+    <glyph glyph-name="strikethrough_s" unicode="strikethrough_s" 
+d="M200 232c0 -38.1216 24.1545 -54 62 -54c26.1564 0 49 10.6702 49 36c0 23.9161 -12.6848 29.3424 -30 38c-3 1 -8 3 -12 4h-205v43h384v-43h-83c1 -2 3 -5 4 -7c4 -10 7 -22 7 -35c0 -46.2545 -30.1882 -69.4824 -67 -80c-14 -4 -29 -6 -46 -6c-10 0 -21 1 -31 3
+c-21.9156 4.38312 -40.6035 10.4527 -56 22c-22.8363 17.1272 -39 39.9131 -39 79h63zM311 352c0 30.7771 -19.602 45 -51 45c-22.5729 0 -39.6285 -7.25692 -47 -22c-2 -4 -3 -9 -3 -14c0 -10 6 -19 16 -26c8 -5 16 -10 30 -15h-98c-1 2 -3 3 -4 5c-6 10 -8 22 -8 36
+c0 28.7417 14.9303 49.3443 32 63c20.5411 14.3788 47.8126 24 83 24c35.0657 0 64.1326 -10.0193 83 -27c17.5603 -15.8042 31 -37.9468 31 -69h-64z" />
+    <glyph glyph-name="style" unicode="style" 
+d="M125 91v135l74 -178h-31c-23 0 -43 20 -43 43zM168 325c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22zM470 172c9 -22 -1 -47 -23 -56l-157 -65c-5 -2 -11 -3 -17 -3c-17 0 -32 10 -39 26l-106 256c-2 6 -3 11 -3 17c0 16 10 31 26 38l158 65
+c6 2 11 3 17 3c16 0 31 -10 38 -26zM54 93c-22 9 -32 33 -23 55l52 125v-192z" />
+    <glyph glyph-name="subdirectory_arrow_left" unicode="subdirectory_arrow_left" 
+d="M235 320l30 -30l-77 -77h196v214h43v-256h-239l77 -77l-30 -30l-128 128z" />
+    <glyph glyph-name="subdirectory_arrow_right" unicode="subdirectory_arrow_right" 
+d="M405 192l-128 -128l-30 30l77 77h-239v256h43v-214h196l-77 77l30 30z" />
+    <glyph glyph-name="subject" unicode="subject" 
+d="M85 405h342v-42h-342v42zM85 192v43h342v-43h-342zM427 320v-43h-342v43h342zM299 149v-42h-214v42h214z" />
+    <glyph glyph-name="subscriptions" unicode="subscriptions" 
+d="M341 171l-128 69v-139zM469 256v-171c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v171c0 23 19 43 42 43h342c23 0 42 -20 42 -43zM384 469v-42h-256v42h256zM427 341h-342v43h342v-43z" />
+    <glyph glyph-name="subtitles" unicode="subtitles" 
+d="M427 213v43h-214v-43h214zM427 128v43h-86v-43h86zM299 128v43h-214v-43h214zM85 256v-43h86v43h-86zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="subway" unicode="subway" 
+d="M384 173v147c0 56 -57 64 -128 64c-64 0 -128 -8 -128 -64v-147c0 -31 25 -56 56 -56l-24 -24v-8h36l32 32h60l32 -32h32v8l-24 24c31 0 56 25 56 56zM380 452c57 -22 89 -69 89 -129v-280h-426v280c0 60 32 107 89 129c38 15 84 17 124 17s86 -2 124 -17zM150 320h213
+v-107h-213v107zM160 171c0 12 9 21 21 21s22 -9 22 -21s-10 -22 -22 -22s-21 10 -21 22zM309 171c0 12 10 21 22 21s21 -9 21 -21s-9 -22 -21 -22s-22 10 -22 22z" />
+    <glyph glyph-name="supervisor_account" unicode="supervisor_account" 
+d="M192 235c14 0 32 -2 51 -6c-44 -24 -51 -56 -51 -74v-48h-149v53c0 50 99 75 149 75zM352 213c39 0 117 -19 117 -58v-48h-234v48c0 39 78 58 117 58zM192 277c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM352 256c-29 0 -53 24 -53 53s24 54 53 54
+s53 -25 53 -54s-24 -53 -53 -53z" />
+    <glyph glyph-name="surround_sound" unicode="surround_sound" 
+d="M256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM377 135c33 33 50 77 50 121s-17 88 -50 121l-31 -31c25 -25 38 -57 38 -90s-12 -66 -37 -91zM256 171c47 0 85 38 85 85s-38 85 -85 85s-85 -38 -85 -85s38 -85 85 -85zM166 166
+c-25 25 -38 57 -38 90s12 66 37 91l-30 30c-33 -33 -50 -77 -50 -121s17 -88 50 -121zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="swap_calls" unicode="swap_calls" 
+d="M384 427l85 -86h-64v-149c0 -47 -38 -85 -85 -85s-85 38 -85 85v149c0 23 -20 43 -43 43s-43 -20 -43 -43v-149h64l-85 -85l-85 85h64v149c0 47 38 86 85 86s85 -39 85 -86v-149c0 -23 20 -43 43 -43s43 20 43 43v149h-64z" />
+    <glyph glyph-name="swap_horiz" unicode="swap_horiz" 
+d="M448 320l-85 -85v64h-150v42h150v64zM149 277v-64h150v-42h-150v-64l-85 85z" />
+    <glyph glyph-name="swap_vert" unicode="swap_vert" 
+d="M192 448l85 -85h-64v-150h-42v150h-64zM341 149h64l-85 -85l-85 85h64v150h42v-150z" />
+    <glyph glyph-name="swap_vertical_circle" unicode="swap_vertical_circle" 
+d="M373 192h-53v85h-43v-85h-53l75 -75zM139 320h53v-85h43v85h53l-75 75zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="switch_camera" unicode="switch_camera" 
+d="M320 181l75 75l-75 75v-54h-128v54l-75 -75l75 -75v54h128v-54zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68l39 42h128l39 -42h68z" />
+    <glyph glyph-name="switch_video" unicode="switch_video" 
+d="M277 181l75 75l-75 75v-54h-128v54l-74 -75l74 -75v54h128v-54zM384 309l85 86v-278l-85 86v-75c0 -12 -9 -21 -21 -21h-299c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h299c12 0 21 -9 21 -21v-75z" />
+    <glyph glyph-name="sync" unicode="sync" 
+d="M256 128v64l85 -85l-85 -86v64c-94 0 -171 77 -171 171c0 33 10 65 27 91l31 -31c-10 -18 -15 -38 -15 -60c0 -71 57 -128 128 -128zM256 427c94 0 171 -77 171 -171c0 -33 -10 -65 -27 -91l-31 31c10 18 15 38 15 60c0 71 -57 128 -128 128v-64l-85 85l85 86v-64z" />
+    <glyph glyph-name="sync_disabled" unicode="sync_disabled" 
+d="M427 427l-51 -51c31 -31 51 -73 51 -120c0 -33 -10 -64 -26 -90l-32 31c9 18 15 38 15 59c0 35 -15 67 -38 90l-47 -47v128h128zM61 397l27 27l335 -336l-27 -27l-50 50c-15 -9 -31 -16 -48 -20v44c6 2 12 5 17 8l-172 172c-9 -18 -15 -38 -15 -59c0 -35 15 -67 38 -90
+l47 47v-128h-128l51 51c-31 31 -51 73 -51 120c0 33 10 64 26 90zM213 377c-6 -2 -11 -5 -16 -8l-31 32c15 9 30 16 47 20v-44z" />
+    <glyph glyph-name="sync_problem" unicode="sync_problem" 
+d="M235 235v128h42v-128h-42zM448 427l-50 -51c31 -31 50 -73 50 -120c0 -80 -54 -146 -128 -165v44c50 17 85 65 85 121c0 35 -14 67 -37 90l-48 -47v128h128zM235 149v43h42v-43h-42zM64 256c0 80 54 146 128 165v-44c-50 -17 -85 -65 -85 -121c0 -35 14 -67 37 -90l48 47
+v-128h-128l50 51c-31 31 -50 73 -50 120z" />
+    <glyph glyph-name="system_update" unicode="system_update" 
+d="M341 235l-85 -86l-85 86h64v106h42v-106h64zM363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="system_update_alt" unicode="system_update_alt" 
+d="M448 437c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h128v-42h-128v-299h384v299h-128v42h128zM256 160l-85 85h64v192h42v-192h64z" />
+    <glyph glyph-name="tab" unicode="tab" 
+d="M448 107v213h-171v85h-213v-298h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="tab_unselected" unicode="tab_unselected" 
+d="M363 64v43h42v-43h-42zM277 64v43h43v-43h-43zM448 235v42h43v-42h-43zM448 64v43h43c0 -23 -20 -43 -43 -43zM107 405v43h42v-43h-42zM107 64v43h42v-43h-42zM192 405v43h43v-43h-43zM448 149v43h43v-43h-43zM448 448c23 0 43 -20 43 -43v-85h-214v128h171zM64 64
+c-23 0 -43 20 -43 43h43v-43zM21 149v43h43v-43h-43zM192 64v43h43v-43h-43zM21 405c0 23 20 43 43 43v-43h-43zM21 235v42h43v-42h-43zM21 320v43h43v-43h-43z" />
+    <glyph glyph-name="tablet" unicode="tablet" 
+d="M405 128v256h-298v-256h298zM448 427c23 0 43 -20 43 -43l-1 -256c0 -23 -19 -43 -42 -43h-384c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="tablet_android" unicode="tablet_android" 
+d="M411 107v341h-310v-341h310zM299 43v21h-86v-21h86zM384 512c35 0 64 -29 64 -64v-384c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h256z" />
+    <glyph glyph-name="tablet_mac" unicode="tablet_mac" 
+d="M405 107v341h-320v-341h320zM245 21c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM395 512c29 0 53 -24 53 -53v-406c0 -29 -24 -53 -53 -53h-299c-29 0 -53 24 -53 53v406c0 29 24 53 53 53h299z" />
+    <glyph glyph-name="tag_faces" unicode="tag_faces" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="tap_and_play" unicode="tap_and_play" 
+d="M363 490c23 0 42 -19 42 -42v-363c0 -23 -19 -42 -42 -42h-45c-2 30 -9 58 -20 85h65v277h-214v-128c-14 6 -27 11 -42 14v157c0 23 19 43 42 43zM43 256c130 0 234 -105 234 -235h-42c0 106 -86 192 -192 192v43zM43 85c35 0 64 -29 64 -64h-64v64zM43 171
+c83 0 149 -67 149 -150h-43c0 59 -47 107 -106 107v43z" />
+    <glyph glyph-name="terrain" unicode="terrain" 
+d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" />
+    <glyph glyph-name="text_fields" unicode="text_fields" 
+d="M459 320v-64h-64v-149h-64v149h-64v64h192zM53 427h278v-64h-107v-256h-64v256h-107v64z" />
+    <glyph glyph-name="text_format" unicode="text_format" 
+d="M256 384l-40 -107h80zM203 239l-20 -47h-44l101 235h32l101 -235h-44l-20 47h-106zM107 149h298v-42h-298v42z" />
+    <glyph glyph-name="textsms" unicode="textsms" 
+d="M363 277v43h-43v-43h43zM277 277v43h-42v-43h42zM192 277v43h-43v-43h43zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="texture" unicode="texture" 
+d="M198 64l250 250v-61l-189 -189h-61zM448 107c0 -22.9739 -20.0355 -43 -43 -43h-42l85 85v-42zM107 448h42l-85 -85v42c0 23 20 43 43 43zM253 448h61l-250 -250v61zM416 446c15 -4 27 -15 31 -30l-351 -350c-14.6749 4.19283 -25.8059 15.3206 -30 30z" />
+    <glyph glyph-name="theaters" unicode="theaters" 
+d="M384 320v43h-43v-43h43zM384 235v42h-43v-42h43zM384 149v43h-43v-43h43zM171 320v43h-43v-43h43zM171 235v42h-43v-42h43zM171 149v43h-43v-43h43zM384 448h43v-384h-43v43h-43v-43h-170v43h-43v-43h-43v384h43v-43h43v43h170v-43h43v43z" />
+    <glyph glyph-name="thumb_down" unicode="thumb_down" 
+d="M405 448h86v-256h-86v256zM320 448c23 0 43 -20 43 -43v-213c0 -12 -5 -22 -13 -30l-140 -141l-23 23c-6 6 -9 13 -9 22v7l21 98h-135c-23 0 -43 19 -43 42l1 2h-1v41c0 6 1 11 3 16l65 150c6 15 21 26 39 26h192z" />
+    <glyph glyph-name="thumb_up" unicode="thumb_up" 
+d="M491 299l-1 -2h1v-41c0 -6 -1 -11 -3 -16l-65 -150c-6 -15 -21 -26 -39 -26h-192c-23 0 -43 20 -43 43v213c0 12 5 22 13 30l140 141l23 -23c6 -6 9 -13 9 -22v-7l-21 -98h135c23 0 43 -19 43 -42zM21 64v256h86v-256h-86z" />
+    <glyph glyph-name="thumbs_up_down" unicode="thumbs_up_down" 
+d="M480 299c18 0 32 -14 32 -32v-139c0 -9 -3 -17 -9 -23l-106 -105l-17 17c-4 4 -7 10 -7 17c4.95149 24.3818 10.0081 48.6586 15 73h-111c-12 0 -21 9 -21 21v27c0 4 1 7 2 11l49 113c5 11 16 20 29 20h144zM256 384v-27c0 -4 -1 -7 -2 -11l-49 -113
+c-5 -11 -16 -20 -29 -20h-144c-18 0 -32 14 -32 32v139c0 9 3 17 9 23l106 105l17 -17c4 -4 7 -10 7 -17c-4.95149 -24.3818 -10.0081 -48.6586 -15 -73h111c12 0 21 -9 21 -21z" />
+    <glyph glyph-name="time_to_leave" unicode="time_to_leave" 
+d="M107 299h298l-32 96h-234zM373 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 405l44 -128v-170c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v21h-256v-21
+c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v170l44 128c4 13 17 22 31 22h234c14 0 27 -9 31 -22z" />
+    <glyph glyph-name="timelapse" unicode="timelapse" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM346 346c50 -50 51 -130 1 -180s-131 -50 -181 0l90 90v128c33 0 65 -13 90 -38z" />
+    <glyph glyph-name="timeline" unicode="timeline" 
+d="M491 341c0 -23 -20 -42 -43 -42c-4 0 -8 0 -11 1l-76 -76c1 -3 2 -7 2 -11c0 -23 -20 -42 -43 -42s-43 19 -43 42c0 4 1 8 2 11l-55 55c-3 -1 -7 -2 -11 -2s-8 1 -11 2l-97 -97c1 -3 2 -7 2 -11c0 -23 -20 -43 -43 -43s-43 20 -43 43s20 42 43 42c4 0 8 0 11 -1l97 97
+c-1 3 -1 7 -1 11c0 23 19 43 42 43s43 -20 43 -43c0 -4 0 -8 -1 -11l54 -54c3 1 7 1 11 1s8 0 11 -1l76 75c-1 3 -2 7 -2 11c0 23 20 43 43 43s43 -20 43 -43z" />
+    <glyph glyph-name="timer" unicode="timer" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM406 354c26 -33 42 -74 42 -119c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192c45 0 87 -17 120 -43l30 31c11 -9 21 -19 30 -30zM235 213v128h42v-128h-42zM320 491
+v-43h-128v43h128z" />
+    <glyph glyph-name="timer_10" unicode="timer_&#x31;&#x30;" 
+d="M275 230v54c0 23.1679 -2.28229 40.1372 -10 53c-5.32529 10.6506 -15.2041 15 -30 15c-6 0 -13 -1 -18 -3c-19.376 -11.6256 -23 -33.9937 -23 -66v-53c0 -13 0 -24 2 -33s6 -15 9 -21c5.59145 -11.1829 14.1701 -16 30 -16c15.4236 0 24.6161 5.23229 30 16
+c3 6 6 12 8 21s2 20 2 33zM152 277c0 64.1175 20.6864 109 83 109c25.9331 0 47.8484 -8.37646 60 -24c15.2136 -19.5604 22 -48.5586 22 -85v-41c0 -63.9076 -19.6435 -110 -82 -110c-62.0914 0 -83 46.0788 -83 110v41zM436 289c-16.3185 0 -30 -6.67853 -30 -23
+c0 -14.5467 7.81248 -15.525 19 -20c5 -2 12 -4 19 -5c11 -2 19 -5 28 -8s16 -8 22 -12s10 -10 13 -16s5 -12 5 -21c0 -30.9206 -20.0931 -44.031 -44 -52c-9 -3 -19 -4 -30 -4c-35.9519 0 -63.4589 14.4041 -74 39c-3 7 -5 14 -5 22h41c0 -21.2888 17.0766 -30 38 -30
+c18.6968 0 33 5.89308 33 23c0 13.5739 -8.51234 16.8049 -19 21c-12.7341 5.09362 -34.9088 9.09079 -48 14c-8 3 -14 7 -20 11c-11.0546 7.36974 -19 18.5758 -19 36c0 27.5628 20.3776 44.7925 42 52c9 3 18 4 29 4c40.9316 0 75 -19.1355 75 -59h-42
+c0 12.2774 -7.84356 22.4609 -18 25c-4 1 -10 3 -15 3zM0 347l101 37h6v-256h-43v205l-64 -22v36z" />
+    <glyph glyph-name="timer_3" unicode="timer_&#x33;" 
+d="M374 289c-15.9409 0 -31 -7.57315 -31 -23c0 -13.6828 9.30955 -15.7238 20 -20c5 -2 11 -4 18 -5c11 -2 20 -5 29 -8s16 -8 22 -12s10 -10 13 -16s5 -12 5 -21c0 -30.9206 -20.0931 -44.031 -44 -52c-9 -3 -20 -4 -31 -4c-35.3954 0 -62.613 14.7638 -73 39
+c-3 7 -5 14 -5 22h40c0 -20.4241 18.5387 -30 39 -30c18.6968 0 33 5.89308 33 23c0 13.5739 -8.51234 16.8049 -19 21c-5 2 -13 4 -21 6c-18.808 3.76159 -34.9505 10.3003 -48 19c-10.5283 7.01889 -18 19.4522 -18 36c0 27.5628 20.3776 44.7925 42 52c9 3 18 4 29 4
+c40.9316 0 75 -19.1355 75 -59h-42c0 13.019 -8.2055 22.3014 -19 25c-4 1 -9 3 -14 3zM215 259c24.7243 -9.2716 42 -25.484 42 -58c0 -25.5996 -8.85495 -43.6412 -24 -55c-14.0356 -12.0305 -34.4533 -20 -60 -20c-46.8771 0 -84 25.2474 -84 72h43
+c0 -11.5043 4.1483 -22.8612 11 -28c7.35188 -5.51391 17.5339 -10 30 -10c27.0755 0 42 14.0756 42 41c0 28.626 -17.0664 41 -46 41h-26v33h25c20.5078 0 35.1083 8.27068 41 23c2 5 2 10 2 16c0 24.8875 -12.4571 38 -38 38c-18.723 0 -29.7305 -7.46097 -36 -20
+c-2 -4 -3 -9 -3 -15h-42c0 34.3341 22.95 53.98 48 64c10 3 21 5 33 5c48.7123 0 80 -23.4793 80 -72c0 -28.4847 -18.378 -45.189 -38 -55z" />
+    <glyph glyph-name="timer_off" unicode="timer_off" 
+d="M256 85c27 0 53 8 75 21l-204 204c-13 -22 -20 -48 -20 -75c0 -83 66 -150 149 -150zM64 427l379 -379l-27 -27l-54 54c-31 -20 -67 -32 -106 -32c-106 0 -192 86 -192 192c0 39 12 76 32 106l-59 59zM235 311v30h42v-73zM320 491v-43h-128v43h128zM406 415l30 -30
+l-30 -31c26 -33 42 -74 42 -119c0 -39 -12 -76 -32 -106l-31 31c13 22 20 48 20 75c0 83 -66 149 -149 149c-27 0 -52 -7 -74 -20l-32 31c30 20 67 32 106 32c45 0 87 -16 120 -42z" />
+    <glyph glyph-name="title" unicode="title" 
+d="M107 427h298v-64h-117v-256h-64v256h-117v64z" />
+    <glyph glyph-name="toc" unicode="toc" 
+d="M405 235v42h43v-42h-43zM405 363h43v-43h-43v43zM405 149v43h43v-43h-43zM64 149v43h299v-43h-299zM64 235v42h299v-42h-299zM64 320v43h299v-43h-299z" />
+    <glyph glyph-name="today" unicode="today" 
+d="M149 299h107v-107h-107v107zM405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21z" />
+    <glyph glyph-name="toll" unicode="toll" 
+d="M64 256c0 -56 35 -104 85 -121v-44c-74 19 -128 85 -128 165s54 146 128 165v-44c-50 -17 -85 -65 -85 -121zM320 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM320 427c94 0 171 -77 171 -171s-77 -171 -171 -171s-171 77 -171 171
+s77 171 171 171z" />
+    <glyph glyph-name="tonality" unicode="tonality" 
+d="M421 213c2 7 3 15 4 22h-148v-22h144zM389 149c5 7 11 15 15 22h-127v-22h112zM277 87c22 3 43 10 62 20h-62v-20zM277 299v-22h148c-1 7 -2 15 -4 22h-144zM277 363v-22h127c-4 7 -10 15 -15 22h-112zM277 425v-20h62c-19 10 -40 17 -62 20zM235 87v338
+c-84 -10 -150 -82 -150 -169s66 -159 150 -169zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="touch_app" unicode="touch_app" 
+d="M402 173c11 -5 19 -16 19 -29v-4l-16 -113c-2 -16 -15 -27 -31 -27h-145c-9 0 -16 3 -22 9l-106 106l17 17c4 4 10 7 17 7c2 0 3 -1 5 -1l73 -15v229c0 18 14 32 32 32s32 -14 32 -32v-128h17c4 0 7 -1 11 -2zM192 272c-26 17 -43 47 -43 80c0 53 43 96 96 96
+s96 -43 96 -96c0 -33 -16 -63 -42 -80v80c0 29 -25 53 -54 53s-53 -24 -53 -53v-80z" />
+    <glyph glyph-name="toys" unicode="toys" 
+d="M256 256c0 -64 -53 -117 -117 -117s-118 53 -118 117h235zM256 256c-64 0 -117 53 -117 117s53 118 117 118v-235zM256 256c64 0 117 -53 117 -117s-53 -118 -117 -118v235zM256 256c0 64 53 117 117 117s118 -53 118 -117h-235z" />
+    <glyph glyph-name="track_changes" unicode="track_changes" 
+d="M407 407c39 -39 62 -92 62 -151c0 -118 -95 -213 -213 -213s-213 95 -213 213s95 213 213 213h21v-176c13 -7 22 -21 22 -37c0 -23 -20 -43 -43 -43s-43 20 -43 43c0 16 9 30 22 37v45c-37 -10 -64 -42 -64 -82c0 -47 38 -85 85 -85s85 38 85 85c0 23 -10 44 -25 60
+l30 30c23 -23 38 -55 38 -90c0 -71 -57 -128 -128 -128s-128 57 -128 128c0 63 46 116 107 126v43c-84 -10 -150 -82 -150 -169c0 -94 77 -171 171 -171s171 77 171 171c0 47 -19 90 -50 121z" />
+    <glyph glyph-name="traffic" unicode="traffic" 
+d="M256 320c24 0 43 20 43 43c0 24 -20 42 -43 42c-24 0 -43 -18 -43 -42c0 -23 19 -43 43 -43zM256 213c24 0 43 20 43 43s-20 43 -43 43c-24 0 -43 -20 -43 -43s19 -43 43 -43zM256 107c24 0 43 19 43 42s-20 43 -43 43c-24 0 -43 -20 -43 -43s19 -42 43 -42zM427 299
+c0 -40 -27 -73 -64 -83v-24h64c0 -40 -27 -72 -64 -82v-25c0 -12 -10 -21 -22 -21h-170c-12 0 -22 9 -22 21v25c-37 10 -64 42 -64 82h64v24c-37 10 -64 43 -64 83h64v24c-37 10 -64 42 -64 82h64v22c0 12 10 21 22 21h170c12 0 22 -9 22 -21v-22h64c0 -40 -27 -72 -64 -82
+v-24h64z" />
+    <glyph glyph-name="train" unicode="train" 
+d="M352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM277 299h107v85h-107v-85zM235 299v85h-107v-85h107zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 469c94 0 171 -10 171 -85v-203c0 -41 -34 -74 -75 -74
+l32 -32v-11h-43l-42 43h-81l-42 -43h-48v11l32 32c-41 0 -75 33 -75 74v203c0 75 86 85 171 85z" />
+    <glyph glyph-name="tram" unicode="tram" 
+d="M363 213v107h-214v-107h214zM256 117c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM405 151c0 -36 -19 -66 -55 -66h2l32 -32v-10h-43l-42 42h-81l-42 -42h-48v10l34 34c-30 7 -55 33 -55 64v180c0 59 60 72 127 74l17 32h-102v32h214v-32h-70
+l-16 -32c73 -2 128 -14 128 -74v-180z" />
+    <glyph glyph-name="transfer_within_a_station" unicode="transfer_within_a_station" 
+d="M123 322l-59 -301h45l37 171l46 -43v-128h43v161l-44 44l13 64c28 -34 69 -55 116 -55v42c-39 0 -74 22 -93 53l-20 34c-7 13 -21 20 -36 20c-5 0 -11 -1 -16 -3l-112 -46v-100h42v71l38 16zM203 395c-23 0 -43 19 -43 42s20 43 43 43s42 -20 42 -43s-19 -42 -42 -42z
+M416 91v37l53 -53l-53 -54v38h-117v32h117zM352 181h117v-32h-117v-37l-53 53l53 54v-38z" />
+    <glyph glyph-name="transform" unicode="transform" 
+d="M213 341v43h128c23 0 43 -20 43 -43v-128h-43v128h-128zM469 128h-85v-43h43l-64 -64l-64 64h42v43h-170c-23 0 -43 20 -43 43v170h-85v43h85v43h-43l64 64l64 -64h-42v-256h298v-43z" />
+    <glyph glyph-name="translate" unicode="translate" 
+d="M339 149h69l-35 93zM395 299l96 -256h-43l-24 64h-101l-24 -64h-43l96 256h43zM275 191l-17 -44l-66 66l-107 -106l-30 30l109 107c-27 30 -48 62 -64 97h43c13 -25 29 -49 49 -71c31 34 54 73 68 114h-239v43h150v42h42v-42h150v-43h-63c-16 -50 -42 -98 -79 -139l-1 -1
+z" />
+    <glyph glyph-name="trending_down" unicode="trending_down" 
+d="M341 128l49 49l-104 104l-85 -85l-158 158l30 30l128 -128l85 85l134 -134l49 49v-128h-128z" />
+    <glyph glyph-name="trending_flat" unicode="trending_flat" 
+d="M469 256l-85 -85v64h-320v42h320v64z" />
+    <glyph glyph-name="trending_up" unicode="trending_up" 
+d="M341 384h128v-128l-49 49l-134 -134l-85 85l-128 -128l-30 30l158 158l85 -85l104 104z" />
+    <glyph glyph-name="tune" unicode="tune" 
+d="M320 320v128h43v-43h85v-42h-85v-43h-43zM448 235h-213v42h213v-42zM149 320h43v-128h-43v43h-85v42h85v43zM277 64h-42v128h42v-43h171v-42h-171v-43zM64 405h213v-42h-213v42zM64 149h128v-42h-128v42z" />
+    <glyph glyph-name="turned_in" unicode="turned_in" 
+d="M363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="turned_in_not" unicode="turned_in_not" 
+d="M363 128v277h-214v-277l107 47zM363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="tv" unicode="tv" 
+d="M448 149v256h-384v-256h384zM448 448c23 0 43 -20 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-23 0 -43 19 -43 42v256c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="unarchive" unicode="unarchive" 
+d="M109 405h294l-20 22h-256zM256 309l-117 -117h74v-43h86v43h74zM438 401c6 -7 10 -18 10 -28v-266c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v266c0 10 4 21 10 28l29 35c6 7 15 12 25 12h256c10 0 19 -5 25 -12z" />
+    <glyph glyph-name="undo" unicode="undo" 
+d="M267 341c99 0 182 -65 212 -154l-50 -16c-22 68 -86 117 -162 117c-42 0 -80 -15 -110 -40l78 -77h-192v192l76 -77c39 34 91 55 148 55z" />
+    <glyph glyph-name="unfold_less" unicode="unfold_less" 
+d="M354 397l-98 -98l-98 98l30 30l68 -68l68 68zM158 115l98 98l98 -98l-30 -30l-68 68l-68 -68z" />
+    <glyph glyph-name="unfold_more" unicode="unfold_more" 
+d="M256 124l68 68l30 -30l-98 -98l-98 98l30 30zM256 388l-68 -68l-30 30l98 98l98 -98l-30 -30z" />
+    <glyph glyph-name="update" unicode="update" 
+d="M267 341v-90l74 -45l-15 -26l-91 55v106h32zM448 296h-145l59 60c-58 58 -153 60 -211 2s-58 -150 0 -208s153 -58 211 0c29 29 43 62 43 104h43c0 -42 -18 -97 -56 -134c-75 -74 -197 -74 -272 0s-75 194 0 268s195 74 270 0l58 60v-152z" />
+    <glyph glyph-name="usb" unicode="usb" 
+d="M320 363h85v-86h-21v-42c0 -24 -19 -43 -43 -43h-64v-65c15 -8 26 -24 26 -42c0 -26 -21 -47 -47 -47s-47 21 -47 47c0 18 11 34 26 42v65h-64c-24 0 -43 19 -43 43v44c-15 8 -26 23 -26 41c0 26 21 47 47 47s47 -21 47 -47c0 -18 -10 -33 -25 -41v-44h64v170h-43l64 86
+l64 -86h-43v-170h64v42h-21v86z" />
+    <glyph glyph-name="verified_user" unicode="verified_user" 
+d="M213 149l171 171l-30 30l-141 -140l-55 55l-30 -30zM256 491l192 -86v-128c0 -118 -82 -229 -192 -256c-110 27 -192 138 -192 256v128z" />
+    <glyph glyph-name="vertical_align_bottom" unicode="vertical_align_bottom" 
+d="M85 107h342v-43h-342v43zM341 235l-85 -86l-85 86h64v213h42v-213h64z" />
+    <glyph glyph-name="vertical_align_center" unicode="vertical_align_center" 
+d="M85 277h342v-42h-342v42zM341 405l-85 -85l-85 85h64v86h42v-86h64zM171 107l85 85l85 -85h-64v-86h-42v86h-64z" />
+    <glyph glyph-name="vertical_align_top" unicode="vertical_align_top" 
+d="M85 448h342v-43h-342v43zM171 277l85 86l85 -86h-64v-213h-42v213h-64z" />
+    <glyph glyph-name="vibration" unicode="vibration" 
+d="M341 107v298h-170v-298h170zM352 448c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h192zM405 149v214h43v-214h-43zM469 320h43v-128h-43v128zM64 149v214h43v-214h-43zM0 192v128h43v-128h-43z" />
+    <glyph glyph-name="video_call" unicode="video_call" 
+d="M299 235v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM363 288l85 85v-234l-85 85v-75c0 -12 -10 -21 -22 -21h-256c-12 0 -21 9 -21 21v214c0 12 9 21 21 21h256c12 0 22 -9 22 -21v-75z" />
+    <glyph glyph-name="video_label" unicode="video_label" 
+d="M448 171v234h-384v-234h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="video_library" unicode="video_library" 
+d="M256 203l128 96l-128 96v-192zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="videocam" unicode="videocam" 
+d="M363 288l85 85v-234l-85 85v-75c0 -12 -10 -21 -22 -21h-256c-12 0 -21 9 -21 21v214c0 12 9 21 21 21h256c12 0 22 -9 22 -21v-75z" />
+    <glyph glyph-name="videocam_off" unicode="videocam_off" 
+d="M70 469l378 -378l-27 -27l-68 68c-3 -2 -8 -4 -12 -4h-256c-12 0 -21 9 -21 21v214c0 12 9 21 21 21h16l-58 58zM448 373v-228l-239 239h132c12 0 22 -9 22 -21v-75z" />
+    <glyph glyph-name="videogame_asset" unicode="videogame_asset" 
+d="M416 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM331 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM235 235v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM448 384c23 0 43 -20 43 -43v-170c0 -23 -20 -43 -43 -43h-384
+c-23 0 -43 20 -43 43v170c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="view_agenda" unicode="view_agenda" 
+d="M427 448c12 0 21 -9 21 -21v-128c0 -12 -9 -22 -21 -22h-363c-12 0 -21 10 -21 22v128c0 12 9 21 21 21h363zM427 235c12 0 21 -10 21 -22v-128c0 -12 -9 -21 -21 -21h-363c-12 0 -21 9 -21 21v128c0 12 9 22 21 22h363z" />
+    <glyph glyph-name="view_array" unicode="view_array" 
+d="M171 128v277h192v-277h-192zM384 405h64v-277h-64v277zM85 128v277h64v-277h-64z" />
+    <glyph glyph-name="view_carousel" unicode="view_carousel" 
+d="M384 384h85v-235h-85v235zM43 149v235h85v-235h-85zM149 107v320h214v-320h-214z" />
+    <glyph glyph-name="view_column" unicode="view_column" 
+d="M341 405h107v-277h-107v277zM85 128v277h107v-277h-107zM213 128v277h107v-277h-107z" />
+    <glyph glyph-name="view_comfy" unicode="view_comfy" 
+d="M384 405h85v-85h-85v85zM384 107v85h85v-85h-85zM277 107v85h86v-85h-86zM171 107v85h85v-85h-85zM64 107v85h85v-85h-85zM384 213v86h85v-86h-85zM277 405h86v-85h-86v85zM171 320v85h85v-85h-85zM277 213v86h86v-86h-86zM171 213v86h85v-86h-85zM64 213v86h85v-86h-85z
+M64 320v85h85v-85h-85z" />
+    <glyph glyph-name="view_compact" unicode="view_compact" 
+d="M64 405h405v-128h-405v128zM213 107v149h256v-149h-256zM64 107v149h128v-149h-128z" />
+    <glyph glyph-name="view_day" unicode="view_day" 
+d="M43 448h405v-64h-405v64zM427 341c12 0 21 -9 21 -21v-128c0 -12 -9 -21 -21 -21h-363c-12 0 -21 9 -21 21v128c0 12 9 21 21 21h363zM43 64v64h405v-64h-405z" />
+    <glyph glyph-name="view_headline" unicode="view_headline" 
+d="M85 405h342v-42h-342v42zM85 277v43h342v-43h-342zM85 107v42h342v-42h-342zM85 192v43h342v-43h-342z" />
+    <glyph glyph-name="view_list" unicode="view_list" 
+d="M192 405h256v-85h-256v85zM192 107v85h256v-85h-256zM192 213v86h256v-86h-256zM85 320v85h86v-85h-86zM85 107v85h86v-85h-86zM85 213v86h86v-86h-86z" />
+    <glyph glyph-name="view_module" unicode="view_module" 
+d="M341 405h107v-128h-107v128zM213 277v128h107v-128h-107zM341 128v128h107v-128h-107zM213 128v128h107v-128h-107zM85 128v128h107v-128h-107zM85 277v128h107v-128h-107z" />
+    <glyph glyph-name="view_quilt" unicode="view_quilt" 
+d="M213 405h235v-128h-235v128zM341 128v128h107v-128h-107zM85 128v277h107v-277h-107zM213 128v128h107v-128h-107z" />
+    <glyph glyph-name="view_stream" unicode="view_stream" 
+d="M85 405h363v-128h-363v128zM85 128v128h363v-128h-363z" />
+    <glyph glyph-name="view_week" unicode="view_week" 
+d="M277 405c12 0 22 -9 22 -21v-256c0 -12 -10 -21 -22 -21h-64c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h64zM427 405c12 0 21 -9 21 -21v-256c0 -12 -9 -21 -21 -21h-64c-12 0 -22 9 -22 21v256c0 12 10 21 22 21h64zM128 405c12 0 21 -9 21 -21v-256
+c0 -12 -9 -21 -21 -21h-64c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h64z" />
+    <glyph glyph-name="vignette" unicode="vignette" 
+d="M256 128c94 0 171 57 171 128s-77 128 -171 128s-171 -57 -171 -128s77 -128 171 -128zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="visibility" unicode="visibility" 
+d="M256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM256 416c107 0 198 -66 235 -160c-37 -94 -128 -160 -235 -160s-198 66 -235 160c37 94 128 160 235 160z
+" />
+    <glyph glyph-name="visibility_off" unicode="visibility_off" 
+d="M253 320h3c35 0 64 -29 64 -64v-4zM161 303c-7 -14 -12 -30 -12 -47c0 -59 48 -107 107 -107c17 0 33 5 47 12l-33 33c-4 -1 -9 -2 -14 -2c-35 0 -64 29 -64 64c0 5 1 10 2 14zM43 421l27 27l378 -378l-27 -27c-23.9841 23.6825 -48.1328 47.2006 -72 71
+c-29 -12 -60 -18 -93 -18c-107 0 -198 66 -235 160c17 42 45 78 80 106c-19.5086 19.4914 -38.6537 39.3463 -58 59zM256 363c-14 0 -27 -3 -39 -8l-46 46c26 10 55 15 85 15c107 0 197 -66 234 -160c-16 -40 -41 -74 -73 -101l-62 62c5 12 8 25 8 39c0 59 -48 107 -107 107
+z" />
+    <glyph glyph-name="voice_chat" unicode="voice_chat" 
+d="M384 213v171l-85 -68v68h-171v-171h171v69zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="voicemail" unicode="voicemail" 
+d="M395 192c41 0 74 34 74 75s-33 74 -74 74s-75 -33 -75 -74s34 -75 75 -75zM117 192c41 0 75 34 75 75s-34 74 -75 74s-74 -33 -74 -74s33 -75 74 -75zM395 384c65 0 117 -52 117 -117s-52 -118 -117 -118h-278c-65 0 -117 53 -117 118s52 117 117 117s118 -52 118 -117
+c0 -28 -10 -55 -27 -75h96c-17 20 -27 47 -27 75c0 65 53 117 118 117z" />
+    <glyph glyph-name="volume_down" unicode="volume_down" 
+d="M107 320h85l107 107v-342l-107 107h-85v128zM395 256c0 -38 -22 -70 -54 -86v172c32 -16 54 -48 54 -86z" />
+    <glyph glyph-name="volume_mute" unicode="volume_mute" 
+d="M149 320h86l106 107v-342l-106 107h-86v128z" />
+    <glyph glyph-name="volume_off" unicode="volume_off" 
+d="M256 427v-90l-45 45zM91 448l357 -357l-27 -27l-44 44c-23 -18 -49 -32 -78 -39v44c18 5 34 14 48 25l-91 91v-144l-107 107h-85v128h101l-101 101zM405 256c0 68 -44 125 -106 143v44c86 -19 149 -96 149 -187c0 -32 -8 -63 -22 -89l-32 33c7 17 11 36 11 56zM352 256
+c0 -5 0 -9 -1 -13l-52 52v47c32 -16 53 -48 53 -86z" />
+    <glyph glyph-name="volume_up" unicode="volume_up" 
+d="M299 443c86 -19 149 -96 149 -187s-63 -168 -149 -187v44c62 18 106 75 106 143s-44 125 -106 143v44zM352 256c0 -38 -21 -70 -53 -86v172c32 -16 53 -48 53 -86zM64 320h85l107 107v-342l-107 107h-85v128z" />
+    <glyph glyph-name="vpn_key" unicode="vpn_key" 
+d="M149 213c23 0 43 20 43 43s-20 43 -43 43s-42 -20 -42 -43s19 -43 42 -43zM270 299h221v-86h-43v-85h-85v85h-93c-17 -50 -65 -85 -121 -85c-71 0 -128 57 -128 128s57 128 128 128c56 0 104 -35 121 -85z" />
+    <glyph glyph-name="vpn_lock" unicode="vpn_lock" 
+d="M213 65v42c-23 0 -42 19 -42 42v22l-103 102c-3 -12 -4 -25 -4 -38c0 -87 65 -160 149 -170zM404 256h43c1 -7 1 -14 1 -21c0 -118 -95 -214 -213 -214s-214 96 -214 214s96 213 214 213c22 0 44 -4 64 -10v-54c0 -23 -20 -43 -43 -43h-43v-42c0 -12 -9 -22 -21 -22h-43
+v-42h128c12 0 22 -10 22 -22v-64h21c19 0 35 -12 41 -29c28 30 44 71 44 115c0 7 0 14 -1 21zM452 427v10c0 20 -16 37 -36 37s-36 -17 -36 -37v-10h72zM469 427c12 0 22 -10 22 -22v-85c0 -12 -10 -21 -22 -21h-106c-12 0 -22 9 -22 21v85c0 12 10 22 22 22v10
+c0 29 24 54 53 54s53 -25 53 -54v-10z" />
+    <glyph glyph-name="wallpaper" unicode="wallpaper" 
+d="M85 235v-150h150v-42h-150c-23 0 -42 19 -42 42v150h42zM427 85v150h42v-150c0 -23 -19 -42 -42 -42h-150v42h150zM427 469c23 0 42 -19 42 -42v-150h-42v150h-150v42h150zM363 331c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM213 235l64 -79
+l43 57l64 -85h-256zM85 427v-150h-42v150c0 23 19 42 42 42h150v-42h-150z" />
+    <glyph glyph-name="warning" unicode="warning" 
+d="M277 213v86h-42v-86h42zM277 128v43h-42v-43h42zM21 64l235 405l235 -405h-470z" />
+    <glyph glyph-name="watch" unicode="watch" 
+d="M128 256c0 -71 57 -128 128 -128s128 57 128 128s-57 128 -128 128s-128 -57 -128 -128zM427 256c0 -54 -26 -103 -65 -134l-21 -122h-170l-21 122c-40 31 -65 80 -65 134s25 103 65 134l21 122h170l21 -122c39 -31 65 -80 65 -134z" />
+    <glyph glyph-name="watch_later" unicode="watch_later" 
+d="M346 166l17 28l-96 58v111h-32v-128zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="wb_auto" unicode="wb_auto" 
+d="M220 171h40l-68 192h-43l-68 -192h41l15 42h68zM469 363h39l-44 -192h-37l-32 130l-32 -130h-38l-2 9c-28 -56 -85 -95 -152 -95c-94 0 -171 77 -171 171s77 171 171 171c54 0 102 -25 133 -64h16l26 -135l32 135h34l32 -135zM146 242l25 78l24 -78h-49z" />
+    <glyph glyph-name="wb_cloudy" unicode="wb_cloudy" 
+d="M413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="wb_incandescent" unicode="wb_incandescent" 
+d="M368 125l30 29l38 -38l-30 -30zM427 288h64v-43h-64v43zM320 377c38 -22 64 -63 64 -110c0 -71 -57 -128 -128 -128s-128 57 -128 128c0 47 26 88 64 110v103h128v-103zM85 288v-43h-64v43h64zM235 33v63h42v-63h-42zM76 116l38 39l30 -30l-38 -39z" />
+    <glyph glyph-name="wb_iridescent" unicode="wb_iridescent" 
+d="M106 86l-30 31l38 38l30 -30zM76 417l30 30l38 -38l-30 -30zM436 116l-30 -30l-38 39l30 30zM277 33h-42v63h42v-63zM406 447l30 -30l-38 -38l-30 30zM235 500h42v-63h-42v63zM107 203v128h298v-128h-298z" />
+    <glyph glyph-name="wb_sunny" unicode="wb_sunny" 
+d="M76 116l38 39l30 -30l-38 -39zM235 33v63h42v-63h-42zM256 395c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM427 288h64v-43h-64v43zM368 125l30 29l38 -38l-30 -30zM436 417l-38 -38l-30 30l38 38zM277 500v-63h-42v63h42zM85 288v-43
+h-64v43h64zM144 409l-30 -30l-38 38l30 30z" />
+    <glyph glyph-name="wc" unicode="wc" 
+d="M352 384c-24 0 -43 19 -43 43s19 42 43 42s43 -18 43 -42s-19 -43 -43 -43zM160 384c-24 0 -43 19 -43 43s19 42 43 42s43 -18 43 -42s-19 -43 -43 -43zM384 43h-64v128h-64l54 162c6 17 23 30 41 30h2c18 0 35 -13 41 -30l54 -162h-64v-128zM117 43v160h-32v117
+c0 23 20 43 43 43h64c23 0 43 -20 43 -43v-117h-32v-160h-86z" />
+    <glyph glyph-name="web" unicode="web" 
+d="M427 128v192h-86v-192h86zM320 235v85h-235v-85h235zM320 128v85h-235v-85h235zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="web_asset" unicode="web_asset" 
+d="M405 128v213h-298v-213h298zM405 427c24 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="weekend" unicode="weekend" 
+d="M384 405c23 0 43 -19 43 -42v-46c-25 -9 -43 -32 -43 -60v-44h-256v44c0 28 -18 51 -43 60v46c0 23 20 42 43 42h256zM448 299c23 0 43 -20 43 -43v-107c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v107c0 23 20 43 43 43s43 -20 43 -43v-64h298v64
+c0 23 20 43 43 43z" />
+    <glyph glyph-name="whatshot" unicode="whatshot" 
+d="M250 107c57 0 102 45 102 102c0 30 -4 58 -12 86c-22 -29 -61 -47 -99 -55s-60 -31 -60 -66c0 -37 31 -67 69 -67zM288 498c83 -67 139 -170 139 -285c0 -94 -77 -170 -171 -170s-171 76 -171 170c0 72 26 139 69 190v-8c0 -44 33 -79 77 -79s73 35 73 79
+c0 46 -16 103 -16 103z" />
+    <glyph glyph-name="widgets" unicode="widgets" 
+d="M355 476l121 -121l-121 -120h93v-171h-171v171h78l-120 120v-78h-171v171h171v-93zM64 64v171h171v-171h-171z" />
+    <glyph glyph-name="wifi" unicode="wifi" 
+d="M107 235c83 82 216 82 298 0l-42 -43c-59 59 -155 59 -214 0zM192 149c35 35 93 35 128 0l-64 -64zM21 320c130 129 341 129 470 0l-43 -43c-106 106 -278 106 -384 0z" />
+    <glyph glyph-name="wifi_lock" unicode="wifi_lock" 
+d="M469 171v32c0 18 -14 32 -32 32s-32 -14 -32 -32v-32h64zM491 171c12 0 21 -10 21 -22v-85c0 -12 -9 -21 -21 -21h-107c-12 0 -21 9 -21 21v85c0 12 9 22 21 22v32c0 29 24 53 53 53s54 -24 54 -53v-32zM437 309c-59 0 -106 -47 -106 -106v-61l-75 -99l-256 341
+c71 54 160 85 256 85s185 -31 256 -85l-57 -76c-6 1 -12 1 -18 1z" />
+    <glyph glyph-name="wifi_tethering" unicode="wifi_tethering" 
+d="M256 448c118 0 213 -95 213 -213c0 -79 -42 -148 -106 -185l-22 37c51 30 86 85 86 148c0 94 -77 170 -171 170s-171 -76 -171 -170c0 -63 34 -118 85 -148l-21 -37c-64 37 -106 106 -106 185c0 118 95 213 213 213zM384 235c0 -47 -26 -89 -64 -111l-21 37
+c25 15 42 42 42 74c0 47 -38 85 -85 85s-85 -38 -85 -85c0 -32 17 -59 42 -74l-21 -37c-38 22 -64 64 -64 111c0 71 57 128 128 128s128 -57 128 -128zM256 277c23 0 43 -19 43 -42s-20 -43 -43 -43s-43 20 -43 43s20 42 43 42z" />
+    <glyph glyph-name="work" unicode="work" 
+d="M299 384v43h-86v-43h86zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h86v43c0 24 18 42 42 42h86c24 0 42 -18 42 -42v-43h86z" />
+    <glyph glyph-name="wrap_text" unicode="wrap_text" 
+d="M363 277c47 0 85 -38 85 -85s-38 -85 -85 -85h-43v-43l-64 64l64 64v-43h48c23 0 43 20 43 43s-20 43 -43 43h-283v42h278zM427 405v-42h-342v42h342zM85 107v42h128v-42h-128z" />
+    <glyph glyph-name="youtube_searched_for" unicode="youtube_searched_for" 
+d="M363 213l106 -106l-31 -32l-107 107v16l-6 6c-24 -21 -56 -33 -90 -33c-26 0 -50 7 -71 19l32 31c12 -5 25 -8 39 -8c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96h74l-88 -85l-82 85h53c0 75 62 139 139 139s139 -62 139 -139c0 -35 -13 -66 -34 -90l6 -6h17z" />
+    <glyph glyph-name="zoom_in" unicode="zoom_in" 
+d="M256 299h-43v-43h-21v43h-43v21h43v43h21v-43h43v-21zM203 213c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM331 213l106 -106l-32 -32l-106 106v17l-6 6c-24 -21 -56 -33 -90 -33c-77 0 -139 61 -139 138s62 139 139 139s138 -62 138 -139
+c0 -34 -12 -66 -33 -90l6 -6h17z" />
+    <glyph glyph-name="zoom_out" unicode="zoom_out" 
+d="M149 320h107v-21h-107v21zM203 213c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM331 213l106 -106l-32 -32l-106 106v17l-6 6c-24 -21 -56 -33 -90 -33c-77 0 -139 61 -139 138s62 139 139 139s138 -62 138 -139c0 -34 -12 -66 -33 -90l6 -6h17z" />
+    <glyph glyph-name="zoom_out_map" unicode="zoom_out_map" 
+d="M448 192v-128h-128l49 49l-62 61l31 31l61 -62zM192 64h-128v128l49 -49l61 62l31 -31l-62 -61zM64 320v128h128l-49 -49l62 -61l-31 -31l-61 62zM320 448h128v-128l-49 49l-61 -62l-31 31l62 61z" />
+    <glyph glyph-name="3" unicode="3" 
+d="M0 0z" />
+    <glyph glyph-name="d" unicode="d" 
+d="M0 0z" />
+    <glyph glyph-name="_" unicode="_" 
+d="M0 0z" />
+    <glyph glyph-name="r" unicode="r" 
+d="M0 0z" />
+    <glyph glyph-name="o" unicode="o" 
+d="M0 0z" />
+    <glyph glyph-name="t" unicode="t" 
+d="M0 0z" />
+    <glyph glyph-name="a" unicode="a" 
+d="M0 0z" />
+    <glyph glyph-name="i" unicode="i" 
+d="M0 0z" />
+    <glyph glyph-name="n" unicode="n" 
+d="M0 0z" />
+    <glyph glyph-name="c" unicode="c" 
+d="M0 0z" />
+    <glyph glyph-name="u" unicode="u" 
+d="M0 0z" />
+    <glyph glyph-name="e" unicode="e" 
+d="M0 0z" />
+    <glyph glyph-name="s" unicode="s" 
+d="M0 0z" />
+    <glyph glyph-name="l" unicode="l" 
+d="M0 0z" />
+    <glyph glyph-name="m" unicode="m" 
+d="M0 0z" />
+    <glyph glyph-name="b" unicode="b" 
+d="M0 0z" />
+    <glyph glyph-name="y" unicode="y" 
+d="M0 0z" />
+    <glyph glyph-name="w" unicode="w" 
+d="M0 0z" />
+    <glyph glyph-name="x" unicode="x" 
+d="M0 0z" />
+    <glyph glyph-name="p" unicode="p" 
+d="M0 0z" />
+    <glyph glyph-name="h" unicode="h" 
+d="M0 0z" />
+    <glyph glyph-name="g" unicode="g" 
+d="M0 0z" />
+    <glyph glyph-name="q" unicode="q" 
+d="M0 0z" />
+    <glyph glyph-name="j" unicode="j" 
+d="M0 0z" />
+    <glyph glyph-name="f" unicode="f" 
+d="M0 0z" />
+    <glyph glyph-name="v" unicode="v" 
+d="M0 0z" />
+    <glyph glyph-name="k" unicode="k" 
+d="M0 0z" />
+    <glyph glyph-name="z" unicode="z" 
+d="M0 0z" />
+    <glyph glyph-name="1" unicode="1" 
+d="M0 0z" />
+    <glyph glyph-name="2" unicode="2" 
+d="M0 0z" />
+    <glyph glyph-name="4" unicode="4" 
+d="M0 0z" />
+    <glyph glyph-name="5" unicode="5" 
+d="M0 0z" />
+    <glyph glyph-name="6" unicode="6" 
+d="M0 0z" />
+    <glyph glyph-name="7" unicode="7" 
+d="M0 0z" />
+    <glyph glyph-name="9" unicode="9" 
+d="M0 0z" />
+    <glyph glyph-name="8" unicode="8" 
+d="M0 0z" />
+    <glyph glyph-name="0" unicode="0" 
+d="M0 0z" />
+  </font>
+</defs></svg>

BIN
frontend/static/fonts/MaterialIcons-Regular.ttf


BIN
frontend/static/fonts/MaterialIcons-Regular.woff


BIN
frontend/static/fonts/MaterialIcons-Regular.woff2


+ 2 - 4
frontend/static/fonts/README.md

@@ -1,11 +1,9 @@
-The recommended way to use the Material Icons font is hosted by Google Fonts,
-available here:
+The recommended way to use the Material Icons font is by linking to the web font hosted on Google Fonts:
 
-```
+```html
 <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
       rel="stylesheet">
 ```
 
 Read more in our full usage guide:
 http://google.github.io/material-design-icons/#icon-font-for-the-web
-

+ 137 - 0
frontend/static/fonts/codepoints

@@ -1,21 +1,26 @@
 3d_rotation e84d
+ac_unit eb3b
 access_alarm e190
 access_alarms e191
 access_time e192
 accessibility e84e
+accessible e914
 account_balance e84f
 account_balance_wallet e850
 account_box e851
 account_circle e853
 adb e60e
 add e145
+add_a_photo e439
 add_alarm e193
 add_alert e003
 add_box e146
 add_circle e147
 add_circle_outline e148
+add_location e567
 add_shopping_cart e854
 add_to_photos e39d
+add_to_queue e05c
 adjust e39e
 airline_seat_flat e630
 airline_seat_flat_angled e631
@@ -28,20 +33,26 @@ airline_seat_recline_normal e637
 airplanemode_active e195
 airplanemode_inactive e194
 airplay e055
+airport_shuttle eb3c
 alarm e855
 alarm_add e856
 alarm_off e857
 alarm_on e858
 album e019
+all_inclusive eb3d
+all_out e90b
 android e859
 announcement e85a
 apps e5c3
 archive e149
 arrow_back e5c4
+arrow_downward e5db
 arrow_drop_down e5c5
 arrow_drop_down_circle e5c6
 arrow_drop_up e5c7
 arrow_forward e5c8
+arrow_upward e5d8
+art_track e060
 aspect_ratio e85b
 assessment e85c
 assignment e85d
@@ -65,6 +76,7 @@ battery_charging_full e1a3
 battery_full e1a4
 battery_std e1a5
 battery_unknown e1a6
+beach_access eb3e
 beenhere e52d
 block e14b
 bluetooth e1a7
@@ -91,6 +103,7 @@ border_right e230
 border_style e231
 border_top e232
 border_vertical e233
+branding_watermark e06b
 brightness_1 e3a6
 brightness_2 e3a7
 brightness_3 e3a8
@@ -104,9 +117,12 @@ brightness_low e1ad
 brightness_medium e1ae
 broken_image e3ad
 brush e3ae
+bubble_chart e6dd
 bug_report e868
 build e869
+burst_mode e43c
 business e0af
+business_center eb3f
 cached e86a
 cake e7e9
 call e0b0
@@ -114,8 +130,10 @@ call_end e0b1
 call_made e0b2
 call_merge e0b3
 call_missed e0b4
+call_missed_outgoing e0e4
 call_received e0b5
 call_split e0b6
+call_to_action e06c
 camera e3af
 camera_alt e3b0
 camera_enhance e8fc
@@ -126,6 +144,7 @@ cancel e5c9
 card_giftcard e8f6
 card_membership e8f7
 card_travel e8f8
+casino eb40
 cast e307
 cast_connected e308
 center_focus_strong e3b4
@@ -140,6 +159,8 @@ check_box_outline_blank e835
 check_circle e86c
 chevron_left e5cb
 chevron_right e5cc
+child_care eb41
+child_friendly eb42
 chrome_reader_mode e86d
 class e86e
 clear e14c
@@ -160,8 +181,10 @@ color_lens e3b7
 colorize e3b8
 comment e0b9
 compare e3b9
+compare_arrows e915
 computer e30a
 confirmation_number e638
+contact_mail e0d0
 contact_phone e0cf
 contacts e0ba
 content_copy e14d
@@ -169,7 +192,9 @@ content_cut e14e
 content_paste e14f
 control_point e3ba
 control_point_duplicate e3bb
+copyright e90c
 create e150
+create_new_folder e2cc
 credit_card e870
 crop e3be
 crop_16_9 e3bc
@@ -181,11 +206,15 @@ crop_free e3c2
 crop_landscape e3c3
 crop_original e3c4
 crop_portrait e3c5
+crop_rotate e437
 crop_square e3c6
 dashboard e871
 data_usage e1af
+date_range e916
 dehaze e3c7
 delete e872
+delete_forever e92b
+delete_sweep e16c
 description e873
 desktop_mac e30b
 desktop_windows e30c
@@ -194,6 +223,7 @@ developer_board e30d
 developer_mode e1b0
 device_hub e335
 devices e1b1
+devices_other e337
 dialer_sip e0bb
 dialpad e0bc
 directions e52e
@@ -210,19 +240,28 @@ disc_full e610
 dns e875
 do_not_disturb e612
 do_not_disturb_alt e611
+do_not_disturb_off e643
+do_not_disturb_on e644
 dock e30e
 domain e7ee
 done e876
 done_all e877
+donut_large e917
+donut_small e918
 drafts e151
+drag_handle e25d
 drive_eta e613
 dvr e1b2
 edit e3c9
+edit_location e568
 eject e8fb
 email e0be
+enhanced_encryption e63f
 equalizer e01d
 error e000
 error_outline e001
+euro_symbol e926
+ev_station e56d
 event e878
 event_available e614
 event_busy e615
@@ -245,7 +284,14 @@ fast_forward e01f
 fast_rewind e020
 favorite e87d
 favorite_border e87e
+featured_play_list e06d
+featured_video e06e
 feedback e87f
+fiber_dvr e05d
+fiber_manual_record e061
+fiber_new e05e
+fiber_pin e06a
+fiber_smart_record e062
 file_download e2c4
 file_upload e2c6
 filter e3d3
@@ -270,6 +316,9 @@ filter_tilt_shift e3e2
 filter_vintage e3e3
 find_in_page e880
 find_replace e881
+fingerprint e90d
+first_page e5dc
+fitness_center eb43
 flag e153
 flare e3e4
 flash_auto e3e5
@@ -303,6 +352,7 @@ format_list_bulleted e241
 format_list_numbered e242
 format_paint e243
 format_quote e244
+format_shapes e25e
 format_size e245
 format_strikethrough e246
 format_textdirection_l_to_r e247
@@ -313,14 +363,18 @@ forward e154
 forward_10 e056
 forward_30 e057
 forward_5 e058
+free_breakfast eb44
 fullscreen e5d0
 fullscreen_exit e5d1
 functions e24a
+g_translate e927
 gamepad e30f
 games e021
+gavel e90e
 gesture e155
 get_app e884
 gif e908
+golf_course eb45
 gps_fixed e1b3
 gps_not_fixed e1b4
 gps_off e1b5
@@ -345,9 +399,11 @@ hearing e023
 help e887
 help_outline e8fd
 high_quality e024
+highlight e25f
 highlight_off e888
 history e889
 home e88a
+hot_tub eb46
 hotel e53a
 hourglass_empty e88b
 hourglass_full e88c
@@ -355,7 +411,9 @@ http e902
 https e88d
 image e3f4
 image_aspect_ratio e3f5
+import_contacts e0e0
 import_export e0c3
+important_devices e912
 inbox e156
 indeterminate_check_box e909
 info e88e
@@ -382,6 +440,7 @@ keyboard_hide e31a
 keyboard_return e31b
 keyboard_tab e31c
 keyboard_voice e31d
+kitchen eb47
 label e892
 label_outline e893
 landscape e3f7
@@ -390,6 +449,7 @@ laptop e31e
 laptop_chromebook e31f
 laptop_mac e320
 laptop_windows e321
+last_page e5dd
 launch e895
 layers e53b
 layers_clear e53c
@@ -399,7 +459,12 @@ lens e3fa
 library_add e02e
 library_books e02f
 library_music e030
+lightbulb_outline e90f
+line_style e919
+line_weight e91a
+linear_scale e260
 link e157
+linked_camera e438
 list e896
 live_help e0c6
 live_tv e639
@@ -449,8 +514,10 @@ looks_one e400
 looks_two e401
 loop e028
 loupe e402
+low_priority e16d
 loyalty e89a
 mail e158
+mail_outline e0e1
 map e55b
 markunread e159
 markunread_mailbox e89b
@@ -464,6 +531,7 @@ mic_off e02b
 mms e618
 mode_comment e253
 mode_edit e254
+monetization_on e263
 money_off e25c
 monochrome_photos e403
 mood e7f2
@@ -471,23 +539,33 @@ mood_bad e7f3
 more e619
 more_horiz e5d3
 more_vert e5d4
+motorcycle e91b
 mouse e323
+move_to_inbox e168
 movie e02c
 movie_creation e404
+movie_filter e43a
+multiline_chart e6df
 music_note e405
+music_video e063
 my_location e55c
 nature e406
 nature_people e407
 navigate_before e408
 navigate_next e409
 navigation e55d
+near_me e569
 network_cell e1b9
+network_check e640
 network_locked e61a
 network_wifi e1ba
 new_releases e031
+next_week e16a
 nfc e1bb
+no_encryption e641
 no_sim e0cc
 not_interested e033
+note e06f
 note_add e89c
 notifications e7f4
 notifications_active e7f7
@@ -496,12 +574,14 @@ notifications_off e7f6
 notifications_paused e7f8
 offline_pin e90a
 ondemand_video e63a
+opacity e91c
 open_in_browser e89d
 open_in_new e89e
 open_with e89f
 pages e7f9
 pageview e8a0
 palette e40a
+pan_tool e925
 panorama e40b
 panorama_fish_eye e40c
 panorama_horizontal e40d
@@ -526,7 +606,9 @@ person e7fd
 person_add e7fe
 person_outline e7ff
 person_pin e55a
+person_pin_circle e56a
 personal_video e63b
+pets e91d
 phone e0cd
 phone_android e324
 phone_bluetooth_speaker e61b
@@ -545,12 +627,16 @@ phonelink_setup e0de
 photo e410
 photo_album e411
 photo_camera e412
+photo_filter e43b
 photo_library e413
 photo_size_select_actual e432
 photo_size_select_large e433
 photo_size_select_small e434
 picture_as_pdf e415
 picture_in_picture e8aa
+picture_in_picture_alt e911
+pie_chart e6c4
+pie_chart_outlined e6c5
 pin_drop e55e
 place e55f
 play_arrow e037
@@ -558,35 +644,44 @@ play_circle_filled e038
 play_circle_outline e039
 play_for_work e906
 playlist_add e03b
+playlist_add_check e065
+playlist_play e05f
 plus_one e800
 poll e801
 polymer e8ab
+pool eb48
 portable_wifi_off e0ce
 portrait e416
 power e63c
 power_input e336
 power_settings_new e8ac
+pregnant_woman e91e
 present_to_all e0df
 print e8ad
+priority_high e645
 public e80b
 publish e255
 query_builder e8ae
 question_answer e8af
 queue e03c
 queue_music e03d
+queue_play_next e066
 radio e03e
 radio_button_checked e837
 radio_button_unchecked e836
 rate_review e560
 receipt e8b0
 recent_actors e03f
+record_voice_over e91f
 redeem e8b1
 redo e15a
 refresh e5d5
 remove e15b
 remove_circle e15c
 remove_circle_outline e15d
+remove_from_queue e067
 remove_red_eye e417
+remove_shopping_cart e928
 reorder e8fe
 repeat e040
 repeat_one e041
@@ -598,14 +693,21 @@ reply e15e
 reply_all e15f
 report e160
 report_problem e8b2
+restaurant e56c
 restaurant_menu e561
 restore e8b3
+restore_page e929
 ring_volume e0d1
 room e8b4
+room_service eb49
 rotate_90_degrees_ccw e418
 rotate_left e419
 rotate_right e41a
+rounded_corner e920
 router e328
+rowing e921
+rss_feed e0e5
+rv_hookup e642
 satellite e562
 save e161
 scanner e329
@@ -615,12 +717,18 @@ screen_lock_landscape e1be
 screen_lock_portrait e1bf
 screen_lock_rotation e1c0
 screen_rotation e1c1
+screen_share e0e2
 sd_card e623
 sd_storage e1c2
 search e8b6
 security e32a
 select_all e162
 send e163
+sentiment_dissatisfied e811
+sentiment_neutral e812
+sentiment_satisfied e813
+sentiment_very_dissatisfied e814
+sentiment_very_satisfied e815
 settings e8b8
 settings_applications e8b9
 settings_backup_restore e8ba
@@ -644,6 +752,8 @@ shop e8c9
 shop_two e8ca
 shopping_basket e8cb
 shopping_cart e8cc
+short_text e261
+show_chart e6e1
 shuffle e043
 signal_cellular_4_bar e1c8
 signal_cellular_connected_no_internet_4_bar e1cd
@@ -658,16 +768,21 @@ sim_card_alert e624
 skip_next e044
 skip_previous e045
 slideshow e41b
+slow_motion_video e068
 smartphone e32c
+smoke_free eb4a
+smoking_rooms eb4b
 sms e625
 sms_failed e626
 snooze e046
 sort e164
 sort_by_alpha e053
+spa eb4c
 space_bar e256
 speaker e32d
 speaker_group e32e
 speaker_notes e8cd
+speaker_notes_off e92a
 speaker_phone e0d2
 spellcheck e8ce
 star e838
@@ -679,14 +794,20 @@ stay_current_portrait e0d4
 stay_primary_landscape e0d5
 stay_primary_portrait e0d6
 stop e047
+stop_screen_share e0e3
 storage e1db
 store e8d1
 store_mall_directory e563
 straighten e41c
+streetview e56e
 strikethrough_s e257
 style e41d
+subdirectory_arrow_left e5d9
+subdirectory_arrow_right e5da
 subject e8d2
+subscriptions e064
 subtitles e048
+subway e56f
 supervisor_account e8d3
 surround_sound e049
 swap_calls e0d7
@@ -708,6 +829,7 @@ tablet_mac e331
 tag_faces e420
 tap_and_play e62b
 terrain e564
+text_fields e262
 text_format e165
 textsms e0d8
 texture e421
@@ -717,17 +839,23 @@ thumb_up e8dc
 thumbs_up_down e8dd
 time_to_leave e62c
 timelapse e422
+timeline e922
 timer e425
 timer_10 e423
 timer_3 e424
 timer_off e426
+title e264
 toc e8de
 today e8df
 toll e8e0
 tonality e427
+touch_app e913
 toys e332
 track_changes e8e1
 traffic e565
+train e570
+tram e571
+transfer_within_a_station e572
 transform e428
 translate e8e2
 trending_down e8e3
@@ -737,18 +865,23 @@ tune e429
 turned_in e8e6
 turned_in_not e8e7
 tv e333
+unarchive e169
 undo e166
 unfold_less e5d6
 unfold_more e5d7
+update e923
 usb e1e0
 verified_user e8e8
 vertical_align_bottom e258
 vertical_align_center e259
 vertical_align_top e25a
 vibration e62d
+video_call e070
+video_label e071
 video_library e04a
 videocam e04b
 videocam_off e04c
+videogame_asset e338
 view_agenda e8e9
 view_array e8ea
 view_carousel e8eb
@@ -776,6 +909,7 @@ vpn_lock e62f
 wallpaper e1bc
 warning e002
 watch e334
+watch_later e924
 wb_auto e42c
 wb_cloudy e42d
 wb_incandescent e42e
@@ -783,6 +917,8 @@ wb_iridescent e436
 wb_sunny e430
 wc e63d
 web e051
+web_asset e069
+weekend e16b
 whatshot e80e
 widgets e1bd
 wifi e63e
@@ -793,3 +929,4 @@ wrap_text e25b
 youtube_searched_for e8fa
 zoom_in e8ff
 zoom_out e900
+zoom_out_map e56b

+ 7 - 0
frontend/style/misago/dropdowns.less

@@ -42,6 +42,13 @@
   }
 }
 
+
+// Bump min dropdown width to 210px
+.dropdown-menu {
+  width: 210px;
+}
+
+
 // Dropdown footer
 .dropdown-menu .dropdown-footer {
   padding: 6px 20px;

+ 3 - 0
frontend/style/misago/material-icons.less

@@ -28,6 +28,9 @@
   text-transform: none;
   letter-spacing: normal;
   vertical-align: middle;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
 
   /* Support for all WebKit browsers. */
   -webkit-font-smoothing: antialiased;

+ 1 - 0
frontend/style/misago/page-header.less

@@ -11,6 +11,7 @@
   .btn-aligned {
     float: right;
     margin-top: @line-height-computed + 3px;
+    margin-left: 8px;
   }
 }
 

+ 6282 - 1
misago/static/misago/css/misago.css

@@ -1 +1,6282 @@
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.btn,.caret,img{vertical-align:middle}hr,img{border:0}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.img-thumbnail,.table,label{max-width:100%}.alerts-snackbar,.form-control-feedback,a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}dl,ol,ul{margin-top:0}.lead,address,dl{margin-bottom:20px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{font-size:16px;font-weight:300;line-height:1.4}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;border-bottom:1px solid #eee}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.badge,.btn,.dropdown-header{white-space:nowrap}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}.media-object.img-thumbnail,.nav>li>a>img{max-width:none}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;touch-action:manipulation;cursor:pointer;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle,.btn.active,.btn:active,.dropdown-toggle:focus,.modal,.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus,.modal-content,.navbar-toggle:focus,.open>a{outline:0}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.nav>li,.nav>li>a,.open>.dropdown-menu{display:block}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-header,.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.nav>li.disabled>a{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.nav>li,.nav>li>a,.navbar{position:relative}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.modal,.modal-backdrop{bottom:0;right:0;left:0;top:0}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{min-height:50px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.progress-bar{float:left}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.progress-bar{width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.badge,.material-icon{vertical-align:middle}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.badge,.pager{text-align:center}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.badge,.close{font-weight:700;line-height:1}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.pager{padding-left:0;margin:20px 0;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.close,.list-group-item>.badge{float:right}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{font-size:21px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;background-color:#777;border-radius:10px}.badge:empty,.modal{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.modal{position:fixed;z-index:1050;-webkit-overflow-scrolling:touch}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.alerts-snackbar,.auth-message{transition:top .3s ease;width:100%}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.affix,.auth-message{position:fixed}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.material-icon,.user-dropdown .dropdown-header strong{font-weight:400}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}.navbar.navbar-misago{min-height:auto}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.alerts-snackbar p,.navbar .navbar-full .navbar-brand>*{display:inline-block}.auth-message{background-color:#eee;padding:20px 0;top:-100%;left:0;z-index:1070}.auth-message.show{top:0;bottom:auto}.auth-message p{padding:5px 0;color:#222}@media screen and (max-width:991px){.auth-message{text-align:center}.auth-message .btn{padding:10px 16px;font-size:18px}}.alerts-snackbar{position:fixed;top:-100%;z-index:1060;text-align:center;font-size:18px}.nav-side>a>.material-icon,.navbar ul.navbar-compact-nav>li>a>.material-icon{font-size:24px;line-height:24px}.alerts-snackbar.in{top:0;transition:top .2s ease}.alerts-snackbar p{border-radius:0 0 4px 4px;margin:0;pointer-events:all}.loader{width:100%;height:49px;text-align:center}.loader.loader-spaced{margin:40px 0}.loader-spinning-wheel{width:49px;height:49px;margin:0 auto;border:3px solid #777;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:cssload-spin 575ms infinite linear;-o-animation:cssload-spin 575ms infinite linear;-ms-animation:cssload-spin 575ms infinite linear;-webkit-animation:cssload-spin 575ms infinite linear;-moz-animation:cssload-spin 575ms infinite linear}@keyframes cssload-spin{100%{transform:rotate(360deg)}}@-o-keyframes cssload-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes cssload-spin{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes cssload-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes cssload-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}.navbar{margin-bottom:0}.navbar .navbar-full .navbar-brand img{height:16px}.navbar .navbar-full .nav-guest,.navbar .navbar-full .nav-user{float:right}.navbar .navbar-full .nav-guest .navbar-btn,.navbar .navbar-full .nav-user .navbar-btn{margin-left:15px}.navbar .navbar-full .nav-user .dropdown-toggle{padding:8px}.navbar .navbar-full .nav-user .dropdown-toggle img{width:34px;height:34px}.navbar ul.navbar-compact-nav{margin:0;display:table;width:100%}.navbar ul.navbar-compact-nav>li{display:table-cell}.navbar ul.navbar-compact-nav>li>a,.navbar ul.navbar-compact-nav>li>button{background:0 0;border:none;margin:0;padding-top:10px;padding-bottom:10px;width:100%;color:#777;text-align:center}.navbar ul.navbar-compact-nav>li>a:focus,.navbar ul.navbar-compact-nav>li>a:hover,.navbar ul.navbar-compact-nav>li>button:focus,.navbar ul.navbar-compact-nav>li>button:hover{color:#333;background-color:transparent}.navbar ul.navbar-compact-nav>li>a>img,.navbar ul.navbar-compact-nav>li>button>img{width:24px;height:24px}.navbar ul.navbar-compact-nav>li>button{padding-top:10px;padding-bottom:10px}.nav-side>a>.material-icon{margin:-5px 10px -5px -5px;position:relative;bottom:2px;width:24px;height:24px}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(../fonts/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(../fonts/MaterialIcons-Regular.woff2) format('woff2'),url(../fonts/MaterialIcons-Regular.woff) format('woff'),url(../fonts/MaterialIcons-Regular.ttf) format('truetype')}.material-icon{font-family:'Material Icons';font-style:normal;display:inline-block;width:1em;height:1em;line-height:1;text-align:center;text-transform:none;letter-spacing:normal;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}@media screen and (max-width:991px){.modal-message{text-align:center}.modal-message .message-icon{margin:30px}.modal-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.modal-message .modal-body{padding-top:20px;padding-bottom:30px}.modal-message .message-icon{float:left}.modal-message .message-icon .material-icon{font-size:50px}.modal-message .message-body{margin-left:75px;margin-top:10px}.modal-message .message-body .lead{margin-bottom:0}}.modal-loader{padding:50px 0}.modal-loader .loader{width:100%;height:80px;text-align:center}.modal-loader .loader-spinning-wheel{width:80px;height:80px}.modal-register .modal-footer a{float:left;margin-top:6.67px}@media screen and (max-width:991px){.modal-register .modal-footer{text-align:center}.modal-register .modal-footer a{display:block}.modal-register .modal-footer .btn{display:block;float:none;margin-top:10px;width:100%}}.has-feedback .material-icon.form-control-feedback{top:6px;right:24px;font-size:1.42857143;line-height:1.42857143}.well.well-form.well-done{font-size:18px;text-align:center}.well.well-form.well-done .message-icon{margin-bottom:10px;font-size:90px;line-height:90px}.well.well-form.well-done .message-body{margin-bottom:6.67px}.well.well-form.well-noscript{font-size:18px;text-align:center}.well.well-form.well-noscript .message-icon{margin-bottom:10px;font-size:90px;line-height:90px}.btn.btn-select,.btn.btn-yes-no{background:0 0;border:1px solid #eee}.btn.btn-select .material-icon,.btn.btn-yes-no .material-icon{margin:-4px 8px -4px 0;position:relative;bottom:1px;width:20px;height:20px;font-size:20px;line-height:20px}input.hidden-file-upload{position:absolute;top:-9999px;left:-9999px}.btn.btn-loading,.btn.btn-loading:active,.btn.btn-loading:focus,.btn.btn-loading:hover,.btn.btn-loading:link,.btn.btn-loading:visited{color:transparent}.btn.btn-loading .loader,.btn.btn-loading:active .loader,.btn.btn-loading:focus .loader,.btn.btn-loading:hover .loader,.btn.btn-loading:link .loader,.btn.btn-loading:visited .loader{height:20px;margin-top:-20px}.btn.btn-loading .loader>div,.btn.btn-loading:active .loader>div,.btn.btn-loading:focus .loader>div,.btn.btn-loading:hover .loader>div,.btn.btn-loading:link .loader>div,.btn.btn-loading:visited .loader>div{width:20px;height:20px}.btn.btn-loading.btn-default .loader>div{border-top-color:#333;border-bottom-color:#333}.btn.btn-loading.btn-danger .loader>div,.btn.btn-loading.btn-info .loader>div,.btn.btn-loading.btn-primary .loader>div,.btn.btn-loading.btn-success .loader>div,.btn.btn-loading.btn-warning .loader>div{border-top-color:#fff;border-bottom-color:#fff}.btn .material-icon{margin-right:3px;position:relative;bottom:1px}.dropdown-menu>li>.btn-link,.dropdown-menu>li>a{display:block;border:none;clear:both;float:none;padding:4px 20px;width:100%;color:#333;font-weight:400;line-height:1.42857143;text-align:left;white-space:nowrap}.message-line,.pager-progress-bar,.panel-body-loading,.user-dropdown .guest-preview{text-align:center}.dropdown-menu>li>.btn-link:focus,.dropdown-menu>li>.btn-link:hover,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.dropdown-menu>li>.btn-link .material-icon,.dropdown-menu>li>a .material-icon{margin:-2px 7px -2px 0;position:relative;bottom:1px;font-size:18px}.dropdown-menu>li>.btn-link .badge,.dropdown-menu>li>a .badge{float:right}.dropdown-menu .dropdown-footer{padding:6px 20px}.compact-nav,.mobile-dropdown{position:static;margin:0;overflow:auto}.compact-nav.open,.mobile-dropdown.open{margin-top:-20px;margin-bottom:20px}.compact-nav.open>.dropdown-menu,.mobile-dropdown.open>.dropdown-menu{border:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none;display:block;margin:0;width:100%;position:static}.user-dropdown .guest-preview .row{margin:0}.navbar .user-dropdown{width:240px}.user-dropdown .dropdown-header{padding:6px 20px;font-size:18px}.page-header{margin:0 0 20px}.page-header .btn-aligned{float:right;margin-top:23px}@media screen and (max-width:991px){.container h1{font-size:22.5px}.container .btn-aligned{float:right;margin-top:13px}.container .btn-icon .material-icon{width:24px;height:24px;font-size:24px;line-height:24px}}.header-stats .list-inline li{margin-right:8px}.header-stats .list-inline li .status-icon{width:18px;height:18px;margin-right:4px;position:relative;bottom:1px;font-size:18px;line-height:18px}@media screen and (max-width:991px){.header-stats .list-inline{margin-top:10px;margin-bottom:0;font-size:12px}}.page-header .page-tabs .nav>li{margin:0}.page-header .page-tabs .nav>li>a{border-radius:0}@media screen and (max-width:991px){.page-header .page-tabs{margin-top:9px;margin-bottom:-9px}.page-header .page-tabs .container{padding:0;width:100%}.page-header .page-tabs .container .nav-pills li{display:block;float:inherit;width:auto}.panel-message-body{text-align:center}.panel-message-body .message-icon{margin:30px}.panel-message-body .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.page-header.tabbed{padding-bottom:0}.panel-message-body{padding:20px 20px 30px}.panel-message-body .message-icon{float:left}.panel-message-body .message-icon .material-icon{font-size:50px}.panel-message-body .message-body{margin-left:75px;margin-top:10px}.panel-message-body .message-body .lead{margin-bottom:0}.panel-message-body .message-body .help-block{margin-top:13.2px}}.panel-body-loading{padding:0}.misago-footer{margin-top:30px;margin-bottom:50px}.misago-footer .footer-content{border-top:1px solid #eee;padding-top:30px}.misago-footer .noscript-message .material-icon{position:relative;bottom:1px;font-size:18px}.ui-preview,.ui-preview-img,.ui-preview-text{background:#fafafa;border-radius:5px;color:#fafafa;-webkit-animation:ui-preview-animation 1.5s linear infinite;-o-animation:ui-preview-animation 1.5s linear infinite;animation:ui-preview-animation 1.5s linear infinite}@-webkit-keyframes ui-preview-animation{0%,100%{background:#fafafa;color:#fafafa}50%{background:#e0e0e0;color:#e0e0e0}}@keyframes ui-preview-animation{0%,100%{background:#fafafa;color:#fafafa}50%{background:#e0e0e0;color:#e0e0e0}}.user-card,.user-card .user-card-bg-image{background:#fff}.ui-preview-text{border-radius:100px;display:inline-block;height:14px;position:relative;top:3px}.ui-preview-paragraph .ui-preview-text{margin-right:6px}.ui-preview-paragraph .ui-preview-text:last-child{margin-right:0}.ui-preview .list-group{padding:1px}.ui-preview .list-group>li{border:none;margin-bottom:1px}.ui-preview .list-group>li:last-child{margin-bottom:0}.pager-undercontent{margin-top:-20px}.pager-progress-bar{list-style:none;margin:-46px 0 0;padding:0;overflow:auto}.pager-progress-bar li{display:inline-block}.pager-progress-bar li a{padding:0 6px}.pager-progress-bar li.active a{font-weight:700}.user-status.user-banned .status-icon{color:#d9534f}.user-status.user-online .status-icon{color:#5cb85c}.user-status.user-offline .status-icon{color:#eee}.user-status>.status-icon.ui-preview{display:inline-block;border-radius:100px;width:20px;height:20px;font-weight:0}.user-status>.status-label.ui-preview{display:inline-block;margin-left:6px;width:40px}.user-card{border:1px solid #eee;border-radius:6px;margin-bottom:20px;overflow:hidden}.user-card .user-card-bg-image>img{display:none}.user-card .user-details{padding:6px 12px;overflow:auto}.user-card .user-details .user-avatar{float:left}.user-card .user-details .user-avatar img{width:60px;height:60px}.user-card .user-details .user-name{margin-left:76px}.user-card .user-details .user-name .item-title{font-size:18px}.user-card .user-details .user-subscript{margin-left:76px;color:#777;font-size:9.24px}.user-card .user-details .user-subscript>span{margin-right:8px}.user-card .user-details .user-subscript>span .status-icon{width:14px;height:14px;margin-right:2px;position:relative;bottom:2px;font-size:14px;line-height:14px}.user-card .user-details .user-subscript>span .status-icon.ui-preview{height:9.24px;width:9.24px;position:relative;bottom:-3px}.user-card .user-details .user-subscript>span .status-label.ui-preview{height:9.24px}.user-card .user-card-stats{border-top:1px solid #eee;display:table;table-layout:fixed;width:100%}.user-card .user-card-stats ul{display:table-row}.user-card .user-card-stats ul li{display:table-cell;padding:6px 12px;text-align:center}.user-card .user-card-stats ul li strong{font-size:12px}.user-card .user-card-stats ul li small{margin-left:3px;color:#777;font-size:12px}.item-title,a.item-title:active,a.item-title:hover,a.item-title:link,a.item-title:visited{color:#333;font-weight:700}.user-card.ui-preview .user-name .ui-preview-text{height:18px}.user-card.ui-preview .user-subscript .ui-preview-text{height:9.24px;position:relative;top:0}.user-card.ui-preview .user-card-stats .ui-preview-text{height:12px;width:14px;position:relative;top:0;font-size:12px;line-height:12px}.item-title{text-decoration:none}a.item-title:hover{text-decoration:underline}.message-line .material-icon{margin-right:6.67px;font-size:20px;line-height:20px;height:20px;width:20px}.modal-change-avatar .modal-avatar-index .avatar-preview{border-radius:6px;margin:0 auto;overflow:hidden;position:relative;width:200px;height:200px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{display:none;position:absolute;top:50px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{border-width:10px;border-color:#fff transparent;width:100px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img{opacity:.33;filter:alpha(opacity=33)}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader{display:block}@media (max-width:767px){.modal-change-avatar .modal-avatar-index .avatar-preview{margin-bottom:20px;width:150px;height:150px}.modal-change-avatar .modal-avatar-index .avatar-preview img{width:150px;height:150px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{top:25px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{width:100px;height:100px}}.modal-change-avatar .modal-avatar-index .btn{text-align:left}.modal-change-avatar .modal-avatar-upload{text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file{background:0 0;border:2px solid #eee;border-radius:6px;padding:10px 24px;-webkit-box-shadow:none;box-shadow:none;color:#777;font-size:18px;text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file>.material-icon{display:block;margin:0 auto 13.2px;font-size:50px;width:50px;height:50px}.modal-change-avatar .modal-avatar-upload .btn-pick-file:active,.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover{border-color:#777}.modal-change-avatar .modal-avatar-upload .text-muted{margin-top:13.2px}.modal-change-avatar .modal-avatar-upload .upload-progress img{border-radius:4px;margin-bottom:20px;max-height:80px;width:auto}.modal-change-avatar .modal-avatar-upload .upload-progress .progress{width:70%;margin:0 auto}.modal-avatar-crop .crop-form{margin:0 auto}.modal-avatar-crop .crop-form .cropit-image-zoom-input{margin-top:10px;-webkit-appearance:none;border:1px solid #fff;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track{width:100%;height:8px;background:#eee;border:none;border-radius:3px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:20px;width:20px;border-radius:50%;background:#777;margin-top:-6px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track{background:#eee}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track{width:100%;height:8px;background:#eee;border:none;border-radius:4px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb{border:none;height:20px;width:20px;border-radius:50%;background:#777}.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track{width:100%;height:8px;background:0 0;border-color:transparent;border-width:8px 0;color:transparent}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower{background:#eee;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper{background:#eee;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb{border:none;height:20px;width:20px;border-radius:50%;background:#777}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower{background:#eee}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper{background:#eee}.modal-change-avatar .modal-avatar-gallery{padding-bottom:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery{margin-bottom:20px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3{margin-top:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row{margin-bottom:10px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn{border-radius:6px;border:2px solid #eee;background:0 0;padding:2px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover{border-color:#777}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active{border-color:#337ab7}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img{border-radius:4px;width:100%}@media screen and (max-width:991px){.page-error,.page-message{text-align:center}.page-error .message-icon,.page-message .message-icon{margin:30px}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.page-error .message-panel,.page-message .message-panel{margin:60px auto;max-width:779.35px;overflow:auto}.page-error .message-icon,.page-message .message-icon{float:left}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:80px}.page-error .message-body,.page-message .message-body{margin-left:100px}}.active-posters li{display:block;overflow:auto}.active-posters .rank-user .rank-name,.active-posters .rank-user .user-title{font-size:12px}.active-posters .rank-user .status-icon{width:16px;height:16px;margin-right:2px;font-size:16px;line-height:16px}.active-posters .rank-position small,.active-posters .rank-posts-counted small,.active-posters .rank-posts-total small{color:#777}@media screen and (max-width:991px){.active-posters .rank-user-avatar{float:left}.active-posters .rank-user-avatar img{width:36px;height:36px;position:relative;top:3px}.active-posters .rank-user{float:left;margin-left:13.2px;width:40%}.active-posters .rank-user .user-name .item-title{margin-top:4px;font-size:14px}.active-posters .rank-user .rank-name{font-weight:400}.active-posters .rank-user .user-status{margin-right:4px}.active-posters .rank-user .user-status .status-icon{position:relative;top:-1px}.active-posters .rank-user .user-status .status-icon.ui-preview{position:relative;top:1px}.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{float:right;width:40%;position:relative;bottom:2px;line-height:14px}.active-posters .rank-position small,.active-posters .rank-position strong,.active-posters .rank-posts-counted small,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total small,.active-posters .rank-posts-total strong{display:inline-block;font-size:9.24px;line-height:9.24px}.active-posters .rank-position strong,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total strong{width:34px;padding-right:4px;text-align:right;font-weight:400}.active-posters.ui-preview .rank-user .rank-name{position:relative;bottom:1px}.active-posters.ui-preview .rank-user .rank-name .ui-preview-text{height:12px}.active-posters.ui-preview .rank-position strong,.active-posters.ui-preview .rank-posts-counted strong,.active-posters.ui-preview .rank-posts-total strong{position:relative;bottom:3px}.active-posters.ui-preview .rank-position strong .ui-preview-text,.active-posters.ui-preview .rank-posts-counted strong .ui-preview-text,.active-posters.ui-preview .rank-posts-total strong .ui-preview-text{height:9.24px}}@media screen and (min-width:992px){.active-posters .rank-user .rank-name,.active-posters .rank-user .user-status{margin-right:12px}.active-posters.ui-preview .rank-user .user-status .status-icon{position:relative;top:2px}.active-posters li>*{float:left;padding-top:4px}.active-posters .rank-user-avatar{padding-top:0}.active-posters .rank-user{padding-top:0;padding-left:16px;width:25%}.active-posters .rank-user .user-name .item-title{margin-top:2px;font-size:18px}.active-posters .rank-user .user-status .status-icon{position:relative;top:-1px}.active-posters .rank-user .user-status .status-icon.ui-preview{top:2px}.active-posters .rank-user .user-status .status-label{font-size:12px;line-height:12px}.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{width:23%;font-size:18px;font-weight:700;text-align:center}.active-posters .rank-position strong,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total strong{display:block}.active-posters .rank-position small,.active-posters .rank-posts-counted small,.active-posters .rank-posts-total small{display:block;font-size:12px;font-weight:400}}@media screen and (max-width:991px){.page-user-profile .page-header h1 img{width:40px;height:40px}h1.pull-left img{margin-right:6px}.page-user-profile .page-header .btn-aligned{position:relative;top:8px}.page-user-profile .profile-side-avatar{display:none}}@media screen and (min-width:992px){.page-user-profile .page-header h1 img{display:none}.page-user-profile .profile-side-avatar img{width:100%;height:auto;margin-top:-110px;margin-bottom:20px}}.username-history .username-change-avatar{float:left}.username-history .username-change-avatar .user-avatar{margin-right:10px}.username-history .username-change-avatar .user-avatar img{width:42px;height:42px}.username-history .username-change .material-icon{margin:0 7px}.username-history .username-change-date{color:#777;font-size:12px}@media screen and (min-width:992px){.username-history li{overflow:auto}.username-history li.empty-message{text-align:center}.username-history .username-change-avatar{float:left}.username-history .username-change-avatar .user-avatar{margin-right:10px}.username-history .username-change-avatar .user-avatar img{width:18px;height:18px;position:relative;bottom:1px}.username-history .username-change-author{float:left;width:30%}.username-history .username-change{float:left;width:40%}.username-history .username-change-date{float:left;width:20%}.username-history.ui-ready .username-change-date{position:relative;top:2px}}
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+  font-family: sans-serif;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+  vertical-align: baseline;
+}
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+[hidden],
+template {
+  display: none;
+}
+a {
+  background-color: transparent;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: bold;
+}
+dfn {
+  font-style: italic;
+}
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+mark {
+  background: #ff0;
+  color: #000;
+}
+small {
+  font-size: 80%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+img {
+  border: 0;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure {
+  margin: 1em 40px;
+}
+hr {
+  box-sizing: content-box;
+  height: 0;
+}
+pre {
+  overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit;
+  font: inherit;
+  margin: 0;
+}
+button {
+  overflow: visible;
+}
+button,
+select {
+  text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box;
+  padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+legend {
+  border: 0;
+  padding: 0;
+}
+textarea {
+  overflow: auto;
+}
+optgroup {
+  font-weight: bold;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td,
+th {
+  padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+  *,
+  *:before,
+  *:after {
+    background: transparent !important;
+    color: #000 !important;
+    box-shadow: none !important;
+    text-shadow: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  pre,
+  blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+  .navbar {
+    display: none;
+  }
+  .btn > .caret,
+  .dropup > .btn > .caret {
+    border-top-color: #000 !important;
+  }
+  .label {
+    border: 1px solid #000;
+  }
+  .table {
+    border-collapse: collapse !important;
+  }
+  .table td,
+  .table th {
+    background-color: #fff !important;
+  }
+  .table-bordered th,
+  .table-bordered td {
+    border: 1px solid #ddd !important;
+  }
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+*:before,
+*:after {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 10px;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #333333;
+  background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+a {
+  color: #337ab7;
+  text-decoration: none;
+}
+a:hover,
+a:focus {
+  color: #23527c;
+  text-decoration: underline;
+}
+a:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+figure {
+  margin: 0;
+}
+img {
+  vertical-align: middle;
+}
+.img-responsive {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+.img-rounded {
+  border-radius: 6px;
+}
+.img-thumbnail {
+  padding: 4px;
+  line-height: 1.42857143;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -o-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+  display: inline-block;
+  max-width: 100%;
+  height: auto;
+}
+.img-circle {
+  border-radius: 50%;
+}
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  margin: -1px;
+  padding: 0;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+[role="button"] {
+  cursor: pointer;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+  font-family: inherit;
+  font-weight: 500;
+  line-height: 1.1;
+  color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+  font-weight: normal;
+  line-height: 1;
+  color: #777777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+  margin-top: 20px;
+  margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+  font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+  font-size: 75%;
+}
+h1,
+.h1 {
+  font-size: 36px;
+}
+h2,
+.h2 {
+  font-size: 30px;
+}
+h3,
+.h3 {
+  font-size: 24px;
+}
+h4,
+.h4 {
+  font-size: 18px;
+}
+h5,
+.h5 {
+  font-size: 14px;
+}
+h6,
+.h6 {
+  font-size: 12px;
+}
+p {
+  margin: 0 0 10px;
+}
+.lead {
+  margin-bottom: 20px;
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 1.4;
+}
+@media (min-width: 768px) {
+  .lead {
+    font-size: 21px;
+  }
+}
+small,
+.small {
+  font-size: 85%;
+}
+mark,
+.mark {
+  background-color: #fcf8e3;
+  padding: .2em;
+}
+.text-left {
+  text-align: left;
+}
+.text-right {
+  text-align: right;
+}
+.text-center {
+  text-align: center;
+}
+.text-justify {
+  text-align: justify;
+}
+.text-nowrap {
+  white-space: nowrap;
+}
+.text-lowercase {
+  text-transform: lowercase;
+}
+.text-uppercase {
+  text-transform: uppercase;
+}
+.text-capitalize {
+  text-transform: capitalize;
+}
+.text-muted {
+  color: #777777;
+}
+.text-primary {
+  color: #337ab7;
+}
+a.text-primary:hover,
+a.text-primary:focus {
+  color: #286090;
+}
+.text-success {
+  color: #3c763d;
+}
+a.text-success:hover,
+a.text-success:focus {
+  color: #2b542c;
+}
+.text-info {
+  color: #31708f;
+}
+a.text-info:hover,
+a.text-info:focus {
+  color: #245269;
+}
+.text-warning {
+  color: #8a6d3b;
+}
+a.text-warning:hover,
+a.text-warning:focus {
+  color: #66512c;
+}
+.text-danger {
+  color: #a94442;
+}
+a.text-danger:hover,
+a.text-danger:focus {
+  color: #843534;
+}
+.bg-primary {
+  color: #fff;
+  background-color: #337ab7;
+}
+a.bg-primary:hover,
+a.bg-primary:focus {
+  background-color: #286090;
+}
+.bg-success {
+  background-color: #dff0d8;
+}
+a.bg-success:hover,
+a.bg-success:focus {
+  background-color: #c1e2b3;
+}
+.bg-info {
+  background-color: #d9edf7;
+}
+a.bg-info:hover,
+a.bg-info:focus {
+  background-color: #afd9ee;
+}
+.bg-warning {
+  background-color: #fcf8e3;
+}
+a.bg-warning:hover,
+a.bg-warning:focus {
+  background-color: #f7ecb5;
+}
+.bg-danger {
+  background-color: #f2dede;
+}
+a.bg-danger:hover,
+a.bg-danger:focus {
+  background-color: #e4b9b9;
+}
+.page-header {
+  padding-bottom: 9px;
+  margin: 40px 0 20px;
+  border-bottom: 1px solid #eeeeee;
+}
+ul,
+ol {
+  margin-top: 0;
+  margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+  margin-bottom: 0;
+}
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+.list-inline {
+  padding-left: 0;
+  list-style: none;
+  margin-left: -5px;
+}
+.list-inline > li {
+  display: inline-block;
+  padding-left: 5px;
+  padding-right: 5px;
+}
+dl {
+  margin-top: 0;
+  margin-bottom: 20px;
+}
+dt,
+dd {
+  line-height: 1.42857143;
+}
+dt {
+  font-weight: bold;
+}
+dd {
+  margin-left: 0;
+}
+@media (min-width: 768px) {
+  .dl-horizontal dt {
+    float: left;
+    width: 160px;
+    clear: left;
+    text-align: right;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  .dl-horizontal dd {
+    margin-left: 180px;
+  }
+}
+abbr[title],
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted #777777;
+}
+.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+blockquote {
+  padding: 10px 20px;
+  margin: 0 0 20px;
+  font-size: 17.5px;
+  border-left: 5px solid #eeeeee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+  margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+  display: block;
+  font-size: 80%;
+  line-height: 1.42857143;
+  color: #777777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+  content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+  padding-right: 15px;
+  padding-left: 0;
+  border-right: 5px solid #eeeeee;
+  border-left: 0;
+  text-align: right;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+  content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+  content: '\00A0 \2014';
+}
+address {
+  margin-bottom: 20px;
+  font-style: normal;
+  line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #c7254e;
+  background-color: #f9f2f4;
+  border-radius: 4px;
+}
+kbd {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #fff;
+  background-color: #333;
+  border-radius: 3px;
+  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+kbd kbd {
+  padding: 0;
+  font-size: 100%;
+  font-weight: bold;
+  box-shadow: none;
+}
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  font-size: 13px;
+  line-height: 1.42857143;
+  word-break: break-all;
+  word-wrap: break-word;
+  color: #333333;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+pre code {
+  padding: 0;
+  font-size: inherit;
+  color: inherit;
+  white-space: pre-wrap;
+  background-color: transparent;
+  border-radius: 0;
+}
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+@media (min-width: 768px) {
+  .container {
+    width: 750px;
+  }
+}
+@media (min-width: 992px) {
+  .container {
+    width: 970px;
+  }
+}
+@media (min-width: 1200px) {
+  .container {
+    width: 1170px;
+  }
+}
+.container-fluid {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.row {
+  margin-left: -15px;
+  margin-right: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+  float: left;
+}
+.col-xs-12 {
+  width: 100%;
+}
+.col-xs-11 {
+  width: 91.66666667%;
+}
+.col-xs-10 {
+  width: 83.33333333%;
+}
+.col-xs-9 {
+  width: 75%;
+}
+.col-xs-8 {
+  width: 66.66666667%;
+}
+.col-xs-7 {
+  width: 58.33333333%;
+}
+.col-xs-6 {
+  width: 50%;
+}
+.col-xs-5 {
+  width: 41.66666667%;
+}
+.col-xs-4 {
+  width: 33.33333333%;
+}
+.col-xs-3 {
+  width: 25%;
+}
+.col-xs-2 {
+  width: 16.66666667%;
+}
+.col-xs-1 {
+  width: 8.33333333%;
+}
+.col-xs-pull-12 {
+  right: 100%;
+}
+.col-xs-pull-11 {
+  right: 91.66666667%;
+}
+.col-xs-pull-10 {
+  right: 83.33333333%;
+}
+.col-xs-pull-9 {
+  right: 75%;
+}
+.col-xs-pull-8 {
+  right: 66.66666667%;
+}
+.col-xs-pull-7 {
+  right: 58.33333333%;
+}
+.col-xs-pull-6 {
+  right: 50%;
+}
+.col-xs-pull-5 {
+  right: 41.66666667%;
+}
+.col-xs-pull-4 {
+  right: 33.33333333%;
+}
+.col-xs-pull-3 {
+  right: 25%;
+}
+.col-xs-pull-2 {
+  right: 16.66666667%;
+}
+.col-xs-pull-1 {
+  right: 8.33333333%;
+}
+.col-xs-pull-0 {
+  right: auto;
+}
+.col-xs-push-12 {
+  left: 100%;
+}
+.col-xs-push-11 {
+  left: 91.66666667%;
+}
+.col-xs-push-10 {
+  left: 83.33333333%;
+}
+.col-xs-push-9 {
+  left: 75%;
+}
+.col-xs-push-8 {
+  left: 66.66666667%;
+}
+.col-xs-push-7 {
+  left: 58.33333333%;
+}
+.col-xs-push-6 {
+  left: 50%;
+}
+.col-xs-push-5 {
+  left: 41.66666667%;
+}
+.col-xs-push-4 {
+  left: 33.33333333%;
+}
+.col-xs-push-3 {
+  left: 25%;
+}
+.col-xs-push-2 {
+  left: 16.66666667%;
+}
+.col-xs-push-1 {
+  left: 8.33333333%;
+}
+.col-xs-push-0 {
+  left: auto;
+}
+.col-xs-offset-12 {
+  margin-left: 100%;
+}
+.col-xs-offset-11 {
+  margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+  margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+  margin-left: 75%;
+}
+.col-xs-offset-8 {
+  margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+  margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+  margin-left: 50%;
+}
+.col-xs-offset-5 {
+  margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+  margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+  margin-left: 25%;
+}
+.col-xs-offset-2 {
+  margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+  margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+  margin-left: 0%;
+}
+@media (min-width: 768px) {
+  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+    float: left;
+  }
+  .col-sm-12 {
+    width: 100%;
+  }
+  .col-sm-11 {
+    width: 91.66666667%;
+  }
+  .col-sm-10 {
+    width: 83.33333333%;
+  }
+  .col-sm-9 {
+    width: 75%;
+  }
+  .col-sm-8 {
+    width: 66.66666667%;
+  }
+  .col-sm-7 {
+    width: 58.33333333%;
+  }
+  .col-sm-6 {
+    width: 50%;
+  }
+  .col-sm-5 {
+    width: 41.66666667%;
+  }
+  .col-sm-4 {
+    width: 33.33333333%;
+  }
+  .col-sm-3 {
+    width: 25%;
+  }
+  .col-sm-2 {
+    width: 16.66666667%;
+  }
+  .col-sm-1 {
+    width: 8.33333333%;
+  }
+  .col-sm-pull-12 {
+    right: 100%;
+  }
+  .col-sm-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-sm-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-sm-pull-9 {
+    right: 75%;
+  }
+  .col-sm-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-sm-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-sm-pull-6 {
+    right: 50%;
+  }
+  .col-sm-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-sm-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-sm-pull-3 {
+    right: 25%;
+  }
+  .col-sm-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-sm-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-sm-pull-0 {
+    right: auto;
+  }
+  .col-sm-push-12 {
+    left: 100%;
+  }
+  .col-sm-push-11 {
+    left: 91.66666667%;
+  }
+  .col-sm-push-10 {
+    left: 83.33333333%;
+  }
+  .col-sm-push-9 {
+    left: 75%;
+  }
+  .col-sm-push-8 {
+    left: 66.66666667%;
+  }
+  .col-sm-push-7 {
+    left: 58.33333333%;
+  }
+  .col-sm-push-6 {
+    left: 50%;
+  }
+  .col-sm-push-5 {
+    left: 41.66666667%;
+  }
+  .col-sm-push-4 {
+    left: 33.33333333%;
+  }
+  .col-sm-push-3 {
+    left: 25%;
+  }
+  .col-sm-push-2 {
+    left: 16.66666667%;
+  }
+  .col-sm-push-1 {
+    left: 8.33333333%;
+  }
+  .col-sm-push-0 {
+    left: auto;
+  }
+  .col-sm-offset-12 {
+    margin-left: 100%;
+  }
+  .col-sm-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-sm-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-sm-offset-9 {
+    margin-left: 75%;
+  }
+  .col-sm-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-sm-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-sm-offset-6 {
+    margin-left: 50%;
+  }
+  .col-sm-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-sm-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-sm-offset-3 {
+    margin-left: 25%;
+  }
+  .col-sm-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-sm-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-sm-offset-0 {
+    margin-left: 0%;
+  }
+}
+@media (min-width: 992px) {
+  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+    float: left;
+  }
+  .col-md-12 {
+    width: 100%;
+  }
+  .col-md-11 {
+    width: 91.66666667%;
+  }
+  .col-md-10 {
+    width: 83.33333333%;
+  }
+  .col-md-9 {
+    width: 75%;
+  }
+  .col-md-8 {
+    width: 66.66666667%;
+  }
+  .col-md-7 {
+    width: 58.33333333%;
+  }
+  .col-md-6 {
+    width: 50%;
+  }
+  .col-md-5 {
+    width: 41.66666667%;
+  }
+  .col-md-4 {
+    width: 33.33333333%;
+  }
+  .col-md-3 {
+    width: 25%;
+  }
+  .col-md-2 {
+    width: 16.66666667%;
+  }
+  .col-md-1 {
+    width: 8.33333333%;
+  }
+  .col-md-pull-12 {
+    right: 100%;
+  }
+  .col-md-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-md-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-md-pull-9 {
+    right: 75%;
+  }
+  .col-md-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-md-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-md-pull-6 {
+    right: 50%;
+  }
+  .col-md-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-md-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-md-pull-3 {
+    right: 25%;
+  }
+  .col-md-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-md-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-md-pull-0 {
+    right: auto;
+  }
+  .col-md-push-12 {
+    left: 100%;
+  }
+  .col-md-push-11 {
+    left: 91.66666667%;
+  }
+  .col-md-push-10 {
+    left: 83.33333333%;
+  }
+  .col-md-push-9 {
+    left: 75%;
+  }
+  .col-md-push-8 {
+    left: 66.66666667%;
+  }
+  .col-md-push-7 {
+    left: 58.33333333%;
+  }
+  .col-md-push-6 {
+    left: 50%;
+  }
+  .col-md-push-5 {
+    left: 41.66666667%;
+  }
+  .col-md-push-4 {
+    left: 33.33333333%;
+  }
+  .col-md-push-3 {
+    left: 25%;
+  }
+  .col-md-push-2 {
+    left: 16.66666667%;
+  }
+  .col-md-push-1 {
+    left: 8.33333333%;
+  }
+  .col-md-push-0 {
+    left: auto;
+  }
+  .col-md-offset-12 {
+    margin-left: 100%;
+  }
+  .col-md-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-md-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+  .col-md-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-md-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+  .col-md-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-md-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+  .col-md-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-md-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-md-offset-0 {
+    margin-left: 0%;
+  }
+}
+@media (min-width: 1200px) {
+  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+    float: left;
+  }
+  .col-lg-12 {
+    width: 100%;
+  }
+  .col-lg-11 {
+    width: 91.66666667%;
+  }
+  .col-lg-10 {
+    width: 83.33333333%;
+  }
+  .col-lg-9 {
+    width: 75%;
+  }
+  .col-lg-8 {
+    width: 66.66666667%;
+  }
+  .col-lg-7 {
+    width: 58.33333333%;
+  }
+  .col-lg-6 {
+    width: 50%;
+  }
+  .col-lg-5 {
+    width: 41.66666667%;
+  }
+  .col-lg-4 {
+    width: 33.33333333%;
+  }
+  .col-lg-3 {
+    width: 25%;
+  }
+  .col-lg-2 {
+    width: 16.66666667%;
+  }
+  .col-lg-1 {
+    width: 8.33333333%;
+  }
+  .col-lg-pull-12 {
+    right: 100%;
+  }
+  .col-lg-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-lg-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-lg-pull-9 {
+    right: 75%;
+  }
+  .col-lg-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-lg-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-lg-pull-6 {
+    right: 50%;
+  }
+  .col-lg-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-lg-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-lg-pull-3 {
+    right: 25%;
+  }
+  .col-lg-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-lg-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-lg-pull-0 {
+    right: auto;
+  }
+  .col-lg-push-12 {
+    left: 100%;
+  }
+  .col-lg-push-11 {
+    left: 91.66666667%;
+  }
+  .col-lg-push-10 {
+    left: 83.33333333%;
+  }
+  .col-lg-push-9 {
+    left: 75%;
+  }
+  .col-lg-push-8 {
+    left: 66.66666667%;
+  }
+  .col-lg-push-7 {
+    left: 58.33333333%;
+  }
+  .col-lg-push-6 {
+    left: 50%;
+  }
+  .col-lg-push-5 {
+    left: 41.66666667%;
+  }
+  .col-lg-push-4 {
+    left: 33.33333333%;
+  }
+  .col-lg-push-3 {
+    left: 25%;
+  }
+  .col-lg-push-2 {
+    left: 16.66666667%;
+  }
+  .col-lg-push-1 {
+    left: 8.33333333%;
+  }
+  .col-lg-push-0 {
+    left: auto;
+  }
+  .col-lg-offset-12 {
+    margin-left: 100%;
+  }
+  .col-lg-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-lg-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+  .col-lg-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-lg-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+  .col-lg-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-lg-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+  .col-lg-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-lg-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-lg-offset-0 {
+    margin-left: 0%;
+  }
+}
+table {
+  background-color: transparent;
+}
+caption {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  color: #777777;
+  text-align: left;
+}
+th {
+  text-align: left;
+}
+.table {
+  width: 100%;
+  max-width: 100%;
+  margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+  padding: 8px;
+  line-height: 1.42857143;
+  vertical-align: top;
+  border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+  vertical-align: bottom;
+  border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+  border-top: 0;
+}
+.table > tbody + tbody {
+  border-top: 2px solid #ddd;
+}
+.table .table {
+  background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+  padding: 5px;
+}
+.table-bordered {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+  border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+  background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+  background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+  position: static;
+  float: none;
+  display: table-column;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+  position: static;
+  float: none;
+  display: table-cell;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+  background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+  background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+  background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+  background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+  background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+  background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+  background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+  background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+  background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+  background-color: #ebcccc;
+}
+.table-responsive {
+  overflow-x: auto;
+  min-height: 0.01%;
+}
+@media screen and (max-width: 767px) {
+  .table-responsive {
+    width: 100%;
+    margin-bottom: 15px;
+    overflow-y: hidden;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    border: 1px solid #ddd;
+  }
+  .table-responsive > .table {
+    margin-bottom: 0;
+  }
+  .table-responsive > .table > thead > tr > th,
+  .table-responsive > .table > tbody > tr > th,
+  .table-responsive > .table > tfoot > tr > th,
+  .table-responsive > .table > thead > tr > td,
+  .table-responsive > .table > tbody > tr > td,
+  .table-responsive > .table > tfoot > tr > td {
+    white-space: nowrap;
+  }
+  .table-responsive > .table-bordered {
+    border: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:first-child,
+  .table-responsive > .table-bordered > tbody > tr > th:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+  .table-responsive > .table-bordered > thead > tr > td:first-child,
+  .table-responsive > .table-bordered > tbody > tr > td:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+    border-left: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:last-child,
+  .table-responsive > .table-bordered > tbody > tr > th:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+  .table-responsive > .table-bordered > thead > tr > td:last-child,
+  .table-responsive > .table-bordered > tbody > tr > td:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+    border-right: 0;
+  }
+  .table-responsive > .table-bordered > tbody > tr:last-child > th,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+  .table-responsive > .table-bordered > tbody > tr:last-child > td,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+    border-bottom: 0;
+  }
+}
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+  min-width: 0;
+}
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 20px;
+  font-size: 21px;
+  line-height: inherit;
+  color: #333333;
+  border: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+label {
+  display: inline-block;
+  max-width: 100%;
+  margin-bottom: 5px;
+  font-weight: bold;
+}
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9;
+  line-height: normal;
+}
+input[type="file"] {
+  display: block;
+}
+input[type="range"] {
+  display: block;
+  width: 100%;
+}
+select[multiple],
+select[size] {
+  height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+output {
+  display: block;
+  padding-top: 7px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555555;
+}
+.form-control {
+  display: block;
+  width: 100%;
+  height: 34px;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555555;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+  border-color: #66afe9;
+  outline: 0;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+.form-control::-moz-placeholder {
+  color: #999;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #999;
+}
+.form-control::-webkit-input-placeholder {
+  color: #999;
+}
+.form-control::-ms-expand {
+  border: 0;
+  background-color: transparent;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+  background-color: #eeeeee;
+  opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+  cursor: not-allowed;
+}
+textarea.form-control {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+  input[type="date"].form-control,
+  input[type="time"].form-control,
+  input[type="datetime-local"].form-control,
+  input[type="month"].form-control {
+    line-height: 34px;
+  }
+  input[type="date"].input-sm,
+  input[type="time"].input-sm,
+  input[type="datetime-local"].input-sm,
+  input[type="month"].input-sm,
+  .input-group-sm input[type="date"],
+  .input-group-sm input[type="time"],
+  .input-group-sm input[type="datetime-local"],
+  .input-group-sm input[type="month"] {
+    line-height: 30px;
+  }
+  input[type="date"].input-lg,
+  input[type="time"].input-lg,
+  input[type="datetime-local"].input-lg,
+  input[type="month"].input-lg,
+  .input-group-lg input[type="date"],
+  .input-group-lg input[type="time"],
+  .input-group-lg input[type="datetime-local"],
+  .input-group-lg input[type="month"] {
+    line-height: 46px;
+  }
+}
+.form-group {
+  margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+  position: relative;
+  display: block;
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+  min-height: 20px;
+  padding-left: 20px;
+  margin-bottom: 0;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: absolute;
+  margin-left: -20px;
+  margin-top: 4px \9;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+  margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+  position: relative;
+  display: inline-block;
+  padding-left: 20px;
+  margin-bottom: 0;
+  vertical-align: middle;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+  margin-top: 0;
+  margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+  cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+  cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+  cursor: not-allowed;
+}
+.form-control-static {
+  padding-top: 7px;
+  padding-bottom: 7px;
+  margin-bottom: 0;
+  min-height: 34px;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+  padding-left: 0;
+  padding-right: 0;
+}
+.input-sm {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+select.input-sm {
+  height: 30px;
+  line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+  height: auto;
+}
+.form-group-sm .form-control {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.form-group-sm select.form-control {
+  height: 30px;
+  line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+  height: auto;
+}
+.form-group-sm .form-control-static {
+  height: 30px;
+  min-height: 32px;
+  padding: 6px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+}
+.input-lg {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+select.input-lg {
+  height: 46px;
+  line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+  height: auto;
+}
+.form-group-lg .form-control {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.form-group-lg select.form-control {
+  height: 46px;
+  line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+  height: auto;
+}
+.form-group-lg .form-control-static {
+  height: 46px;
+  min-height: 38px;
+  padding: 11px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+}
+.has-feedback {
+  position: relative;
+}
+.has-feedback .form-control {
+  padding-right: 42.5px;
+}
+.form-control-feedback {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  display: block;
+  width: 34px;
+  height: 34px;
+  line-height: 34px;
+  text-align: center;
+  pointer-events: none;
+}
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
+  width: 46px;
+  height: 46px;
+  line-height: 46px;
+}
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
+  width: 30px;
+  height: 30px;
+  line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+  color: #3c763d;
+}
+.has-success .form-control {
+  border-color: #3c763d;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.has-success .form-control:focus {
+  border-color: #2b542c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+  color: #3c763d;
+  border-color: #3c763d;
+  background-color: #dff0d8;
+}
+.has-success .form-control-feedback {
+  color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+  color: #8a6d3b;
+}
+.has-warning .form-control {
+  border-color: #8a6d3b;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.has-warning .form-control:focus {
+  border-color: #66512c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+  color: #8a6d3b;
+  border-color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+.has-warning .form-control-feedback {
+  color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+  color: #a94442;
+}
+.has-error .form-control {
+  border-color: #a94442;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.has-error .form-control:focus {
+  border-color: #843534;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+  color: #a94442;
+  border-color: #a94442;
+  background-color: #f2dede;
+}
+.has-error .form-control-feedback {
+  color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+  top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+  top: 0;
+}
+.help-block {
+  display: block;
+  margin-top: 5px;
+  margin-bottom: 10px;
+  color: #737373;
+}
+@media (min-width: 768px) {
+  .form-inline .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .form-inline .form-control-static {
+    display: inline-block;
+  }
+  .form-inline .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .form-inline .input-group .input-group-addon,
+  .form-inline .input-group .input-group-btn,
+  .form-inline .input-group .form-control {
+    width: auto;
+  }
+  .form-inline .input-group > .form-control {
+    width: 100%;
+  }
+  .form-inline .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio,
+  .form-inline .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio label,
+  .form-inline .checkbox label {
+    padding-left: 0;
+  }
+  .form-inline .radio input[type="radio"],
+  .form-inline .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .form-inline .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+  margin-top: 0;
+  margin-bottom: 0;
+  padding-top: 7px;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+  min-height: 27px;
+}
+.form-horizontal .form-group {
+  margin-left: -15px;
+  margin-right: -15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .control-label {
+    text-align: right;
+    margin-bottom: 0;
+    padding-top: 7px;
+  }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+  right: 15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-lg .control-label {
+    padding-top: 11px;
+    font-size: 18px;
+  }
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-sm .control-label {
+    padding-top: 6px;
+    font-size: 12px;
+  }
+}
+.btn {
+  display: inline-block;
+  margin-bottom: 0;
+  font-weight: normal;
+  text-align: center;
+  vertical-align: middle;
+  touch-action: manipulation;
+  cursor: pointer;
+  background-image: none;
+  border: 1px solid transparent;
+  white-space: nowrap;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  border-radius: 4px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+  color: #333;
+  text-decoration: none;
+}
+.btn:active,
+.btn.active {
+  outline: 0;
+  background-image: none;
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+  cursor: not-allowed;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+  pointer-events: none;
+}
+.btn-default {
+  color: #333;
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #8c8c8c;
+}
+.btn-default:hover {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+  color: #333;
+  background-color: #d4d4d4;
+  border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  background-image: none;
+}
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default .badge {
+  color: #fff;
+  background-color: #333;
+}
+.btn-primary {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+  color: #fff;
+  background-color: #286090;
+  border-color: #122b40;
+}
+.btn-primary:hover {
+  color: #fff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  color: #fff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+  color: #fff;
+  background-color: #204d74;
+  border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  background-image: none;
+}
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus {
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.btn-success {
+  color: #fff;
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #255625;
+}
+.btn-success:hover {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+  color: #fff;
+  background-color: #398439;
+  border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  background-image: none;
+}
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus {
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success .badge {
+  color: #5cb85c;
+  background-color: #fff;
+}
+.btn-info {
+  color: #fff;
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #1b6d85;
+}
+.btn-info:hover {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+  color: #fff;
+  background-color: #269abc;
+  border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  background-image: none;
+}
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus {
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info .badge {
+  color: #5bc0de;
+  background-color: #fff;
+}
+.btn-warning {
+  color: #fff;
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #985f0d;
+}
+.btn-warning:hover {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+  color: #fff;
+  background-color: #d58512;
+  border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  background-image: none;
+}
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus {
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning .badge {
+  color: #f0ad4e;
+  background-color: #fff;
+}
+.btn-danger {
+  color: #fff;
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #761c19;
+}
+.btn-danger:hover {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+  color: #fff;
+  background-color: #ac2925;
+  border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  background-image: none;
+}
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus {
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger .badge {
+  color: #d9534f;
+  background-color: #fff;
+}
+.btn-link {
+  color: #337ab7;
+  font-weight: normal;
+  border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+  background-color: transparent;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+  border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+  color: #23527c;
+  text-decoration: underline;
+  background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+  color: #777777;
+  text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+  padding: 1px 5px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-block {
+  display: block;
+  width: 100%;
+}
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity 0.15s linear;
+  -o-transition: opacity 0.15s linear;
+  transition: opacity 0.15s linear;
+}
+.fade.in {
+  opacity: 1;
+}
+.collapse {
+  display: none;
+}
+.collapse.in {
+  display: block;
+}
+tr.collapse.in {
+  display: table-row;
+}
+tbody.collapse.in {
+  display: table-row-group;
+}
+.collapsing {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition-property: height, visibility;
+  transition-property: height, visibility;
+  -webkit-transition-duration: 0.35s;
+  transition-duration: 0.35s;
+  -webkit-transition-timing-function: ease;
+  transition-timing-function: ease;
+}
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-left: 2px;
+  vertical-align: middle;
+  border-top: 4px dashed;
+  border-top: 4px solid \9;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+  position: relative;
+}
+.dropdown-toggle:focus {
+  outline: 0;
+}
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0;
+  list-style: none;
+  font-size: 14px;
+  text-align: left;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.15);
+  border-radius: 4px;
+  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+  background-clip: padding-box;
+}
+.dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+.dropdown-menu .divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: normal;
+  line-height: 1.42857143;
+  color: #333333;
+  white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  text-decoration: none;
+  color: #262626;
+  background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #fff;
+  text-decoration: none;
+  outline: 0;
+  background-color: #337ab7;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #777777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  cursor: not-allowed;
+}
+.open > .dropdown-menu {
+  display: block;
+}
+.open > a {
+  outline: 0;
+}
+.dropdown-menu-right {
+  left: auto;
+  right: 0;
+}
+.dropdown-menu-left {
+  left: 0;
+  right: auto;
+}
+.dropdown-header {
+  display: block;
+  padding: 3px 20px;
+  font-size: 12px;
+  line-height: 1.42857143;
+  color: #777777;
+  white-space: nowrap;
+}
+.dropdown-backdrop {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  top: 0;
+  z-index: 990;
+}
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+  border-top: 0;
+  border-bottom: 4px dashed;
+  border-bottom: 4px solid \9;
+  content: "";
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+  .navbar-right .dropdown-menu {
+    left: auto;
+    right: 0;
+  }
+  .navbar-right .dropdown-menu-left {
+    left: 0;
+    right: auto;
+  }
+}
+.nav {
+  margin-bottom: 0;
+  padding-left: 0;
+  list-style: none;
+}
+.nav > li {
+  position: relative;
+  display: block;
+}
+.nav > li > a {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+.nav > li.disabled > a {
+  color: #777777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+  color: #777777;
+  text-decoration: none;
+  background-color: transparent;
+  cursor: not-allowed;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+  background-color: #eeeeee;
+  border-color: #337ab7;
+}
+.nav .nav-divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.nav > li > a > img {
+  max-width: none;
+}
+.nav-tabs {
+  border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+  float: left;
+  margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+  margin-right: 2px;
+  line-height: 1.42857143;
+  border: 1px solid transparent;
+  border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+  border-color: #eeeeee #eeeeee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+  color: #555555;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+  cursor: default;
+}
+.nav-tabs.nav-justified {
+  width: 100%;
+  border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+  float: none;
+}
+.nav-tabs.nav-justified > li > a {
+  text-align: center;
+  margin-bottom: 5px;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-tabs.nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs.nav-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs.nav-justified > .active > a,
+  .nav-tabs.nav-justified > .active > a:hover,
+  .nav-tabs.nav-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.nav-pills > li {
+  float: left;
+}
+.nav-pills > li > a {
+  border-radius: 4px;
+}
+.nav-pills > li + li {
+  margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+  color: #fff;
+  background-color: #337ab7;
+}
+.nav-stacked > li {
+  float: none;
+}
+.nav-stacked > li + li {
+  margin-top: 2px;
+  margin-left: 0;
+}
+.nav-justified {
+  width: 100%;
+}
+.nav-justified > li {
+  float: none;
+}
+.nav-justified > li > a {
+  text-align: center;
+  margin-bottom: 5px;
+}
+.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs-justified {
+  border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs-justified > .active > a,
+  .nav-tabs-justified > .active > a:hover,
+  .nav-tabs-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+.nav-tabs .dropdown-menu {
+  margin-top: -1px;
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.navbar {
+  position: relative;
+  min-height: 50px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+  .navbar {
+    border-radius: 4px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-header {
+    float: left;
+  }
+}
+.navbar-collapse {
+  overflow-x: visible;
+  padding-right: 15px;
+  padding-left: 15px;
+  border-top: 1px solid transparent;
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
+  -webkit-overflow-scrolling: touch;
+}
+.navbar-collapse.in {
+  overflow-y: auto;
+}
+@media (min-width: 768px) {
+  .navbar-collapse {
+    width: auto;
+    border-top: 0;
+    box-shadow: none;
+  }
+  .navbar-collapse.collapse {
+    display: block !important;
+    height: auto !important;
+    padding-bottom: 0;
+    overflow: visible !important;
+  }
+  .navbar-collapse.in {
+    overflow-y: visible;
+  }
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-static-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    padding-left: 0;
+    padding-right: 0;
+  }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+  max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    max-height: 200px;
+  }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+@media (min-width: 768px) {
+  .container > .navbar-header,
+  .container-fluid > .navbar-header,
+  .container > .navbar-collapse,
+  .container-fluid > .navbar-collapse {
+    margin-right: 0;
+    margin-left: 0;
+  }
+}
+.navbar-static-top {
+  z-index: 1000;
+  border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+  .navbar-static-top {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+@media (min-width: 768px) {
+  .navbar-fixed-top,
+  .navbar-fixed-bottom {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top {
+  top: 0;
+  border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+  bottom: 0;
+  margin-bottom: 0;
+  border-width: 1px 0 0;
+}
+.navbar-brand {
+  float: left;
+  padding: 15px 15px;
+  font-size: 18px;
+  line-height: 20px;
+  height: 50px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+  text-decoration: none;
+}
+.navbar-brand > img {
+  display: block;
+}
+@media (min-width: 768px) {
+  .navbar > .container .navbar-brand,
+  .navbar > .container-fluid .navbar-brand {
+    margin-left: -15px;
+  }
+}
+.navbar-toggle {
+  position: relative;
+  float: right;
+  margin-right: 15px;
+  padding: 9px 10px;
+  margin-top: 8px;
+  margin-bottom: 8px;
+  background-color: transparent;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.navbar-toggle:focus {
+  outline: 0;
+}
+.navbar-toggle .icon-bar {
+  display: block;
+  width: 22px;
+  height: 2px;
+  border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+  margin-top: 4px;
+}
+@media (min-width: 768px) {
+  .navbar-toggle {
+    display: none;
+  }
+}
+.navbar-nav {
+  margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+  padding-top: 10px;
+  padding-bottom: 10px;
+  line-height: 20px;
+}
+@media (max-width: 767px) {
+  .navbar-nav .open .dropdown-menu {
+    position: static;
+    float: none;
+    width: auto;
+    margin-top: 0;
+    background-color: transparent;
+    border: 0;
+    box-shadow: none;
+  }
+  .navbar-nav .open .dropdown-menu > li > a,
+  .navbar-nav .open .dropdown-menu .dropdown-header {
+    padding: 5px 15px 5px 25px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a {
+    line-height: 20px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-nav .open .dropdown-menu > li > a:focus {
+    background-image: none;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-nav {
+    float: left;
+    margin: 0;
+  }
+  .navbar-nav > li {
+    float: left;
+  }
+  .navbar-nav > li > a {
+    padding-top: 15px;
+    padding-bottom: 15px;
+  }
+}
+.navbar-form {
+  margin-left: -15px;
+  margin-right: -15px;
+  padding: 10px 15px;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+@media (min-width: 768px) {
+  .navbar-form .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control-static {
+    display: inline-block;
+  }
+  .navbar-form .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .navbar-form .input-group .input-group-addon,
+  .navbar-form .input-group .input-group-btn,
+  .navbar-form .input-group .form-control {
+    width: auto;
+  }
+  .navbar-form .input-group > .form-control {
+    width: 100%;
+  }
+  .navbar-form .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio,
+  .navbar-form .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio label,
+  .navbar-form .checkbox label {
+    padding-left: 0;
+  }
+  .navbar-form .radio input[type="radio"],
+  .navbar-form .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .navbar-form .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+@media (max-width: 767px) {
+  .navbar-form .form-group {
+    margin-bottom: 5px;
+  }
+  .navbar-form .form-group:last-child {
+    margin-bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-form {
+    width: auto;
+    border: 0;
+    margin-left: 0;
+    margin-right: 0;
+    padding-top: 0;
+    padding-bottom: 0;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+}
+.navbar-nav > li > .dropdown-menu {
+  margin-top: 0;
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+  margin-bottom: 0;
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.navbar-btn {
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+  margin-top: 14px;
+  margin-bottom: 14px;
+}
+.navbar-text {
+  margin-top: 15px;
+  margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+  .navbar-text {
+    float: left;
+    margin-left: 15px;
+    margin-right: 15px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-left {
+    float: left !important;
+  }
+  .navbar-right {
+    float: right !important;
+    margin-right: -15px;
+  }
+  .navbar-right ~ .navbar-right {
+    margin-right: 0;
+  }
+}
+.navbar-default {
+  background-color: #f8f8f8;
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+  color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+  color: #5e5e5e;
+  background-color: transparent;
+}
+.navbar-default .navbar-text {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+  color: #333;
+  background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+  color: #555;
+  background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+  color: #ccc;
+  background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+  border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+  background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+  background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+  background-color: #e7e7e7;
+  color: #555;
+}
+@media (max-width: 767px) {
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+    color: #777;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #333;
+    background-color: transparent;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #555;
+    background-color: #e7e7e7;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #ccc;
+    background-color: transparent;
+  }
+}
+.navbar-default .navbar-link {
+  color: #777;
+}
+.navbar-default .navbar-link:hover {
+  color: #333;
+}
+.navbar-default .btn-link {
+  color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+  color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+  color: #ccc;
+}
+.navbar-inverse {
+  background-color: #222;
+  border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+  color: #fff;
+  background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+  color: #444;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+  border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+  background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+  background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+  border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+  background-color: #080808;
+  color: #fff;
+}
+@media (max-width: 767px) {
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+    border-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+    color: #9d9d9d;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #fff;
+    background-color: transparent;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #444;
+    background-color: transparent;
+  }
+}
+.navbar-inverse .navbar-link {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+  color: #fff;
+}
+.navbar-inverse .btn-link {
+  color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+  color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+  color: #444;
+}
+.alert {
+  padding: 15px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.alert h4 {
+  margin-top: 0;
+  color: inherit;
+}
+.alert .alert-link {
+  font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+  margin-bottom: 0;
+}
+.alert > p + p {
+  margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+  padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  color: inherit;
+}
+.alert-success {
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+  color: #3c763d;
+}
+.alert-success hr {
+  border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+  color: #2b542c;
+}
+.alert-info {
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+  color: #31708f;
+}
+.alert-info hr {
+  border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+  color: #245269;
+}
+.alert-warning {
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+  color: #8a6d3b;
+}
+.alert-warning hr {
+  border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+  color: #66512c;
+}
+.alert-danger {
+  background-color: #f2dede;
+  border-color: #ebccd1;
+  color: #a94442;
+}
+.alert-danger hr {
+  border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+  color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+.progress {
+  overflow: hidden;
+  height: 20px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+.progress-bar {
+  float: left;
+  width: 0%;
+  height: 100%;
+  font-size: 12px;
+  line-height: 20px;
+  color: #fff;
+  text-align: center;
+  background-color: #337ab7;
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-transition: width 0.6s ease;
+  -o-transition: width 0.6s ease;
+  transition: width 0.6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+  -o-animation: progress-bar-stripes 2s linear infinite;
+  animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+  background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+  background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+  background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+  background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.media {
+  margin-top: 15px;
+}
+.media:first-child {
+  margin-top: 0;
+}
+.media,
+.media-body {
+  zoom: 1;
+  overflow: hidden;
+}
+.media-body {
+  width: 10000px;
+}
+.media-object {
+  display: block;
+}
+.media-object.img-thumbnail {
+  max-width: none;
+}
+.media-right,
+.media > .pull-right {
+  padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+  padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+  display: table-cell;
+  vertical-align: top;
+}
+.media-middle {
+  vertical-align: middle;
+}
+.media-bottom {
+  vertical-align: bottom;
+}
+.media-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.media-list {
+  padding-left: 0;
+  list-style: none;
+}
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+  z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+  margin-left: -1px;
+}
+.btn-toolbar {
+  margin-left: -5px;
+}
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+  float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+  margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+  border-radius: 0;
+}
+.btn-group > .btn:first-child {
+  margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+}
+.btn-group > .btn-group {
+  float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+  padding-left: 8px;
+  padding-right: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+  padding-left: 12px;
+  padding-right: 12px;
+}
+.btn-group.open .dropdown-toggle {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.btn .caret {
+  margin-left: 0;
+}
+.btn-lg .caret {
+  border-width: 5px 5px 0;
+  border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+  border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+  display: block;
+  float: none;
+  width: 100%;
+  max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+  float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+  margin-top: -1px;
+  margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.btn-group-justified {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+  float: none;
+  display: table-cell;
+  width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+  width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+  left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.list-group {
+  margin-bottom: 20px;
+  padding-left: 0;
+}
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+}
+.list-group-item:last-child {
+  margin-bottom: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+a.list-group-item,
+button.list-group-item {
+  color: #555;
+}
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+  color: #333;
+}
+a.list-group-item:hover,
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
+  text-decoration: none;
+  color: #555;
+  background-color: #f5f5f5;
+}
+button.list-group-item {
+  width: 100%;
+  text-align: left;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+  background-color: #eeeeee;
+  color: #777777;
+  cursor: not-allowed;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+  color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+  color: #777777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  z-index: 2;
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+  color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+  color: #c7ddef;
+}
+.list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+a.list-group-item-success,
+button.list-group-item-success {
+  color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-success:hover,
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
+  color: #3c763d;
+  background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+button.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
+  color: #fff;
+  background-color: #3c763d;
+  border-color: #3c763d;
+}
+.list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7;
+}
+a.list-group-item-info,
+button.list-group-item-info {
+  color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-info:hover,
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
+  color: #31708f;
+  background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+button.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
+  color: #fff;
+  background-color: #31708f;
+  border-color: #31708f;
+}
+.list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+a.list-group-item-warning,
+button.list-group-item-warning {
+  color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-warning:hover,
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
+  color: #8a6d3b;
+  background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+button.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
+  color: #fff;
+  background-color: #8a6d3b;
+  border-color: #8a6d3b;
+}
+.list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede;
+}
+a.list-group-item-danger,
+button.list-group-item-danger {
+  color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-danger:hover,
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
+  color: #a94442;
+  background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+button.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
+  color: #fff;
+  background-color: #a94442;
+  border-color: #a94442;
+}
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.list-group-item-text {
+  margin-bottom: 0;
+  line-height: 1.3;
+}
+.panel {
+  margin-bottom: 20px;
+  background-color: #fff;
+  border: 1px solid transparent;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.panel-body {
+  padding: 15px;
+}
+.panel-heading {
+  padding: 10px 15px;
+  border-bottom: 1px solid transparent;
+  border-top-right-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+  color: inherit;
+}
+.panel-title {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 16px;
+  color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+  color: inherit;
+}
+.panel-footer {
+  padding: 10px 15px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+  margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+  border-width: 1px 0;
+  border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+  border-top: 0;
+  border-top-right-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+  border-bottom: 0;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+  border-top-width: 0;
+}
+.list-group + .panel-footer {
+  border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+  margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+  border-top-right-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+  border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+  border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+  border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+  border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+  border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+  border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+  border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+  border-bottom: 0;
+}
+.panel > .table-responsive {
+  border: 0;
+  margin-bottom: 0;
+}
+.panel-group {
+  margin-bottom: 20px;
+}
+.panel-group .panel {
+  margin-bottom: 0;
+  border-radius: 4px;
+}
+.panel-group .panel + .panel {
+  margin-top: 5px;
+}
+.panel-group .panel-heading {
+  border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+  border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+  border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+  border-bottom: 1px solid #ddd;
+}
+.panel-default {
+  border-color: #ddd;
+}
+.panel-default > .panel-heading {
+  color: #333333;
+  background-color: #f5f5f5;
+  border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+  color: #f5f5f5;
+  background-color: #333333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ddd;
+}
+.panel-primary {
+  border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #337ab7;
+}
+.panel-success {
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+  color: #dff0d8;
+  background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #d6e9c6;
+}
+.panel-info {
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+  color: #d9edf7;
+  background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #bce8f1;
+}
+.panel-warning {
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+  color: #fcf8e3;
+  background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #faebcc;
+}
+.panel-danger {
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+  color: #f2dede;
+  background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ebccd1;
+}
+.pager {
+  padding-left: 0;
+  margin: 20px 0;
+  list-style: none;
+  text-align: center;
+}
+.pager li {
+  display: inline;
+}
+.pager li > a,
+.pager li > span {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+.pager .next > a,
+.pager .next > span {
+  float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+  float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+  color: #777777;
+  background-color: #fff;
+  cursor: not-allowed;
+}
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, 0.15);
+}
+.well-lg {
+  padding: 24px;
+  border-radius: 6px;
+}
+.well-sm {
+  padding: 9px;
+  border-radius: 3px;
+}
+.close {
+  float: right;
+  font-size: 21px;
+  font-weight: bold;
+  line-height: 1;
+  color: #000;
+  text-shadow: 0 1px 0 #fff;
+  opacity: 0.2;
+  filter: alpha(opacity=20);
+}
+.close:hover,
+.close:focus {
+  color: #000;
+  text-decoration: none;
+  cursor: pointer;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+}
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: 12px;
+  font-weight: bold;
+  color: #fff;
+  line-height: 1;
+  vertical-align: middle;
+  white-space: nowrap;
+  text-align: center;
+  background-color: #777777;
+  border-radius: 10px;
+}
+.badge:empty {
+  display: none;
+}
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+  top: 0;
+  padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.list-group-item > .badge {
+  float: right;
+}
+.list-group-item > .badge + .badge {
+  margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+  margin-left: 3px;
+}
+.modal-open {
+  overflow: hidden;
+}
+.modal {
+  display: none;
+  overflow: hidden;
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1050;
+  -webkit-overflow-scrolling: touch;
+  outline: 0;
+}
+.modal.fade .modal-dialog {
+  -webkit-transform: translate(0, -25%);
+  -ms-transform: translate(0, -25%);
+  -o-transform: translate(0, -25%);
+  transform: translate(0, -25%);
+  -webkit-transition: -webkit-transform 0.3s ease-out;
+  -moz-transition: -moz-transform 0.3s ease-out;
+  -o-transition: -o-transform 0.3s ease-out;
+  transition: transform 0.3s ease-out;
+}
+.modal.in .modal-dialog {
+  -webkit-transform: translate(0, 0);
+  -ms-transform: translate(0, 0);
+  -o-transform: translate(0, 0);
+  transform: translate(0, 0);
+}
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 10px;
+}
+.modal-content {
+  position: relative;
+  background-color: #fff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  background-clip: padding-box;
+  outline: 0;
+}
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000;
+}
+.modal-backdrop.fade {
+  opacity: 0;
+  filter: alpha(opacity=0);
+}
+.modal-backdrop.in {
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+.modal-header {
+  padding: 15px;
+  border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+  margin-top: -2px;
+}
+.modal-title {
+  margin: 0;
+  line-height: 1.42857143;
+}
+.modal-body {
+  position: relative;
+  padding: 15px;
+}
+.modal-footer {
+  padding: 15px;
+  text-align: right;
+  border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+  margin-left: 5px;
+  margin-bottom: 0;
+}
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+@media (min-width: 768px) {
+  .modal-dialog {
+    width: 600px;
+    margin: 30px auto;
+  }
+  .modal-content {
+    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+  }
+  .modal-sm {
+    width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg {
+    width: 900px;
+  }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.panel-body:before,
+.panel-body:after,
+.pager:before,
+.pager:after,
+.modal-header:before,
+.modal-header:after,
+.modal-footer:before,
+.modal-footer:after {
+  content: " ";
+  display: table;
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.panel-body:after,
+.pager:after,
+.modal-header:after,
+.modal-footer:after {
+  clear: both;
+}
+.center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+.pull-right {
+  float: right !important;
+}
+.pull-left {
+  float: left !important;
+}
+.hide {
+  display: none !important;
+}
+.show {
+  display: block !important;
+}
+.invisible {
+  visibility: hidden;
+}
+.text-hide {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+.hidden {
+  display: none !important;
+}
+.affix {
+  position: fixed;
+}
+@-ms-viewport {
+  width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+  display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+  display: none !important;
+}
+@media (max-width: 767px) {
+  .visible-xs {
+    display: block !important;
+  }
+  table.visible-xs {
+    display: table !important;
+  }
+  tr.visible-xs {
+    display: table-row !important;
+  }
+  th.visible-xs,
+  td.visible-xs {
+    display: table-cell !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-block {
+    display: block !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-inline {
+    display: inline !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm {
+    display: block !important;
+  }
+  table.visible-sm {
+    display: table !important;
+  }
+  tr.visible-sm {
+    display: table-row !important;
+  }
+  th.visible-sm,
+  td.visible-sm {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-block {
+    display: block !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md {
+    display: block !important;
+  }
+  table.visible-md {
+    display: table !important;
+  }
+  tr.visible-md {
+    display: table-row !important;
+  }
+  th.visible-md,
+  td.visible-md {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-block {
+    display: block !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg {
+    display: block !important;
+  }
+  table.visible-lg {
+    display: table !important;
+  }
+  tr.visible-lg {
+    display: table-row !important;
+  }
+  th.visible-lg,
+  td.visible-lg {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-block {
+    display: block !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (max-width: 767px) {
+  .hidden-xs {
+    display: none !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .hidden-sm {
+    display: none !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .hidden-md {
+    display: none !important;
+  }
+}
+@media (min-width: 1200px) {
+  .hidden-lg {
+    display: none !important;
+  }
+}
+.visible-print {
+  display: none !important;
+}
+@media print {
+  .visible-print {
+    display: block !important;
+  }
+  table.visible-print {
+    display: table !important;
+  }
+  tr.visible-print {
+    display: table-row !important;
+  }
+  th.visible-print,
+  td.visible-print {
+    display: table-cell !important;
+  }
+}
+.visible-print-block {
+  display: none !important;
+}
+@media print {
+  .visible-print-block {
+    display: block !important;
+  }
+}
+.visible-print-inline {
+  display: none !important;
+}
+@media print {
+  .visible-print-inline {
+    display: inline !important;
+  }
+}
+.visible-print-inline-block {
+  display: none !important;
+}
+@media print {
+  .visible-print-inline-block {
+    display: inline-block !important;
+  }
+}
+@media print {
+  .hidden-print {
+    display: none !important;
+  }
+}
+.auth-message {
+  background-color: #eeeeee;
+  padding: 20px 0px;
+  width: 100%;
+  position: fixed;
+  top: -100%;
+  left: 0px;
+  z-index: 1070;
+  transition: top 300ms ease;
+}
+.auth-message.show {
+  top: 0px;
+  bottom: auto;
+}
+.auth-message p {
+  padding: 5px 0px;
+  color: #222222;
+}
+@media screen and (max-width: 991px) {
+  .auth-message {
+    text-align: center;
+  }
+  .auth-message .btn {
+    padding: 10px 16px;
+    font-size: 18px;
+  }
+}
+.alerts-snackbar {
+  position: fixed;
+  top: -100%;
+  width: 100%;
+  z-index: 1060;
+  text-align: center;
+  font-size: 18px;
+  transition: top 300ms ease;
+  pointer-events: none;
+}
+.alerts-snackbar.in {
+  top: 0px;
+  transition: top 200ms ease;
+}
+.alerts-snackbar p {
+  display: inline-block;
+  border-radius: 0px 0px 4px 4px;
+  margin: 0px;
+  pointer-events: all;
+}
+.loader {
+  width: 100%;
+  height: 49px;
+  text-align: center;
+}
+.loader.loader-spaced {
+  margin: 40px 0px;
+}
+.loader-spinning-wheel {
+  width: 49px;
+  height: 49px;
+  margin: 0 auto;
+  border: 3px solid #777777;
+  border-radius: 50%;
+  border-left-color: transparent;
+  border-right-color: transparent;
+  animation: cssload-spin 575ms infinite linear;
+  -o-animation: cssload-spin 575ms infinite linear;
+  -ms-animation: cssload-spin 575ms infinite linear;
+  -webkit-animation: cssload-spin 575ms infinite linear;
+  -moz-animation: cssload-spin 575ms infinite linear;
+}
+@keyframes cssload-spin {
+  100% {
+    transform: rotate(360deg);
+  }
+}
+@-o-keyframes cssload-spin {
+  100% {
+    -o-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-ms-keyframes cssload-spin {
+  100% {
+    -ms-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes cssload-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-moz-keyframes cssload-spin {
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+.navbar {
+  margin-bottom: 0px;
+}
+.navbar .navbar-full .navbar-brand > * {
+  display: inline-block;
+}
+.navbar .navbar-full .navbar-brand img {
+  height: 16px;
+}
+.navbar .navbar-full .nav-guest,
+.navbar .navbar-full .nav-user {
+  float: right;
+}
+.navbar .navbar-full .nav-guest .navbar-btn,
+.navbar .navbar-full .nav-user .navbar-btn {
+  margin-left: 15px;
+}
+.navbar .navbar-full .nav-user .dropdown-toggle {
+  padding: 8px;
+}
+.navbar .navbar-full .nav-user .dropdown-toggle img {
+  width: 34px;
+  height: 34px;
+}
+.navbar ul.navbar-compact-nav {
+  margin: 0px;
+  display: table;
+  width: 100%;
+}
+.navbar ul.navbar-compact-nav > li {
+  display: table-cell;
+}
+.navbar ul.navbar-compact-nav > li > a,
+.navbar ul.navbar-compact-nav > li > button {
+  background: none;
+  border: none;
+  margin: 0px;
+  padding-top: 10px;
+  padding-bottom: 10px;
+  width: 100%;
+  color: #777;
+  text-align: center;
+}
+.navbar ul.navbar-compact-nav > li > a:hover,
+.navbar ul.navbar-compact-nav > li > button:hover,
+.navbar ul.navbar-compact-nav > li > a:focus,
+.navbar ul.navbar-compact-nav > li > button:focus {
+  color: #333;
+  background-color: transparent;
+}
+.navbar ul.navbar-compact-nav > li > a > img,
+.navbar ul.navbar-compact-nav > li > button > img {
+  width: 24px;
+  height: 24px;
+}
+.navbar ul.navbar-compact-nav > li > button {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+.navbar ul.navbar-compact-nav > li > a > .material-icon {
+  font-size: 24px;
+  line-height: 24px;
+}
+@media (max-width: 767px) {
+  .navbar.navbar-misago {
+    min-height: auto;
+  }
+}
+.nav-side > a > .material-icon {
+  margin: -5px;
+  margin-right: 10px;
+  position: relative;
+  bottom: 2px;
+  width: 24px;
+  height: 24px;
+  font-size: 24px;
+  line-height: 24px;
+}
+@font-face {
+  font-family: 'Material Icons';
+  font-style: normal;
+  font-weight: 400;
+  src: url(../fonts/MaterialIcons-Regular.eot);
+  /* For IE6-8 */
+  src: local('Material Icons'), local('MaterialIcons-Regular'), url(../fonts/MaterialIcons-Regular.woff2) format('woff2'), url(../fonts/MaterialIcons-Regular.woff) format('woff'), url(../fonts/MaterialIcons-Regular.ttf) format('truetype');
+}
+.material-icon {
+  font-family: 'Material Icons';
+  font-weight: normal;
+  font-style: normal;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-align: center;
+  text-transform: none;
+  letter-spacing: normal;
+  vertical-align: middle;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  /* Support for all WebKit browsers. */
+  -webkit-font-smoothing: antialiased;
+  /* Support for Safari and Chrome. */
+  text-rendering: optimizeLegibility;
+  /* Support for Firefox. */
+  -moz-osx-font-smoothing: grayscale;
+  /* Support for IE. */
+  font-feature-settings: 'liga';
+}
+@media screen and (max-width: 991px) {
+  .modal-message {
+    text-align: center;
+  }
+  .modal-message .message-icon {
+    margin: 30px;
+  }
+  .modal-message .message-icon .material-icon {
+    font-size: 160px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .modal-message .modal-body {
+    padding-top: 20px;
+    padding-bottom: 30px;
+  }
+  .modal-message .message-icon {
+    float: left;
+  }
+  .modal-message .message-icon .material-icon {
+    font-size: 50px;
+  }
+  .modal-message .message-body {
+    margin-left: 75px;
+    margin-top: 10px;
+  }
+  .modal-message .message-body .lead {
+    margin-bottom: 0px;
+  }
+}
+.modal-loader {
+  padding: 50px 0px;
+}
+.modal-loader .loader {
+  width: 100%;
+  height: 80px;
+  text-align: center;
+}
+.modal-loader .loader-spinning-wheel {
+  width: 80px;
+  height: 80px;
+}
+.modal-register .modal-footer a {
+  float: left;
+  margin-top: 6.66666667px;
+}
+@media screen and (max-width: 991px) {
+  .modal-register .modal-footer {
+    text-align: center;
+  }
+  .modal-register .modal-footer a {
+    display: block;
+  }
+  .modal-register .modal-footer .btn {
+    display: block;
+    float: none;
+    margin-top: 10px;
+    width: 100%;
+  }
+}
+.has-feedback .material-icon.form-control-feedback {
+  top: 6px;
+  right: 24px;
+  font-size: 1.42857143;
+  line-height: 1.42857143;
+}
+.well.well-form.well-done {
+  font-size: 18px;
+  text-align: center;
+}
+.well.well-form.well-done .message-icon {
+  margin-bottom: 10px;
+  font-size: 90px;
+  line-height: 90px;
+}
+.well.well-form.well-done .message-body {
+  margin-bottom: 6.66666667px;
+}
+.well.well-form.well-noscript {
+  font-size: 18px;
+  text-align: center;
+}
+.well.well-form.well-noscript .message-icon {
+  margin-bottom: 10px;
+  font-size: 90px;
+  line-height: 90px;
+}
+.btn.btn-yes-no,
+.btn.btn-select {
+  background: transparent;
+  border: 1px solid #eeeeee;
+}
+.btn.btn-yes-no .material-icon,
+.btn.btn-select .material-icon {
+  margin: -4px 0px;
+  margin-right: 8px;
+  position: relative;
+  bottom: 1px;
+  width: 20px;
+  height: 20px;
+  font-size: 20px;
+  line-height: 20px;
+}
+input.hidden-file-upload {
+  position: absolute;
+  top: -9999px;
+  left: -9999px;
+}
+.btn.btn-loading,
+.btn.btn-loading:link,
+.btn.btn-loading:active,
+.btn.btn-loading:visited,
+.btn.btn-loading:hover,
+.btn.btn-loading:focus {
+  color: transparent;
+}
+.btn.btn-loading .loader,
+.btn.btn-loading:link .loader,
+.btn.btn-loading:active .loader,
+.btn.btn-loading:visited .loader,
+.btn.btn-loading:hover .loader,
+.btn.btn-loading:focus .loader {
+  height: 20px;
+  margin-top: -20px;
+}
+.btn.btn-loading .loader > div,
+.btn.btn-loading:link .loader > div,
+.btn.btn-loading:active .loader > div,
+.btn.btn-loading:visited .loader > div,
+.btn.btn-loading:hover .loader > div,
+.btn.btn-loading:focus .loader > div {
+  width: 20px;
+  height: 20px;
+}
+.btn.btn-loading.btn-default .loader > div {
+  border-top-color: #333;
+  border-bottom-color: #333;
+}
+.btn.btn-loading.btn-primary .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-success .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-info .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-warning .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-danger .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn .material-icon {
+  margin-right: 3px;
+  position: relative;
+  bottom: 1px;
+}
+.dropdown-menu > li > a,
+.dropdown-menu > li > .btn-link {
+  display: block;
+  border: none;
+  clear: both;
+  float: none;
+  padding: 4px 20px;
+  width: 100%;
+  color: #333333;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > .btn-link:hover,
+.dropdown-menu > li > a:focus,
+.dropdown-menu > li > .btn-link:focus {
+  background-color: #f5f5f5;
+  color: #262626;
+  text-decoration: none;
+}
+.dropdown-menu > li > a .material-icon,
+.dropdown-menu > li > .btn-link .material-icon {
+  margin: -2px 0px;
+  margin-right: 7px;
+  position: relative;
+  bottom: 1px;
+  font-size: 18px;
+}
+.dropdown-menu > li > a .badge,
+.dropdown-menu > li > .btn-link .badge {
+  float: right;
+}
+.dropdown-menu {
+  width: 210px;
+}
+.dropdown-menu .dropdown-footer {
+  padding: 6px 20px;
+}
+.mobile-dropdown,
+.compact-nav {
+  position: static;
+  margin: 0px;
+  overflow: auto;
+}
+.mobile-dropdown.open,
+.compact-nav.open {
+  margin-top: -20px;
+  margin-bottom: 20px;
+}
+.mobile-dropdown.open > .dropdown-menu,
+.compact-nav.open > .dropdown-menu {
+  border: none;
+  border-radius: 0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  display: block;
+  margin: 0px;
+  width: 100%;
+  position: static;
+}
+.user-dropdown .guest-preview {
+  text-align: center;
+}
+.user-dropdown .guest-preview .row {
+  margin: 0px;
+}
+.navbar .user-dropdown {
+  width: 240px;
+}
+.user-dropdown .dropdown-header {
+  padding: 6px 20px;
+  font-size: 18px;
+}
+.user-dropdown .dropdown-header strong {
+  font-weight: normal;
+}
+.page-header {
+  margin: 0px;
+  margin-bottom: 20px;
+}
+.page-header .btn-aligned {
+  float: right;
+  margin-top: 23px;
+  margin-left: 8px;
+}
+@media screen and (max-width: 991px) {
+  .container h1 {
+    font-size: 22.5px;
+  }
+  .container .btn-aligned {
+    float: right;
+    margin-top: 13px;
+  }
+  .container .btn-icon .material-icon {
+    width: 24px;
+    height: 24px;
+    font-size: 24px;
+    line-height: 24px;
+  }
+}
+.header-stats .list-inline li {
+  margin-right: 8px;
+}
+.header-stats .list-inline li .status-icon {
+  width: 18px;
+  height: 18px;
+  margin-right: 4px;
+  position: relative;
+  bottom: 1px;
+  font-size: 18px;
+  line-height: 18px;
+}
+@media screen and (max-width: 991px) {
+  .header-stats .list-inline {
+    margin-top: 10px;
+    margin-bottom: 0px;
+    font-size: 12px;
+  }
+}
+.page-header .page-tabs .nav > li {
+  margin: 0px;
+}
+.page-header .page-tabs .nav > li > a {
+  border-radius: 0px;
+}
+@media screen and (max-width: 991px) {
+  .page-header .page-tabs {
+    margin-top: 9px;
+    margin-bottom: -9px;
+  }
+  .page-header .page-tabs .container {
+    padding: 0px;
+    width: 100%;
+  }
+  .page-header .page-tabs .container .nav-pills li {
+    display: block;
+    float: inherit;
+    width: auto;
+  }
+}
+@media screen and (min-width: 992px) {
+  .page-header.tabbed {
+    padding-bottom: 0px;
+  }
+}
+@media screen and (max-width: 991px) {
+  .panel-message-body {
+    text-align: center;
+  }
+  .panel-message-body .message-icon {
+    margin: 30px;
+  }
+  .panel-message-body .message-icon .material-icon {
+    font-size: 160px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .panel-message-body {
+    padding: 20px;
+    padding-bottom: 30px;
+  }
+  .panel-message-body .message-icon {
+    float: left;
+  }
+  .panel-message-body .message-icon .material-icon {
+    font-size: 50px;
+  }
+  .panel-message-body .message-body {
+    margin-left: 75px;
+    margin-top: 10px;
+  }
+  .panel-message-body .message-body .lead {
+    margin-bottom: 0px;
+  }
+  .panel-message-body .message-body .help-block {
+    margin-top: 13.2px;
+  }
+}
+.panel-body-loading {
+  padding: 0px;
+  text-align: center;
+}
+.misago-footer {
+  margin-top: 30px;
+  margin-bottom: 50px;
+}
+.misago-footer .footer-content {
+  border-top: 1px solid #eeeeee;
+  padding-top: 30px;
+}
+.misago-footer .noscript-message .material-icon {
+  position: relative;
+  bottom: 1px;
+  font-size: 18px;
+}
+.ui-preview,
+.ui-preview-text,
+.ui-preview-img {
+  background: #fafafa;
+  border-radius: 5px;
+  color: #fafafa;
+  -webkit-animation: ui-preview-animation 1.5s linear infinite;
+  -o-animation: ui-preview-animation 1.5s linear infinite;
+  animation: ui-preview-animation 1.5s linear infinite;
+}
+@-webkit-keyframes ui-preview-animation {
+  0% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+  50% {
+    background: #e0e0e0;
+    color: #e0e0e0;
+  }
+  100% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+}
+@keyframes ui-preview-animation {
+  0% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+  50% {
+    background: #e0e0e0;
+    color: #e0e0e0;
+  }
+  100% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+}
+.ui-preview-text {
+  border-radius: 100px;
+  display: inline-block;
+  height: 14px;
+  position: relative;
+  top: 3px;
+}
+.ui-preview-paragraph .ui-preview-text {
+  margin-right: 6px;
+}
+.ui-preview-paragraph .ui-preview-text:last-child {
+  margin-right: 0px;
+}
+.ui-preview .list-group {
+  padding: 1px;
+}
+.ui-preview .list-group > li {
+  border: none;
+  margin-bottom: 1px;
+}
+.ui-preview .list-group > li:last-child {
+  margin-bottom: 0px;
+}
+.pager-undercontent {
+  margin-top: -20px;
+}
+.pager-progress-bar {
+  list-style: none;
+  margin: 0px;
+  margin-top: -46px;
+  padding: 0px;
+  overflow: auto;
+  text-align: center;
+}
+.pager-progress-bar li {
+  display: inline-block;
+}
+.pager-progress-bar li a {
+  padding: 0px 6px;
+}
+.pager-progress-bar li.active a {
+  font-weight: bold;
+}
+.user-status.user-banned .status-icon {
+  color: #d9534f;
+}
+.user-status.user-online .status-icon {
+  color: #5cb85c;
+}
+.user-status.user-offline .status-icon {
+  color: #eeeeee;
+}
+.user-status > .status-icon.ui-preview {
+  display: inline-block;
+  border-radius: 100px;
+  width: 20px;
+  height: 20px;
+  font-weight: 0px;
+}
+.user-status > .status-label.ui-preview {
+  display: inline-block;
+  margin-left: 6px;
+  width: 40px;
+}
+.user-card {
+  background: #fff;
+  border: 1px solid #eeeeee;
+  border-radius: 6px;
+  margin-bottom: 20px;
+  overflow: hidden;
+}
+.user-card .user-card-bg-image {
+  background: #fff;
+}
+.user-card .user-card-bg-image > img {
+  display: none;
+}
+.user-card .user-details {
+  padding: 6px 12px;
+  overflow: auto;
+}
+.user-card .user-details .user-avatar {
+  float: left;
+}
+.user-card .user-details .user-avatar img {
+  width: 60px;
+  height: 60px;
+}
+.user-card .user-details .user-name {
+  margin-left: 76px;
+}
+.user-card .user-details .user-name .item-title {
+  font-size: 18px;
+}
+.user-card .user-details .user-subscript {
+  margin-left: 76px;
+  color: #777777;
+  font-size: 9.24px;
+}
+.user-card .user-details .user-subscript > span {
+  margin-right: 8px;
+}
+.user-card .user-details .user-subscript > span .status-icon {
+  width: 14px;
+  height: 14px;
+  margin-right: 2px;
+  position: relative;
+  bottom: 2px;
+  font-size: 14px;
+  line-height: 14px;
+}
+.user-card .user-details .user-subscript > span .status-icon.ui-preview {
+  height: 9.24px;
+  width: 9.24px;
+  position: relative;
+  bottom: -3px;
+}
+.user-card .user-details .user-subscript > span .status-label.ui-preview {
+  height: 9.24px;
+}
+.user-card .user-card-stats {
+  border-top: 1px solid #eeeeee;
+  display: table;
+  table-layout: fixed;
+  width: 100%;
+}
+.user-card .user-card-stats ul {
+  display: table-row;
+}
+.user-card .user-card-stats ul li {
+  display: table-cell;
+  padding: 6px 12px;
+  text-align: center;
+}
+.user-card .user-card-stats ul li strong {
+  font-size: 12px;
+}
+.user-card .user-card-stats ul li small {
+  margin-left: 3px;
+  color: #777777;
+  font-size: 12px;
+}
+.user-card.ui-preview .user-name .ui-preview-text {
+  height: 18px;
+}
+.user-card.ui-preview .user-subscript .ui-preview-text {
+  height: 9.24px;
+  position: relative;
+  top: 0px;
+}
+.user-card.ui-preview .user-card-stats .ui-preview-text {
+  height: 12px;
+  width: 14px;
+  position: relative;
+  top: 0px;
+  font-size: 12px;
+  line-height: 12px;
+}
+.item-title {
+  color: #333333;
+  font-weight: bold;
+  text-decoration: none;
+}
+a.item-title:link,
+a.item-title:active,
+a.item-title:visited,
+a.item-title:hover {
+  color: #333333;
+  font-weight: bold;
+}
+a.item-title:hover {
+  text-decoration: underline;
+}
+.message-line {
+  text-align: center;
+}
+.message-line .material-icon {
+  margin-right: 6.66666667px;
+  font-size: 20px;
+  line-height: 20px;
+  height: 20px;
+  width: 20px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview {
+  border-radius: 6px;
+  margin: 0px auto;
+  overflow: hidden;
+  position: relative;
+  width: 200px;
+  height: 200px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview .loader {
+  display: none;
+  position: absolute;
+  top: 50px;
+  height: 100px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {
+  border-width: 10px;
+  border-color: #fff;
+  border-left-color: transparent;
+  border-right-color: transparent;
+  width: 100px;
+  height: 100px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img {
+  opacity: 0.33;
+  filter: alpha(opacity=33);
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader {
+  display: block;
+}
+@media (max-width: 767px) {
+  .modal-change-avatar .modal-avatar-index .avatar-preview {
+    margin-bottom: 20px;
+    width: 150px;
+    height: 150px;
+  }
+  .modal-change-avatar .modal-avatar-index .avatar-preview img {
+    width: 150px;
+    height: 150px;
+  }
+  .modal-change-avatar .modal-avatar-index .avatar-preview .loader {
+    top: 25px;
+    height: 100px;
+  }
+  .modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {
+    width: 100px;
+    height: 100px;
+  }
+}
+.modal-change-avatar .modal-avatar-index .btn {
+  text-align: left;
+}
+.modal-change-avatar .modal-avatar-upload {
+  text-align: center;
+}
+.modal-change-avatar .modal-avatar-upload .btn-pick-file {
+  background: transparent;
+  border: 2px solid #eeeeee;
+  border-radius: 6px;
+  padding: 10px 24px;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  color: #777777;
+  font-size: 18px;
+  text-align: center;
+}
+.modal-change-avatar .modal-avatar-upload .btn-pick-file > .material-icon {
+  display: block;
+  margin: 0px auto;
+  margin-bottom: 13.2px;
+  font-size: 50px;
+  width: 50px;
+  height: 50px;
+}
+.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover,
+.modal-change-avatar .modal-avatar-upload .btn-pick-file:active {
+  border-color: #777777;
+}
+.modal-change-avatar .modal-avatar-upload .text-muted {
+  margin-top: 13.2px;
+}
+.modal-change-avatar .modal-avatar-upload .upload-progress img {
+  border-radius: 4px;
+  margin-bottom: 20px;
+  max-height: 80px;
+  width: auto;
+}
+.modal-change-avatar .modal-avatar-upload .upload-progress .progress {
+  width: 70%;
+  margin: 0px auto;
+}
+.modal-avatar-crop .crop-form {
+  margin: 0px auto;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input {
+  margin-top: 10px;
+  -webkit-appearance: none;
+  border: 1px solid white;
+  width: 100%;
+  /*hide the outline behind the border*/
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track {
+  width: 100%;
+  height: 8px;
+  background: #eeeeee;
+  border: none;
+  border-radius: 3px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb {
+  -webkit-appearance: none;
+  border: none;
+  height: 20px;
+  width: 20px;
+  border-radius: 50%;
+  background: #777777;
+  margin-top: -6px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus {
+  outline: none;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track {
+  background: #eeeeee;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track {
+  width: 100%;
+  height: 8px;
+  background: #eeeeee;
+  border: none;
+  border-radius: 4px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb {
+  border: none;
+  height: 20px;
+  width: 20px;
+  border-radius: 50%;
+  background: #777777;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring {
+  outline: 1px solid white;
+  outline-offset: -1px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track {
+  width: 100%;
+  height: 8px;
+  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
+  background: transparent;
+  /*leave room for the larger thumb to overflow with a transparent border */
+  border-color: transparent;
+  border-width: 8px 0;
+  /*remove default tick marks*/
+  color: transparent;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower {
+  background: #eeeeee;
+  border-radius: 16px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper {
+  background: #eeeeee;
+  border-radius: 16px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb {
+  border: none;
+  height: 20px;
+  width: 20px;
+  border-radius: 50%;
+  background: #777777;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower {
+  background: #eeeeee;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper {
+  background: #eeeeee;
+}
+.modal-change-avatar .modal-avatar-gallery {
+  padding-bottom: 0px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery {
+  margin-bottom: 20px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3 {
+  margin-top: 0px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row {
+  margin-bottom: 10px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn {
+  border-radius: 6px;
+  border: 2px solid #eeeeee;
+  background: none;
+  padding: 2px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover,
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus {
+  border-color: #777777;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active {
+  border-color: #337ab7;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img {
+  border-radius: 4px;
+  width: 100%;
+}
+@media screen and (max-width: 991px) {
+  .page-message,
+  .page-error {
+    text-align: center;
+  }
+  .page-message .message-icon,
+  .page-error .message-icon {
+    margin: 30px;
+  }
+  .page-message .message-icon .material-icon,
+  .page-error .message-icon .material-icon {
+    font-size: 160px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .page-message .message-panel,
+  .page-error .message-panel {
+    margin: 60px auto;
+    max-width: 779.35px;
+    overflow: auto;
+  }
+  .page-message .message-icon,
+  .page-error .message-icon {
+    float: left;
+  }
+  .page-message .message-icon .material-icon,
+  .page-error .message-icon .material-icon {
+    font-size: 80px;
+  }
+  .page-message .message-body,
+  .page-error .message-body {
+    margin-left: 100px;
+  }
+}
+.active-posters li {
+  display: block;
+  overflow: auto;
+}
+.active-posters .rank-user .rank-name,
+.active-posters .rank-user .user-title {
+  font-size: 12px;
+}
+.active-posters .rank-user .status-icon {
+  width: 16px;
+  height: 16px;
+  margin-right: 2px;
+  font-size: 16px;
+  line-height: 16px;
+}
+.active-posters .rank-position small,
+.active-posters .rank-posts-total small,
+.active-posters .rank-posts-counted small {
+  color: #777777;
+}
+@media screen and (max-width: 991px) {
+  .active-posters .rank-user-avatar {
+    float: left;
+  }
+  .active-posters .rank-user-avatar img {
+    width: 36px;
+    height: 36px;
+    position: relative;
+    top: 3px;
+  }
+  .active-posters .rank-user {
+    float: left;
+    margin-left: 13.2px;
+    width: 40%;
+  }
+  .active-posters .rank-user .user-name .item-title {
+    margin-top: 4px;
+    font-size: 14px;
+  }
+  .active-posters .rank-user .rank-name {
+    font-weight: normal;
+  }
+  .active-posters .rank-user .user-status {
+    margin-right: 4px;
+  }
+  .active-posters .rank-user .user-status .status-icon {
+    position: relative;
+    top: -1px;
+  }
+  .active-posters .rank-user .user-status .status-icon.ui-preview {
+    position: relative;
+    top: 1px;
+  }
+  .active-posters .rank-position,
+  .active-posters .rank-posts-total,
+  .active-posters .rank-posts-counted {
+    float: right;
+    width: 40%;
+    position: relative;
+    bottom: 2px;
+    line-height: 14px;
+  }
+  .active-posters .rank-position strong,
+  .active-posters .rank-posts-total strong,
+  .active-posters .rank-posts-counted strong,
+  .active-posters .rank-position small,
+  .active-posters .rank-posts-total small,
+  .active-posters .rank-posts-counted small {
+    display: inline-block;
+    font-size: 9.24px;
+    line-height: 9.24px;
+  }
+  .active-posters .rank-position strong,
+  .active-posters .rank-posts-total strong,
+  .active-posters .rank-posts-counted strong {
+    width: 34px;
+    padding-right: 4px;
+    text-align: right;
+    font-weight: normal;
+  }
+  .active-posters.ui-preview .rank-user .rank-name {
+    position: relative;
+    bottom: 1px;
+  }
+  .active-posters.ui-preview .rank-user .rank-name .ui-preview-text {
+    height: 12px;
+  }
+  .active-posters.ui-preview .rank-position strong,
+  .active-posters.ui-preview .rank-posts-total strong,
+  .active-posters.ui-preview .rank-posts-counted strong {
+    position: relative;
+    bottom: 3px;
+  }
+  .active-posters.ui-preview .rank-position strong .ui-preview-text,
+  .active-posters.ui-preview .rank-posts-total strong .ui-preview-text,
+  .active-posters.ui-preview .rank-posts-counted strong .ui-preview-text {
+    height: 9.24px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .active-posters.ui-preview .rank-user .user-status .status-icon {
+    position: relative;
+    top: 2px;
+  }
+  .active-posters li > * {
+    float: left;
+    padding-top: 4px;
+  }
+  .active-posters .rank-user-avatar {
+    padding-top: 0px;
+  }
+  .active-posters .rank-user {
+    padding-top: 0px;
+    padding-left: 16px;
+    width: 25%;
+  }
+  .active-posters .rank-user .user-name .item-title {
+    margin-top: 2px;
+    font-size: 18px;
+  }
+  .active-posters .rank-user .user-status {
+    margin-right: 12px;
+  }
+  .active-posters .rank-user .user-status .status-icon {
+    position: relative;
+    top: -1px;
+  }
+  .active-posters .rank-user .user-status .status-icon.ui-preview {
+    top: 2px;
+  }
+  .active-posters .rank-user .user-status .status-label {
+    font-size: 12px;
+    line-height: 12px;
+  }
+  .active-posters .rank-user .rank-name {
+    margin-right: 12px;
+  }
+  .active-posters .rank-position {
+    width: 23%;
+  }
+  .active-posters .rank-posts-total {
+    width: 23%;
+  }
+  .active-posters .rank-posts-counted {
+    width: 23%;
+  }
+  .active-posters .rank-position,
+  .active-posters .rank-posts-total,
+  .active-posters .rank-posts-counted {
+    font-size: 18px;
+    font-weight: bold;
+    text-align: center;
+  }
+  .active-posters .rank-position strong,
+  .active-posters .rank-posts-total strong,
+  .active-posters .rank-posts-counted strong {
+    display: block;
+  }
+  .active-posters .rank-position small,
+  .active-posters .rank-posts-total small,
+  .active-posters .rank-posts-counted small {
+    display: block;
+    font-size: 12px;
+    font-weight: normal;
+  }
+}
+@media screen and (max-width: 991px) {
+  .page-user-profile .page-header h1 img {
+    width: 40px;
+    height: 40px;
+  }
+  h1.pull-left img {
+    margin-right: 6px;
+  }
+  .page-user-profile .page-header .btn-aligned {
+    position: relative;
+    top: 8px;
+  }
+  .page-user-profile .profile-side-avatar {
+    display: none;
+  }
+}
+@media screen and (min-width: 992px) {
+  .page-user-profile .page-header h1 img {
+    display: none;
+  }
+  .page-user-profile .profile-side-avatar img {
+    width: 100%;
+    height: auto;
+    margin-top: -110px;
+    margin-bottom: 20px;
+  }
+}
+.username-history .username-change-avatar {
+  float: left;
+}
+.username-history .username-change-avatar .user-avatar {
+  margin-right: 10px;
+}
+.username-history .username-change-avatar .user-avatar img {
+  width: 42px;
+  height: 42px;
+}
+.username-history .username-change .material-icon {
+  margin: 0px 7px;
+}
+.username-history .username-change-date {
+  color: #777777;
+  font-size: 12px;
+}
+@media screen and (min-width: 992px) {
+  .username-history li {
+    overflow: auto;
+  }
+  .username-history li.empty-message {
+    text-align: center;
+  }
+  .username-history .username-change-avatar {
+    float: left;
+  }
+  .username-history .username-change-avatar .user-avatar {
+    margin-right: 10px;
+  }
+  .username-history .username-change-avatar .user-avatar img {
+    width: 18px;
+    height: 18px;
+    position: relative;
+    bottom: 1px;
+  }
+  .username-history .username-change-author {
+    float: left;
+    width: 30%;
+  }
+  .username-history .username-change {
+    float: left;
+    width: 40%;
+  }
+  .username-history .username-change-date {
+    float: left;
+    width: 20%;
+  }
+  .username-history.ui-ready .username-change-date {
+    position: relative;
+    top: 2px;
+  }
+}

BIN
misago/static/misago/fonts/MaterialIcons-Regular.eot


+ 1 - 0
misago/static/misago/fonts/MaterialIcons-Regular.ijmap

@@ -0,0 +1 @@
+{"icons":{"e84d":{"name":"3d Rotation"},"eb3b":{"name":"Ac Unit"},"e190":{"name":"Access Alarm"},"e191":{"name":"Access Alarms"},"e192":{"name":"Access Time"},"e84e":{"name":"Accessibility"},"e914":{"name":"Accessible"},"e84f":{"name":"Account Balance"},"e850":{"name":"Account Balance Wallet"},"e851":{"name":"Account Box"},"e853":{"name":"Account Circle"},"e60e":{"name":"Adb"},"e145":{"name":"Add"},"e439":{"name":"Add A Photo"},"e193":{"name":"Add Alarm"},"e003":{"name":"Add Alert"},"e146":{"name":"Add Box"},"e147":{"name":"Add Circle"},"e148":{"name":"Add Circle Outline"},"e567":{"name":"Add Location"},"e854":{"name":"Add Shopping Cart"},"e39d":{"name":"Add To Photos"},"e05c":{"name":"Add To Queue"},"e39e":{"name":"Adjust"},"e630":{"name":"Airline Seat Flat"},"e631":{"name":"Airline Seat Flat Angled"},"e632":{"name":"Airline Seat Individual Suite"},"e633":{"name":"Airline Seat Legroom Extra"},"e634":{"name":"Airline Seat Legroom Normal"},"e635":{"name":"Airline Seat Legroom Reduced"},"e636":{"name":"Airline Seat Recline Extra"},"e637":{"name":"Airline Seat Recline Normal"},"e195":{"name":"Airplanemode Active"},"e194":{"name":"Airplanemode Inactive"},"e055":{"name":"Airplay"},"eb3c":{"name":"Airport Shuttle"},"e855":{"name":"Alarm"},"e856":{"name":"Alarm Add"},"e857":{"name":"Alarm Off"},"e858":{"name":"Alarm On"},"e019":{"name":"Album"},"eb3d":{"name":"All Inclusive"},"e90b":{"name":"All Out"},"e859":{"name":"Android"},"e85a":{"name":"Announcement"},"e5c3":{"name":"Apps"},"e149":{"name":"Archive"},"e5c4":{"name":"Arrow Back"},"e5db":{"name":"Arrow Downward"},"e5c5":{"name":"Arrow Drop Down"},"e5c6":{"name":"Arrow Drop Down Circle"},"e5c7":{"name":"Arrow Drop Up"},"e5c8":{"name":"Arrow Forward"},"e5d8":{"name":"Arrow Upward"},"e060":{"name":"Art Track"},"e85b":{"name":"Aspect Ratio"},"e85c":{"name":"Assessment"},"e85d":{"name":"Assignment"},"e85e":{"name":"Assignment Ind"},"e85f":{"name":"Assignment Late"},"e860":{"name":"Assignment Return"},"e861":{"name":"Assignment Returned"},"e862":{"name":"Assignment Turned In"},"e39f":{"name":"Assistant"},"e3a0":{"name":"Assistant Photo"},"e226":{"name":"Attach File"},"e227":{"name":"Attach Money"},"e2bc":{"name":"Attachment"},"e3a1":{"name":"Audiotrack"},"e863":{"name":"Autorenew"},"e01b":{"name":"Av Timer"},"e14a":{"name":"Backspace"},"e864":{"name":"Backup"},"e19c":{"name":"Battery Alert"},"e1a3":{"name":"Battery Charging Full"},"e1a4":{"name":"Battery Full"},"e1a5":{"name":"Battery Std"},"e1a6":{"name":"Battery Unknown"},"eb3e":{"name":"Beach Access"},"e52d":{"name":"Beenhere"},"e14b":{"name":"Block"},"e1a7":{"name":"Bluetooth"},"e60f":{"name":"Bluetooth Audio"},"e1a8":{"name":"Bluetooth Connected"},"e1a9":{"name":"Bluetooth Disabled"},"e1aa":{"name":"Bluetooth Searching"},"e3a2":{"name":"Blur Circular"},"e3a3":{"name":"Blur Linear"},"e3a4":{"name":"Blur Off"},"e3a5":{"name":"Blur On"},"e865":{"name":"Book"},"e866":{"name":"Bookmark"},"e867":{"name":"Bookmark Border"},"e228":{"name":"Border All"},"e229":{"name":"Border Bottom"},"e22a":{"name":"Border Clear"},"e22b":{"name":"Border Color"},"e22c":{"name":"Border Horizontal"},"e22d":{"name":"Border Inner"},"e22e":{"name":"Border Left"},"e22f":{"name":"Border Outer"},"e230":{"name":"Border Right"},"e231":{"name":"Border Style"},"e232":{"name":"Border Top"},"e233":{"name":"Border Vertical"},"e06b":{"name":"Branding Watermark"},"e3a6":{"name":"Brightness 1"},"e3a7":{"name":"Brightness 2"},"e3a8":{"name":"Brightness 3"},"e3a9":{"name":"Brightness 4"},"e3aa":{"name":"Brightness 5"},"e3ab":{"name":"Brightness 6"},"e3ac":{"name":"Brightness 7"},"e1ab":{"name":"Brightness Auto"},"e1ac":{"name":"Brightness High"},"e1ad":{"name":"Brightness Low"},"e1ae":{"name":"Brightness Medium"},"e3ad":{"name":"Broken Image"},"e3ae":{"name":"Brush"},"e6dd":{"name":"Bubble Chart"},"e868":{"name":"Bug Report"},"e869":{"name":"Build"},"e43c":{"name":"Burst Mode"},"e0af":{"name":"Business"},"eb3f":{"name":"Business Center"},"e86a":{"name":"Cached"},"e7e9":{"name":"Cake"},"e0b0":{"name":"Call"},"e0b1":{"name":"Call End"},"e0b2":{"name":"Call Made"},"e0b3":{"name":"Call Merge"},"e0b4":{"name":"Call Missed"},"e0e4":{"name":"Call Missed Outgoing"},"e0b5":{"name":"Call Received"},"e0b6":{"name":"Call Split"},"e06c":{"name":"Call To Action"},"e3af":{"name":"Camera"},"e3b0":{"name":"Camera Alt"},"e8fc":{"name":"Camera Enhance"},"e3b1":{"name":"Camera Front"},"e3b2":{"name":"Camera Rear"},"e3b3":{"name":"Camera Roll"},"e5c9":{"name":"Cancel"},"e8f6":{"name":"Card Giftcard"},"e8f7":{"name":"Card Membership"},"e8f8":{"name":"Card Travel"},"eb40":{"name":"Casino"},"e307":{"name":"Cast"},"e308":{"name":"Cast Connected"},"e3b4":{"name":"Center Focus Strong"},"e3b5":{"name":"Center Focus Weak"},"e86b":{"name":"Change History"},"e0b7":{"name":"Chat"},"e0ca":{"name":"Chat Bubble"},"e0cb":{"name":"Chat Bubble Outline"},"e5ca":{"name":"Check"},"e834":{"name":"Check Box"},"e835":{"name":"Check Box Outline Blank"},"e86c":{"name":"Check Circle"},"e5cb":{"name":"Chevron Left"},"e5cc":{"name":"Chevron Right"},"eb41":{"name":"Child Care"},"eb42":{"name":"Child Friendly"},"e86d":{"name":"Chrome Reader Mode"},"e86e":{"name":"Class"},"e14c":{"name":"Clear"},"e0b8":{"name":"Clear All"},"e5cd":{"name":"Close"},"e01c":{"name":"Closed Caption"},"e2bd":{"name":"Cloud"},"e2be":{"name":"Cloud Circle"},"e2bf":{"name":"Cloud Done"},"e2c0":{"name":"Cloud Download"},"e2c1":{"name":"Cloud Off"},"e2c2":{"name":"Cloud Queue"},"e2c3":{"name":"Cloud Upload"},"e86f":{"name":"Code"},"e3b6":{"name":"Collections"},"e431":{"name":"Collections Bookmark"},"e3b7":{"name":"Color Lens"},"e3b8":{"name":"Colorize"},"e0b9":{"name":"Comment"},"e3b9":{"name":"Compare"},"e915":{"name":"Compare Arrows"},"e30a":{"name":"Computer"},"e638":{"name":"Confirmation Number"},"e0d0":{"name":"Contact Mail"},"e0cf":{"name":"Contact Phone"},"e0ba":{"name":"Contacts"},"e14d":{"name":"Content Copy"},"e14e":{"name":"Content Cut"},"e14f":{"name":"Content Paste"},"e3ba":{"name":"Control Point"},"e3bb":{"name":"Control Point Duplicate"},"e90c":{"name":"Copyright"},"e150":{"name":"Create"},"e2cc":{"name":"Create New Folder"},"e870":{"name":"Credit Card"},"e3be":{"name":"Crop"},"e3bc":{"name":"Crop 16 9"},"e3bd":{"name":"Crop 3 2"},"e3bf":{"name":"Crop 5 4"},"e3c0":{"name":"Crop 7 5"},"e3c1":{"name":"Crop Din"},"e3c2":{"name":"Crop Free"},"e3c3":{"name":"Crop Landscape"},"e3c4":{"name":"Crop Original"},"e3c5":{"name":"Crop Portrait"},"e437":{"name":"Crop Rotate"},"e3c6":{"name":"Crop Square"},"e871":{"name":"Dashboard"},"e1af":{"name":"Data Usage"},"e916":{"name":"Date Range"},"e3c7":{"name":"Dehaze"},"e872":{"name":"Delete"},"e92b":{"name":"Delete Forever"},"e16c":{"name":"Delete Sweep"},"e873":{"name":"Description"},"e30b":{"name":"Desktop Mac"},"e30c":{"name":"Desktop Windows"},"e3c8":{"name":"Details"},"e30d":{"name":"Developer Board"},"e1b0":{"name":"Developer Mode"},"e335":{"name":"Device Hub"},"e1b1":{"name":"Devices"},"e337":{"name":"Devices Other"},"e0bb":{"name":"Dialer Sip"},"e0bc":{"name":"Dialpad"},"e52e":{"name":"Directions"},"e52f":{"name":"Directions Bike"},"e532":{"name":"Directions Boat"},"e530":{"name":"Directions Bus"},"e531":{"name":"Directions Car"},"e534":{"name":"Directions Railway"},"e566":{"name":"Directions Run"},"e533":{"name":"Directions Subway"},"e535":{"name":"Directions Transit"},"e536":{"name":"Directions Walk"},"e610":{"name":"Disc Full"},"e875":{"name":"Dns"},"e612":{"name":"Do Not Disturb"},"e611":{"name":"Do Not Disturb Alt"},"e643":{"name":"Do Not Disturb Off"},"e644":{"name":"Do Not Disturb On"},"e30e":{"name":"Dock"},"e7ee":{"name":"Domain"},"e876":{"name":"Done"},"e877":{"name":"Done All"},"e917":{"name":"Donut Large"},"e918":{"name":"Donut Small"},"e151":{"name":"Drafts"},"e25d":{"name":"Drag Handle"},"e613":{"name":"Drive Eta"},"e1b2":{"name":"Dvr"},"e3c9":{"name":"Edit"},"e568":{"name":"Edit Location"},"e8fb":{"name":"Eject"},"e0be":{"name":"Email"},"e63f":{"name":"Enhanced Encryption"},"e01d":{"name":"Equalizer"},"e000":{"name":"Error"},"e001":{"name":"Error Outline"},"e926":{"name":"Euro Symbol"},"e56d":{"name":"Ev Station"},"e878":{"name":"Event"},"e614":{"name":"Event Available"},"e615":{"name":"Event Busy"},"e616":{"name":"Event Note"},"e903":{"name":"Event Seat"},"e879":{"name":"Exit To App"},"e5ce":{"name":"Expand Less"},"e5cf":{"name":"Expand More"},"e01e":{"name":"Explicit"},"e87a":{"name":"Explore"},"e3ca":{"name":"Exposure"},"e3cb":{"name":"Exposure Neg 1"},"e3cc":{"name":"Exposure Neg 2"},"e3cd":{"name":"Exposure Plus 1"},"e3ce":{"name":"Exposure Plus 2"},"e3cf":{"name":"Exposure Zero"},"e87b":{"name":"Extension"},"e87c":{"name":"Face"},"e01f":{"name":"Fast Forward"},"e020":{"name":"Fast Rewind"},"e87d":{"name":"Favorite"},"e87e":{"name":"Favorite Border"},"e06d":{"name":"Featured Play List"},"e06e":{"name":"Featured Video"},"e87f":{"name":"Feedback"},"e05d":{"name":"Fiber Dvr"},"e061":{"name":"Fiber Manual Record"},"e05e":{"name":"Fiber New"},"e06a":{"name":"Fiber Pin"},"e062":{"name":"Fiber Smart Record"},"e2c4":{"name":"File Download"},"e2c6":{"name":"File Upload"},"e3d3":{"name":"Filter"},"e3d0":{"name":"Filter 1"},"e3d1":{"name":"Filter 2"},"e3d2":{"name":"Filter 3"},"e3d4":{"name":"Filter 4"},"e3d5":{"name":"Filter 5"},"e3d6":{"name":"Filter 6"},"e3d7":{"name":"Filter 7"},"e3d8":{"name":"Filter 8"},"e3d9":{"name":"Filter 9"},"e3da":{"name":"Filter 9 Plus"},"e3db":{"name":"Filter B And W"},"e3dc":{"name":"Filter Center Focus"},"e3dd":{"name":"Filter Drama"},"e3de":{"name":"Filter Frames"},"e3df":{"name":"Filter Hdr"},"e152":{"name":"Filter List"},"e3e0":{"name":"Filter None"},"e3e2":{"name":"Filter Tilt Shift"},"e3e3":{"name":"Filter Vintage"},"e880":{"name":"Find In Page"},"e881":{"name":"Find Replace"},"e90d":{"name":"Fingerprint"},"e5dc":{"name":"First Page"},"eb43":{"name":"Fitness Center"},"e153":{"name":"Flag"},"e3e4":{"name":"Flare"},"e3e5":{"name":"Flash Auto"},"e3e6":{"name":"Flash Off"},"e3e7":{"name":"Flash On"},"e539":{"name":"Flight"},"e904":{"name":"Flight Land"},"e905":{"name":"Flight Takeoff"},"e3e8":{"name":"Flip"},"e882":{"name":"Flip To Back"},"e883":{"name":"Flip To Front"},"e2c7":{"name":"Folder"},"e2c8":{"name":"Folder Open"},"e2c9":{"name":"Folder Shared"},"e617":{"name":"Folder Special"},"e167":{"name":"Font Download"},"e234":{"name":"Format Align Center"},"e235":{"name":"Format Align Justify"},"e236":{"name":"Format Align Left"},"e237":{"name":"Format Align Right"},"e238":{"name":"Format Bold"},"e239":{"name":"Format Clear"},"e23a":{"name":"Format Color Fill"},"e23b":{"name":"Format Color Reset"},"e23c":{"name":"Format Color Text"},"e23d":{"name":"Format Indent Decrease"},"e23e":{"name":"Format Indent Increase"},"e23f":{"name":"Format Italic"},"e240":{"name":"Format Line Spacing"},"e241":{"name":"Format List Bulleted"},"e242":{"name":"Format List Numbered"},"e243":{"name":"Format Paint"},"e244":{"name":"Format Quote"},"e25e":{"name":"Format Shapes"},"e245":{"name":"Format Size"},"e246":{"name":"Format Strikethrough"},"e247":{"name":"Format Textdirection L To R"},"e248":{"name":"Format Textdirection R To L"},"e249":{"name":"Format Underlined"},"e0bf":{"name":"Forum"},"e154":{"name":"Forward"},"e056":{"name":"Forward 10"},"e057":{"name":"Forward 30"},"e058":{"name":"Forward 5"},"eb44":{"name":"Free Breakfast"},"e5d0":{"name":"Fullscreen"},"e5d1":{"name":"Fullscreen Exit"},"e24a":{"name":"Functions"},"e927":{"name":"G Translate"},"e30f":{"name":"Gamepad"},"e021":{"name":"Games"},"e90e":{"name":"Gavel"},"e155":{"name":"Gesture"},"e884":{"name":"Get App"},"e908":{"name":"Gif"},"eb45":{"name":"Golf Course"},"e1b3":{"name":"Gps Fixed"},"e1b4":{"name":"Gps Not Fixed"},"e1b5":{"name":"Gps Off"},"e885":{"name":"Grade"},"e3e9":{"name":"Gradient"},"e3ea":{"name":"Grain"},"e1b8":{"name":"Graphic Eq"},"e3eb":{"name":"Grid Off"},"e3ec":{"name":"Grid On"},"e7ef":{"name":"Group"},"e7f0":{"name":"Group Add"},"e886":{"name":"Group Work"},"e052":{"name":"Hd"},"e3ed":{"name":"Hdr Off"},"e3ee":{"name":"Hdr On"},"e3f1":{"name":"Hdr Strong"},"e3f2":{"name":"Hdr Weak"},"e310":{"name":"Headset"},"e311":{"name":"Headset Mic"},"e3f3":{"name":"Healing"},"e023":{"name":"Hearing"},"e887":{"name":"Help"},"e8fd":{"name":"Help Outline"},"e024":{"name":"High Quality"},"e25f":{"name":"Highlight"},"e888":{"name":"Highlight Off"},"e889":{"name":"History"},"e88a":{"name":"Home"},"eb46":{"name":"Hot Tub"},"e53a":{"name":"Hotel"},"e88b":{"name":"Hourglass Empty"},"e88c":{"name":"Hourglass Full"},"e902":{"name":"Http"},"e88d":{"name":"Https"},"e3f4":{"name":"Image"},"e3f5":{"name":"Image Aspect Ratio"},"e0e0":{"name":"Import Contacts"},"e0c3":{"name":"Import Export"},"e912":{"name":"Important Devices"},"e156":{"name":"Inbox"},"e909":{"name":"Indeterminate Check Box"},"e88e":{"name":"Info"},"e88f":{"name":"Info Outline"},"e890":{"name":"Input"},"e24b":{"name":"Insert Chart"},"e24c":{"name":"Insert Comment"},"e24d":{"name":"Insert Drive File"},"e24e":{"name":"Insert Emoticon"},"e24f":{"name":"Insert Invitation"},"e250":{"name":"Insert Link"},"e251":{"name":"Insert Photo"},"e891":{"name":"Invert Colors"},"e0c4":{"name":"Invert Colors Off"},"e3f6":{"name":"Iso"},"e312":{"name":"Keyboard"},"e313":{"name":"Keyboard Arrow Down"},"e314":{"name":"Keyboard Arrow Left"},"e315":{"name":"Keyboard Arrow Right"},"e316":{"name":"Keyboard Arrow Up"},"e317":{"name":"Keyboard Backspace"},"e318":{"name":"Keyboard Capslock"},"e31a":{"name":"Keyboard Hide"},"e31b":{"name":"Keyboard Return"},"e31c":{"name":"Keyboard Tab"},"e31d":{"name":"Keyboard Voice"},"eb47":{"name":"Kitchen"},"e892":{"name":"Label"},"e893":{"name":"Label Outline"},"e3f7":{"name":"Landscape"},"e894":{"name":"Language"},"e31e":{"name":"Laptop"},"e31f":{"name":"Laptop Chromebook"},"e320":{"name":"Laptop Mac"},"e321":{"name":"Laptop Windows"},"e5dd":{"name":"Last Page"},"e895":{"name":"Launch"},"e53b":{"name":"Layers"},"e53c":{"name":"Layers Clear"},"e3f8":{"name":"Leak Add"},"e3f9":{"name":"Leak Remove"},"e3fa":{"name":"Lens"},"e02e":{"name":"Library Add"},"e02f":{"name":"Library Books"},"e030":{"name":"Library Music"},"e90f":{"name":"Lightbulb Outline"},"e919":{"name":"Line Style"},"e91a":{"name":"Line Weight"},"e260":{"name":"Linear Scale"},"e157":{"name":"Link"},"e438":{"name":"Linked Camera"},"e896":{"name":"List"},"e0c6":{"name":"Live Help"},"e639":{"name":"Live Tv"},"e53f":{"name":"Local Activity"},"e53d":{"name":"Local Airport"},"e53e":{"name":"Local Atm"},"e540":{"name":"Local Bar"},"e541":{"name":"Local Cafe"},"e542":{"name":"Local Car Wash"},"e543":{"name":"Local Convenience Store"},"e556":{"name":"Local Dining"},"e544":{"name":"Local Drink"},"e545":{"name":"Local Florist"},"e546":{"name":"Local Gas Station"},"e547":{"name":"Local Grocery Store"},"e548":{"name":"Local Hospital"},"e549":{"name":"Local Hotel"},"e54a":{"name":"Local Laundry Service"},"e54b":{"name":"Local Library"},"e54c":{"name":"Local Mall"},"e54d":{"name":"Local Movies"},"e54e":{"name":"Local Offer"},"e54f":{"name":"Local Parking"},"e550":{"name":"Local Pharmacy"},"e551":{"name":"Local Phone"},"e552":{"name":"Local Pizza"},"e553":{"name":"Local Play"},"e554":{"name":"Local Post Office"},"e555":{"name":"Local Printshop"},"e557":{"name":"Local See"},"e558":{"name":"Local Shipping"},"e559":{"name":"Local Taxi"},"e7f1":{"name":"Location City"},"e1b6":{"name":"Location Disabled"},"e0c7":{"name":"Location Off"},"e0c8":{"name":"Location On"},"e1b7":{"name":"Location Searching"},"e897":{"name":"Lock"},"e898":{"name":"Lock Open"},"e899":{"name":"Lock Outline"},"e3fc":{"name":"Looks"},"e3fb":{"name":"Looks 3"},"e3fd":{"name":"Looks 4"},"e3fe":{"name":"Looks 5"},"e3ff":{"name":"Looks 6"},"e400":{"name":"Looks One"},"e401":{"name":"Looks Two"},"e028":{"name":"Loop"},"e402":{"name":"Loupe"},"e16d":{"name":"Low Priority"},"e89a":{"name":"Loyalty"},"e158":{"name":"Mail"},"e0e1":{"name":"Mail Outline"},"e55b":{"name":"Map"},"e159":{"name":"Markunread"},"e89b":{"name":"Markunread Mailbox"},"e322":{"name":"Memory"},"e5d2":{"name":"Menu"},"e252":{"name":"Merge Type"},"e0c9":{"name":"Message"},"e029":{"name":"Mic"},"e02a":{"name":"Mic None"},"e02b":{"name":"Mic Off"},"e618":{"name":"Mms"},"e253":{"name":"Mode Comment"},"e254":{"name":"Mode Edit"},"e263":{"name":"Monetization On"},"e25c":{"name":"Money Off"},"e403":{"name":"Monochrome Photos"},"e7f2":{"name":"Mood"},"e7f3":{"name":"Mood Bad"},"e619":{"name":"More"},"e5d3":{"name":"More Horiz"},"e5d4":{"name":"More Vert"},"e91b":{"name":"Motorcycle"},"e323":{"name":"Mouse"},"e168":{"name":"Move To Inbox"},"e02c":{"name":"Movie"},"e404":{"name":"Movie Creation"},"e43a":{"name":"Movie Filter"},"e6df":{"name":"Multiline Chart"},"e405":{"name":"Music Note"},"e063":{"name":"Music Video"},"e55c":{"name":"My Location"},"e406":{"name":"Nature"},"e407":{"name":"Nature People"},"e408":{"name":"Navigate Before"},"e409":{"name":"Navigate Next"},"e55d":{"name":"Navigation"},"e569":{"name":"Near Me"},"e1b9":{"name":"Network Cell"},"e640":{"name":"Network Check"},"e61a":{"name":"Network Locked"},"e1ba":{"name":"Network Wifi"},"e031":{"name":"New Releases"},"e16a":{"name":"Next Week"},"e1bb":{"name":"Nfc"},"e641":{"name":"No Encryption"},"e0cc":{"name":"No Sim"},"e033":{"name":"Not Interested"},"e06f":{"name":"Note"},"e89c":{"name":"Note Add"},"e7f4":{"name":"Notifications"},"e7f7":{"name":"Notifications Active"},"e7f5":{"name":"Notifications None"},"e7f6":{"name":"Notifications Off"},"e7f8":{"name":"Notifications Paused"},"e90a":{"name":"Offline Pin"},"e63a":{"name":"Ondemand Video"},"e91c":{"name":"Opacity"},"e89d":{"name":"Open In Browser"},"e89e":{"name":"Open In New"},"e89f":{"name":"Open With"},"e7f9":{"name":"Pages"},"e8a0":{"name":"Pageview"},"e40a":{"name":"Palette"},"e925":{"name":"Pan Tool"},"e40b":{"name":"Panorama"},"e40c":{"name":"Panorama Fish Eye"},"e40d":{"name":"Panorama Horizontal"},"e40e":{"name":"Panorama Vertical"},"e40f":{"name":"Panorama Wide Angle"},"e7fa":{"name":"Party Mode"},"e034":{"name":"Pause"},"e035":{"name":"Pause Circle Filled"},"e036":{"name":"Pause Circle Outline"},"e8a1":{"name":"Payment"},"e7fb":{"name":"People"},"e7fc":{"name":"People Outline"},"e8a2":{"name":"Perm Camera Mic"},"e8a3":{"name":"Perm Contact Calendar"},"e8a4":{"name":"Perm Data Setting"},"e8a5":{"name":"Perm Device Information"},"e8a6":{"name":"Perm Identity"},"e8a7":{"name":"Perm Media"},"e8a8":{"name":"Perm Phone Msg"},"e8a9":{"name":"Perm Scan Wifi"},"e7fd":{"name":"Person"},"e7fe":{"name":"Person Add"},"e7ff":{"name":"Person Outline"},"e55a":{"name":"Person Pin"},"e56a":{"name":"Person Pin Circle"},"e63b":{"name":"Personal Video"},"e91d":{"name":"Pets"},"e0cd":{"name":"Phone"},"e324":{"name":"Phone Android"},"e61b":{"name":"Phone Bluetooth Speaker"},"e61c":{"name":"Phone Forwarded"},"e61d":{"name":"Phone In Talk"},"e325":{"name":"Phone Iphone"},"e61e":{"name":"Phone Locked"},"e61f":{"name":"Phone Missed"},"e620":{"name":"Phone Paused"},"e326":{"name":"Phonelink"},"e0db":{"name":"Phonelink Erase"},"e0dc":{"name":"Phonelink Lock"},"e327":{"name":"Phonelink Off"},"e0dd":{"name":"Phonelink Ring"},"e0de":{"name":"Phonelink Setup"},"e410":{"name":"Photo"},"e411":{"name":"Photo Album"},"e412":{"name":"Photo Camera"},"e43b":{"name":"Photo Filter"},"e413":{"name":"Photo Library"},"e432":{"name":"Photo Size Select Actual"},"e433":{"name":"Photo Size Select Large"},"e434":{"name":"Photo Size Select Small"},"e415":{"name":"Picture As Pdf"},"e8aa":{"name":"Picture In Picture"},"e911":{"name":"Picture In Picture Alt"},"e6c4":{"name":"Pie Chart"},"e6c5":{"name":"Pie Chart Outlined"},"e55e":{"name":"Pin Drop"},"e55f":{"name":"Place"},"e037":{"name":"Play Arrow"},"e038":{"name":"Play Circle Filled"},"e039":{"name":"Play Circle Outline"},"e906":{"name":"Play For Work"},"e03b":{"name":"Playlist Add"},"e065":{"name":"Playlist Add Check"},"e05f":{"name":"Playlist Play"},"e800":{"name":"Plus One"},"e801":{"name":"Poll"},"e8ab":{"name":"Polymer"},"eb48":{"name":"Pool"},"e0ce":{"name":"Portable Wifi Off"},"e416":{"name":"Portrait"},"e63c":{"name":"Power"},"e336":{"name":"Power Input"},"e8ac":{"name":"Power Settings New"},"e91e":{"name":"Pregnant Woman"},"e0df":{"name":"Present To All"},"e8ad":{"name":"Print"},"e645":{"name":"Priority High"},"e80b":{"name":"Public"},"e255":{"name":"Publish"},"e8ae":{"name":"Query Builder"},"e8af":{"name":"Question Answer"},"e03c":{"name":"Queue"},"e03d":{"name":"Queue Music"},"e066":{"name":"Queue Play Next"},"e03e":{"name":"Radio"},"e837":{"name":"Radio Button Checked"},"e836":{"name":"Radio Button Unchecked"},"e560":{"name":"Rate Review"},"e8b0":{"name":"Receipt"},"e03f":{"name":"Recent Actors"},"e91f":{"name":"Record Voice Over"},"e8b1":{"name":"Redeem"},"e15a":{"name":"Redo"},"e5d5":{"name":"Refresh"},"e15b":{"name":"Remove"},"e15c":{"name":"Remove Circle"},"e15d":{"name":"Remove Circle Outline"},"e067":{"name":"Remove From Queue"},"e417":{"name":"Remove Red Eye"},"e928":{"name":"Remove Shopping Cart"},"e8fe":{"name":"Reorder"},"e040":{"name":"Repeat"},"e041":{"name":"Repeat One"},"e042":{"name":"Replay"},"e059":{"name":"Replay 10"},"e05a":{"name":"Replay 30"},"e05b":{"name":"Replay 5"},"e15e":{"name":"Reply"},"e15f":{"name":"Reply All"},"e160":{"name":"Report"},"e8b2":{"name":"Report Problem"},"e56c":{"name":"Restaurant"},"e561":{"name":"Restaurant Menu"},"e8b3":{"name":"Restore"},"e929":{"name":"Restore Page"},"e0d1":{"name":"Ring Volume"},"e8b4":{"name":"Room"},"eb49":{"name":"Room Service"},"e418":{"name":"Rotate 90 Degrees Ccw"},"e419":{"name":"Rotate Left"},"e41a":{"name":"Rotate Right"},"e920":{"name":"Rounded Corner"},"e328":{"name":"Router"},"e921":{"name":"Rowing"},"e0e5":{"name":"Rss Feed"},"e642":{"name":"Rv Hookup"},"e562":{"name":"Satellite"},"e161":{"name":"Save"},"e329":{"name":"Scanner"},"e8b5":{"name":"Schedule"},"e80c":{"name":"School"},"e1be":{"name":"Screen Lock Landscape"},"e1bf":{"name":"Screen Lock Portrait"},"e1c0":{"name":"Screen Lock Rotation"},"e1c1":{"name":"Screen Rotation"},"e0e2":{"name":"Screen Share"},"e623":{"name":"Sd Card"},"e1c2":{"name":"Sd Storage"},"e8b6":{"name":"Search"},"e32a":{"name":"Security"},"e162":{"name":"Select All"},"e163":{"name":"Send"},"e811":{"name":"Sentiment Dissatisfied"},"e812":{"name":"Sentiment Neutral"},"e813":{"name":"Sentiment Satisfied"},"e814":{"name":"Sentiment Very Dissatisfied"},"e815":{"name":"Sentiment Very Satisfied"},"e8b8":{"name":"Settings"},"e8b9":{"name":"Settings Applications"},"e8ba":{"name":"Settings Backup Restore"},"e8bb":{"name":"Settings Bluetooth"},"e8bd":{"name":"Settings Brightness"},"e8bc":{"name":"Settings Cell"},"e8be":{"name":"Settings Ethernet"},"e8bf":{"name":"Settings Input Antenna"},"e8c0":{"name":"Settings Input Component"},"e8c1":{"name":"Settings Input Composite"},"e8c2":{"name":"Settings Input Hdmi"},"e8c3":{"name":"Settings Input Svideo"},"e8c4":{"name":"Settings Overscan"},"e8c5":{"name":"Settings Phone"},"e8c6":{"name":"Settings Power"},"e8c7":{"name":"Settings Remote"},"e1c3":{"name":"Settings System Daydream"},"e8c8":{"name":"Settings Voice"},"e80d":{"name":"Share"},"e8c9":{"name":"Shop"},"e8ca":{"name":"Shop Two"},"e8cb":{"name":"Shopping Basket"},"e8cc":{"name":"Shopping Cart"},"e261":{"name":"Short Text"},"e6e1":{"name":"Show Chart"},"e043":{"name":"Shuffle"},"e1c8":{"name":"Signal Cellular 4 Bar"},"e1cd":{"name":"Signal Cellular Connected No Internet 4 Bar"},"e1ce":{"name":"Signal Cellular No Sim"},"e1cf":{"name":"Signal Cellular Null"},"e1d0":{"name":"Signal Cellular Off"},"e1d8":{"name":"Signal Wifi 4 Bar"},"e1d9":{"name":"Signal Wifi 4 Bar Lock"},"e1da":{"name":"Signal Wifi Off"},"e32b":{"name":"Sim Card"},"e624":{"name":"Sim Card Alert"},"e044":{"name":"Skip Next"},"e045":{"name":"Skip Previous"},"e41b":{"name":"Slideshow"},"e068":{"name":"Slow Motion Video"},"e32c":{"name":"Smartphone"},"eb4a":{"name":"Smoke Free"},"eb4b":{"name":"Smoking Rooms"},"e625":{"name":"Sms"},"e626":{"name":"Sms Failed"},"e046":{"name":"Snooze"},"e164":{"name":"Sort"},"e053":{"name":"Sort By Alpha"},"eb4c":{"name":"Spa"},"e256":{"name":"Space Bar"},"e32d":{"name":"Speaker"},"e32e":{"name":"Speaker Group"},"e8cd":{"name":"Speaker Notes"},"e92a":{"name":"Speaker Notes Off"},"e0d2":{"name":"Speaker Phone"},"e8ce":{"name":"Spellcheck"},"e838":{"name":"Star"},"e83a":{"name":"Star Border"},"e839":{"name":"Star Half"},"e8d0":{"name":"Stars"},"e0d3":{"name":"Stay Current Landscape"},"e0d4":{"name":"Stay Current Portrait"},"e0d5":{"name":"Stay Primary Landscape"},"e0d6":{"name":"Stay Primary Portrait"},"e047":{"name":"Stop"},"e0e3":{"name":"Stop Screen Share"},"e1db":{"name":"Storage"},"e8d1":{"name":"Store"},"e563":{"name":"Store Mall Directory"},"e41c":{"name":"Straighten"},"e56e":{"name":"Streetview"},"e257":{"name":"Strikethrough S"},"e41d":{"name":"Style"},"e5d9":{"name":"Subdirectory Arrow Left"},"e5da":{"name":"Subdirectory Arrow Right"},"e8d2":{"name":"Subject"},"e064":{"name":"Subscriptions"},"e048":{"name":"Subtitles"},"e56f":{"name":"Subway"},"e8d3":{"name":"Supervisor Account"},"e049":{"name":"Surround Sound"},"e0d7":{"name":"Swap Calls"},"e8d4":{"name":"Swap Horiz"},"e8d5":{"name":"Swap Vert"},"e8d6":{"name":"Swap Vertical Circle"},"e41e":{"name":"Switch Camera"},"e41f":{"name":"Switch Video"},"e627":{"name":"Sync"},"e628":{"name":"Sync Disabled"},"e629":{"name":"Sync Problem"},"e62a":{"name":"System Update"},"e8d7":{"name":"System Update Alt"},"e8d8":{"name":"Tab"},"e8d9":{"name":"Tab Unselected"},"e32f":{"name":"Tablet"},"e330":{"name":"Tablet Android"},"e331":{"name":"Tablet Mac"},"e420":{"name":"Tag Faces"},"e62b":{"name":"Tap And Play"},"e564":{"name":"Terrain"},"e262":{"name":"Text Fields"},"e165":{"name":"Text Format"},"e0d8":{"name":"Textsms"},"e421":{"name":"Texture"},"e8da":{"name":"Theaters"},"e8db":{"name":"Thumb Down"},"e8dc":{"name":"Thumb Up"},"e8dd":{"name":"Thumbs Up Down"},"e62c":{"name":"Time To Leave"},"e422":{"name":"Timelapse"},"e922":{"name":"Timeline"},"e425":{"name":"Timer"},"e423":{"name":"Timer 10"},"e424":{"name":"Timer 3"},"e426":{"name":"Timer Off"},"e264":{"name":"Title"},"e8de":{"name":"Toc"},"e8df":{"name":"Today"},"e8e0":{"name":"Toll"},"e427":{"name":"Tonality"},"e913":{"name":"Touch App"},"e332":{"name":"Toys"},"e8e1":{"name":"Track Changes"},"e565":{"name":"Traffic"},"e570":{"name":"Train"},"e571":{"name":"Tram"},"e572":{"name":"Transfer Within A Station"},"e428":{"name":"Transform"},"e8e2":{"name":"Translate"},"e8e3":{"name":"Trending Down"},"e8e4":{"name":"Trending Flat"},"e8e5":{"name":"Trending Up"},"e429":{"name":"Tune"},"e8e6":{"name":"Turned In"},"e8e7":{"name":"Turned In Not"},"e333":{"name":"Tv"},"e169":{"name":"Unarchive"},"e166":{"name":"Undo"},"e5d6":{"name":"Unfold Less"},"e5d7":{"name":"Unfold More"},"e923":{"name":"Update"},"e1e0":{"name":"Usb"},"e8e8":{"name":"Verified User"},"e258":{"name":"Vertical Align Bottom"},"e259":{"name":"Vertical Align Center"},"e25a":{"name":"Vertical Align Top"},"e62d":{"name":"Vibration"},"e070":{"name":"Video Call"},"e071":{"name":"Video Label"},"e04a":{"name":"Video Library"},"e04b":{"name":"Videocam"},"e04c":{"name":"Videocam Off"},"e338":{"name":"Videogame Asset"},"e8e9":{"name":"View Agenda"},"e8ea":{"name":"View Array"},"e8eb":{"name":"View Carousel"},"e8ec":{"name":"View Column"},"e42a":{"name":"View Comfy"},"e42b":{"name":"View Compact"},"e8ed":{"name":"View Day"},"e8ee":{"name":"View Headline"},"e8ef":{"name":"View List"},"e8f0":{"name":"View Module"},"e8f1":{"name":"View Quilt"},"e8f2":{"name":"View Stream"},"e8f3":{"name":"View Week"},"e435":{"name":"Vignette"},"e8f4":{"name":"Visibility"},"e8f5":{"name":"Visibility Off"},"e62e":{"name":"Voice Chat"},"e0d9":{"name":"Voicemail"},"e04d":{"name":"Volume Down"},"e04e":{"name":"Volume Mute"},"e04f":{"name":"Volume Off"},"e050":{"name":"Volume Up"},"e0da":{"name":"Vpn Key"},"e62f":{"name":"Vpn Lock"},"e1bc":{"name":"Wallpaper"},"e002":{"name":"Warning"},"e334":{"name":"Watch"},"e924":{"name":"Watch Later"},"e42c":{"name":"Wb Auto"},"e42d":{"name":"Wb Cloudy"},"e42e":{"name":"Wb Incandescent"},"e436":{"name":"Wb Iridescent"},"e430":{"name":"Wb Sunny"},"e63d":{"name":"Wc"},"e051":{"name":"Web"},"e069":{"name":"Web Asset"},"e16b":{"name":"Weekend"},"e80e":{"name":"Whatshot"},"e1bd":{"name":"Widgets"},"e63e":{"name":"Wifi"},"e1e1":{"name":"Wifi Lock"},"e1e2":{"name":"Wifi Tethering"},"e8f9":{"name":"Work"},"e25b":{"name":"Wrap Text"},"e8fa":{"name":"Youtube Searched For"},"e8ff":{"name":"Zoom In"},"e900":{"name":"Zoom Out"},"e56b":{"name":"Zoom Out Map"}}}

+ 2373 - 0
misago/static/misago/fonts/MaterialIcons-Regular.svg

@@ -0,0 +1,2373 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<!--
+2016-2-8: Created with FontForge (http://fontforge.org)
+-->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
+<metadata>
+Created by FontForge 20151118 at Mon Feb  8 11:58:02 2016
+ By shyndman
+Copyright 2015 Google, Inc. All Rights Reserved.
+</metadata>
+<defs>
+<font id="MaterialIcons-Regular" horiz-adv-x="512" >
+  <font-face 
+    font-family="Material Icons"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="512"
+    panose-1="2 0 5 3 0 0 0 0 0 0"
+    ascent="512"
+    descent="0"
+    bbox="0 0 512 512"
+    underline-thickness="50"
+    underline-position="-100"
+    unicode-range="U+0030-10FFFD"
+  />
+    <missing-glyph />
+    <glyph glyph-name="3d_rotation" unicode="&#x33;d_rotation" 
+d="M256 512c134 0 244 -103 255 -234h-32c-7 80 -57 147 -127 180l-29 -28l-81 81zM353 260c0 34.9356 -13.6691 57 -47 57h-20v-123h19c25.6434 0 40.2719 13.9518 46 34c2 7 2 15 2 24v8zM306 341c38.1819 0 60.9327 -19.3318 72 -47c4 -10 5 -22 5 -34v-8
+c0 -26.4057 -7.57104 -45.571 -21 -59c-13.4122 -13.4122 -30.5519 -22 -57 -22h-49v170h50zM207 258c15.3033 -6.12131 28 -18.2465 28 -39c0 -8 -2 -14 -5 -20s-6 -12 -11 -16c-9.37815 -7.50252 -23.5479 -12 -40 -12c-31.0959 0 -54 15.7441 -54 47h27
+c0 -15.4518 11.6022 -25 27 -25c17.8699 0 28 8.53939 28 27c0 18.8434 -12.3951 27 -31 27h-16v22h16c17.3039 0 29 8.03066 29 25c0 16.5246 -8.84017 25 -26 25c-14.4441 0 -25 -8.58131 -25 -23h-28c0 14.8936 7.55163 24.5516 15 32c9.92709 7.94167 20.8987 13 38 13
+c25.6475 0 40.3859 -9.7718 49 -27c3 -6 4 -12 4 -20c0 -18.1878 -12.3353 -29.6677 -25 -36zM160 54l29 28l81 -81l-14 -1c-134 0 -244 104 -255 235h32c8 -80 57 -148 127 -181z" />
+    <glyph glyph-name="ac_unit" unicode="ac_unit" 
+d="M469 277v-42h-89l69 -69l-30 -31l-99 100h-43v-43l100 -99l-31 -30l-69 69v-89h-42v89l-69 -69l-31 30l100 99v43h-43l-99 -100l-30 31l69 69h-89v42h89l-69 69l30 31l99 -100h43v43l-100 99l31 30l69 -69v89h42v-89l69 69l31 -30l-100 -99v-43h43l99 100l30 -31l-69 -69
+h89z" />
+    <glyph glyph-name="access_alarm" unicode="access_alarm" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM267 341v-112l85 -50l-16 -26l-101 60v128h32zM168 440l-98 -82l-27 32l98 82zM469 390
+l-27 -33l-98 83l27 32z" />
+    <glyph glyph-name="access_alarms" unicode="access_alarms" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c107 0 192 -85 192 -192s-85 -192 -192 -192s-192 85 -192 192s85 192 192 192zM267 341v-113l85 -51l-17 -26l-100 62v128h32zM169 439l-99 -81l-27 32l98 81zM469 390
+l-27 -32l-99 84l28 32z" />
+    <glyph glyph-name="access_time" unicode="access_time" 
+d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="accessibility" unicode="accessibility" 
+d="M448 320h-128v-277h-43v128h-42v-128h-43v277h-128v43h384v-43zM256 469c23 0 43 -19 43 -42s-20 -43 -43 -43s-43 20 -43 43s20 42 43 42z" />
+    <glyph glyph-name="accessible" unicode="accessible" 
+d="M274 128h44c-10 -49 -53 -85 -105 -85c-59 0 -106 47 -106 106c0 52 36 95 85 105v-44c-25 -9 -43 -33 -43 -61c0 -35 29 -64 64 -64c28 0 52 18 61 43zM213 318c0 29.9891 33.3578 56.5098 64 39h1v-1c5 -2 9 -5 13 -9l28 -31c21 -23 53 -39 86 -39v-42
+c-37 0 -78 18 -106 41v-73h64c23 0 42 -20 42 -43v-117h-42v106h-107c-23 0 -43 20 -43 43v126zM213 427c0 24 19 42 43 42s43 -18 43 -42s-19 -43 -43 -43s-43 19 -43 43z" />
+    <glyph glyph-name="account_balance" unicode="account_balance" 
+d="M245 491l203 -107v-43h-405v43zM341 299h64v-150h-64v150zM43 43v64h405v-64h-405zM213 299h64v-150h-64v150zM85 299h64v-150h-64v150z" />
+    <glyph glyph-name="account_balance_wallet" unicode="account_balance_wallet" 
+d="M341 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 171v170h213v-170h-213zM448 128v-21c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298c23 0 43 -20 43 -43v-21h-192c-24 0 -43 -20 -43 -43v-170
+c0 -23 19 -43 43 -43h192z" />
+    <glyph glyph-name="account_box" unicode="account_box" 
+d="M128 149v-21h256v21c0 43 -85 66 -128 66s-128 -23 -128 -66zM320 320c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM64 405c0 23 19 43 43 43h298c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298z" />
+    <glyph glyph-name="account_circle" unicode="account_circle" 
+d="M256 102c53 0 100 28 128 69c-1 42 -86 66 -128 66c-43 0 -127 -24 -128 -66c28 -41 75 -69 128 -69zM256 405c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z
+" />
+    <glyph glyph-name="adb" unicode="adb" 
+d="M320 320c12 0 21 9 21 21s-9 22 -21 22s-21 -10 -21 -22s9 -21 21 -21zM192 320c12 0 21 9 21 21s-9 22 -21 22s-21 -10 -21 -22s9 -21 21 -21zM344 419c37 -27 61 -71 61 -120v-22h-298v22c0 49 24 93 61 120l-45 45l18 17l49 -49c20 10 42 16 66 16s46 -6 66 -16l49 49
+l18 -17zM107 171v85h298v-85c0 -83 -66 -150 -149 -150s-149 67 -149 150z" />
+    <glyph glyph-name="add" unicode="add" 
+d="M405 235h-128v-128h-42v128h-128v42h128v128h42v-128h128v-42z" />
+    <glyph glyph-name="add_a_photo" unicode="add_a_photo" 
+d="M209 213c0 38 30 69 68 69s69 -31 69 -69s-31 -68 -69 -68s-68 30 -68 68zM277 107c59 0 107 47 107 106s-48 107 -107 107s-106 -48 -106 -107s47 -106 106 -106zM128 299v64h64v64h149l39 -43h68c23 0 43 -20 43 -43v-256c0 -23 -20 -42 -43 -42h-341
+c-23 0 -43 19 -43 42v214h64zM64 427v64h43v-64h64v-43h-64v-64h-43v64h-64v43h64z" />
+    <glyph glyph-name="add_alarm" unicode="add_alarm" 
+d="M277 320v-64h64v-43h-64v-64h-42v64h-64v43h64v64h42zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM469 390l-27 -33l-98 83l27 32z
+M168 440l-98 -82l-27 32l98 82z" />
+    <glyph glyph-name="add_alert" unicode="add_alert" 
+d="M341 234v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM403 153l45 -45v-23h-384v23l45 45v124c0 69 48 128 113 143v15c0 19 15 34 34 34s34 -15 34 -34v-15c65 -15 113 -74 113 -143v-124zM214 64h84c0 -23 -19 -43 -42 -43s-42 20 -42 43z" />
+    <glyph glyph-name="add_box" unicode="add_box" 
+d="M363 235v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="add_circle" unicode="add_circle" 
+d="M363 235v42h-86v86h-42v-86h-86v-42h86v-86h42v86h86zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="add_circle_outline" unicode="add_circle_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM277 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="add_location" unicode="add_location" 
+d="M341 299v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM256 469c82 0 149 -67 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 82 67 149 149 149z" />
+    <glyph glyph-name="add_shopping_cart" unicode="add_shopping_cart" 
+d="M153 197c0 -3 2 -5 5 -5h247v-43h-256c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53l-77 162h-43v42h70c13.5017 -28.165 26.8327 -56.5006 40 -85c17.0313 -35.6353 33.8016 -71.5317 51 -107h150c27.393 49.9404 55.2665 99.4002 82 150l37 -21l-82 -149
+c-7 -13 -21 -22 -37 -22h-159l-19 -35zM363 128c23 0 42 -20 42 -43s-19 -42 -42 -42s-43 19 -43 42s20 43 43 43zM149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43zM235 320v64h-64v43h64v64h42v-64h64v-43h-64v-64h-42z" />
+    <glyph glyph-name="add_to_photos" unicode="add_to_photos" 
+d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="add_to_queue" unicode="add_to_queue" 
+d="M341 299v-43h-64v-64h-42v64h-64v43h64v64h42v-64h64zM448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="adjust" unicode="adjust" 
+d="M320 256c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="airline_seat_flat" unicode="airline_seat_flat" 
+d="M152 254c-25 -25 -65 -26 -90 -1s-26 65 -1 90s65 26 90 1s26 -65 1 -90zM43 213h426v-42h-128v-43h-170v43h-128v42zM469 277v-42h-277v128h192c47 0 85 -39 85 -86z" />
+    <glyph glyph-name="airline_seat_flat_angled" unicode="airline_seat_flat_angled" 
+d="M156 294c-32 -15 -71 -2 -86 30s-2 71 30 86s71 2 86 -30s2 -71 -30 -86zM32 253l15 40l405 -146l-14 -40l-97 34v-34h-170v96zM475 207l-15 -40l-264 95l45 121l182 -66c45 -16 68 -65 52 -110z" />
+    <glyph glyph-name="airline_seat_individual_suite" unicode="airline_seat_individual_suite" 
+d="M405 363c47 0 86 -39 86 -86v-128h-470v214h43v-150h171v150h170zM149 235c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="airline_seat_legroom_extra" unicode="airline_seat_legroom_extra" 
+d="M487 144c9 -16 1 -36 -15 -44l-79 -36l-73 149h-149c-35 0 -64 29 -64 64v171h128v-128h75c16 0 31 -9 38 -24l72 -149l24 11c16 7 35 1 43 -14zM85 256c0 -35 29 -64 64 -64h128v-43h-128c-59 0 -106 48 -106 107v192h42v-192z" />
+    <glyph glyph-name="airline_seat_legroom_normal" unicode="airline_seat_legroom_normal" 
+d="M437 128c18 0 32 -14 32 -32s-14 -32 -32 -32h-96v149h-149c-35 0 -64 29 -64 64v171h128v-128h107c23 0 42 -20 42 -43v-149h32zM107 256c0 -35 29 -64 64 -64h128v-43h-128c-59 0 -107 48 -107 107v192h43v-192z" />
+    <glyph glyph-name="airline_seat_legroom_reduced" unicode="airline_seat_legroom_reduced" 
+d="M107 256c0 -35 29 -64 64 -64h85v-43h-85c-59 0 -107 48 -107 107v192h43v-192zM426 102c4 -20 -11 -38 -31 -38h-96v64l21 85h-128c-35 0 -64 29 -64 64v171h128v-128h107c23 0 42 -20 42 -43l-42 -149h30c16 0 30 -11 33 -26z" />
+    <glyph glyph-name="airline_seat_recline_extra" unicode="airline_seat_recline_extra" 
+d="M346 192l123 -96l-32 -32l-81 64h-146c-31 0 -57 22 -63 52l-29 126c-4 26 13 51 39 56h1c15.1794 2.16848 28.3139 -2.05108 37 -9l35 -27c27 -21 65 -34 100 -27v-46c-40 -7 -76 7 -110 26l22 -87h104zM341 107v-43h-150c-53 0 -98 38 -106 90l-42 209h42l42 -202
+c5 -31 32 -54 64 -54h150zM114 392c-19 14 -23 40 -10 59s40 24 59 11c19 -14 24 -41 11 -60c-14 -19 -41 -23 -60 -10z" />
+    <glyph glyph-name="airline_seat_recline_normal" unicode="airline_seat_recline_normal" 
+d="M427 84l-31 -31l-75 75h-108c-35 0 -64 29 -64 64v123c0 26 22 48 48 48h1c14.8367 0 27.399 -8.39902 35 -16l30 -33c23 -25 65 -43 100 -43v-47c-41 0 -88 22 -118 47v-79h74zM128 171c0 -35 29 -64 64 -64h128v-43h-128c-59 0 -107 48 -107 107v192h43v-192zM162 397
+c-17 17 -17 43 0 60s43 17 60 0s17 -43 0 -60s-43 -17 -60 0z" />
+    <glyph glyph-name="airplanemode_active" unicode="airplanemode_active" 
+d="M217 320zM448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117c0 18 14 32 32 32s32 -14 32 -32v-117l171 -107v-42z" />
+    <glyph glyph-name="airplanemode_inactive" unicode="airplanemode_inactive" 
+d="M64 400l27 27l336 -336l-27 -27l-123 122v-79l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l127 80zM277 320l171 -107v-42l-68 21l-167 167v78c0 18 14 32 32 32s32 -14 32 -32v-117z" />
+    <glyph glyph-name="airplay" unicode="airplay" 
+d="M448 448c23 0 43 -20 43 -43v-256c0 -23 -20 -42 -43 -42h-85v42h85v256h-384v-256h85v-42h-85c-23 0 -43 19 -43 42v256c0 23 20 43 43 43h384zM128 43l128 128l128 -128h-256z" />
+    <glyph glyph-name="airport_shuttle" unicode="airport_shuttle" 
+d="M320 277h107l-86 86h-21v-86zM373 139c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM277 277v86h-85v-86h85zM128 139c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM64 277h85v86h-85v-86zM363 405l128 -128v-106h-54
+c0 -35 -29 -64 -64 -64s-64 29 -64 64h-117c0 -35 -29 -64 -64 -64s-64 29 -64 64h-43v192c0 24 20 42 43 42h299z" />
+    <glyph glyph-name="alarm" unicode="alarm" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM267 341v-112l85 -50l-16 -26l-101 60v128h32zM168 440l-98 -82l-27 32l98 82zM469 390
+l-27 -33l-98 83l27 32z" />
+    <glyph glyph-name="alarm_add" unicode="alarm_add" 
+d="M277 320v-64h64v-43h-64v-64h-42v64h-64v43h64v64h42zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM469 390l-27 -33l-98 83l27 32z
+M168 440l-98 -82l-27 32l98 82z" />
+    <glyph glyph-name="alarm_off" unicode="alarm_off" 
+d="M171 442l-18 -15l-31 30l19 15zM351 120l-210 210c-21 -26 -34 -59 -34 -95c0 -83 66 -150 149 -150c36 0 69 14 95 35zM62 463c131.276 -131.057 262.677 -261.99 394 -393l-27 -27l-47 47c-34 -29 -78 -47 -126 -47c-106 0 -192 86 -192 192c0 48 18 91 47 125l-17 17
+l-24 -20l-30 31l24 19l-29 29zM469 390l-27 -33l-98 83l27 32zM256 384c-18 0 -35 -3 -51 -9l-33 32c25 12 54 20 84 20c106 0 192 -86 192 -192c0 -30 -7 -59 -19 -84l-33 32c6 16 9 34 9 52c0 83 -66 149 -149 149z" />
+    <glyph glyph-name="alarm_on" unicode="alarm_on" 
+d="M225 202l105 106l23 -23l-128 -128l-68 68l22 22zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM168 440l-98 -82l-27 32l98 82zM469 390
+l-27 -33l-98 83l27 32z" />
+    <glyph glyph-name="album" unicode="album" 
+d="M256 277c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM256 160c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="all_inclusive" unicode="all_inclusive" 
+d="M397 371c64 0 115 -52 115 -115s-51 -115 -115 -115c-31 0 -60 12 -82 34l-27 24l32 28l25 -21c15 -15 33 -22 52 -22c40 0 72 32 72 72s-32 72 -72 72c-19 0 -37 -7 -51 -21c-30.1331 -26.5336 -60.4726 -52.8608 -90 -80l-60 -53c-21 -21 -50 -33 -81 -33
+c-64 0 -115 52 -115 115s51 115 115 115c31 0 60 -12 82 -34l27 -24l-33 -28l-24 21c-15 15 -33 22 -52 22c-40 0 -72 -32 -72 -72s32 -72 72 -72c19 0 37 7 51 21c30.1331 26.5336 60.4726 52.8608 90 80l60 53c21 21 50 33 81 33z" />
+    <glyph glyph-name="all_out" unicode="all_out" 
+d="M343 170c45 45 45 120 0 165s-120 45 -165 0s-45 -120 0 -165s120 -45 165 0zM366 358c58 -58 58 -153 0 -211s-153 -58 -211 0s-58 153 0 211s153 58 211 0zM90 338v85h85zM175 82h-85v85zM431 167v-85h-85zM346 423h85v-85z" />
+    <glyph glyph-name="android" unicode="android" 
+d="M320 405v22h-21v-22h21zM213 405v22h-21v-22h21zM331 466c32 -23 53 -61 53 -103h-256c0 42 20 80 52 103l-28 28c-4 4 -4 11 0 15s11 4 15 0l32 -32c17 9 37 14 57 14s39 -5 56 -14l32 32c4 4 11 4 15 0s4 -11 0 -15zM437 341c18 0 32 -14 32 -32v-149
+c0 -18 -14 -32 -32 -32s-32 14 -32 32v149c0 18 14 32 32 32zM75 341c18 0 32 -14 32 -32v-149c0 -18 -14 -32 -32 -32s-32 14 -32 32v149c0 18 14 32 32 32zM128 128v213h256v-213c0 -12 -9 -21 -21 -21h-22v-75c0 -18 -14 -32 -32 -32s-32 14 -32 32v75h-42v-75
+c0 -18 -14 -32 -32 -32s-32 14 -32 32v75h-22c-12 0 -21 9 -21 21z" />
+    <glyph glyph-name="announcement" unicode="announcement" 
+d="M277 192v43h-42v-43h42zM277 277v128h-42v-128h42zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="apps" unicode="apps" 
+d="M341 85v86h86v-86h-86zM341 213v86h86v-86h-86zM213 341v86h86v-86h-86zM341 427h86v-86h-86v86zM213 213v86h86v-86h-86zM85 213v86h86v-86h-86zM85 85v86h86v-86h-86zM213 85v86h86v-86h-86zM85 341v86h86v-86h-86z" />
+    <glyph glyph-name="archive" unicode="archive" 
+d="M109 405h294l-20 22h-256zM256 139l117 117h-74v43h-86v-43h-74zM438 400c6 -7 10 -17 10 -27v-266c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v266c0 10 4 20 10 27l29 36c6 7 15 12 25 12h256c10 0 19 -5 25 -12z" />
+    <glyph glyph-name="arrow_back" unicode="arrow_back" 
+d="M427 277v-42h-260l119 -120l-30 -30l-171 171l171 171l30 -30l-119 -120h260z" />
+    <glyph glyph-name="arrow_downward" unicode="arrow_downward" 
+d="M427 256l-171 -171l-171 171l31 30l119 -119v260h42v-260l120 119z" />
+    <glyph glyph-name="arrow_drop_down" unicode="arrow_drop_down" 
+d="M149 299h214l-107 -107z" />
+    <glyph glyph-name="arrow_drop_down_circle" unicode="arrow_drop_down_circle" 
+d="M256 213l85 86h-170zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="arrow_drop_up" unicode="arrow_drop_up" 
+d="M149 213l107 107l107 -107h-214z" />
+    <glyph glyph-name="arrow_forward" unicode="arrow_forward" 
+d="M256 427l171 -171l-171 -171l-30 30l119 120h-260v42h260l-119 120z" />
+    <glyph glyph-name="arrow_upward" unicode="arrow_upward" 
+d="M85 256l171 171l171 -171l-31 -30l-119 119v-260h-42v260l-120 -119z" />
+    <glyph glyph-name="art_track" unicode="art_track" 
+d="M224 192l-48 64l-37 -48l-27 32l-37 -48h149zM256 320v-128c0 -23 -20 -43 -43 -43h-128c-23 0 -42 20 -42 43v128c0 23 19 43 42 43h128c23 0 43 -20 43 -43zM299 149v43h170v-43h-170zM469 363v-43h-170v43h170zM469 235h-170v42h170v-42z" />
+    <glyph glyph-name="aspect_ratio" unicode="aspect_ratio" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM149 320v-64h-42v107h106v-43h-64zM405 256v-107h-106v43h64v64h42z" />
+    <glyph glyph-name="assessment" unicode="assessment" 
+d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="assignment" unicode="assignment" 
+d="M363 320v43h-214v-43h214zM363 235v42h-214v-42h214zM299 149v43h-150v-43h150zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89
+c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="assignment_ind" unicode="assignment_ind" 
+d="M384 107v30c0 43 -85 66 -128 66s-128 -23 -128 -66v-30h256zM256 363c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43
+h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="assignment_late" unicode="assignment_late" 
+d="M256 405c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22zM277 213v128h-42v-128h42zM277 128v43h-42v-43h42zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43
+h89z" />
+    <glyph glyph-name="assignment_return" unicode="assignment_return" 
+d="M341 192v85h-85v64l-107 -106l107 -107v64h85zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43h89z
+" />
+    <glyph glyph-name="assignment_returned" unicode="assignment_returned" 
+d="M256 128l107 107h-64v85h-86v-85h-64zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="assignment_turned_in" unicode="assignment_turned_in" 
+d="M213 149l171 171l-30 30l-141 -140l-55 55l-30 -30zM256 448c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h89c9 25 32 43 60 43s51 -18 60 -43
+h89z" />
+    <glyph glyph-name="assistant" unicode="assistant" 
+d="M296 237l88 40l-88 40l-40 88l-40 -88l-88 -40l88 -40l40 -88zM405 469c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-85l-64 -64l-64 64h-85c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h298z" />
+    <glyph glyph-name="assistant_photo" unicode="assistant_photo" 
+d="M307 384h120v-213h-150l-8 42h-120v-149h-42v363h192z" />
+    <glyph glyph-name="attach_file" unicode="attach_file" 
+d="M352 384h32v-245c0 -65 -52 -118 -117 -118s-118 53 -118 118v266c0 47 39 86 86 86s85 -39 85 -86v-224c0 -29 -24 -53 -53 -53s-54 24 -54 53v203h32v-203c0 -12 10 -21 22 -21s21 9 21 21v224c0 29 -24 54 -53 54s-54 -25 -54 -54v-266c0 -47 39 -86 86 -86
+s85 39 85 86v245z" />
+    <glyph glyph-name="attach_money" unicode="attach_money" 
+d="M252 279c48 -13 100 -32 100 -93c0 -44 -33 -68 -75 -76v-46h-64v46c-41 9 -75 35 -78 82h47c2 -25 19 -45 63 -45c47 0 58 23 58 38c0 20 -11 39 -64 52c-60 14 -100 39 -100 88c0 41 33 68 74 77v46h64v-47c45 -11 68 -44 69 -81h-47c-1 27 -16 45 -54 45
+c-36 0 -57 -17 -57 -40c0 -20 16 -33 64 -46z" />
+    <glyph glyph-name="attachment" unicode="attachment" 
+d="M43 245c0 65 52 118 117 118h224c47 0 85 -39 85 -86s-38 -85 -85 -85h-181c-29 0 -54 24 -54 53s25 54 54 54h160v-43h-162c-12 0 -12 -21 0 -21h183c23 0 43 19 43 42s-20 43 -43 43h-224c-41 0 -75 -34 -75 -75s34 -74 75 -74h203v-43h-203c-65 0 -117 52 -117 117z
+" />
+    <glyph glyph-name="audiotrack" unicode="audiotrack" 
+d="M256 448h149v-64h-85v-235h-1c-5 -48 -46 -85 -95 -85c-53 0 -96 43 -96 96s43 96 96 96c11 0 22 -2 32 -6v198z" />
+    <glyph glyph-name="autorenew" unicode="autorenew" 
+d="M400 347c17 -26 27 -58 27 -91c0 -94 -77 -171 -171 -171v-64l-85 86l85 85v-64c71 0 128 57 128 128c0 22 -6 42 -15 60zM256 384c-71 0 -128 -57 -128 -128c0 -22 5 -42 15 -60l-31 -31c-17 26 -27 58 -27 91c0 94 77 171 171 171v64l85 -86l-85 -85v64z" />
+    <glyph glyph-name="av_timer" unicode="av_timer" 
+d="M128 256c0 12 9 21 21 21s22 -9 22 -21s-10 -21 -22 -21s-21 9 -21 21zM384 256c0 -12 -9 -21 -21 -21s-22 9 -22 21s10 21 22 21s21 -9 21 -21zM235 448h21c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192c0 63 30 118 77 153v1l145 -145l-30 -30
+l-116 115c-21 -26 -33 -58 -33 -94c0 -83 66 -149 149 -149s149 66 149 149c0 75 -56 138 -128 148v-41h-42v85zM235 149c0 12 9 22 21 22s21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21z" />
+    <glyph glyph-name="backspace" unicode="backspace" 
+d="M405 179l-76 77l76 77l-30 30l-76 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l76 -77zM469 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-320c-15 0 -26 8 -34 19l-115 173l115 173c8 11 19 19 34 19h320z" />
+    <glyph glyph-name="backup" unicode="backup" 
+d="M299 235h64l-107 106l-107 -106h64v-86h86v86zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="battery_alert" unicode="battery_alert" 
+d="M277 213v107h-42v-107h42zM277 128v43h-42v-43h42zM334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_charging_full" unicode="battery_charging_full" 
+d="M235 85l85 160h-43v118l-85 -160h43v-118zM334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_full" unicode="battery_full" 
+d="M334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_std" unicode="battery_std" 
+d="M334 427c16 0 29 -13 29 -29v-327c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="battery_unknown" unicode="battery_unknown" 
+d="M305 241c9 9 15 22 15 36c0 35 -29 64 -64 64s-64 -29 -64 -64h32c0 18 14 32 32 32s32 -14 32 -32c0 -9 -3 -16 -9 -22l-20 -20c-10 -10 -20 -25 -20 -43h34c0 10 8 24 18 34c6 6 14 15 14 15zM276 129v41h-40v-41h40zM334 427c16 0 29 -13 29 -29v-327
+c0 -16 -13 -28 -29 -28h-156c-16 0 -29 12 -29 28v327c0 16 13 29 29 29h35v42h86v-42h35z" />
+    <glyph glyph-name="beach_access" unicode="beach_access" 
+d="M372 324c-66.8504 66.8504 -159.585 88.9016 -243.437 61.1868c63.7841 7.27512 145.981 -25.7308 212.437 -92.1868l-122 -122c-66.456 66.456 -99.4619 148.653 -92.1868 212.437c-27.7148 -83.8524 -5.66368 -176.587 61.1868 -243.437l-61 -61
+c-83.9541 83.9541 -84 220.85 -0.137673 304.862c0.129398 1.10582 0.166618 1.14572 1.27547 1.27547c84.012 83.8623 220.908 83.8164 304.862 -0.137673zM280 201l31 31l137 -138l-31 -30z" />
+    <glyph glyph-name="beenhere" unicode="beenhere" 
+d="M213 171l192 192l-30 30l-162 -162l-76 76l-30 -30zM405 491c23 0 43 -20 43 -43v-276c0 -15 -8 -27 -19 -35l-173 -116l-173 116c-11 8 -19 20 -19 35v276c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="block" unicode="block" 
+d="M256 85c94 0 171 77 171 171c0 39 -13 76 -36 105l-240 -240c29 -23 66 -36 105 -36zM85 256c0 -39 13 -76 36 -105l240 240c-29 23 -66 36 -105 36c-94 0 -171 -77 -171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="bluetooth" unicode="bluetooth" 
+d="M317 164l-40 41v-81zM277 388v-81l40 41zM378 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21z" />
+    <glyph glyph-name="bluetooth_audio" unicode="bluetooth_audio" 
+d="M275 164l-40 41v-81zM235 388v-81l40 41zM335 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM417 369c20 -32 31 -71 31 -111c0 -42 -12 -80 -33 -113l-25 25c13 26 21 55 21 86s-8 60 -21 86zM304 256l49 49
+c6 -15 10 -32 10 -49s-4 -35 -10 -50z" />
+    <glyph glyph-name="bluetooth_connected" unicode="bluetooth_connected" 
+d="M405 299l43 -43l-43 -43l-42 43zM317 164l-40 41v-81zM277 388v-81l40 41zM378 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM149 256l-42 -43l-43 43l43 43z" />
+    <glyph glyph-name="bluetooth_disabled" unicode="bluetooth_disabled" 
+d="M277 124l40 40l-40 41v-81zM115 427l312 -312l-30 -30l-49 49l-92 -91h-21v162l-98 -98l-30 30l119 119l-141 141zM277 388v-69l-42 43v107h21l122 -121l-65 -65l-30 30l34 35z" />
+    <glyph glyph-name="bluetooth_searching" unicode="bluetooth_searching" 
+d="M275 164l-40 41v-81zM235 388v-81l40 41zM335 348l-92 -92l92 -92l-122 -121h-21v162l-98 -98l-30 30l119 119l-119 119l30 30l98 -98v162h21zM417 369c20 -32 31 -71 31 -111c0 -42 -12 -80 -33 -113l-25 25c13 26 21 55 21 86s-8 60 -21 86zM304 256l49 49
+c6 -15 10 -32 10 -49s-4 -35 -10 -50z" />
+    <glyph glyph-name="blur_circular" unicode="blur_circular" 
+d="M299 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-22 9 -22 21s10 22 22 22zM299 160c6 0 10 -5 10 -11s-4 -10 -10 -10s-11 4 -11 10s5 11 11 11zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213
+s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM363 309c6 0 10 -4 10 -10s-4 -11 -10 -11s-11 5 -11 11s5 10 11 10zM363 224c6 0 10 -5 10 -11s-4 -10 -10 -10s-11 4 -11 10s5 11 11 11zM299 352c-6 0 -11 5 -11 11s5 10 11 10s10 -4 10 -10s-4 -11 -10 -11z
+M299 320c12 0 21 -9 21 -21s-9 -22 -21 -22s-22 10 -22 22s10 21 22 21zM213 352c-6 0 -10 5 -10 11s4 10 10 10s11 -4 11 -10s-5 -11 -11 -11zM149 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-10 4 -10 10s4 11 10 11zM213 160c6 0 11 -5 11 -11s-5 -10 -11 -10s-10 4 -10 10
+s4 11 10 11zM149 309c6 0 11 -4 11 -10s-5 -11 -11 -11s-10 5 -10 11s4 10 10 10zM213 235c12 0 22 -10 22 -22s-10 -21 -22 -21s-21 9 -21 21s9 22 21 22zM213 320c12 0 22 -9 22 -21s-10 -22 -22 -22s-21 10 -21 22s9 21 21 21z" />
+    <glyph glyph-name="blur_linear" unicode="blur_linear" 
+d="M277 149c-12 0 -21 10 -21 22s9 21 21 21s22 -9 22 -21s-10 -22 -22 -22zM277 235c-12 0 -21 9 -21 21s9 21 21 21s22 -9 22 -21s-10 -21 -22 -21zM277 320c-12 0 -21 9 -21 21s9 22 21 22s22 -10 22 -22s-10 -21 -22 -21zM363 245c-6 0 -11 5 -11 11s5 11 11 11
+s10 -5 10 -11s-4 -11 -10 -11zM363 331c-6 0 -11 4 -11 10s5 11 11 11s10 -5 10 -11s-4 -10 -10 -10zM64 448h384v-43h-384v43zM363 160c-6 0 -11 5 -11 11s5 10 11 10s10 -4 10 -10s-4 -11 -10 -11zM192 149c-12 0 -21 10 -21 22s9 21 21 21s21 -9 21 -21s-9 -22 -21 -22z
+M107 224c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM107 309c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM64 64v43h384v-43h-384zM192 320c-12 0 -21 9 -21 21s9 22 21 22s21 -10 21 -22s-9 -21 -21 -21zM192 235
+c-12 0 -21 9 -21 21s9 21 21 21s21 -9 21 -21s-9 -21 -21 -21zM107 139c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32z" />
+    <glyph glyph-name="blur_off" unicode="blur_off" 
+d="M64 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM128 149c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM213 75c6 0 11 -5 11 -11s-5 -11 -11 -11s-10 5 -10 11s4 11 10 11zM64 309c6 0 11 -4 11 -10s-5 -11 -11 -11s-11 5 -11 11
+s5 10 11 10zM128 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21s9 22 21 22zM448 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM213 149c12 0 22 -9 22 -21s-10 -21 -22 -21s-21 9 -21 21s9 21 21 21zM53 400l27 27l347 -347l-28 -27l-80 81
+c1 -2 1 -4 1 -6c0 -12 -9 -21 -21 -21s-22 9 -22 21s10 21 22 21c2 0 4 0 6 -1l-60 60c-2 -15 -16 -27 -32 -27c-18 0 -32 14 -32 32c0 16 12 30 27 32l-60 60c1 -2 1 -4 1 -6c0 -12 -9 -22 -21 -22s-21 10 -21 22s9 21 21 21l6 -1zM299 75c6 0 10 -5 10 -11s-4 -11 -10 -11
+s-11 5 -11 11s5 11 11 11zM384 363c-12 0 -21 9 -21 21s9 21 21 21s21 -9 21 -21s-9 -21 -21 -21zM384 277c-12 0 -21 10 -21 22s9 21 21 21s21 -9 21 -21s-9 -22 -21 -22zM384 192c-12 0 -21 9 -21 21s9 22 21 22s21 -10 21 -22s-9 -21 -21 -21zM213 363
+c-12 0 -21 9 -21 21s9 21 21 21s22 -9 22 -21s-10 -21 -22 -21zM448 288c-6 0 -11 5 -11 11s5 10 11 10s11 -4 11 -10s-5 -11 -11 -11zM213 437c-6 0 -10 5 -10 11s4 11 10 11s11 -5 11 -11s-5 -11 -11 -11zM299 437c-6 0 -11 5 -11 11s5 11 11 11s10 -5 10 -11
+s-4 -11 -10 -11zM294 267c-14 2 -25 13 -27 27v5c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32h-5zM299 363c-12 0 -22 9 -22 21s10 21 22 21s21 -9 21 -21s-9 -21 -21 -21z" />
+    <glyph glyph-name="blur_on" unicode="blur_on" 
+d="M299 331c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM299 245c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM213 149c12 0 22 -9 22 -21s-10 -21 -22 -21s-21 9 -21 21s9 21 21 21zM213 331c18 0 32 -14 32 -32s-14 -32 -32 -32
+s-32 14 -32 32s14 32 32 32zM299 75c6 0 10 -5 10 -11s-4 -11 -10 -11s-11 5 -11 11s5 11 11 11zM299 149c12 0 21 -9 21 -21s-9 -21 -21 -21s-22 9 -22 21s10 21 22 21zM448 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM384 405c12 0 21 -9 21 -21
+s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM384 320c12 0 21 -9 21 -21s-9 -22 -21 -22s-21 10 -21 22s9 21 21 21zM384 149c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM384 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21s9 22 21 22zM213 245
+c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM213 363c-12 0 -21 9 -21 21s9 21 21 21s22 -9 22 -21s-10 -21 -22 -21zM213 437c-6 0 -10 5 -10 11s4 11 10 11s11 -5 11 -11s-5 -11 -11 -11zM213 75c6 0 11 -5 11 -11s-5 -11 -11 -11s-10 5 -10 11
+s4 11 10 11zM64 224c6 0 11 -5 11 -11s-5 -10 -11 -10s-11 4 -11 10s5 11 11 11zM299 437c-6 0 -11 5 -11 11s5 11 11 11s10 -5 10 -11s-4 -11 -10 -11zM299 363c-12 0 -22 9 -22 21s10 21 22 21s21 -9 21 -21s-9 -21 -21 -21zM448 288c-6 0 -11 5 -11 11s5 10 11 10
+s11 -4 11 -10s-5 -11 -11 -11zM128 405c12 0 21 -9 21 -21s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM64 309c6 0 11 -4 11 -10s-5 -11 -11 -11s-11 5 -11 11s5 10 11 10zM128 320c12 0 21 -9 21 -21s-9 -22 -21 -22s-21 10 -21 22s9 21 21 21zM128 149c12 0 21 -9 21 -21
+s-9 -21 -21 -21s-21 9 -21 21s9 21 21 21zM128 235c12 0 21 -10 21 -22s-9 -21 -21 -21s-21 9 -21 21s9 22 21 22z" />
+    <glyph glyph-name="book" unicode="book" 
+d="M128 427v-171l53 32l54 -32v171h-107zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="bookmark" unicode="bookmark" 
+d="M363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="bookmark_border" unicode="bookmark_border" 
+d="M363 128v277h-214v-277l107 47zM363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="border_all" unicode="border_all" 
+d="M405 277v128h-128v-128h128zM405 107v128h-128v-128h128zM235 277v128h-128v-128h128zM235 107v128h-128v-128h128zM64 448h384v-384h-384v384z" />
+    <glyph glyph-name="border_bottom" unicode="border_bottom" 
+d="M107 192v-43h-43v43h43zM64 64v43h384v-43h-384zM107 277v-42h-43v42h43zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM107 363v-43h-43v43h43zM405 149v43h43v-43h-43zM405 235v42h43v-42h-43zM363 448v-43h-43v43h43zM277 448v-43h-42v43h42zM363 277v-42h-43v42
+h43zM277 363v-43h-42v43h42zM107 448v-43h-43v43h43zM277 277v-42h-42v42h42zM192 448v-43h-43v43h43zM277 192v-43h-42v43h42zM192 277v-42h-43v42h43z" />
+    <glyph glyph-name="border_clear" unicode="border_clear" 
+d="M320 405v43h43v-43h-43zM320 235v42h43v-42h-43zM320 64v43h43v-43h-43zM235 405v43h42v-43h-42zM405 448h43v-43h-43v43zM235 320v43h42v-43h-42zM405 320v43h43v-43h-43zM405 64v43h43v-43h-43zM405 235v42h43v-42h-43zM405 149v43h43v-43h-43zM235 235v42h42v-42h-42z
+M64 405v43h43v-43h-43zM64 320v43h43v-43h-43zM64 235v42h43v-42h-43zM64 149v43h43v-43h-43zM64 64v43h43v-43h-43zM235 64v43h42v-43h-42zM235 149v43h42v-43h-42zM149 64v43h43v-43h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43z" />
+    <glyph glyph-name="border_color" unicode="border_color" 
+d="M0 85h512v-85h-512v85zM442 426l-42 -42l-80 80l42 42c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM379 363l-214 -214h-80v80l214 214z" />
+    <glyph glyph-name="border_horizontal" unicode="border_horizontal" 
+d="M405 64v43h43v-43h-43zM320 64v43h43v-43h-43zM235 149v43h42v-43h-42zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM64 235v42h384v-42h-384zM235 64v43h42v-43h-42zM405 149v43h43v-43h-43zM277 448v-43h-42v43h42zM277 363v-43h-42v43h42zM363 448v-43h-43v43h43z
+M192 448v-43h-43v43h43zM107 448v-43h-43v43h43zM149 64v43h43v-43h-43zM64 149v43h43v-43h-43zM107 363v-43h-43v43h43zM64 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_inner" unicode="border_inner" 
+d="M405 149v43h43v-43h-43zM405 64v43h43v-43h-43zM277 448v-171h171v-42h-171v-171h-42v171h-171v42h171v171h42zM320 64v43h43v-43h-43zM405 448h43v-43h-43v43zM405 320v43h43v-43h-43zM363 448v-43h-43v43h43zM107 448v-43h-43v43h43zM192 448v-43h-43v43h43zM64 149v43
+h43v-43h-43zM107 363v-43h-43v43h43zM149 64v43h43v-43h-43zM64 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_left" unicode="border_left" 
+d="M320 405v43h43v-43h-43zM320 235v42h43v-42h-43zM405 64v43h43v-43h-43zM405 235v42h43v-42h-43zM405 448h43v-43h-43v43zM405 149v43h43v-43h-43zM320 64v43h43v-43h-43zM405 320v43h43v-43h-43zM64 64v384h43v-384h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43z
+M149 64v43h43v-43h-43zM235 235v42h42v-42h-42zM235 320v43h42v-43h-42zM235 405v43h42v-43h-42zM235 149v43h42v-43h-42zM235 64v43h42v-43h-42z" />
+    <glyph glyph-name="border_outer" unicode="border_outer" 
+d="M192 277v-42h-43v42h43zM277 192v-43h-42v43h42zM405 107v298h-298v-298h298zM64 448h384v-384h-384v384zM363 277v-42h-43v42h43zM277 277v-42h-42v42h42zM277 363v-43h-42v43h42z" />
+    <glyph glyph-name="border_right" unicode="border_right" 
+d="M235 320v43h42v-43h-42zM235 405v43h42v-43h-42zM235 235v42h42v-42h-42zM320 405v43h43v-43h-43zM320 64v43h43v-43h-43zM405 448h43v-384h-43v384zM320 235v42h43v-42h-43zM235 149v43h42v-43h-42zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z
+M235 64v43h42v-43h-42zM64 64v43h43v-43h-43zM149 235v42h43v-42h-43zM149 405v43h43v-43h-43zM64 405v43h43v-43h-43zM149 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_style" unicode="border_style" 
+d="M405 320v43h43v-43h-43zM64 448h384v-43h-341v-341h-43v384zM405 235v42h43v-42h-43zM405 149v43h43v-43h-43zM235 64v43h42v-43h-42zM149 64v43h43v-43h-43zM405 64v43h43v-43h-43zM320 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_top" unicode="border_top" 
+d="M320 235v42h43v-42h-43zM405 64v43h43v-43h-43zM235 320v43h42v-43h-42zM320 64v43h43v-43h-43zM405 149v43h43v-43h-43zM64 448h384v-43h-384v43zM405 235v42h43v-42h-43zM405 320v43h43v-43h-43zM235 149v43h42v-43h-42zM64 320v43h43v-43h-43zM64 235v42h43v-42h-43z
+M64 64v43h43v-43h-43zM64 149v43h43v-43h-43zM235 64v43h42v-43h-42zM235 235v42h42v-42h-42zM149 235v42h43v-42h-43zM149 64v43h43v-43h-43z" />
+    <glyph glyph-name="border_vertical" unicode="border_vertical" 
+d="M320 235v42h43v-42h-43zM320 64v43h43v-43h-43zM320 405v43h43v-43h-43zM405 320v43h43v-43h-43zM405 448h43v-43h-43v43zM405 235v42h43v-42h-43zM405 64v43h43v-43h-43zM235 64v384h42v-384h-42zM405 149v43h43v-43h-43zM149 405v43h43v-43h-43zM64 149v43h43v-43h-43z
+M64 64v43h43v-43h-43zM64 235v42h43v-42h-43zM149 235v42h43v-42h-43zM149 64v43h43v-43h-43zM64 405v43h43v-43h-43zM64 320v43h43v-43h-43z" />
+    <glyph glyph-name="branding_watermark" unicode="branding_watermark" 
+d="M448 107v128h-192v-128h192zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="brightness_1" unicode="brightness_&#x31;" 
+d="M43 256c0 118 95 213 213 213s213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213z" />
+    <glyph glyph-name="brightness_2" unicode="brightness_&#x32;" 
+d="M213 469c118 0 214 -95 214 -213s-96 -213 -214 -213c-39 0 -75 10 -106 28c64 37 106 106 106 185s-42 148 -106 185c31 18 67 28 106 28z" />
+    <glyph glyph-name="brightness_3" unicode="brightness_&#x33;" 
+d="M192 469c118 0 213 -95 213 -213s-95 -213 -213 -213c-22 0 -44 3 -64 9c87 27 149 108 149 204s-62 177 -149 204c20 6 42 9 64 9z" />
+    <glyph glyph-name="brightness_4" unicode="brightness_&#x34;" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128c-19 0 -37 -5 -53 -12c44 -20 74 -64 74 -116s-30 -96 -74 -116c16 -7 34 -12 53 -12zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100z" />
+    <glyph glyph-name="brightness_5" unicode="brightness_&#x35;" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="brightness_6" unicode="brightness_&#x36;" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128v-256zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="brightness_7" unicode="brightness_&#x37;" 
+d="M256 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85zM256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100
+v-100z" />
+    <glyph glyph-name="brightness_auto" unicode="brightness_auto" 
+d="M305 171h41l-69 192h-42l-69 -192h41l15 42h68zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100zM231 242l25 78l25 -78h-50z" />
+    <glyph glyph-name="brightness_high" unicode="brightness_high" 
+d="M256 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85zM256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 327l70 -71l-70 -71v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100
+v-100z" />
+    <glyph glyph-name="brightness_low" unicode="brightness_low" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="brightness_medium" unicode="brightness_medium" 
+d="M256 128c71 0 128 57 128 128s-57 128 -128 128v-256zM427 185v-100h-100l-71 -70l-71 70h-100v100l-70 71l70 71v100h100l71 70l71 -70h100v-100l70 -71z" />
+    <glyph glyph-name="broken_image" unicode="broken_image" 
+d="M384 268l64 -64v-97c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v140l64 -64l85 86l86 -86zM448 405v-140l-64 64l-85 -86l-86 86l-85 -86l-64 65v97c0 23 20 43 43 43h298c23 0 43 -20 43 -43z" />
+    <glyph glyph-name="brush" unicode="brush" 
+d="M442 413c8 -8 8 -22 0 -30l-191 -191l-59 59l191 191c8 8 22 8 30 0zM149 213c35 0 64 -29 64 -64c0 -47 -38 -85 -85 -85c-32 0 -65 17 -85 43c18 0 42 14 42 42c0 35 29 64 64 64z" />
+    <glyph glyph-name="bubble_chart" unicode="bubble_chart" 
+d="M222 324c0 57 45 103 102 103s103 -46 103 -103s-46 -102 -103 -102s-102 45 -102 102zM273 128c0 24 19 43 43 43s42 -19 42 -43s-18 -43 -42 -43s-43 19 -43 43zM85 205c0 38 31 68 69 68s68 -30 68 -68s-30 -68 -68 -68s-69 30 -69 68z" />
+    <glyph glyph-name="bug_report" unicode="bug_report" 
+d="M299 256v43h-86v-43h86zM299 171v42h-86v-42h86zM427 341v-42h-45c1 -7 2 -15 2 -22v-21h43v-43h-43v-21c0 -7 -1 -14 -2 -21h45v-43h-60c-22 -38 -64 -64 -111 -64s-89 26 -111 64h-60v43h45c-1 7 -2 14 -2 21v21h-43v43h43v21c0 7 1 15 2 22h-45v42h60
+c10 17 23 31 39 42l-35 35l30 30l47 -46c10 2 20 3 30 3s20 -1 30 -3l47 46l30 -30l-35 -35c16 -11 29 -25 39 -42h60z" />
+    <glyph glyph-name="build" unicode="build" 
+d="M484 107c9 -6 9 -21 -2 -30l-49 -49c-9 -9 -21 -9 -30 0l-194 194c-49 -19 -106 -9 -147 32c-43 43 -54 107 -28 158l94 -92l64 64l-92 92c51 23 115 15 158 -28c41 -41 51 -98 32 -147z" />
+    <glyph glyph-name="burst_mode" unicode="burst_mode" 
+d="M235 149h213l-68 90l-54 -68l-38 46zM469 405c12 0 22 -9 22 -21v-256c0 -12 -10 -21 -22 -21h-256c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h256zM107 405h42v-298h-42v298zM21 405h43v-298h-43v298z" />
+    <glyph glyph-name="business" unicode="business" 
+d="M384 192v-43h-43v43h43zM384 277v-42h-43v42h43zM427 107v213h-171v-43h43v-42h-43v-43h43v-43h-43v-42h171zM213 363v42h-42v-42h42zM213 277v43h-42v-43h42zM213 192v43h-42v-43h42zM213 107v42h-42v-42h42zM128 363v42h-43v-42h43zM128 277v43h-43v-43h43zM128 192v43
+h-43v-43h43zM128 107v42h-43v-42h43zM256 363h213v-299h-426v384h213v-85z" />
+    <glyph glyph-name="business_center" unicode="business_center" 
+d="M299 363v42h-86v-42h86zM427 363c23 0 42 -20 42 -43v-64c0 -23 -19 -43 -42 -43h-128v43h-86v-43h-128c-24 0 -42 19 -42 43v64c0 23 19 43 42 43h85v42l43 43h85l43 -43v-42h86zM213 171h86v21h149v-85c0 -24 -19 -43 -43 -43h-298c-24 0 -43 19 -43 43v85h149v-21z
+" />
+    <glyph glyph-name="cached" unicode="cached" 
+d="M128 256h64l-85 -85l-86 85h64c0 94 77 171 171 171c33 0 65 -10 91 -27l-31 -31c-18 10 -38 15 -60 15c-71 0 -128 -57 -128 -128zM405 341l86 -85h-64c0 -94 -77 -171 -171 -171c-33 0 -65 10 -91 27l31 31c18 -10 38 -15 60 -15c71 0 128 57 128 128h-64z" />
+    <glyph glyph-name="cake" unicode="cake" 
+d="M384 320c35 0 64 -29 64 -64v-33c0 -23 -19 -42 -42 -42c-11 0 -21 4 -29 12l-46 46l-46 -46c-16 -16 -43 -16 -59 0l-45 46l-46 -46c-8 -8 -18 -12 -29 -12c-23 0 -42 19 -42 42v33c0 35 29 64 64 64h107v43h42v-43h107zM354 171c14 -14 32 -22 52 -22c16 0 30 5 42 13
+v-98c0 -12 -9 -21 -21 -21h-342c-12 0 -21 9 -21 21v98c12 -8 26 -13 42 -13c20 0 38 8 52 22l23 23l23 -23c28 -28 76 -28 104 0l23 23zM256 384c-23 0 -43 20 -43 43c0 8 3 16 7 22l36 63l36 -63c4 -6 7 -14 7 -22c0 -23 -19 -43 -43 -43z" />
+    <glyph glyph-name="call" unicode="call" 
+d="M141 282c31 -60 81 -110 141 -141l47 47c6 6 15 8 22 5c24 -8 50 -12 76 -12c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22z" />
+    <glyph glyph-name="call_end" unicode="call_end" 
+d="M256 320c-34 0 -67 -5 -98 -15v-66c0 -8 -5 -17 -12 -20c-21 -10 -40 -23 -57 -39c-4 -4 -9 -6 -15 -6s-11 2 -15 6l-53 53c-4 4 -6 9 -6 15s2 11 6 15c65 62 153 100 250 100s185 -38 250 -100c4 -4 6 -9 6 -15s-2 -11 -6 -15l-53 -53c-4 -4 -9 -6 -15 -6s-11 2 -15 6
+c-17 16 -36 29 -57 39c-7 3 -12 10 -12 19v66c-31 10 -64 16 -98 16z" />
+    <glyph glyph-name="call_made" unicode="call_made" 
+d="M192 405h213v-213h-42v141l-248 -248l-30 30l248 248h-141v42z" />
+    <glyph glyph-name="call_merge" unicode="call_merge" 
+d="M160 341l96 96l96 -96h-75v-136l-128 -128l-30 30l116 115v119h-75zM363 77l-73 72l30 30l73 -72z" />
+    <glyph glyph-name="call_missed" unicode="call_missed" 
+d="M418 363l30 -30l-192 -192l-149 149v-98h-43v171h171v-43h-98l119 -119z" />
+    <glyph glyph-name="call_missed_outgoing" unicode="call_missed_outgoing" 
+d="M64 333l30 30l162 -162l119 119h-98v43h171v-171h-43v98l-149 -149z" />
+    <glyph glyph-name="call_received" unicode="call_received" 
+d="M427 397l-248 -248h141v-42h-213v213h42v-141l248 248z" />
+    <glyph glyph-name="call_split" unicode="call_split" 
+d="M213 427l-49 -49l113 -113v-180h-42v162l-101 101l-49 -49v128h128zM299 427h128v-128l-49 49l-62 -62l-30 30l62 62z" />
+    <glyph glyph-name="call_to_action" unicode="call_to_action" 
+d="M448 107v64h-384v-64h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="camera" unicode="camera" 
+d="M210 48c34.3543 59.3123 68.2469 119.086 103 178l78 -135c-37 -30 -84 -48 -135 -48c-16 0 -31 2 -46 5zM52 192h207l-79 -135c-61 23 -108 73 -128 135zM99 400c35.9996 -62.3337 71.7933 -124.873 108 -187h-160c-3 14 -4 28 -4 43c0 56 21 106 56 144zM465 299
+c3 -14 4 -28 4 -43c0 -56 -21 -106 -56 -144l-102 176l-6 11h160zM460 320h-207l79 135c61 -23 108 -73 128 -135zM201 288l-2 -2l-78 135c37 30 84 48 135 48c16 0 31 -2 46 -5z" />
+    <glyph glyph-name="camera_alt" unicode="camera_alt" 
+d="M256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM192 469h128l39 -42h68c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68zM188 256c0 38 30 68 68 68s68 -30 68 -68
+s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="camera_enhance" unicode="camera_enhance" 
+d="M256 149l-27 59l-58 27l58 26l27 59l27 -59l58 -26l-58 -27zM256 128c59 0 107 48 107 107s-48 106 -107 106s-107 -47 -107 -106s48 -107 107 -107zM192 448h128l39 -43h68c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256
+c0 23 19 42 42 42h68z" />
+    <glyph glyph-name="camera_front" unicode="camera_front" 
+d="M149 469v-224c0 36 71 54 107 54s107 -18 107 -54v224h-214zM363 512c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-150l64 -64l-64 -64v43h-106v42h106v43h-64c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h214zM256 341c-23 0 -42 20 -42 43s19 43 42 43
+s43 -20 43 -43s-20 -43 -43 -43zM299 85h106v-42h-106v42z" />
+    <glyph glyph-name="camera_rear" unicode="camera_rear" 
+d="M256 384c23 0 42 20 42 43s-19 42 -42 42s-43 -19 -43 -42s19 -43 43 -43zM363 512c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-150l64 -64l-64 -64v43h-106v42h106v43h-64c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h214zM299 85h106v-42h-106v42z" />
+    <glyph glyph-name="camera_roll" unicode="camera_roll" 
+d="M427 320v43h-43v-43h43zM427 128v43h-43v-43h43zM341 320v43h-42v-43h42zM341 128v43h-42v-43h42zM256 320v43h-43v-43h43zM256 128v43h-43v-43h43zM299 405h170v-320h-170c0 -23 -20 -42 -43 -42h-171c-23 0 -42 19 -42 42v320c0 23 19 43 42 43h22v21c0 12 9 22 21 22
+h85c12 0 22 -10 22 -22v-21h21c23 0 43 -20 43 -43z" />
+    <glyph glyph-name="cancel" unicode="cancel" 
+d="M363 179l-77 77l77 77l-30 30l-77 -77l-77 77l-30 -30l77 -77l-77 -77l30 -30l77 77l77 -77zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="card_giftcard" unicode="card_giftcard" 
+d="M427 213v128h-109l45 -60l-35 -25c-24.0378 32.6288 -48.3187 65.0147 -72 98c-23.6829 -32.9837 -47.9614 -65.3719 -72 -98l-35 25l45 60h-109v-128h342zM427 107v42h-342v-42h342zM192 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM320 427
+c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h47c-2 7 -4 14 -4 21c0 35 29 64 64 64c22 0 41 -11 53 -28l11 -15l11 15c12 17 31 28 53 28
+c35 0 64 -29 64 -64c0 -7 -2 -14 -4 -21h47z" />
+    <glyph glyph-name="card_membership" unicode="card_membership" 
+d="M427 299v128h-342v-128h342zM427 192v43h-342v-43h342zM427 469c24 0 42 -18 42 -42v-235c0 -24 -18 -43 -42 -43h-86v-106l-85 42l-85 -42v106h-86c-24 0 -42 19 -42 43v235c0 24 18 42 42 42h342z" />
+    <glyph glyph-name="card_travel" unicode="card_travel" 
+d="M427 213v128h-64v-42h-43v42h-128v-42h-43v42h-64v-128h342zM427 107v42h-342v-42h342zM192 427v-43h128v43h-128zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h64v43c0 24 19 42 43 42h128
+c24 0 43 -18 43 -42v-43h64z" />
+    <glyph glyph-name="casino" unicode="casino" 
+d="M352 320c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM352 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 320c18 0 32 14 32 32s-14 32 -32 32
+s-32 -14 -32 -32s14 -32 32 -32zM160 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="cast" unicode="cast" 
+d="M21 299c129 0 235 -105 235 -235h-43c0 106 -86 192 -192 192v43zM21 213c83 0 150 -66 150 -149h-43c0 59 -48 107 -107 107v42zM21 128c35 0 64 -29 64 -64h-64v64zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-149v43h149v298h-384v-64h-43v64
+c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="cast_connected" unicode="cast_connected" 
+d="M448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-149v43h149v298h-384v-64h-43v64c0 23 20 43 43 43h384zM21 299c129 0 235 -105 235 -235h-43c0 106 -86 192 -192 192v43zM405 363v-214h-120c-27 84 -94 152 -178 179v35h298zM21 213c83 0 150 -66 150 -149
+h-43c0 59 -48 107 -107 107v42zM21 128c35 0 64 -29 64 -64h-64v64z" />
+    <glyph glyph-name="center_focus_strong" unicode="center_focus_strong" 
+d="M405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM107 405v-85h-43v85c0 23 20 43 43 43h85v-43h-85zM107 192v-85h85v-43h-85c-23 0 -43 20 -43 43v85h43zM256 341c47 0 85 -38 85 -85s-38 -85 -85 -85
+s-85 38 -85 85s38 85 85 85z" />
+    <glyph glyph-name="center_focus_weak" unicode="center_focus_weak" 
+d="M256 213c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM256 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85zM405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM107 405
+v-85h-43v85c0 23 20 43 43 43h85v-43h-85zM107 192v-85h85v-43h-85c-23 0 -43 20 -43 43v85h43z" />
+    <glyph glyph-name="change_history" unicode="change_history" 
+d="M256 427l213 -342h-426zM256 346l-136 -218h272z" />
+    <glyph glyph-name="chat" unicode="chat" 
+d="M384 341v43h-256v-43h256zM299 213v43h-171v-43h171zM128 320v-43h256v43h-256zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="chat_bubble" unicode="chat_bubble" 
+d="M427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="chat_bubble_outline" unicode="chat_bubble_outline" 
+d="M427 171v256h-342v-299l43 43h299zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="check" unicode="check" 
+d="M192 167l226 226l30 -30l-256 -256l-119 119l30 30z" />
+    <glyph glyph-name="check_box" unicode="check_box" 
+d="M213 149l192 192l-30 31l-162 -162l-76 76l-30 -30zM405 448c24 0 43 -20 43 -43v-298c0 -23 -19 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="check_box_outline_blank" unicode="check_box_outline_blank" 
+d="M405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM405 405h-298v-298h298v298z" />
+    <glyph glyph-name="check_circle" unicode="check_circle" 
+d="M213 149l192 192l-30 31l-162 -162l-76 76l-30 -30zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="chevron_left" unicode="chevron_left" 
+d="M329 354l-98 -98l98 -98l-30 -30l-128 128l128 128z" />
+    <glyph glyph-name="chevron_right" unicode="chevron_right" 
+d="M213 384l128 -128l-128 -128l-30 30l98 98l-98 98z" />
+    <glyph glyph-name="child_care" unicode="child_care" 
+d="M160 213h192c-16 -38 -53 -64 -96 -64s-80 26 -96 64zM256 107c68.0018 0 125.232 44.8128 143 107c2 0 4 -1 6 -1c23 0 43 20 43 43s-20 43 -43 43c-2 0 -4 -1 -6 -1c-17.7643 62.1749 -74.9972 107 -143 107c-68.0018 0 -125.232 -44.8128 -143 -107c-2 0 -4 1 -6 1
+c-23 0 -43 -20 -43 -43s20 -43 43 -43c2 0 4 1 6 1c17.7643 -62.1749 74.9972 -107 143 -107zM489 242c-5 -32 -28 -59 -59 -68c-28.2678 -59.1055 -94.8338 -110 -174 -110c-78.8834 0 -145.522 50.0487 -173 110c-31 9 -55 36 -60 68c-1 4 -2 9 -2 14s1 10 2 14
+c5 32 29 59 60 68c11 24 26 45 46 62c34 30 78 48 127 48c80.292 0 145.109 -49.147 173 -110c31 -9 55 -36 60 -68c1 -4 2 -9 2 -14s-1 -10 -2 -14zM176 288c0 15 12 27 27 27s26 -12 26 -27s-11 -27 -26 -27s-27 12 -27 27zM283 288c0 15 11 27 26 27s27 -12 27 -27
+s-12 -27 -27 -27s-26 12 -26 27z" />
+    <glyph glyph-name="child_friendly" unicode="child_friendly" 
+d="M363 85c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM171 85c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM412 173c15 -14 25 -34 25 -56c0 -41 -33 -74 -74 -74c-38 0 -69 28 -74 64h-45c-5 -36 -35 -64 -73 -64
+c-41 0 -75 33 -75 74c0 28 16 53 39 66c-5 7 -45 94 -45 94h-47v43h74l20 -43h311c0 -39 -14 -75 -36 -104zM277 469c94 0 171 -76 171 -170h-171v170z" />
+    <glyph glyph-name="chrome_reader_mode" unicode="chrome_reader_mode" 
+d="M448 107v277h-192v-277h192zM448 427c23 0 43 -20 43 -43v-277c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v277c0 23 20 43 43 43h384zM277 203h150v-32h-150v32zM277 309h150v-32h-150v32zM277 256h150v-32h-150v32z" />
+    <glyph glyph-name="class" unicode="class" 
+d="M128 427v-171l53 32l54 -32v171h-107zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="clear" unicode="clear" 
+d="M405 375l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" />
+    <glyph glyph-name="clear_all" unicode="clear_all" 
+d="M149 363h299v-43h-299v43zM64 149v43h299v-43h-299zM107 235v42h298v-42h-298z" />
+    <glyph glyph-name="close" unicode="close" 
+d="M405 375l-119 -119l119 -119l-30 -30l-119 119l-119 -119l-30 30l119 119l-119 119l30 30l119 -119l119 119z" />
+    <glyph glyph-name="closed_caption" unicode="closed_caption" 
+d="M384 277v22c0 12 -9 21 -21 21h-64c-12 0 -22 -9 -22 -21v-86c0 -12 10 -21 22 -21h64c12 0 21 9 21 21v22h-32v-11h-43v64h43v-11h32zM235 277v22c0 12 -10 21 -22 21h-64c-12 0 -21 -9 -21 -21v-86c0 -12 9 -21 21 -21h64c12 0 22 9 22 21v22h-32v-11h-43v64h43v-11h32
+zM405 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="cloud" unicode="cloud" 
+d="M413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_circle" unicode="cloud_circle" 
+d="M352 171c29 0 53 24 53 53s-24 53 -53 53h-11c0 47 -38 86 -85 86c-40 0 -73 -28 -82 -65l-3 1c-35 0 -64 -29 -64 -64s29 -64 64 -64h181zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="cloud_done" unicode="cloud_done" 
+d="M213 149l141 141l-30 30l-111 -110l-44 44l-30 -30zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_download" unicode="cloud_download" 
+d="M363 235h-64v85h-86v-85h-64l107 -107zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_off" unicode="cloud_off" 
+d="M165 299h-37c-47 0 -85 -39 -85 -86s38 -85 85 -85h208zM64 400l27 27l357 -357l-27 -27l-43 42h-250c-71 0 -128 57 -128 128c0 69 55 125 123 128zM413 298c55 -4 99 -50 99 -106c0 -36 -18 -68 -45 -87l-31 31c20 11 33 32 33 56c0 35 -29 64 -64 64h-32v11
+c0 65 -52 117 -117 117c-20 0 -38 -4 -54 -13l-32 31c25 16 54 25 86 25c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_queue" unicode="cloud_queue" 
+d="M405 128c35 0 64 29 64 64s-29 64 -64 64h-32v11c0 65 -52 117 -117 117c-54 0 -99 -36 -113 -85h-15c-47 0 -85 -39 -85 -86s38 -85 85 -85h277zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127
+c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="cloud_upload" unicode="cloud_upload" 
+d="M299 235h64l-107 106l-107 -106h64v-86h86v86zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="code" unicode="code" 
+d="M311 158l99 98l-99 98l30 30l128 -128l-128 -128zM201 158l-30 -30l-128 128l128 128l30 -30l-99 -98z" />
+    <glyph glyph-name="collections" unicode="collections" 
+d="M43 384h42v-299h299v-42h-299c-23 0 -42 19 -42 42v299zM235 256l-64 -85h256l-86 106l-63 -79zM469 171c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256c23 0 42 -19 42 -42v-256z" />
+    <glyph glyph-name="collections_bookmark" unicode="collections_bookmark" 
+d="M427 256v171h-107v-171l53 32zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="color_lens" unicode="color_lens" 
+d="M373 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM203 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 256c18 0 32 14 32 32s-14 32 -32 32
+s-32 -14 -32 -32s14 -32 32 -32zM256 448c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-37c-18 0 -32 -14 -32 -32c0 -8 3 -15 8 -21s8 -14 8 -22c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192z" />
+    <glyph glyph-name="colorize" unicode="colorize" 
+d="M148 107l172 172l-41 41l-172 -172zM442 392c8 -8 9 -21 0 -30l-67 -67l41 -41l-30 -30l-30 30l-191 -190h-101v101l190 191l-30 30l30 30l41 -41l67 67c8 8 22 8 30 0z" />
+    <glyph glyph-name="comment" unicode="comment" 
+d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM469 427v-384l-85 85h-299c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h342c23 0 42 -19 42 -42z" />
+    <glyph glyph-name="compare" unicode="compare" 
+d="M405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-106v192l106 -128v277h-106v43h106zM213 128v128l-106 -128h106zM213 448v43h43v-470h-43v43h-106c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h106z" />
+    <glyph glyph-name="compare_arrows" unicode="compare_arrows" 
+d="M320 235l-85 85l85 85v-64h149v-42h-149v-64zM192 213v64l85 -85l-85 -85v64h-149v42h149z" />
+    <glyph glyph-name="computer" unicode="computer" 
+d="M85 384v-213h342v213h-342zM427 128h85v-43h-512v43h85c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="confirmation_number" unicode="confirmation_number" 
+d="M277 331v42h-42v-42h42zM277 235v42h-42v-42h42zM277 139v42h-42v-42h42zM469 299c-23 0 -42 -20 -42 -43s19 -43 42 -43v-85c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v85c24 0 42 20 42 43s-19 43 -42 43v85c0 24 19 43 42 43h342c23 0 42 -19 42 -43v-85z" />
+    <glyph glyph-name="contact_mail" unicode="contact_mail" 
+d="M469 256v128h-170v-128h170zM299 128v21c0 43 -85 66 -128 66s-128 -23 -128 -66v-21h256zM171 384c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM469 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-426c-23 0 -43 20 -43 43v298
+c0 23 20 43 43 43h426zM448 341l-64 -42l-64 42v22l64 -43l64 43v-22z" />
+    <glyph glyph-name="contact_phone" unicode="contact_phone" 
+d="M381 213c-5 13 -8 28 -8 43s3 30 8 43h35l32 42l-42 43c-28 -21 -49 -50 -59 -85c-4 -14 -6 -28 -6 -43s2 -29 6 -43c10 -34 31 -64 59 -85l42 43l-32 42h-35zM299 128v21c0 43 -85 66 -128 66s-128 -23 -128 -66v-21h256zM171 384c-35 0 -64 -29 -64 -64s29 -64 64 -64
+s64 29 64 64s-29 64 -64 64zM469 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-426c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h426z" />
+    <glyph glyph-name="contacts" unicode="contacts" 
+d="M363 149v32c0 36 -71 54 -107 54s-107 -18 -107 -54v-32h214zM256 368c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342zM85 0v43h342v-43
+h-342zM427 512v-43h-342v43h342z" />
+    <glyph glyph-name="content_copy" unicode="content_copy" 
+d="M405 64v299h-234v-299h234zM405 405c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-234c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h234zM341 491v-43h-256v-299h-42v299c0 23 19 43 42 43h256z" />
+    <glyph glyph-name="content_cut" unicode="content_cut" 
+d="M405 448h64v-21l-149 -150l-43 43zM256 245c6 0 11 5 11 11s-5 11 -11 11s-11 -5 -11 -11s5 -11 11 -11zM128 85c23 0 43 19 43 43s-20 43 -43 43s-43 -19 -43 -43s20 -43 43 -43zM128 341c23 0 43 19 43 43s-20 43 -43 43s-43 -19 -43 -43s20 -43 43 -43zM206 349
+l263 -264v-21h-64l-149 149l-50 -50c5 -11 7 -22 7 -35c0 -47 -38 -85 -85 -85s-85 38 -85 85s38 85 85 85c13 0 24 -2 35 -7l50 50l-50 50c-11 -5 -22 -7 -35 -7c-47 0 -85 38 -85 85s38 85 85 85s85 -38 85 -85c0 -13 -2 -24 -7 -35z" />
+    <glyph glyph-name="content_paste" unicode="content_paste" 
+d="M405 85v342h-42v-64h-214v64h-42v-342h298zM256 469c-12 0 -21 -9 -21 -21s9 -21 21 -21s21 9 21 21s-9 21 -21 21zM405 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h89c9 25 32 43 60 43s51 -18 60 -43h89z" />
+    <glyph glyph-name="control_point" unicode="control_point" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM277 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="control_point_duplicate" unicode="control_point_duplicate" 
+d="M320 107c82 0 149 67 149 149s-67 149 -149 149s-149 -67 -149 -149s67 -149 149 -149zM320 448c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM43 256c0 -60 34 -111 85 -135v-46c-74 26 -128 98 -128 181s54 155 128 181v-46
+c-51 -24 -85 -75 -85 -135zM341 341v-64h64v-42h-64v-64h-42v64h-64v42h64v64h42z" />
+    <glyph glyph-name="copyright" unicode="copyright" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM253 317c-30.7612 0 -40 -27.2286 -40 -58v-6c0 -30.7691 9.25381 -58 40 -58
+c18.7788 0 35 11.4624 35 30h38c0 -19.5209 -10.5691 -34.2021 -22 -44c-12.8931 -11.0512 -27.9049 -18 -51 -18c-54.5845 0 -82 36.0734 -82 90v6c0 25.8562 7.26023 49.4403 20 64c13.1991 15.0847 34.3422 27 62 27c22.1368 0 40.6281 -7.62806 52 -19
+c11.0024 -11.0024 21 -27.9871 21 -49h-38c0 5 -1 9 -3 13s-4 9 -7 12c-5.41728 5.41728 -14.6761 10 -25 10z" />
+    <glyph glyph-name="create" unicode="create" 
+d="M442 362l-39 -39l-80 80l39 39c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM64 144l236 236l80 -80l-236 -236h-80v80z" />
+    <glyph glyph-name="create_new_folder" unicode="create_new_folder" 
+d="M405 213v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM427 384c24 0 42 -19 42 -43v-213c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="credit_card" unicode="credit_card" 
+d="M427 341v43h-342v-43h342zM427 128v128h-342v-128h342zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z" />
+    <glyph glyph-name="crop" unicode="crop" 
+d="M149 149h342v-42h-86v-86h-42v86h-214c-23 0 -42 19 -42 42v214h-86v42h86v86h42v-342zM363 192v171h-171v42h171c23 0 42 -19 42 -42v-171h-42z" />
+    <glyph glyph-name="crop_16_9" unicode="crop_&#x31;&#x36;_&#x39;" 
+d="M405 171v170h-298v-170h298zM405 384c23 0 43 -20 43 -43v-170c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v170c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_3_2" unicode="crop_&#x33;_&#x32;" 
+d="M405 128v256h-298v-256h298zM405 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_5_4" unicode="crop_&#x35;_&#x34;" 
+d="M405 149v214h-298v-214h298zM405 405c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h298z" />
+    <glyph glyph-name="crop_7_5" unicode="crop_&#x37;_&#x35;" 
+d="M405 192v128h-298v-128h298zM405 363c23 0 43 -20 43 -43v-128c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v128c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_din" unicode="crop_din" 
+d="M405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_free" unicode="crop_free" 
+d="M405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM107 192v-85h85v-43h-85c-23 0 -43 20 -43 43v85h43zM64 405c0 23 20 43 43 43h85v-43h-85v-85h-43v85z" />
+    <glyph glyph-name="crop_landscape" unicode="crop_landscape" 
+d="M405 149v214h-298v-214h298zM405 405c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h298z" />
+    <glyph glyph-name="crop_original" unicode="crop_original" 
+d="M298 250l75 -101h-234l58 76l42 -51zM405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="crop_portrait" unicode="crop_portrait" 
+d="M363 107v298h-214v-298h214zM363 448c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="crop_rotate" unicode="crop_rotate" 
+d="M171 171h256v-43h-43v-43h-43v43h-170c-24 0 -43 20 -43 43v170h-43v43h43v43h43v-256zM341 213v128h-128v43h128c23 0 43 -19 43 -43v-128h-43zM257 512c134 0 244 -104 255 -235h-32c-8 80 -57 148 -127 181l-29 -28l-81 81c5 0 9 1 14 1zM159 54l29 28l81 -81
+c-5 0 -9 -1 -14 -1c-134 0 -244 104 -255 235h32c8 -80 57 -148 127 -181z" />
+    <glyph glyph-name="crop_square" unicode="crop_square" 
+d="M384 128v256h-256v-256h256zM384 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h256z" />
+    <glyph glyph-name="dashboard" unicode="dashboard" 
+d="M277 448h171v-128h-171v128zM277 64v213h171v-213h-171zM64 64v128h171v-128h-171zM64 235v213h171v-213h-171z" />
+    <glyph glyph-name="data_usage" unicode="data_usage" 
+d="M256 107c47 0 89 22 116 56l56 -33c-39 -53 -101 -87 -172 -87c-118 0 -213 95 -213 213c0 111 84 201 192 212v-64c-72 -10 -128 -73 -128 -148c0 -83 66 -149 149 -149zM277 468c108 -11 192 -101 192 -212c0 -31 -6 -61 -18 -87l-56 33c6 17 10 35 10 54
+c0 75 -56 138 -128 148v64z" />
+    <glyph glyph-name="date_range" unicode="date_range" 
+d="M405 85v235h-298v-235h298zM405 427c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-298c-24 0 -43 19 -43 42v299c0 23 19 43 43 43h21v42h43v-42h170v42h43v-42h21zM363 277v-42h-43v42h43zM277 277v-42h-42v42h42zM192 277v-42h-43v42h43z" />
+    <glyph glyph-name="dehaze" unicode="dehaze" 
+d="M43 395h426v-43h-426v43zM43 288h426v-43h-426v43zM43 181h426v-42h-426v42z" />
+    <glyph glyph-name="delete" unicode="delete" 
+d="M405 427v-43h-298v43h74l22 21h106l22 -21h74zM128 107v256h256v-256c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43z" />
+    <glyph glyph-name="delete_forever" unicode="delete_forever" 
+d="M331 427h74v-43h-298v43h74l22 21h106zM180 259l46 -46l-45 -45l30 -30l45 45l45 -45l30 30l-45 45l45 46l-30 30l-45 -46l-45 46zM128 107v256h256v-256c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43z" />
+    <glyph glyph-name="delete_sweep" unicode="delete_sweep" 
+d="M299 405v-42h-256v42h64l21 22h85l22 -22h64zM64 128v213h213v-213c0 -23 -19 -43 -42 -43h-128c-23 0 -43 20 -43 43zM320 256h128v-43h-128v43zM320 341h149v-42h-149v42zM320 171h85v-43h-85v43z" />
+    <glyph glyph-name="description" unicode="description" 
+d="M277 320h118l-118 117v-117zM341 213v43h-170v-43h170zM341 128v43h-170v-43h170zM299 469l128 -128v-256c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42h171z" />
+    <glyph glyph-name="desktop_mac" unicode="desktop_mac" 
+d="M448 213v214h-384v-214h384zM448 469c23 0 43 -19 43 -42v-256c0 -23 -20 -43 -43 -43h-149l42 -64v-21h-170v21l42 64h-149c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h384z" />
+    <glyph glyph-name="desktop_windows" unicode="desktop_windows" 
+d="M448 171v256h-384v-256h384zM448 469c23 0 43 -19 43 -42v-256c0 -23 -20 -43 -43 -43h-149v-43h42v-42h-170v42h42v43h-149c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h384z" />
+    <glyph glyph-name="details" unicode="details" 
+d="M136 384l120 -213l120 213h-240zM64 427h384l-192 -342z" />
+    <glyph glyph-name="developer_board" unicode="developer_board" 
+d="M256 277h85v-128h-85v128zM128 363h107v-107h-107v107zM256 363h85v-64h-85v64zM128 235h107v-86h-107v86zM384 107v298h-299v-298h299zM469 320h-42v-43h42v-42h-42v-43h42v-43h-42v-42c0 -23 -20 -43 -43 -43h-299c-23 0 -42 20 -42 43v298c0 23 19 43 42 43h299
+c23 0 43 -20 43 -43v-42h42v-43z" />
+    <glyph glyph-name="developer_mode" unicode="developer_mode" 
+d="M363 107v42h42v-85c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v85h42v-42h214zM213 188l-30 -30l-98 98l98 98l30 -30l-67 -68zM329 158l-30 30l67 68l-67 68l30 30l98 -98zM149 405v-42h-42v85c0 23 19 43 42 43l214 -1c23 0 42 -19 42 -42v-85h-42v42h-214z" />
+    <glyph glyph-name="device_hub" unicode="device_hub" 
+d="M363 171h85v-107h-107v65l-85 90l-85 -90v-65h-107v107h85l86 85v68c-25 9 -43 32 -43 60c0 35 29 64 64 64s64 -29 64 -64c0 -28 -18 -51 -43 -60v-68z" />
+    <glyph glyph-name="devices" unicode="devices" 
+d="M469 149v150h-85v-150h85zM491 341c12 0 21 -9 21 -21v-213c0 -12 -9 -22 -21 -22h-128c-12 0 -22 10 -22 22v213c0 12 10 21 22 21h128zM85 384v-235h214v-64h-299v64h43v235c0 23 19 43 42 43h384v-43h-384z" />
+    <glyph glyph-name="devices_other" unicode="devices_other" 
+d="M448 128v171h-85v-171h85zM469 341c11 0 22 -10 22 -21v-213c0 -11 -11 -22 -22 -22h-128c-11 0 -21 11 -21 22v213c0 11 10 21 21 21h128zM235 139c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM277 256v-38c13 -12 22 -28 22 -47s-9 -36 -22 -48
+v-38h-85v38c-13 12 -21 29 -21 48s8 35 21 47v38h85zM64 384v-256h85v-43h-85c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h384v-43h-384z" />
+    <glyph glyph-name="dialer_sip" unicode="dialer_sip" 
+d="M427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12zM427 405v22h-22v-22h22z
+M384 448h64v-64h-43v-43h-21v107zM320 405v-64h-64v22h43v21h-43v64h64v-21h-43v-22h43zM363 448v-107h-22v107h22z" />
+    <glyph glyph-name="dialpad" unicode="dialpad" 
+d="M256 491c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 363c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 363c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 235c23 0 43 -20 43 -43
+s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 235c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 405c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43zM128 235c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z
+M128 363c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM128 491c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 107c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z" />
+    <glyph glyph-name="directions" unicode="directions" 
+d="M299 203l74 74l-74 75v-53h-107c-12 0 -21 -10 -21 -22v-85h42v64h86v-53zM463 271c8 -9 8 -22 0 -30l-192 -192c-8 -8 -22 -8 -30 0l-192 192c-8 8 -8 22 0 30l192 192c8 8 22 8 30 0z" />
+    <glyph glyph-name="directions_bike" unicode="directions_bike" 
+d="M405 75c41 0 75 33 75 74s-34 75 -75 75s-74 -34 -74 -75s33 -74 74 -74zM405 256c60 0 107 -47 107 -107s-47 -106 -107 -106s-106 46 -106 106s46 107 106 107zM230 288l47 -49v-132h-42v106l-69 60c-9 6 -12 17 -12 30c0 11 3 21 12 30l60 60c6 9 17 12 30 12
+s23 -3 34 -12l41 -41c19 -19 44 -32 76 -32v-43c-45 0 -80 17 -108 45l-17 17zM107 75c41 0 74 33 74 74s-33 75 -74 75s-75 -34 -75 -75s34 -74 75 -74zM107 256c60 0 106 -47 106 -107s-46 -106 -106 -106s-107 46 -107 106s47 107 107 107zM331 395c-23 0 -43 19 -43 42
+s20 43 43 43s42 -20 42 -43s-19 -42 -42 -42z" />
+    <glyph glyph-name="directions_boat" unicode="directions_boat" 
+d="M128 384v-85l128 42l128 -42v85h-256zM84 107l-40 142c-4.78212 14.3464 3.99001 23.6633 14 27l27 9v99c0 23 20 43 43 43h64v64h128v-64h64c23 0 43 -20 43 -43v-99l27 -9c10.0202 -3.34008 18.7871 -12.6386 14 -27l-40 -142h-1c-34 0 -65 18 -86 42
+c-21 -24 -51 -42 -85 -42s-64 18 -85 42c-21 -24 -52 -42 -86 -42h-1zM427 64h42v-43h-42c-29 0 -59 7 -86 21c-54 -28 -116 -28 -170 0c-27 -14 -57 -21 -86 -21h-42v43h42c30 0 60 10 86 28c52 -36 118 -36 170 0c26 -18 56 -28 86 -28z" />
+    <glyph glyph-name="directions_bus" unicode="directions_bus" 
+d="M384 277v107h-256v-107h256zM352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM85 171v213c0 75 77 85 171 85s171 -10 171 -85v-213c0 -19 -9 -36 -22 -48v-38
+c0 -12 -9 -21 -21 -21h-21c-12 0 -22 9 -22 21v22h-170v-22c0 -12 -10 -21 -22 -21h-21c-12 0 -21 9 -21 21v38c-13 12 -22 29 -22 48z" />
+    <glyph glyph-name="directions_car" unicode="directions_car" 
+d="M107 277h298l-32 96h-234zM373 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 384l44 -128v-171c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v22h-256v-22
+c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v171l44 128c4 13 17 21 31 21h234c14 0 27 -8 31 -21z" />
+    <glyph glyph-name="directions_railway" unicode="directions_railway" 
+d="M384 299v106h-256v-106h256zM256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM85 181v224c0 75 77 86 171 86s171 -11 171 -86v-224c0 -41 -34 -74 -75 -74l32 -32v-11h-256v11l32 32c-41 0 -75 33 -75 74z" />
+    <glyph glyph-name="directions_run" unicode="directions_run" 
+d="M211 99l-149 29l8 43l105 -21l34 173l-39 -15v-73h-42v100l111 47c6 0 11 2 17 2c15 0 27 -8 36 -21l21 -34c17 -30 51 -51 92 -51v-43c-47 0 -89 21 -117 53l-13 -64l45 -42v-160h-43v128l-45 42zM288 395c-23 0 -43 20 -43 43s20 42 43 42s42 -19 42 -42
+s-19 -43 -42 -43z" />
+    <glyph glyph-name="directions_subway" unicode="directions_subway" 
+d="M384 277v107h-107v-107h107zM352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM235 277v107h-107v-107h107zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 469c94 0 171 -10 171 -85v-203c0 -41 -34 -74 -75 -74
+l32 -32v-11h-256v11l32 32c-41 0 -75 33 -75 74v203c0 75 77 85 171 85z" />
+    <glyph glyph-name="directions_transit" unicode="directions_transit" 
+d="M384 277v107h-107v-107h107zM352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM235 277v107h-107v-107h107zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 469c94 0 171 -10 171 -85v-203c0 -41 -34 -74 -75 -74
+l32 -32v-11h-256v11l32 32c-41 0 -75 33 -75 74v203c0 75 77 85 171 85z" />
+    <glyph glyph-name="directions_walk" unicode="directions_walk" 
+d="M209 322l-60 -301h45l39 171l44 -43v-128h43v160l-45 43l13 64c28 -32 70 -53 117 -53v42c-41 0 -74 22 -91 52l-22 34c-9 13 -21 21 -36 21c-6 0 -11 -2 -17 -2l-111 -47v-100h43v72l38 15zM288 395c-23 0 -43 19 -43 42s20 43 43 43s43 -20 43 -43s-20 -42 -43 -42z
+" />
+    <glyph glyph-name="disc_full" unicode="disc_full" 
+d="M213 213c23 0 43 20 43 43s-20 43 -43 43s-42 -20 -42 -43s19 -43 42 -43zM213 427c94 0 171 -77 171 -171s-77 -171 -171 -171s-170 77 -170 171s76 171 170 171zM427 363h42v-107h-42v107zM427 171v42h42v-42h-42z" />
+    <glyph glyph-name="dns" unicode="dns" 
+d="M149 320c23 0 43 20 43 43s-20 42 -43 42s-42 -19 -42 -42s19 -43 42 -43zM427 448c12 0 21 -9 21 -21v-128c0 -12 -9 -22 -21 -22h-342c-12 0 -21 10 -21 22v128c0 12 9 21 21 21h342zM149 107c23 0 43 19 43 42s-20 43 -43 43s-42 -20 -42 -43s19 -42 42 -42zM427 235
+c12 0 21 -10 21 -22v-128c0 -12 -9 -21 -21 -21h-342c-12 0 -21 9 -21 21v128c0 12 9 22 21 22h342z" />
+    <glyph glyph-name="do_not_disturb" unicode="do_not_disturb" 
+d="M391 151c23 29 36 66 36 105c0 94 -77 171 -171 171c-39 0 -76 -13 -105 -36zM256 85c39 0 76 13 105 36l-240 240c-23 -29 -36 -66 -36 -105c0 -94 77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="do_not_disturb_alt" unicode="do_not_disturb_alt" 
+d="M256 85c94 0 171 77 171 171c0 38 -14 75 -37 105l-239 -239c30 -23 67 -37 105 -37zM85 256c0 -38 14 -75 37 -105l239 239c-30 23 -67 37 -105 37c-94 0 -171 -77 -171 -171zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="do_not_disturb_off" unicode="do_not_disturb_off" 
+d="M149 235h74l-43 42h-31v-42zM48 464l416 -416l-28 -27l-59 60c-34 -24 -76 -38 -121 -38c-118 0 -213 95 -213 213c0 45 14 87 38 121l-60 59zM363 277h-74l-154 154c34 24 76 38 121 38c118 0 213 -95 213 -213c0 -45 -14 -87 -38 -121l-99 100h31v42z" />
+    <glyph glyph-name="do_not_disturb_on" unicode="do_not_disturb_on" 
+d="M363 235v42h-214v-42h214zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="dock" unicode="dock" 
+d="M341 192v213h-170v-213h170zM341 490c23 0 43 -19 43 -42v-299c0 -23 -20 -42 -43 -42h-170c-23 0 -43 19 -43 42v299c0 23 20 43 43 43zM171 21v43h170v-43h-170z" />
+    <glyph glyph-name="domain" unicode="domain" 
+d="M384 192v-43h-43v43h43zM384 277v-42h-43v42h43zM427 107v213h-171v-43h43v-42h-43v-43h43v-43h-43v-42h171zM213 363v42h-42v-42h42zM213 277v43h-42v-43h42zM213 192v43h-42v-43h42zM213 107v42h-42v-42h42zM128 363v42h-43v-42h43zM128 277v43h-43v-43h43zM128 192v43
+h-43v-43h43zM128 107v42h-43v-42h43zM256 363h213v-299h-426v384h213v-85z" />
+    <glyph glyph-name="done" unicode="done" 
+d="M192 166l226 227l30 -30l-256 -256l-119 119l29 30z" />
+    <glyph glyph-name="done_all" unicode="done_all" 
+d="M9 226l30 30l119 -119l-30 -30zM474 393l31 -30l-256 -256l-120 119l31 30l89 -89zM384 363l-135 -136l-30 30l135 136z" />
+    <glyph glyph-name="donut_large" unicode="donut_large" 
+d="M277 108c64 9 119 63 128 127h64c-10 -107 -85 -182 -192 -192v65zM405 277c-9 64 -64 118 -128 127v65c107 -10 182 -85 192 -192h-64zM235 404c-64 -10 -128 -73 -128 -148s64 -138 128 -148v-65c-107 11 -192 102 -192 213s85 202 192 213v-65z" />
+    <glyph glyph-name="donut_small" unicode="donut_small" 
+d="M277 195c21 6 33 22 40 40h152c-10 -101 -85 -182 -192 -192v152zM317 277c-7 18 -19 34 -40 40v152c107 -10 182 -91 192 -192h-152zM235 317c-21 -9 -43 -33 -43 -61s22 -52 43 -61v-152c-107 11 -192 102 -192 213s85 202 192 213v-152z" />
+    <glyph glyph-name="drafts" unicode="drafts" 
+d="M256 235l176 110l-176 103l-176 -103zM469 341v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v213c0 15 8 30 20 37l193 113l193 -113c12 -7 20 -22 20 -37z" />
+    <glyph glyph-name="drag_handle" unicode="drag_handle" 
+d="M85 192v43h342v-43h-342zM427 320v-43h-342v43h342z" />
+    <glyph glyph-name="drive_eta" unicode="drive_eta" 
+d="M107 299h298l-32 96h-234zM373 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 405l44 -128v-170c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v21h-256v-21
+c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v170l44 128c4 13 17 22 31 22h234c14 0 27 -9 31 -22z" />
+    <glyph glyph-name="dvr" unicode="dvr" 
+d="M149 256v-43h-42v43h42zM149 341v-42h-42v42h42zM405 256v-43h-234v43h234zM405 341v-42h-234v42h234zM448 149v256h-384v-256h384zM448 448c23 0 43 -20 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-23 0 -43 19 -43 42v256c0 23 20 43 43 43h384z
+" />
+    <glyph glyph-name="edit" unicode="edit" 
+d="M442 362l-39 -39l-80 80l39 39c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM64 144l236 236l80 -80l-236 -236h-80v80z" />
+    <glyph glyph-name="edit_location" unicode="edit_location" 
+d="M318 351c3 3 3 8 0 11l-20 20c-3 3 -8 3 -11 0l-15 -15l31 -31zM223 256l71 71l-31 31l-71 -71v-31h31zM256 469c82 0 149 -67 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 82 67 149 149 149z" />
+    <glyph glyph-name="eject" unicode="eject" 
+d="M256 405l142 -213h-284zM107 149h298v-42h-298v42z" />
+    <glyph glyph-name="email" unicode="email" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="enhanced_encryption" unicode="enhanced_encryption" 
+d="M341 171v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM190 384v-43h132v43c0 36 -30 66 -66 66s-66 -30 -66 -66zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107s107 -48 107 -107
+v-43h21z" />
+    <glyph glyph-name="equalizer" unicode="equalizer" 
+d="M341 320h86v-235h-86v235zM85 85v171h86v-171h-86zM213 85v342h86v-342h-86z" />
+    <glyph glyph-name="error" unicode="error" 
+d="M277 235v128h-42v-128h42zM277 149v43h-42v-43h42zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="error_outline" unicode="error_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM235 363h42v-128h-42v128zM235 192h42v-43h-42v43z" />
+    <glyph glyph-name="euro_symbol" unicode="euro_symbol" 
+d="M320 117c35 0 66 13 90 34l38 -38c-34 -31 -79 -49 -128 -49c-84 0 -155 54 -181 128h-75v43h65c-1 7 -1 14 -1 21s0 14 1 21h-65v43h75c26 74 97 128 181 128c49 0 94 -18 128 -49l-38 -38c-24 21 -56 34 -90 34c-53 0 -100 -31 -123 -75h123v-43h-137
+c-1 -7 -2 -14 -2 -21s1 -14 2 -21h137v-43h-123c23 -44 69 -75 123 -75z" />
+    <glyph glyph-name="ev_station" unicode="ev_station" 
+d="M171 128l85 149h-43v107l-85 -160h43v-96zM384 299c12 0 21 9 21 21s-9 21 -21 21s-21 -9 -21 -21s9 -21 21 -21zM422 358c10 -10 15 -23 15 -38v-203c0 -29 -24 -53 -53 -53s-53 24 -53 53v107h-32v-160h-214v341c0 23 20 43 43 43h128c23 0 43 -20 43 -43v-149h21
+c23 0 43 -20 43 -43v-96c0 -12 9 -21 21 -21s21 9 21 21v154c-7 -3 -13 -4 -21 -4c-29 0 -53 24 -53 53c0 23 14 42 34 50l-45 45l23 22z" />
+    <glyph glyph-name="event" unicode="event" 
+d="M405 107v234h-298v-234h298zM341 491h43v-43h21c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43zM363 256v-107h-107v107h107z" />
+    <glyph glyph-name="event_available" unicode="event_available" 
+d="M405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21zM353 276l-127 -127l-68 68l23 23l45 -45l104 104z" />
+    <glyph glyph-name="event_busy" unicode="event_busy" 
+d="M405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21zM199 149l-23 23l52 52l-52 52l23 23l52 -52l52 52l22 -23l-52 -52l52 -52l-22 -23l-52 52z" />
+    <glyph glyph-name="event_note" unicode="event_note" 
+d="M299 213v-42h-150v42h150zM405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21zM363 299v-43h-214v43h214z" />
+    <glyph glyph-name="event_seat" unicode="event_seat" 
+d="M363 235h-214v170c0 23 20 43 43 43h128c23 0 43 -20 43 -43v-170zM43 299h64v-64h-64v64zM405 299h64v-64h-64v64zM85 64v128h342v-128h-64v64h-214v-64h-64z" />
+    <glyph glyph-name="exit_to_app" unicode="exit_to_app" 
+d="M405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v85h43v-85h298v298h-298v-85h-43v85c0 23 19 43 43 43h298zM215 179l55 56h-206v42h206l-55 56l30 30l107 -107l-107 -107z" />
+    <glyph glyph-name="expand_less" unicode="expand_less" 
+d="M256 341l128 -128l-30 -30l-98 98l-98 -98l-30 30z" />
+    <glyph glyph-name="expand_more" unicode="expand_more" 
+d="M354 329l30 -30l-128 -128l-128 128l30 30l98 -98z" />
+    <glyph glyph-name="explicit" unicode="explicit" 
+d="M320 320v43h-128v-214h128v43h-85v43h85v42h-85v43h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="explore" unicode="explore" 
+d="M303 209l81 175l-175 -81l-81 -175zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM256 279c13 0 23 -10 23 -23s-10 -23 -23 -23s-23 10 -23 23s10 23 23 23z" />
+    <glyph glyph-name="exposure" unicode="exposure" 
+d="M427 85v342l-342 -342h342zM107 405v-42h128v42h-128zM427 469c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342zM320 149h-43v43h43v43h43v-43h42v-43h-42v-42h-43v42z" />
+    <glyph glyph-name="exposure_neg_1" unicode="exposure_neg_&#x31;" 
+d="M405 128h-42v227l-64 -22v36l100 36h6v-277zM85 277h171v-42h-171v42z" />
+    <glyph glyph-name="exposure_neg_2" unicode="exposure_neg_&#x32;" 
+d="M43 277h170v-42h-170v42zM351 405c51.6805 0 86 -23.4377 86 -75c0 -8 -1 -17 -4 -25s-6 -17 -11 -25c-10.9564 -17.5303 -25.11 -35.11 -40 -50l-61 -66h127v-36h-184v32l89 97c13.5256 13.5256 22.2329 25.3882 31 40c5.07755 8.46258 7 15.5272 7 28c0 6 0 13 -2 18
+c-5.9589 14.8973 -17.1504 26 -38 26c-30.4379 0 -46 -18.4676 -46 -49h-46c0 25.6678 10.3448 46.3448 24 60c15.6925 15.6925 36.8462 25 68 25z" />
+    <glyph glyph-name="exposure_plus_1" unicode="exposure_plus_&#x31;" 
+d="M427 128h-43v227l-64 -22v36l100 36h7v-277zM213 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="exposure_plus_2" unicode="exposure_plus_&#x32;" 
+d="M171 363v-86h85v-42h-85v-86h-43v86h-85v42h85v86h43zM342 164h127v-36h-184v32l89 97c13.5256 13.5256 22.2329 25.3882 31 40c4.82857 8.04762 8 16.6883 8 28c0 13.988 -4.98597 22.9813 -11 31c-6.38798 8.51731 -15.0381 13 -30 13
+c-15.4008 0 -27.3364 -6.33642 -35 -14c-6.99604 -6.99604 -11 -21.7099 -11 -35h-46c0 25.6678 10.3448 46.3448 24 60c8 8 17 15 29 19s25 6 40 6c14 0 25 -2 36 -5c10 -4 20 -8 27 -15c13.4025 -11.4878 23 -30.9925 23 -55c0 -20.2222 -7.3586 -36.1738 -16 -50
+c-5 -8 -10 -17 -17 -25s-15 -17 -23 -25z" />
+    <glyph glyph-name="exposure_zero" unicode="exposure_zero" 
+d="M299 296c0 25.8021 -1.44348 42.6652 -11 57c-4 6 -9 9 -14 12s-11 4 -18 4s-13 -1 -18 -4s-10 -6 -14 -12c-9.53524 -14.3029 -11 -31.2267 -11 -57v-57c0 -34.3202 4.66098 -58.7966 25 -71c5 -3 11 -4 18 -4c16.7682 0 24.8052 6.20777 32 17
+c8.87006 13.3051 12 34.4084 12 58v57h-1zM168 289c0 68.5293 21.3782 116 88 116c46.5088 0 71.845 -23.9186 82 -62c4 -15 7 -32 7 -54v-44h-1c0 -39.7402 -7.68654 -69.0255 -24 -90c-8 -9 -17 -17 -28 -21s-23 -6 -36 -6s-25 2 -36 6s-20 12 -28 21
+c-17.4464 19.6272 -24 51.2554 -24 90v44z" />
+    <glyph glyph-name="extension" unicode="extension" 
+d="M437 277c29 0 54 -24 54 -53s-25 -53 -54 -53h-32v-86c0 -23 -19 -42 -42 -42h-81v32c0 32 -26 57 -58 57s-58 -25 -58 -57v-32h-81c-23 0 -42 19 -42 42v81h32c32 0 57 26 57 58s-25 58 -57 58h-32v81c0 23 19 42 42 42h86v32c0 29 24 54 53 54s53 -25 53 -54v-32h86
+c23 0 42 -19 42 -42v-86h32z" />
+    <glyph glyph-name="face" unicode="face" 
+d="M256 85c94 0 171 77 171 171c0 17 -3 33 -7 48c-15 -4 -31 -5 -48 -5c-72 0 -135 35 -174 90c-21 -51 -62 -93 -112 -115c-1 -6 -1 -12 -1 -18c0 -94 77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM320 261
+c15 0 27 -11 27 -26s-12 -27 -27 -27s-27 12 -27 27s12 26 27 26zM192 261c15 0 27 -11 27 -26s-12 -27 -27 -27s-27 12 -27 27s12 26 27 26z" />
+    <glyph glyph-name="fast_forward" unicode="fast_forward" 
+d="M277 384l182 -128l-182 -128v256zM85 128v256l182 -128z" />
+    <glyph glyph-name="fast_rewind" unicode="fast_rewind" 
+d="M245 256l182 128v-256zM235 128l-182 128l182 128v-256z" />
+    <glyph glyph-name="favorite" unicode="favorite" 
+d="M256 57l-31 28c-110 100 -182 165 -182 246c0 66 51 117 117 117c37 0 73 -18 96 -45c23 27 59 45 96 45c66 0 117 -51 117 -117c0 -81 -72 -147 -182 -247z" />
+    <glyph glyph-name="favorite_border" unicode="favorite_border" 
+d="M258 116c102 92 169 153 169 215c0 43 -32 74 -75 74c-33 0 -65 -21 -76 -50h-40c-11 29 -43 50 -76 50c-43 0 -75 -31 -75 -74c0 -62 67 -123 169 -215l2 -2zM352 448c66 0 117 -51 117 -117c0 -81 -72 -146 -182 -246l-31 -28l-31 27c-110 100 -182 166 -182 247
+c0 66 51 117 117 117c37 0 73 -18 96 -45c23 27 59 45 96 45z" />
+    <glyph glyph-name="featured_play_list" unicode="featured_play_list" 
+d="M256 363v42h-192v-42h192zM256 277v43h-192v-43h192zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="featured_video" unicode="featured_video" 
+d="M256 256v149h-192v-149h192zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="feedback" unicode="feedback" 
+d="M277 299v85h-42v-85h42zM277 213v43h-42v-43h42zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="fiber_dvr" unicode="fiber_dvr" 
+d="M448 267v21c0 18 -14 32 -32 32h-75v-128h32v43h25l18 -43h32l-19 45c11 5 19 17 19 30zM269 192l38 128h-32l-22 -73l-21 73h-32l37 -128h32zM171 224v64c0 18 -14 32 -32 32h-75v-128h75c18 0 32 14 32 32zM448 448c24 0 43 -19 43 -43v-298c0 -23 -19 -43 -43 -43
+h-384c-24 0 -43 20 -43 43v298c0 24 19 43 43 43h384zM96 288h43v-64h-43v64zM373 288h43v-21h-43v21z" />
+    <glyph glyph-name="fiber_manual_record" unicode="fiber_manual_record" 
+d="M85 256c0 94 77 171 171 171s171 -77 171 -171s-77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="fiber_new" unicode="fiber_new" 
+d="M437 213v107h-26v-96h-24v75h-27v-75h-24v96h-27v-107c0 -12 10 -21 22 -21h85c12 0 21 9 21 21zM288 293v27h-85v-128h85v27h-53v23h53v27h-53v24h53zM181 192v128h-26v-75l-54 75h-26v-128h26v75l55 -75h25zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43
+h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z" />
+    <glyph glyph-name="fiber_pin" unicode="fiber_pin" 
+d="M427 192v128h-27v-75l-53 75h-27v-128h27v75l54 -75h26zM267 192v128h-32v-128h32zM192 267v21c0 18 -14 32 -32 32h-75v-128h32v43h43c18 0 32 14 32 32zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z
+M117 288h43v-21h-43v21z" />
+    <glyph glyph-name="fiber_smart_record" unicode="fiber_smart_record" 
+d="M363 421c74 -19 128 -85 128 -165s-54 -146 -128 -165v44c50 17 85 65 85 121s-35 104 -85 121v44zM21 256c0 94 77 171 171 171s171 -77 171 -171s-77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="file_download" unicode="file_download" 
+d="M107 128h298v-43h-298v43zM405 320l-149 -149l-149 149h85v128h128v-128h85z" />
+    <glyph glyph-name="file_upload" unicode="file_upload" 
+d="M107 128h298v-43h-298v43zM192 171v128h-85l149 149l149 -149h-85v-128h-128z" />
+    <glyph glyph-name="filter" unicode="filter" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43zM340 292l76 -100h-235l59 75l42 -50z" />
+    <glyph glyph-name="filter_1" unicode="filter_&#x31;" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM299 192v171h-43v42h85v-213h-42zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_2" unicode="filter_&#x32;" 
+d="M363 235v-43h-128v85c0 24 19 43 42 43h43v43h-85v42h85c23 0 43 -18 43 -42v-43c0 -24 -20 -43 -43 -43h-43v-42h86zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405
+v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_3" unicode="filter_&#x33;" 
+d="M363 235c0 -24 -20 -43 -43 -43h-85v43h85v42h-43v43h43v43h-85v42h85c23 0 43 -18 43 -42v-32c0 -18 -14 -32 -32 -32c18 0 32 -14 32 -32v-32zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299
+c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299z" />
+    <glyph glyph-name="filter_4" unicode="filter_&#x34;" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM320 192v85h-85v128h42v-85h43v85h43v-213h-43zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_5" unicode="filter_&#x35;" 
+d="M363 235c0 -24 -20 -43 -43 -43h-85v43h85v42h-85v128h128v-42h-86v-43h43c23 0 43 -19 43 -43v-42zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299
+c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299z" />
+    <glyph glyph-name="filter_6" unicode="filter_&#x36;" 
+d="M277 277v-42h43v42h-43zM277 192c-23 0 -42 19 -42 43v128c0 24 19 42 42 42h86v-42h-86v-43h43c23 0 43 -19 43 -43v-42c0 -24 -20 -43 -43 -43h-43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299
+c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_7" unicode="filter_&#x37;" 
+d="M277 192h-42l85 171h-85v42h128v-42zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_8" unicode="filter_&#x38;" 
+d="M277 277v-42h43v42h-43zM277 363v-43h43v43h-43zM277 192c-23 0 -42 19 -42 43v32c0 18 14 32 32 32c-18 0 -32 14 -32 32v32c0 24 19 42 42 42h43c23 0 43 -18 43 -42v-32c0 -18 -14 -32 -32 -32c18 0 32 -14 32 -32v-32c0 -24 -20 -43 -43 -43h-43zM448 149v299h-299
+v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_9" unicode="filter_&#x39;" 
+d="M320 320v43h-43v-43h43zM320 405c23 0 43 -18 43 -42v-128c0 -24 -20 -43 -43 -43h-85v43h85v42h-43c-23 0 -42 19 -42 43v43c0 24 19 42 42 42h43zM448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299
+c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_9_plus" unicode="filter_&#x39;_plus" 
+d="M448 320v128h-299v-299h299v128h-43v-42h-42v42h-43v43h43v43h42v-43h43zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM235 320h21v21h-21v-21zM299 256c0 -24 -20 -43 -43 -43h-64v43h64v21h-21
+c-23 0 -43 19 -43 43v21c0 24 20 43 43 43h21c23 0 43 -19 43 -43v-85zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_b_and_w" unicode="filter_b_and_w" 
+d="M405 107v298h-149v-128zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM256 277l-149 -170h149v170z" />
+    <glyph glyph-name="filter_center_focus" unicode="filter_center_focus" 
+d="M256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM405 107v85h43v-85c0 -23 -20 -43 -43 -43h-85v43h85zM405 448c23 0 43 -20 43 -43v-85h-43v85h-85v43h85zM107 405v-85h-43v85c0 23 20 43 43 43h85v-43h-85zM107 192v-85h85v-43h-85
+c-23 0 -43 20 -43 43v85h43z" />
+    <glyph glyph-name="filter_drama" unicode="filter_drama" 
+d="M405 128c35 0 64 29 64 64s-29 64 -64 64h-32v11c0 65 -52 117 -117 117c-38 0 -72 -18 -94 -47c54 -15 94 -65 94 -124h-43c0 47 -38 86 -85 86s-85 -39 -85 -86s38 -85 85 -85h277zM413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277
+c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="filter_frames" unicode="filter_frames" 
+d="M384 341h-256v-213h256zM427 85v299h-96l-74 75l-75 -75h-97v-299h342zM427 427c23 0 42 -20 42 -43v-299c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h86l85 85l85 -85h86z" />
+    <glyph glyph-name="filter_hdr" unicode="filter_hdr" 
+d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" />
+    <glyph glyph-name="filter_list" unicode="filter_list" 
+d="M128 235v42h256v-42h-256zM64 384h384v-43h-384v43zM213 128v43h86v-43h-86z" />
+    <glyph glyph-name="filter_none" unicode="filter_none" 
+d="M448 149v299h-299v-299h299zM448 491c23 0 43 -20 43 -43v-299c0 -23 -20 -42 -43 -42h-299c-23 0 -42 19 -42 42v299c0 23 19 43 42 43h299zM64 405v-341h341v-43h-341c-23 0 -43 20 -43 43v341h43z" />
+    <glyph glyph-name="filter_tilt_shift" unicode="filter_tilt_shift" 
+d="M121 91l30 30c24 -18 53 -30 84 -34v-43c-43 4 -82 21 -114 47zM277 87c31 4 60 16 83 34l31 -30c-32 -26 -71 -43 -114 -47v43zM391 151c18 24 30 52 34 83h43c-4 -43 -21 -81 -47 -113zM320 256c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64z
+M87 235c4 -31 16 -60 34 -83l-30 -31c-26 32 -43 71 -47 114h43zM121 361c-18 -24 -30 -53 -34 -84h-43c4 43 21 82 47 114zM425 277c-4 31 -16 60 -34 84l30 30c26 -32 43 -71 47 -114h-43zM391 421l-30 -30c-24 18 -53 30 -84 34v43c43 -4 82 -21 114 -47zM235 425
+c-31 -4 -60 -16 -84 -34l-30 30c32 26 71 43 114 47v-43z" />
+    <glyph glyph-name="filter_vintage" unicode="filter_vintage" 
+d="M256 171c47 0 85 38 85 85s-38 85 -85 85s-85 -38 -85 -85s38 -85 85 -85zM49 137c0 49.2164 31.3621 102.121 82 119c-6 2 -12 6 -18 9c-41 24 -64 66 -64 110c38 22 87 24 128 0c6 -3 12 -7 17 -11c-1 7 -2 13 -2 20c0 47 26 89 64 111c38 -22 64 -64 64 -111
+c0 -7 -1 -13 -2 -20c5 4 11 8 17 11c41 24 90 22 128 0c0 -44 -23 -86 -64 -110c-6 -3 -12 -7 -18 -9c6 -2 12 -6 18 -9c41 -24 64 -66 64 -110c-38 -22 -87 -24 -128 0c-6 3 -12 7 -17 11c1 -7 2 -13 2 -20c0 -47 -26 -89 -64 -111c-38 22 -64 64 -64 111c0 7 1 13 2 20
+c-5 -4 -11 -8 -17 -11c-41 -24 -90 -22 -128 0z" />
+    <glyph glyph-name="find_in_page" unicode="find_in_page" 
+d="M192 235c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64zM427 94l-82 82c11 17 18 37 18 59c0 59 -48 106 -107 106s-107 -47 -107 -106s48 -107 107 -107c22 0 42 7 59 18l94 -95c-7 -5 -15 -8 -25 -8h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42
+h171l128 -128v-247z" />
+    <glyph glyph-name="find_replace" unicode="find_replace" 
+d="M355 189l103 -104l-31 -31l-104 103c-25 -18 -55 -29 -88 -29c-41 0 -79 17 -106 44l-44 -44v128h128l-54 -54c19 -19 47 -31 76 -31c52 0 94 36 104 85h43c-3 -25 -13 -48 -27 -67zM235 384c-52 0 -95 -36 -105 -85h-43c10 72 73 128 148 128c41 0 78 -17 105 -44l44 44
+v-128h-128l54 54c-19 19 -46 31 -75 31z" />
+    <glyph glyph-name="fingerprint" unicode="fingerprint" 
+d="M318 43h-3c-34 9 -56 22 -79 45c-30 30 -46 69 -46 111c0 35 29 63 65 63s66 -28 66 -63c0 -23 19 -41 44 -41s45 18 45 41c0 80 -70 146 -155 146c-61 0 -116 -34 -141 -86c-8 -17 -12 -38 -12 -60c0 -17 1 -43 14 -77c4.57857 -13.7357 -15.4693 -18.3268 -20 -7
+c-10 28 -16 55 -16 84c0 26 5 49 15 69c28 60 91 99 160 99c97 0 176 -76 176 -168c0 -35 -30 -62 -66 -62s-65 27 -65 62c0 23 -20 42 -45 42s-44 -19 -44 -42c0 -36 14 -70 40 -96c20 -20 40 -31 70 -39c6 -1 8 -7 7 -13c-1 -5 -6 -8 -10 -8zM265 199
+c0 -48.7573 40.2888 -91 96 -91c9.9641 0 32.7732 7.36098 35 -6c1 -6 -3 -12 -9 -13c-12 -2 -23 -2 -26 -2c-25 0 -48 6 -66 19c-32 22 -51 56 -51 93c0 6 5 11 11 11s10 -5 10 -11zM208 47c-3 0 -5 1 -7 3c-19 19 -29 31 -43 57c-15 26 -23 58 -23 92c0 63 54 115 121 115
+s121 -52 121 -115c0 -6 -5 -10 -11 -10s-11 4 -11 10c0 52 -44 94 -99 94s-99 -42 -99 -94c0 -31 6 -59 19 -82c14 -25 24 -35 40 -52c4 -4 4 -11 0 -15c-2 -2 -5 -3 -8 -3zM75 305c-8.81177 0 -13.8926 7.8456 -9 16c21 30 48 54 80 70c67 35 153 35 220 0
+c32 -16 59 -39 80 -69c3 -5 2 -12 -3 -15s-12 -2 -15 3c-19 27 -43 47 -72 62c-61 31 -139 32 -200 0c-29 -15 -54 -36 -73 -63c-2 -3 -5 -4 -8 -4zM380 417c-2 0 -4 0 -5 1c-41 21 -77 30 -119 30s-83 -10 -119 -30c-11.6907 -7.0144 -21.6392 12.0165 -10 19
+c40 22 83 32 129 32c45 0 85 -10 129 -32c9.10556 -5.46333 5.20303 -20 -5 -20z" />
+    <glyph glyph-name="first_page" unicode="first_page" 
+d="M128 384h43v-256h-43v256zM393 158l-30 -30l-128 128l128 128l30 -30l-98 -98z" />
+    <glyph glyph-name="fitness_center" unicode="fitness_center" 
+d="M439 195l30 -31l-45 -45l30 -31l-30 -30l-31 30l-45 -45l-31 30l-30 -30l-31 30l76 76l-183 183l-76 -76l-30 31l30 30l-30 31l45 45l-30 31l30 30l31 -30l45 45l31 -30l30 30l31 -30l-76 -76l183 -183l76 76l30 -31z" />
+    <glyph glyph-name="flag" unicode="flag" 
+d="M307 384h120v-213h-150l-8 42h-120v-149h-42v363h192z" />
+    <glyph glyph-name="flare" unicode="flare" 
+d="M235 21v128h42v-128h-42zM120 150l46 46l30 -30l-46 -46zM316 166l30 30l46 -46l-30 -30zM256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM363 277h128v-42h-128v42zM392 362l-46 -46l-30 30l46 46zM277 491v-128h-42v128h42zM196 346l-30 -30
+l-46 46l30 30zM149 277v-42h-128v42h128z" />
+    <glyph glyph-name="flash_auto" unicode="flash_auto" 
+d="M359 349h50l-25 78zM405 469l69 -192h-41l-15 43h-68l-15 -43h-41l69 192h42zM64 469h213l-85 -192h85l-149 -256v192h-64v256z" />
+    <glyph glyph-name="flash_off" unicode="flash_off" 
+d="M363 299l-33 -57l-181 181v46h214l-86 -170h86zM70 448l335 -336l-27 -27l-88 89l-77 -131v192h-64v79l-106 107z" />
+    <glyph glyph-name="flash_on" unicode="flash_on" 
+d="M149 469h214l-86 -170h86l-150 -256v192h-64v234z" />
+    <glyph glyph-name="flight" unicode="flight" 
+d="M217 320zM448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117c0 18 14 32 32 32s32 -14 32 -32v-117l171 -107v-42z" />
+    <glyph glyph-name="flight_land" unicode="flight_land" 
+d="M299 204c-68.2362 18.7638 -137.045 36.9549 -206 55l-34 10v110l31 -8l20 -50l106 -28v176l41 -11l59 -192l113 -30c17 -5 27 -23 23 -40c-5 -17 -22 -26 -39 -22zM53 107h406v-43h-406v43z" />
+    <glyph glyph-name="flight_takeoff" unicode="flight_takeoff" 
+d="M471 306c4 -17 -6 -34 -23 -39c-68.7788 -18.2212 -137.501 -36.499 -206 -55l-113 -30l-34 -10c-18.76 31.9067 -37.3464 63.9869 -56 96l31 8l42 -32l106 28l-88 153l41 11l147 -137l114 30c17 5 35 -6 39 -23zM53 107h406v-43h-406v43z" />
+    <glyph glyph-name="flip" unicode="flip" 
+d="M405 64v43h43c0 -23 -20 -43 -43 -43zM405 235v42h43v-42h-43zM320 405v43h43v-43h-43zM405 149v43h43v-43h-43zM235 21v470h42v-470h-42zM405 448c23 0 43 -20 43 -43h-43v43zM64 405c0 23 20 43 43 43h85v-43h-85v-298h85v-43h-85c-23 0 -43 20 -43 43v298zM405 320v43
+h43v-43h-43zM320 64v43h43v-43h-43z" />
+    <glyph glyph-name="flip_to_back" unicode="flip_to_back" 
+d="M320 149v43h43v-43h-43zM320 405v43h43v-43h-43zM107 363v-256h256v-43h-256c-24 0 -43 20 -43 43v256h43zM405 149v43h43c0 -23 -20 -43 -43 -43zM405 320v43h43v-43h-43zM405 235v42h43v-42h-43zM192 149c-24 0 -43 20 -43 43h43v-43zM277 448v-43h-42v43h42zM405 448
+c23 0 43 -20 43 -43h-43v43zM277 192v-43h-42v43h42zM192 448v-43h-43c0 23 19 43 43 43zM192 277v-42h-43v42h43zM192 363v-43h-43v43h43z" />
+    <glyph glyph-name="flip_to_front" unicode="flip_to_front" 
+d="M149 64v43h43v-43h-43zM235 64v43h42v-43h-42zM405 192v213h-213v-213h213zM405 448c23 0 43 -20 43 -43v-213c0 -23 -20 -43 -43 -43h-213c-24 0 -43 20 -43 43v213c0 23 19 43 43 43h213zM320 64v43h43v-43h-43zM64 320v43h43v-43h-43zM107 64c-24 0 -43 20 -43 43h43
+v-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z" />
+    <glyph glyph-name="folder" unicode="folder" 
+d="M213 427l43 -43h171c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128z" />
+    <glyph glyph-name="folder_open" unicode="folder_open" 
+d="M427 128v213h-342v-213h342zM427 384c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="folder_shared" unicode="folder_shared" 
+d="M405 149v22c0 28 -57 42 -85 42s-85 -14 -85 -42v-22h170zM320 320c-23 0 -43 -20 -43 -43s20 -42 43 -42s43 19 43 42s-20 43 -43 43zM427 384c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="folder_special" unicode="folder_special" 
+d="M383 149l-17 71l55 48l-72 6l-29 67l-29 -67l-72 -6l55 -48l-17 -71l63 37zM427 384c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h128l43 -43h171z" />
+    <glyph glyph-name="font_download" unicode="font_download" 
+d="M340 117h45l-109 278h-40l-109 -278h45l24 64h120zM427 469c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342zM212 224l44 118l44 -118h-88z" />
+    <glyph glyph-name="format_align_center" unicode="format_align_center" 
+d="M64 448h384v-43h-384v43zM149 363h214v-43h-214v43zM64 235v42h384v-42h-384zM64 64v43h384v-43h-384zM149 192h214v-43h-214v43z" />
+    <glyph glyph-name="format_align_justify" unicode="format_align_justify" 
+d="M64 448h384v-43h-384v43zM64 320v43h384v-43h-384zM64 235v42h384v-42h-384zM64 149v43h384v-43h-384zM64 64v43h384v-43h-384z" />
+    <glyph glyph-name="format_align_left" unicode="format_align_left" 
+d="M64 448h384v-43h-384v43zM64 64v43h384v-43h-384zM64 235v42h384v-42h-384zM320 363v-43h-256v43h256zM320 192v-43h-256v43h256z" />
+    <glyph glyph-name="format_align_right" unicode="format_align_right" 
+d="M64 448h384v-43h-384v43zM192 320v43h256v-43h-256zM64 235v42h384v-42h-384zM192 149v43h256v-43h-256zM64 64v43h384v-43h-384z" />
+    <glyph glyph-name="format_bold" unicode="format_bold" 
+d="M288 181c18 0 32 14 32 32s-14 32 -32 32h-75v-64h75zM213 373v-64h64c18 0 32 14 32 32s-14 32 -32 32h-64zM333 282c28 -13 46 -41 46 -73c0 -45 -34 -81 -79 -81h-151v299h134c48 0 85 -38 85 -86c0 -22 -14 -45 -35 -59z" />
+    <glyph glyph-name="format_clear" unicode="format_clear" 
+d="M128 405h299v-64h-124l-34 -80l-45 44l15 36h-51l-60 60v4zM70 405l6 -5l308 -309l-27 -27l-121 121l-33 -78h-64l52 123l-148 148z" />
+    <glyph glyph-name="format_color_fill" unicode="format_color_fill" 
+d="M0 85h512v-85h-512v85zM405 267c0 0 43 -47 43 -75c0 -23 -20 -43 -43 -43s-42 20 -42 43c0 28 42 75 42 75zM111 299h205l-103 102zM353 321c13 -13 13 -33 0 -45l-117 -117c-6 -6 -15 -10 -23 -10s-16 4 -22 10l-118 117c-13 12 -13 32 0 45l110 110l-51 51l31 30z" />
+    <glyph glyph-name="format_color_reset" unicode="format_color_reset" 
+d="M112 400l312 -312l-27 -27l-57 56c-23 -20 -52 -32 -84 -32c-71 0 -128 57 -128 128c0 26 12 57 28 88l-71 71zM384 213c0 -10 -1 -19 -3 -28l-183 184c30 43 58 75 58 75s128 -146 128 -231z" />
+    <glyph glyph-name="format_color_text" unicode="format_color_text" 
+d="M205 256h102l-51 135zM235 448h42l117 -299h-48l-23 64h-134l-24 -64h-48zM0 85h512v-85h-512v85z" />
+    <glyph glyph-name="format_indent_decrease" unicode="format_indent_decrease" 
+d="M235 235v42h213v-42h-213zM235 320v43h213v-43h-213zM64 448h384v-43h-384v43zM64 64v43h384v-43h-384zM64 256l85 85v-170zM235 149v43h213v-43h-213z" />
+    <glyph glyph-name="format_indent_increase" unicode="format_indent_increase" 
+d="M235 235v42h213v-42h-213zM235 320v43h213v-43h-213zM64 448h384v-43h-384v43zM235 149v43h213v-43h-213zM64 341l85 -85l-85 -85v170zM64 64v43h384v-43h-384z" />
+    <glyph glyph-name="format_italic" unicode="format_italic" 
+d="M213 427h171v-64h-60l-72 -171h47v-64h-171v64h60l72 171h-47v64z" />
+    <glyph glyph-name="format_line_spacing" unicode="format_line_spacing" 
+d="M213 235v42h256v-42h-256zM213 107v42h256v-42h-256zM213 405h256v-42h-256v42zM128 363v-214h53l-74 -74l-75 74h53v214h-53l75 74l74 -74h-53z" />
+    <glyph glyph-name="format_list_bulleted" unicode="format_list_bulleted" 
+d="M149 405h299v-42h-299v42zM149 235v42h299v-42h-299zM149 107v42h299v-42h-299zM85 160c18 0 32 -15 32 -32s-15 -32 -32 -32s-32 15 -32 32s14 32 32 32zM85 416c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM85 288c18 0 32 -14 32 -32
+s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32z" />
+    <glyph glyph-name="format_list_numbered" unicode="format_list_numbered" 
+d="M149 235v42h299v-42h-299zM149 107v42h299v-42h-299zM149 405h299v-42h-299v42zM43 277v22h64v-20l-39 -44h39v-22h-64v20l38 44h-38zM64 341v64h-21v22h42v-86h-21zM43 149v22h64v-86h-64v22h42v10h-21v22h21v10h-42z" />
+    <glyph glyph-name="format_paint" unicode="format_paint" 
+d="M384 427h64v-171h-171v-192c0 -12 -9 -21 -21 -21h-43c-12 0 -21 9 -21 21v235h213v85h-21v-21c0 -12 -9 -22 -21 -22h-256c-12 0 -22 10 -22 22v85c0 12 10 21 22 21h256c12 0 21 -9 21 -21v-21z" />
+    <glyph glyph-name="format_quote" unicode="format_quote" 
+d="M299 149l42 86h-64v128h128v-128l-42 -86h-64zM128 149l43 86h-64v128h128v-128l-43 -86h-64z" />
+    <glyph glyph-name="format_shapes" unicode="format_shapes" 
+d="M228 240h56l-28 82zM293 213h-75l-15 -42h-35l73 192h30l72 -192h-34zM405 405h43v43h-43v-43zM448 64v43h-43v-43h43zM363 107v42h42v214h-42v42h-214v-42h-42v-214h42v-42h214zM107 64v43h-43v-43h43zM64 448v-43h43v43h-43zM491 363h-43v-214h43v-128h-128v43h-214
+v-43h-128v128h43v214h-43v128h128v-43h214v43h128v-128z" />
+    <glyph glyph-name="format_size" unicode="format_size" 
+d="M64 256v64h192v-64h-64v-149h-64v149h-64zM192 427h277v-64h-106v-256h-64v256h-107v64z" />
+    <glyph glyph-name="format_strikethrough" unicode="format_strikethrough" 
+d="M64 213v43h384v-43h-384zM107 427h298v-64h-106v-64h-86v64h-106v64zM213 107v64h86v-64h-86z" />
+    <glyph glyph-name="format_textdirection_l_to_r" unicode="format_textdirection_l_to_r" 
+d="M448 128l-85 -85v64h-256v42h256v64zM192 299c-47 0 -85 38 -85 85s38 85 85 85h171v-42h-43v-235h-43v235h-42v-235h-43v107z" />
+    <glyph glyph-name="format_textdirection_r_to_l" unicode="format_textdirection_r_to_l" 
+d="M171 149h256v-42h-256v-64l-86 85l86 85v-64zM213 299c-47 0 -85 38 -85 85s38 85 85 85h171v-42h-43v-235h-42v235h-43v-235h-43v107z" />
+    <glyph glyph-name="format_underlined" unicode="format_underlined" 
+d="M107 107h298v-43h-298v43zM256 149c-71 0 -128 57 -128 128v171h53v-171c0 -41 34 -74 75 -74s75 33 75 74v171h53v-171c0 -71 -57 -128 -128 -128z" />
+    <glyph glyph-name="forum" unicode="forum" 
+d="M363 256c0 -12 -10 -21 -22 -21h-213l-85 -86v299c0 12 9 21 21 21h277c12 0 22 -9 22 -21v-192zM448 384c12 0 21 -9 21 -21v-320l-85 85h-235c-12 0 -21 9 -21 21v43h277v192h43z" />
+    <glyph glyph-name="forward" unicode="forward" 
+d="M256 341v86l171 -171l-171 -171v86h-171v170h171z" />
+    <glyph glyph-name="forward_10" unicode="forward_&#x31;&#x30;" 
+d="M282 188c0 -3.2653 6.32517 -7 10 -7c2 0 5 0 7 2l4 5s2 4 2 6v43c0 0 -2 4 -2 6c0 2.75261 -8.21183 7 -11 7c-2 0 -4 -1 -6 -3l-4 -4s-3 -4 -3 -6v-43s3 -4 3 -6zM322 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2s-9 0 -13 2s-6 4 -10 6
+c-6.74403 3.37202 -9 19.7461 -9 30v15c0 6 0 13 2 17l7 13s6 6 10 6s9 2 13 2s9 0 13 -2s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM233 171h-20v70l-21 -6v15l38 12h3v-91zM85 235c0 94 77 170 171 170v86l107 -107l-107 -107v86c-70 0 -128 -58 -128 -128
+s58 -128 128 -128s128 58 128 128h43c0 -94 -77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="forward_30" unicode="forward_&#x33;&#x30;" 
+d="M85 235c0 94 77 170 171 170v86l107 -107l-107 -107v86c-70 0 -128 -58 -128 -128s58 -128 128 -128s128 58 128 128h43c0 -94 -77 -171 -171 -171s-171 77 -171 171zM284 188c0 -3.2653 6.32517 -7 10 -7c2 0 5 0 7 2l4 5s2 4 2 6v43c0 0 -2 4 -2 6
+c0 2.75261 -8.21183 7 -11 7c-2 0 -4 -1 -6 -3l-4 -4s-2 -4 -2 -6v-43s2 -4 2 -6zM326 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2c-10.126 0 -16.1493 4.57466 -23 8c-4 2 -4 7 -6 13s-3 11 -3 17v15c0 6 1 13 3 17l6 13s7 6 11 6s8 2 12 2s9 0 13 -2
+s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM213 224c8.11936 0 15 4.95913 15 13v4s-2 2 -2 4s-2 2 -4 2h-11s-2 -2 -4 -2s-2 -2 -2 -4v-4h-22c0 9.89385 8.81974 23 18 23c2 0 8 2 10 2c8.67272 0 17.6319 -2.81597 24 -6c5.06488 -2.53244 8 -12.109 8 -19v-7s-2 -4 -2 -6
+s-2 -4 -4 -4s-5 -3 -7 -5c4 -2 9 -4 11 -8s4 -9 4 -13s0 -9 -2 -11s-4 -6 -6 -8s-7 -4 -11 -4s-9 -2 -13 -2s-8 0 -10 2s-7 2 -11 4c-5.58093 2.79046 -9 13.5084 -9 21h18v-4s2 -2 2 -4s2 -2 4 -2h11s2 2 4 2s2 2 2 4v11s-2 2 -2 4s-2 2 -4 2h-13v15h8z" />
+    <glyph glyph-name="forward_5" unicode="forward_&#x35;" 
+d="M250 222c-1.79204 -0.716817 -7 -2.40231 -7 -4c0 -2 -2 -3 -2 -3h-13l5 47h51v-15h-37l-2 -19s2 0 2 2s3 1 3 3s2 0 4 0h4c4 0 9 -1 11 -3s6 -4 8 -6c4.43641 -4.43641 9 -13.6284 9 -23c0 -4 0 -9 -2 -11s-3 -7 -7 -11c-5.62284 -5.62284 -13.295 -8 -23 -8
+c-4 0 -9 0 -11 2s-6 2 -10 4c-5.5956 2.7978 -9 11.277 -9 19h17c0 -7.40446 5.29508 -10 13 -10c2 0 4 0 6 2l5 4s2 4 2 6v13l-2 4l-5 5s-4 2 -6 2h-4zM85 235c0 94 77 170 171 170v86l107 -107l-107 -107v86c-70 0 -128 -58 -128 -128s58 -128 128 -128s128 58 128 128h43
+c0 -94 -77 -171 -171 -171s-171 77 -171 171z" />
+    <glyph glyph-name="free_breakfast" unicode="free_breakfast" 
+d="M85 107h342v-43h-342v43zM427 341v64h-43v-64h43zM427 448c24 0 42 -19 42 -43v-64c0 -23 -18 -42 -42 -42h-43v-64c0 -47 -38 -86 -85 -86h-128c-47 0 -86 39 -86 86v213h342z" />
+    <glyph glyph-name="fullscreen" unicode="fullscreen" 
+d="M299 405h106v-106h-42v64h-64v42zM363 149v64h42v-106h-106v42h64zM107 299v106h106v-42h-64v-64h-42zM149 213v-64h64v-42h-106v106h42z" />
+    <glyph glyph-name="fullscreen_exit" unicode="fullscreen_exit" 
+d="M341 341h64v-42h-106v106h42v-64zM299 107v106h106v-42h-64v-64h-42zM171 341v64h42v-106h-106v42h64zM107 171v42h106v-106h-42v64h-64z" />
+    <glyph glyph-name="functions" unicode="functions" 
+d="M384 427v-64h-149l106 -107l-106 -107h149v-64h-256v43l139 128l-139 128v43h256z" />
+    <glyph glyph-name="g_translate" unicode="g_translate" 
+d="M448 85v278c0 12 -9 21 -21 21h-188l25 -86h41v22h23v-22h77v-22h-27c-7 -27 -22 -53 -41 -75l58 -57l-15 -16l-58 57l-19 -19l17 -59l-43 -43h150c12 0 21 9 21 21zM298 253c5 -10 13 -23 24 -36c26 31 33 59 33 59h-85l7 -23h21zM282 237l13 -47l12 11
+c-10 11 -18 23 -25 36zM237 286c0 4.92043 -0.140331 11.2807 -2 15h-84v-33h47c-3 -13 -16 -32 -45 -32c-28 0 -51 24 -51 52s23 52 51 52c16 0 26 -7 32 -13l2 -1l26 25l-2 1c-16 15 -36 23 -58 23c-48 0 -87 -39 -87 -87s39 -87 87 -87c49 0 84 35 84 85zM427 405
+c23 0 42 -19 42 -42v-278c0 -23 -19 -42 -42 -42h-171l-21 64h-150c-23 0 -42 19 -42 42v278c0 23 19 42 42 42h128l19 -64h195z" />
+    <glyph glyph-name="gamepad" unicode="gamepad" 
+d="M352 320h117v-128h-117l-64 64zM192 160l64 64l64 -64v-117h-128v117zM160 320l64 -64l-64 -64h-117v128h117zM320 352l-64 -64l-64 64v117h128v-117z" />
+    <glyph glyph-name="games" unicode="games" 
+d="M352 320h117v-128h-117l-64 64zM192 160l64 64l64 -64v-117h-128v117zM160 320l64 -64l-64 -64h-117v128h117zM320 352l-64 -64l-64 64v117h128v-117z" />
+    <glyph glyph-name="gavel" unicode="gavel" 
+d="M82 310l120 -121l-60 -60l-121 120zM263 491l120 -121l-60 -60l-121 120zM112 340l60 60l302 -302l-60 -60zM21 64h256v-43h-256v43z" />
+    <glyph glyph-name="gesture" unicode="gesture" 
+d="M296 116c15 0 40 18 46 75c-46 -12 -62 -46 -62 -59c0 -10 9 -16 16 -16zM98 365l-37 36c5 6 10 12 18 20c5 5 30 27 58 27c19 0 54 -15 54 -61c0 -29 -11 -46 -28 -70c-10 -14 -32 -52 -39 -75c-8 -23 -3 -41 7 -41c9 0 19 12 24 18c5 5 37 42 49 58c16 20 57 60 105 60
+c63 0 83 -54 86 -89h53v-53h-52c-9 -102 -66 -131 -101 -131c-38 0 -68 30 -68 66s34 101 115 115c-2 17 -3 38 -38 38c-27 0 -61 -41 -87 -73c-24 -29 -42 -52 -65 -59c-49.7758 -15.7187 -85 28.2434 -85 73c0 52 56 126 61 135c6 10 17 28 6 32c-7 3 -21 -11 -36 -26z
+" />
+    <glyph glyph-name="get_app" unicode="get_app" 
+d="M107 128h298v-43h-298v43zM405 320l-149 -149l-149 149h85v128h128v-128h85z" />
+    <glyph glyph-name="gif" unicode="gif" 
+d="M405 288h-64v-21h43v-32h-43v-43h-32v128h96v-32zM192 320c13 0 21 -10 21 -21v-11h-74v-64h42v32h32v-43c0 -11 -8 -21 -21 -21h-64c-13 0 -21 10 -21 21v86c0 11 8 21 21 21h64zM245 320h32v-128h-32v128z" />
+    <glyph glyph-name="goat" unicode="goat" 
+d="M511 318c1 -1 1 -4 0 -5l-25 -32c-1 -1 -3 -2 -4 -2l-15 3l-7 -22c-3 -5 -10 -5 -13 0l-14 30l-23 5l-47 -112l17 -136c0 -3 -2 -4 -4 -4h-20c-2 0 -3 1 -4 3l-20 81l-10 17l-25 -98c0 -2 -2 -3 -4 -3h-21c-2 0 -4 2 -4 4l23 135h-135l-35 -66l8 -68c1 -3 -1 -5 -4 -5
+h-20c-1 0 -3 0 -4 2l-28 102l-34 -39l6 -60c1 -3 -1 -5 -4 -5h-22c-2 0 -4 1 -4 2l-13 56l21 82v144s-23 9 -23 30h274c0 0 48 -1 95 33c0 0 -8 22 6 36c0 0 28 -20 36 -25c10 -6 17 5 14 14c-2 6 -9 28 -45 42c-4.57884 1.52628 -15.2106 2.3682 -13 9c0 2 2 3 4 3
+c44 -6 70 -42 77 -58c1 -2 20 -15 18 -38c0 -3 0 -5 2 -7z" />
+    <glyph glyph-name="golf_course" unicode="golf_course" 
+d="M363 386l-128 -66v-193c61 -3 106 -21 106 -42c0 -23 -57 -42 -128 -42s-128 19 -128 42c0 16 26 30 64 37v-37h43v384zM384 96c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32z" />
+    <glyph glyph-name="gps_fixed" unicode="gps_fixed" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170zM256 341
+c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85z" />
+    <glyph glyph-name="gps_not_fixed" unicode="gps_not_fixed" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="gps_off" unicode="gps_off" 
+d="M347 138l-209 209c-19 -25 -31 -57 -31 -91c0 -83 66 -149 149 -149c34 0 66 12 91 31zM64 421l27 27l357 -357l-27 -27l-44 44c-28 -23 -62 -39 -100 -43v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c4 38 20 72 43 100zM447 277h44v-42h-44c-3 -24 -10 -48 -21 -68
+l-32 32c7 17 11 37 11 57c0 83 -66 149 -149 149c-20 0 -40 -4 -57 -11l-32 32c21 11 44 18 68 21v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="grade" unicode="grade" 
+d="M256 144l-132 -80l35 150l-116 101l153 13l60 141l60 -141l153 -13l-116 -101l35 -150z" />
+    <glyph glyph-name="gradient" unicode="gradient" 
+d="M405 277v128h-298v-128h42v-42h43v-43h43v43h42v-43h43v43h43v42h42zM363 128v43h-43v-43h43zM277 128v43h-42v-43h42zM192 128v43h-43v-43h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM149 320h43
+v-43h-43v43zM320 320h43v-43h-43v43zM235 320h42v-43h43v-42h-43v42h-42v-42h-43v42h43v43zM363 235v-43h42v43h-42zM149 235h-42v-43h42v43z" />
+    <glyph glyph-name="grain" unicode="grain" 
+d="M213 427c23 0 43 -20 43 -43s-20 -43 -43 -43s-42 20 -42 43s19 43 42 43zM299 341c23 0 42 -19 42 -42s-19 -43 -42 -43s-43 20 -43 43s20 42 43 42zM384 256c23 0 43 -20 43 -43s-20 -42 -43 -42s-43 19 -43 42s20 43 43 43zM299 171c23 0 42 -20 42 -43
+s-19 -43 -42 -43s-43 20 -43 43s20 43 43 43zM384 341c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43zM128 171c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM128 341c23 0 43 -19 43 -42s-20 -43 -43 -43s-43 20 -43 43s20 42 43 42z
+M213 256c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43z" />
+    <glyph glyph-name="graphic_eq" unicode="graphic_eq" 
+d="M405 299h43v-86h-43v86zM320 128v256h43v-256h-43zM64 213v86h43v-86h-43zM235 43v426h42v-426h-42zM149 128v256h43v-256h-43z" />
+    <glyph glyph-name="grid_off" unicode="grid_off" 
+d="M341 85h31l-31 31v-31zM299 85v74l-12 12h-74v-86h86zM171 213v74l-12 12h-74v-86h86zM171 85v86h-86v-86h86zM85 372v-31h31zM213 244v-31h31zM27 485l458 -458l-27 -27l-43 43h-330c-23 0 -42 19 -42 42v330l-43 43zM341 427v-86h86v86h-86zM171 427h-31l-43 42h330
+c23 0 42 -19 42 -42v-330l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31h-31l-43 42h74v86h-86v-74l-42 43v31z" />
+    <glyph glyph-name="grid_on" unicode="grid_on" 
+d="M427 341v86h-86v-86h86zM427 213v86h-86v-86h86zM427 85v86h-86v-86h86zM299 341v86h-86v-86h86zM299 213v86h-86v-86h86zM299 85v86h-86v-86h86zM171 341v86h-86v-86h86zM171 213v86h-86v-86h86zM171 85v86h-86v-86h86zM427 469c23 0 42 -19 42 -42v-342
+c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="group" unicode="group" 
+d="M341 235c50 0 150 -25 150 -75v-53h-128v53c0 32 -17 56 -42 74c7 1 14 1 20 1zM171 235c50 0 149 -25 149 -75v-53h-299v53c0 50 100 75 150 75zM171 277c-35 0 -64 29 -64 64s29 64 64 64s63 -29 63 -64s-28 -64 -63 -64zM341 277c-35 0 -64 29 -64 64s29 64 64 64
+s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="group_add" unicode="group_add" 
+d="M277 235c43 0 128 -21 128 -64v-43h-256v43c0 43 85 64 128 64zM419 231c43 -7 93 -27 93 -60v-43h-64v43c0 25 -11 44 -29 60zM277 277c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM384 277c-7 0 -13 1 -19 3c12 17 19 38 19 61s-7 44 -19 61
+c6 2 12 3 19 3c35 0 64 -29 64 -64s-29 -64 -64 -64zM171 299v-43h-64v-64h-43v64h-64v43h64v64h43v-64h64z" />
+    <glyph glyph-name="group_work" unicode="group_work" 
+d="M341 139c29 0 54 24 54 53s-25 53 -54 53s-53 -24 -53 -53s24 -53 53 -53zM203 341c0 -29 24 -53 53 -53s53 24 53 53s-24 54 -53 54s-53 -25 -53 -54zM171 139c29 0 53 24 53 53s-24 53 -53 53s-54 -24 -54 -53s25 -53 54 -53zM256 469c118 0 213 -95 213 -213
+s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="hd" unicode="hd" 
+d="M309 224v64h43v-64h-43zM277 320v-128h86c12 0 21 9 21 21v86c0 12 -9 21 -21 21h-86zM235 192v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="hdr_off" unicode="hdr_off" 
+d="M53 459c135.424 -135.909 271.816 -270.85 408 -406l-24 -23l-162 162h-72v73l-32 32v-105h-32v53h-43v-53h-32v128h32v-43h43v43h8l-117 117zM277 288h-8l-32 32h40c17 0 32 -15 32 -32v-41l-32 32v9zM373 288v-21h43v21h-43zM373 192h-8l-24 23v105h75
+c17 0 32 -15 32 -32v-21c0 -13 -8 -26 -19 -30l19 -45h-32l-19 43h-24v-43z" />
+    <glyph glyph-name="hdr_on" unicode="hdr_on" 
+d="M277 224v64h-42v-64h42zM277 320c17 0 32 -15 32 -32v-64c0 -17 -15 -32 -32 -32h-74v128h74zM139 277v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43zM416 267v21h-43v-21h43zM448 267c0 -13 -8 -24 -19 -30l19 -45h-32l-19 43h-24v-43h-32v128h75c17 0 32 -15 32 -32
+v-21z" />
+    <glyph glyph-name="hdr_strong" unicode="hdr_strong" 
+d="M107 213c23 0 42 20 42 43s-19 43 -42 43s-43 -20 -43 -43s20 -43 43 -43zM107 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-86 38 -86 85s39 85 86 85zM363 384c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128z" />
+    <glyph glyph-name="hdr_weak" unicode="hdr_weak" 
+d="M363 171c47 0 85 38 85 85s-38 85 -85 85s-86 -38 -86 -85s39 -85 86 -85zM363 384c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM107 341c47 0 85 -38 85 -85s-38 -85 -85 -85s-86 38 -86 85s39 85 86 85z" />
+    <glyph glyph-name="headset" unicode="headset" 
+d="M256 491c106 0 192 -86 192 -192v-150c0 -35 -29 -64 -64 -64h-64v171h85v43c0 83 -66 149 -149 149s-149 -66 -149 -149v-43h85v-171h-64c-35 0 -64 29 -64 64v150c0 106 86 192 192 192z" />
+    <glyph glyph-name="headset_mic" unicode="headset_mic" 
+d="M256 491c106 0 192 -86 192 -192v-214c0 -35 -29 -64 -64 -64h-128v43h149v21h-85v171h85v43c0 83 -66 149 -149 149s-149 -66 -149 -149v-43h85v-171h-64c-35 0 -64 29 -64 64v150c0 106 86 192 192 192z" />
+    <glyph glyph-name="healing" unicode="healing" 
+d="M355 78l78 78l-78 77l-77 -78zM299 277c-12 0 -22 -9 -22 -21s10 -21 22 -21s21 9 21 21s-9 21 -21 21zM256 192c12 0 21 9 21 21s-9 22 -21 22s-21 -10 -21 -22s9 -21 21 -21zM213 235c12 0 22 9 22 21s-10 21 -22 21s-21 -9 -21 -21s9 -21 21 -21zM156 278l77 78
+l-77 77l-78 -78zM256 320c-12 0 -21 -9 -21 -21s9 -22 21 -22s21 10 21 22s-9 21 -21 21zM378 256l85 -85c8 -8 8 -22 0 -30l-92 -93c-4 -4 -9 -6 -15 -6s-12 2 -16 6l-84 85l-85 -85c-8 -8 -22 -8 -30 0l-93 93c-8 8 -8 22 0 30l85 85l-85 84c-8 8 -8 23 0 31l93 92
+c4 4 10 6 15 6c6 0 11 -2 15 -6l85 -85l84 85c8 8 23 8 31 0l92 -92c8 -8 8 -23 0 -31z" />
+    <glyph glyph-name="hearing" unicode="hearing" 
+d="M245 320c0 29 25 53 54 53s53 -24 53 -53s-24 -53 -53 -53s-54 24 -54 53zM163 456c-35 -35 -56 -83 -56 -136s21 -101 56 -136l-30 -30c-42 42 -69 101 -69 166s27 124 69 166zM363 85c23 0 42 20 42 43h43c0 -47 -38 -85 -85 -85c-12 0 -24 2 -35 7
+c-29 15 -46 37 -59 76c-7 21 -19 31 -36 44c-19 14 -42 32 -61 67c-15 27 -23 56 -23 83c0 84 66 149 150 149s149 -65 149 -149h-43c0 60 -46 107 -106 107s-107 -47 -107 -107c0 -20 6 -43 17 -63c15 -28 33 -41 50 -54c20 -15 40 -31 51 -64c11 -32 21 -42 36 -50
+c4 -2 11 -4 17 -4z" />
+    <glyph glyph-name="help" unicode="help" 
+d="M321 272c12 12 20 29 20 48c0 47 -38 85 -85 85s-85 -38 -85 -85h42c0 23 20 43 43 43s43 -20 43 -43c0 -12 -5 -22 -13 -30l-26 -27c-15 -16 -25 -37 -25 -60v-11h42c0 32 10 44 25 60zM277 107v42h-42v-42h42zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213
+s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="help_outline" unicode="help_outline" 
+d="M256 384c47 0 85 -38 85 -85c0 -53 -64 -59 -64 -107h-42c0 69 64 64 64 107c0 23 -20 42 -43 42s-43 -19 -43 -42h-42c0 47 38 85 85 85zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213
+s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM235 128v43h42v-43h-42z" />
+    <glyph glyph-name="high_quality" unicode="high_quality" 
+d="M309 224v64h43v-64h-43zM384 213v86c0 12 -9 21 -21 21h-64c-12 0 -22 -9 -22 -21v-86c0 -12 10 -21 22 -21h16v-32h32v32h16c12 0 21 9 21 21zM235 192v128h-32v-53h-43v53h-32v-128h32v43h43v-43h32zM405 427c23 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298
+c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="highlight" unicode="highlight" 
+d="M362 372l45 45l30 -30l-45 -46zM75 387l30 30l45 -45l-30 -31zM235 469h42v-64h-42v64zM128 213v107h256v-107l-64 -64v-106h-128v106z" />
+    <glyph glyph-name="highlight_off" unicode="highlight_off" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM311 341l30 -30l-55 -55l55 -55l-30 -30l-55 55l-55 -55l-30 30l55 55l-55 55l30 30l55 -55z
+" />
+    <glyph glyph-name="history" unicode="history" 
+d="M256 341h32v-90l75 -45l-16 -26l-91 55v106zM277 448c106 0 192 -86 192 -192s-86 -192 -192 -192c-53 0 -100 21 -135 56l30 31c27 -27 64 -44 105 -44c83 0 150 66 150 149s-67 149 -150 149s-149 -66 -149 -149h64l-86 -86l-2 3l-83 83h64c0 106 86 192 192 192z" />
+    <glyph glyph-name="home" unicode="home" 
+d="M213 85h-106v171h-64l213 192l213 -192h-64v-171h-106v128h-86v-128z" />
+    <glyph glyph-name="hot_tub" unicode="hot_tub" 
+d="M313 387c22 -21 31 -50 27 -79l-1 -9h-41l3 12c3.05626 17.3188 -3.40602 35.406 -16 48c-22 22 -32 51 -28 80l1 9h41l-2 -13c-3 -17 2 -34 14 -47zM398 387c22 -21 32 -50 28 -79l-2 -9h-40l2 12c3 17 -2 34 -14 47l-2 1c-22 22 -32 51 -28 80l2 9h40l-2 -13
+c-3 -17 2 -34 14 -47zM405 85v128h-42v-128h42zM320 85v128h-43v-128h43zM235 85v128h-43v-128h43zM149 85v128h-42v-128h42zM238 256h231v-171c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v171h64v16c0 26 22 48 48 48c15.3845 0 28.1542 -8.15417 36 -16l29 -33
+c5 -6 11 -10 18 -15zM107 384c0 24 18 43 42 43s43 -19 43 -43s-19 -43 -43 -43s-42 19 -42 43z" />
+    <glyph glyph-name="hotel" unicode="hotel" 
+d="M405 363c47 0 86 -39 86 -86v-192h-43v64h-384v-64h-43v320h43v-192h171v150h170zM149 235c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="hourglass_empty" unicode="hourglass_empty" 
+d="M256 267l85 85v75h-170v-75zM341 160l-85 85l-85 -85v-75h170v75zM128 469h256v-128l-85 -85l85 -85v-128h-256v128l85 85l-85 85v128z" />
+    <glyph glyph-name="hourglass_full" unicode="hourglass_full" 
+d="M128 469h256v-128l-85 -85l85 -85v-128h-256v128l85 85l-85 85v128z" />
+    <glyph glyph-name="http" unicode="http" 
+d="M459 267v21h-43v-21h43zM459 320c17 0 32 -15 32 -32v-21c0 -17 -15 -32 -32 -32h-43v-43h-32v128h75zM267 288v32h96v-32h-32v-96h-32v96h-32zM149 288v32h96v-32h-32v-96h-32v96h-32zM96 277v43h32v-128h-32v53h-43v-53h-32v128h32v-43h43z" />
+    <glyph glyph-name="https" unicode="https" 
+d="M322 341v43c0 36 -30 66 -66 66s-66 -30 -66 -66v-43h132zM256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107
+s107 -48 107 -107v-43h21z" />
+    <glyph glyph-name="image" unicode="image" 
+d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298z" />
+    <glyph glyph-name="image_aspect_ratio" unicode="image_aspect_ratio" 
+d="M427 128v256h-342v-256h342zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342zM256 299v-43h-43v43h43zM171 299v-43h-43v43h43zM341 213v-42h-42v42h42zM341 299v-43h-42v43h42z" />
+    <glyph glyph-name="import_contacts" unicode="import_contacts" 
+d="M448 117v246c-23 7 -49 10 -75 10c-36 0 -88 -14 -117 -32v-245c29 18 81 32 117 32c26 0 52 -4 75 -11zM373 416c44.2046 0 90.7488 -11.0375 118 -32v-311c0 -5 -6 -11 -11 -11c-2 0 -3 0 -5 1c-30 16 -67 22 -102 22c-36 0 -88 -14 -117 -32c-31 23 -75 32 -117 32
+c-31 0 -73 -9 -102 -23c-2 0 -3 -1 -5 -1c-5 0 -11 5 -11 10v313c31 23 76 32 118 32s86 -9 117 -32c31 23 75 32 117 32z" />
+    <glyph glyph-name="import_export" unicode="import_export" 
+d="M341 149h64l-85 -85l-85 85h64v150h42v-150zM192 448l85 -85h-64v-150h-42v150h-64z" />
+    <glyph glyph-name="important_devices" unicode="important_devices" 
+d="M255 320h65l-53 -38l20 -62l-52 39l-53 -39l20 62l-53 38h65l21 64zM427 469c23 0 42 -18 42 -42v-107h-42v107h-384v-256h277v-43h-43v-43h43v-42h-171v42h43v43h-149c-24 0 -43 20 -43 43v256c0 24 19 42 43 42h384zM491 85v150h-107v-150h107zM491 277
+c12 0 21 -9 21 -21v-192c0 -12 -9 -21 -21 -21h-107c-12 0 -21 9 -21 21v192c0 12 9 21 21 21h107z" />
+    <glyph glyph-name="inbox" unicode="inbox" 
+d="M405 192v213h-299v-213h86c0 -35 29 -64 64 -64s64 29 64 64h85zM405 448c23 0 43 -19 43 -43v-298c0 -23 -20 -43 -43 -43h-299c-24 0 -42 20 -42 43v298c0 24 18 43 42 43h299z" />
+    <glyph glyph-name="indeterminate_check_box" unicode="indeterminate_check_box" 
+d="M363 235v42h-214v-42h214zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="info" unicode="info" 
+d="M277 320v43h-42v-43h42zM277 149v128h-42v-128h42zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="info_outline" unicode="info_outline" 
+d="M235 320v43h42v-43h-42zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM235 149v128h42v-128h-42z" />
+    <glyph glyph-name="input" unicode="input" 
+d="M235 171v64h-214v42h214v64l85 -85zM448 448c23 0 43 -19 43 -43v-299c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v86h43v-86h384v300h-384v-86h-43v85c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="insert_chart" unicode="insert_chart" 
+d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="insert_comment" unicode="insert_comment" 
+d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM427 469c23 0 42 -19 42 -42v-384l-85 85h-299c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="insert_drive_file" unicode="insert_drive_file" 
+d="M277 320h118l-118 117v-117zM128 469h171l128 -128v-256c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42z" />
+    <glyph glyph-name="insert_emoticon" unicode="insert_emoticon" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="insert_invitation" unicode="insert_invitation" 
+d="M405 107v234h-298v-234h298zM341 491h43v-43h21c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43zM363 256v-107h-107v107h107z" />
+    <glyph glyph-name="insert_link" unicode="insert_link" 
+d="M363 363c59 0 106 -48 106 -107s-47 -107 -106 -107h-86v41h86c36 0 66 30 66 66s-30 66 -66 66h-86v41h86zM171 235v42h170v-42h-170zM83 256c0 -36 30 -66 66 -66h86v-41h-86c-59 0 -106 48 -106 107s47 107 106 107h86v-41h-86c-36 0 -66 -30 -66 -66z" />
+    <glyph glyph-name="insert_photo" unicode="insert_photo" 
+d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298z" />
+    <glyph glyph-name="invert_colors" unicode="invert_colors" 
+d="M256 94v309l-90 -90c-24 -24 -38 -57 -38 -91c0 -68.7916 59.1998 -128 128 -128zM377 343c67 -67 67 -174 0 -241c-33 -33 -77 -50 -121 -50s-88 17 -121 50c-67 67 -67 174 0 241l121 121z" />
+    <glyph glyph-name="invert_colors_off" unicode="invert_colors_off" 
+d="M256 403l-49 -48l-30 30l79 79l121 -121c52 -52 63 -129 34 -192l-155 154v98zM256 94v103l-102 102c-17 -22 -26 -49 -26 -77c0 -68.7916 59.1998 -128 128 -128zM441 67l7 -8l-27 -27l-58 58c-31 -25 -69 -38 -107 -38c-44 0 -88 17 -121 50c-62 63 -66 161 -12 228
+l-59 59l27 27c116.495 -116.495 232.353 -233.66 350 -349z" />
+    <glyph glyph-name="iso" unicode="iso" 
+d="M363 149h-107v32h107v-32zM405 107v298l-298 -298h298zM117 352v-32h43v-43h32v43h43v32h-43v43h-32v-43h-43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="keyboard" unicode="keyboard" 
+d="M405 299v42h-42v-42h42zM405 235v42h-42v-42h42zM341 299v42h-42v-42h42zM341 235v42h-42v-42h42zM341 149v43h-170v-43h170zM149 299v42h-42v-42h42zM149 235v42h-42v-42h42zM171 277v-42h42v42h-42zM171 341v-42h42v42h-42zM235 277v-42h42v42h-42zM235 341v-42h42v42
+h-42zM427 405c23 0 42 -19 42 -42v-214c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v214c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="keyboard_arrow_down" unicode="keyboard_arrow_down" 
+d="M158 345l98 -98l98 98l30 -30l-128 -128l-128 128z" />
+    <glyph glyph-name="keyboard_arrow_left" unicode="keyboard_arrow_left" 
+d="M329 169l-30 -30l-128 128l128 128l30 -30l-98 -98z" />
+    <glyph glyph-name="keyboard_arrow_right" unicode="keyboard_arrow_right" 
+d="M183 163l98 98l-98 98l30 30l128 -128l-128 -128z" />
+    <glyph glyph-name="keyboard_arrow_up" unicode="keyboard_arrow_up" 
+d="M158 183l-30 30l128 128l128 -128l-30 -30l-98 98z" />
+    <glyph glyph-name="keyboard_backspace" unicode="keyboard_backspace" 
+d="M448 277v-42h-302l76 -77l-30 -30l-128 128l128 128l30 -30l-76 -77h302z" />
+    <glyph glyph-name="keyboard_capslock" unicode="keyboard_capslock" 
+d="M128 128v43h256v-43h-256zM256 333l-98 -98l-30 30l128 128l128 -128l-30 -30z" />
+    <glyph glyph-name="keyboard_hide" unicode="keyboard_hide" 
+d="M256 21l-85 86h170zM405 341v43h-42v-43h42zM405 277v43h-42v-43h42zM341 341v43h-42v-43h42zM341 277v43h-42v-43h42zM341 192v43h-170v-43h170zM149 341v43h-42v-43h42zM149 277v43h-42v-43h42zM171 320v-43h42v43h-42zM171 384v-43h42v43h-42zM235 320v-43h42v43h-42z
+M235 384v-43h42v43h-42zM427 448c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="keyboard_return" unicode="keyboard_return" 
+d="M405 363h43v-128h-324l77 -77l-30 -30l-128 128l128 128l30 -30l-77 -77h281v86z" />
+    <glyph glyph-name="keyboard_tab" unicode="keyboard_tab" 
+d="M427 384h42v-256h-42v256zM247 354l30 30l128 -128l-128 -128l-30 30l77 77h-303v42h303z" />
+    <glyph glyph-name="keyboard_voice" unicode="keyboard_voice" 
+d="M369 256h36c0 -73 -58 -133 -128 -143v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -109 113 -109s113 45 113 109zM256 192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z" />
+    <glyph glyph-name="kitchen" unicode="kitchen" 
+d="M171 256h42v-107h-42v107zM171 405h42v-64h-42v64zM384 320v107h-256v-107h256zM384 85v193h-256v-193h256zM384 469c23 0 43 -18 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 24 20 42 43 42h256z" />
+    <glyph glyph-name="label" unicode="label" 
+d="M376 387l93 -131l-93 -131c-8 -11 -21 -18 -35 -18h-234c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h234c14 0 27 -7 35 -18z" />
+    <glyph glyph-name="label_outline" unicode="label_outline" 
+d="M341 149l76 107l-76 107h-234v-214h234zM376 387l93 -131l-93 -131c-8 -11 -21 -18 -35 -18h-234c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h234c14 0 27 -7 35 -18z" />
+    <glyph glyph-name="landscape" unicode="landscape" 
+d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" />
+    <glyph glyph-name="language" unicode="language" 
+d="M349 213h72c3 14 6 28 6 43s-3 29 -6 43h-72c2 -14 3 -28 3 -43s-1 -29 -3 -43zM311 95c39 13 73 41 93 76h-63c-7 -27 -17 -52 -30 -76zM306 213c2 14 3 28 3 43s-1 29 -3 43h-100c-2 -14 -3 -28 -3 -43s1 -29 3 -43h100zM256 86c18 26 32 54 41 85h-82
+c9 -31 23 -59 41 -85zM171 341c7 27 17 52 30 76c-39 -13 -73 -41 -93 -76h63zM108 171c20 -35 54 -63 93 -76c-13 24 -23 49 -30 76h-63zM91 213h72c-2 14 -3 28 -3 43s1 29 3 43h-72c-3 -14 -6 -28 -6 -43s3 -29 6 -43zM256 426c-18 -26 -32 -54 -41 -85h82
+c-9 31 -23 59 -41 85zM404 341c-20 35 -54 63 -93 76c13 -24 23 -49 30 -76h63zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="laptop" unicode="laptop" 
+d="M85 384v-213h342v213h-342zM427 128h85v-43h-512v43h85c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="laptop_chromebook" unicode="laptop_chromebook" 
+d="M427 192v213h-342v-213h342zM299 128v21h-86v-21h86zM469 128h43v-43h-512v43h43v320h426v-320z" />
+    <glyph glyph-name="laptop_mac" unicode="laptop_mac" 
+d="M256 107c12 0 21 9 21 21s-9 21 -21 21s-21 -9 -21 -21s9 -21 21 -21zM85 405v-234h342v234h-342zM427 128h85c0 -23 -20 -43 -43 -43h-426c-23 0 -43 20 -43 43h85c-23 0 -42 20 -42 43v234c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-234c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="laptop_windows" unicode="laptop_windows" 
+d="M85 405v-213h342v213h-342zM427 128h85v-43h-512v43h85v21c-23 0 -42 20 -42 43v213c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-213c0 -23 -19 -43 -42 -43v-21z" />
+    <glyph glyph-name="last_page" unicode="last_page" 
+d="M341 384h43v-256h-43v256zM119 354l30 30l128 -128l-128 -128l-30 30l98 98z" />
+    <glyph glyph-name="launch" unicode="launch" 
+d="M299 448h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43zM405 107v149h43v-149c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h149v-43h-149v-298h298z" />
+    <glyph glyph-name="layers" unicode="layers" 
+d="M256 171c-64.012 49.6547 -127.813 99.5201 -192 149l192 149l192 -149c-64.1875 -49.4791 -127.987 -99.3464 -192 -149zM256 116l157 123l35 -27l-192 -149l-192 149l35 27z" />
+    <glyph glyph-name="layers_clear" unicode="layers_clear" 
+d="M70 491l399 -400l-27 -27l-80 81l-106 -82l-192 149l35 27l157 -123l75 59l-30 30l-45 -34c-64.012 49.6547 -127.813 99.5201 -192 149l69 54l-90 90zM448 320c-28.8803 -22.1197 -57.4315 -44.5685 -86 -67l-168 168l62 48zM423 192l-31 31l25 19l31 -30z" />
+    <glyph glyph-name="leak_add" unicode="leak_add" 
+d="M299 64c0 83 66 149 149 149v-42c-59 0 -107 -48 -107 -107h-42zM384 64c0 35 29 64 64 64v-64h-64zM213 64c0 129 106 235 235 235v-43c-106 0 -192 -86 -192 -192h-43zM213 448c0 -83 -66 -149 -149 -149v42c59 0 107 48 107 107h42zM299 448
+c0 -129 -105 -235 -235 -235v43c106 0 192 86 192 192h43zM128 448c0 -35 -29 -64 -64 -64v64h64z" />
+    <glyph glyph-name="leak_remove" unicode="leak_remove" 
+d="M328 265c35 21 76 34 120 34v-43c-32 0 -62 -8 -89 -22zM425 168l-34 34c17 7 37 11 57 11v-42c-8 0 -16 -1 -23 -3zM299 448c0 -44 -13 -85 -34 -120l-31 31c14 27 22 57 22 89h43zM64 421l27 27l357 -357l-27 -27l-61 61c-12 -17 -19 -38 -19 -61h-42c0 34 12 66 31 91
+l-31 30c-27 -33 -43 -75 -43 -121h-43c0 58 21 111 56 152l-53 53c-41 -35 -94 -56 -152 -56v43c46 0 89 16 122 43l-31 31c-25 -19 -57 -31 -91 -31v42c23 0 44 7 61 19zM213 448c0 -20 -4 -40 -11 -57l-34 34c2 7 3 15 3 23h42z" />
+    <glyph glyph-name="lens" unicode="lens" 
+d="M256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="library_add" unicode="library_add" 
+d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="library_books" unicode="library_books" 
+d="M405 363v42h-213v-42h213zM320 192v43h-128v-43h128zM405 277v43h-213v-43h213zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="library_music" unicode="library_music" 
+d="M85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42zM384 363v42h-85v-117c-9 7 -20 11 -32 11c-29 0 -54 -25 -54 -54s25 -53 54 -53s53 24 53 53v118h64zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42
+h256z" />
+    <glyph glyph-name="lightbulb_outline" unicode="lightbulb_outline" 
+d="M317 233c29 20 46 52 46 87c0 59 -48 107 -107 107s-107 -48 -107 -107c0 -35 17 -67 46 -87l18 -13v-49h86v49zM256 469c82 0 149 -67 149 -149c0 -51 -25 -95 -64 -122v-49c0 -12 -9 -21 -21 -21h-128c-12 0 -21 9 -21 21v49c-39 27 -64 71 -64 122
+c0 82 67 149 149 149zM192 64v21h128v-21c0 -12 -9 -21 -21 -21h-86c-12 0 -21 9 -21 21z" />
+    <glyph glyph-name="line_style" unicode="line_style" 
+d="M64 427h384v-86h-384v86zM277 256v43h171v-43h-171zM64 256v43h171v-43h-171zM405 85v43h43v-43h-43zM320 85v43h43v-43h-43zM235 85v43h42v-43h-42zM149 85v43h43v-43h-43zM64 85v43h43v-43h-43zM341 171v42h107v-42h-107zM203 171v42h106v-42h-106zM64 171v42h107v-42
+h-107z" />
+    <glyph glyph-name="line_weight" unicode="line_weight" 
+d="M64 427h384v-86h-384v86zM64 235v64h384v-64h-384zM64 85v22h384v-22h-384zM64 149v43h384v-43h-384z" />
+    <glyph glyph-name="linear_scale" unicode="linear_scale" 
+d="M416 309c29 0 53 -24 53 -53s-24 -53 -53 -53c-22 0 -41 13 -49 32h-62c-8 -19 -27 -32 -49 -32s-41 13 -49 32h-62c-8 -19 -27 -32 -49 -32c-29 0 -53 24 -53 53s24 53 53 53c22 0 41 -13 49 -32h62c8 19 27 32 49 32s41 -13 49 -32h62c8 19 27 32 49 32z" />
+    <glyph glyph-name="link" unicode="link" 
+d="M363 363c59 0 106 -48 106 -107s-47 -107 -106 -107h-86v41h86c36 0 66 30 66 66s-30 66 -66 66h-86v41h86zM171 235v42h170v-42h-170zM83 256c0 -36 30 -66 66 -66h86v-41h-86c-59 0 -106 48 -106 107s47 107 106 107h86v-41h-86c-36 0 -66 -30 -66 -66z" />
+    <glyph glyph-name="linked_camera" unicode="linked_camera" 
+d="M341 384c24 0 43 -19 43 -43h28c0 39 -32 71 -71 71v-28zM256 107c59 0 107 47 107 106s-48 107 -107 107s-107 -48 -107 -107s48 -106 107 -106zM363 320h106v-235c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v256c0 23 19 43 42 43h68l39 43h128v-64
+c24 0 43 -19 43 -43zM341 441v28c71 0 128 -57 128 -128h-28c0 55 -45 100 -100 100zM188 213c0 38 30 69 68 69s68 -31 68 -69s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="list" unicode="list" 
+d="M149 363h299v-43h-299v43zM149 149v43h299v-43h-299zM149 235v42h299v-42h-299zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z" />
+    <glyph glyph-name="live_help" unicode="live_help" 
+d="M321 293c12 12 20 29 20 48c0 47 -38 86 -85 86s-85 -39 -85 -86h42c0 23 20 43 43 43s43 -20 43 -43c0 -12 -5 -22 -13 -30l-26 -27c-15 -16 -25 -37 -25 -60v-11h42c0 32 10 45 25 61zM277 128v43h-42v-43h42zM405 469c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43
+h-85l-64 -64l-64 64h-85c-24 0 -43 20 -43 43v299c0 23 19 42 43 42h298z" />
+    <glyph glyph-name="live_tv" unicode="live_tv" 
+d="M192 299l149 -86l-149 -85v171zM448 85v256h-384v-256h384zM448 384c23 0 43 -19 43 -43v-256c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v256c0 24 20 43 43 43h162l-70 70l15 15l85 -85l85 85l15 -15l-70 -70h162z" />
+    <glyph glyph-name="local_activity" unicode="local_activity" 
+d="M332 154l-23 87l70 58l-90 5l-33 84l-33 -84l-91 -5l71 -58l-23 -87l76 49zM427 256c0 -23 19 -43 42 -43v-85c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v85c24 0 42 20 42 43s-19 43 -42 43v85c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-85
+c-23 0 -42 -20 -42 -43z" />
+    <glyph glyph-name="local_airport" unicode="local_airport" 
+d="M448 171l-171 53v-117l43 -32v-32l-75 21l-74 -21v32l42 32v117l-170 -53v42l170 107v117c0 18 14 32 32 32s32 -14 32 -32v-117l171 -107v-42z" />
+    <glyph glyph-name="local_atm" unicode="local_atm" 
+d="M427 128v256h-342v-256h342zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342zM235 149v22h-43v42h85v22h-64c-12 0 -21 9 -21 21v64c0 12 9 21 21 21h22v22h42v-22h43v-42h-85v-22h64c12 0 21 -9 21 -21v-64
+c0 -12 -9 -21 -21 -21h-22v-22h-42z" />
+    <glyph glyph-name="local_bar" unicode="local_bar" 
+d="M159 363h194l38 42h-270zM448 405l-171 -192v-106h107v-43h-256v43h107v106l-171 192v43h384v-43z" />
+    <glyph glyph-name="local_cafe" unicode="local_cafe" 
+d="M43 64v43h384v-43h-384zM427 341v64h-43v-64h43zM427 448c24 0 42 -19 42 -43v-64c0 -24 -18 -42 -42 -42h-43v-64c0 -47 -38 -86 -85 -86h-128c-47 0 -86 39 -86 86v213h342z" />
+    <glyph glyph-name="local_car_wash" unicode="local_car_wash" 
+d="M107 235h298l-32 96h-234zM373 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 128c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 341l44 -128v-170c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v21h-256v-21
+c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v170l44 128c4 13 17 22 31 22h234c14 0 27 -9 31 -22zM149 405c-18 0 -32 14 -32 32c0 21 32 58 32 58s32 -37 32 -58c0 -18 -14 -32 -32 -32zM256 405c-18 0 -32 14 -32 32c0 21 32 58 32 58s32 -37 32 -58
+c0 -18 -14 -32 -32 -32zM363 405c-18 0 -32 14 -32 32c0 21 32 58 32 58s32 -37 32 -58c0 -18 -14 -32 -32 -32z" />
+    <glyph glyph-name="local_convenience_store" unicode="local_convenience_store" 
+d="M341 256v107h-21v-43h-21v43h-22v-64h43v-43h21zM235 299v64h-64v-22h42v-21h-42v-64h64v21h-43v22h43zM405 363h64v-278h-170v86h-86v-86h-170v278h64v64h298v-64z" />
+    <glyph glyph-name="local_dining" unicode="local_dining" 
+d="M317 266l-31 -31l147 -147l-30 -30l-147 147l-147 -147l-30 30l208 208c-15 33 -4 79 30 113c41 41 99 48 130 17s24 -90 -17 -131c-34 -34 -80 -44 -113 -29zM173 227l-90 90c-33 33 -33 87 0 120l150 -149z" />
+    <glyph glyph-name="local_drink" unicode="local_drink" 
+d="M391 341l9 86h-288l9 -86h270zM256 107c35 0 64 29 64 64c0 43 -64 115 -64 115s-64 -72 -64 -115c0 -35 29 -64 64 -64zM64 469h384l-43 -389c-3 -21 -20 -37 -42 -37h-214c-22 0 -39 16 -42 37z" />
+    <glyph glyph-name="local_florist" unicode="local_florist" 
+d="M256 395c-29 0 -53 -25 -53 -54s24 -53 53 -53s53 24 53 53s-24 54 -53 54zM119 293c0 21 13 39 31 48c-18 9 -31 27 -31 48c0 29 25 54 54 54c11 0 21 -4 30 -10v4c0 29 24 54 53 54s53 -25 53 -54v-4c9 6 19 10 30 10c29 0 54 -25 54 -54c0 -21 -13 -39 -31 -48
+c18 -9 31 -27 31 -48c0 -29 -25 -53 -54 -53c-11 0 -21 3 -30 9v-4c0 -29 -24 -53 -53 -53s-53 24 -53 53v4c-9 -6 -19 -9 -30 -9c-29 0 -54 24 -54 53zM256 43c-106 0 -192 86 -192 192c106 0 192 -86 192 -192zM256 43c0 106 86 192 192 192c0 -106 -86 -192 -192 -192z
+" />
+    <glyph glyph-name="local_gas_station" unicode="local_gas_station" 
+d="M384 299c12 0 21 9 21 21s-9 21 -21 21s-21 -9 -21 -21s9 -21 21 -21zM256 299v106h-128v-106h128zM422 358c10 -10 15 -23 15 -38v-203c0 -29 -24 -53 -53 -53s-53 24 -53 53v107h-32v-160h-214v341c0 23 20 43 43 43h128c23 0 43 -20 43 -43v-149h21
+c23 0 43 -20 43 -43v-96c0 -12 9 -21 21 -21s21 9 21 21v154c-7 -3 -13 -4 -21 -4c-29 0 -53 24 -53 53c0 23 14 42 34 50l-45 45l23 22z" />
+    <glyph glyph-name="local_grocery_store" unicode="local_grocery_store" 
+d="M363 128c23 0 42 -20 42 -43s-19 -42 -42 -42s-43 19 -43 42s20 43 43 43zM21 469h70l20 -42h316c12 0 21 -10 21 -22c0 -4 -1 -7 -3 -10l-76 -138c-7 -13 -21 -22 -37 -22h-159l-19 -35l-1 -3c0 -3 2 -5 5 -5h247v-43h-256c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53
+l-77 162h-43v42zM149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43z" />
+    <glyph glyph-name="local_hospital" unicode="local_hospital" 
+d="M384 213v86h-85v85h-86v-85h-85v-86h85v-85h86v85h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="local_hotel" unicode="local_hotel" 
+d="M405 363c47 0 86 -39 86 -86v-192h-43v64h-384v-64h-43v320h43v-192h171v150h170zM149 235c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="local_laundry_service" unicode="local_laundry_service" 
+d="M256 85c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM149 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s22 9 22 21s-10 22 -22 22zM213 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s22 9 22 21s-10 22 -22 22zM384 469c24 0 43 -18 43 -42v-342
+c0 -24 -19 -42 -43 -42h-256c-24 0 -43 18 -43 42v342c0 24 19 42 43 42h256zM196 153l120 121c33 -33 33 -88 0 -121s-87 -33 -120 0z" />
+    <glyph glyph-name="local_library" unicode="local_library" 
+d="M256 341c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM256 266c50 47 118 75 192 75v-234c-74 0 -142 -29 -192 -76c-50 47 -118 76 -192 76v234c74 0 142 -28 192 -75z" />
+    <glyph glyph-name="local_mall" unicode="local_mall" 
+d="M256 235c59 0 107 47 107 106h-43c0 -35 -29 -64 -64 -64s-64 29 -64 64h-43c0 -59 48 -106 107 -106zM256 448c-35 0 -64 -29 -64 -64h128c0 35 -29 64 -64 64zM405 384c23 0 43 -20 43 -43v-256c0 -23 -20 -42 -43 -42h-298c-23 0 -43 19 -43 42v256c0 23 20 43 43 43
+h42c0 59 48 107 107 107s107 -48 107 -107h42z" />
+    <glyph glyph-name="local_movies" unicode="local_movies" 
+d="M384 320v43h-43v-43h43zM384 235v42h-43v-42h43zM384 149v43h-43v-43h43zM171 320v43h-43v-43h43zM171 235v42h-43v-42h43zM171 149v43h-43v-43h43zM384 448h43v-384h-43v43h-43v-43h-170v43h-43v-43h-43v384h43v-43h43v43h170v-43h43v43z" />
+    <glyph glyph-name="local_offer" unicode="local_offer" 
+d="M117 363c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM457 265c8 -8 12 -18 12 -30s-4 -22 -12 -30l-150 -150c-8 -8 -18 -12 -30 -12s-22 4 -30 12l-192 192c-8 8 -12 18 -12 30v150c0 23 19 42 42 42h150c12 0 22 -4 30 -12z" />
+    <glyph glyph-name="local_parking" unicode="local_parking" 
+d="M282 277c23 0 42 20 42 43s-19 43 -42 43h-69v-86h69zM277 448c71 0 128 -57 128 -128s-57 -128 -128 -128h-64v-128h-85v384h149z" />
+    <glyph glyph-name="local_pharmacy" unicode="local_pharmacy" 
+d="M341 213v43h-64v64h-42v-64h-64v-43h64v-64h42v64h64zM448 405v-42l-43 -128l43 -128v-43h-384v43l43 128l-43 128v42h271l31 86l50 -19l-24 -67h56z" />
+    <glyph glyph-name="local_phone" unicode="local_phone" 
+d="M141 282c31 -60 81 -110 141 -141l47 47c6 6 15 8 22 5c24 -8 50 -12 76 -12c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22z" />
+    <glyph glyph-name="local_pizza" unicode="local_pizza" 
+d="M256 192c23 0 43 20 43 43s-20 42 -43 42s-43 -19 -43 -42s20 -43 43 -43zM149 363c0 -23 20 -43 43 -43s43 20 43 43s-20 42 -43 42s-43 -19 -43 -42zM256 469c76 0 145 -33 192 -85l-192 -341l-192 341c47 52 116 85 192 85z" />
+    <glyph glyph-name="local_play" unicode="local_play" 
+d="M332 154l-23 87l70 58l-90 5l-33 84l-33 -84l-91 -5l71 -58l-23 -87l76 49zM427 256c0 -23 19 -43 42 -43v-85c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v85c24 0 42 20 42 43s-19 43 -42 43v85c0 23 19 43 42 43h342c23 0 42 -20 42 -43v-85
+c-23 0 -42 -20 -42 -43z" />
+    <glyph glyph-name="local_post_office" unicode="local_post_office" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="local_printshop" unicode="local_printshop" 
+d="M384 448v-85h-256v85h256zM405 256c12 0 22 9 22 21s-10 22 -22 22s-21 -10 -21 -22s9 -21 21 -21zM341 107v106h-170v-106h170zM405 341c35 0 64 -29 64 -64v-128h-85v-85h-256v85h-85v128c0 35 29 64 64 64h298z" />
+    <glyph glyph-name="local_see" unicode="local_see" 
+d="M256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM192 469h128l39 -42h68c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68zM188 256c0 38 30 68 68 68s68 -30 68 -68
+s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="local_shipping" unicode="local_shipping" 
+d="M384 117c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM416 309h-53v-53h95zM128 117c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM427 341l64 -85v-107h-43c0 -35 -29 -64 -64 -64s-64 29 -64 64h-128c0 -35 -29 -64 -64 -64
+s-64 29 -64 64h-43v235c0 23 20 43 43 43h299v-86h64z" />
+    <glyph glyph-name="local_taxi" unicode="local_taxi" 
+d="M107 277h298l-32 96h-234zM373 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 171c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 384l44 -128v-171c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v22h-256v-22
+c0 -12 -9 -21 -21 -21h-22c-12 0 -21 9 -21 21v171l44 128c4 13 17 21 31 21h53v43h128v-43h53c14 0 27 -8 31 -21z" />
+    <glyph glyph-name="location_city" unicode="location_city" 
+d="M405 192v43h-42v-43h42zM405 107v42h-42v-42h42zM277 363v42h-42v-42h42zM277 277v43h-42v-43h42zM277 192v43h-42v-43h42zM277 107v42h-42v-42h42zM149 277v43h-42v-43h42zM149 192v43h-42v-43h42zM149 107v42h-42v-42h42zM320 277h128v-213h-384v299h128v42l64 64
+l64 -64v-128z" />
+    <glyph glyph-name="location_disabled" unicode="location_disabled" 
+d="M347 138l-209 209c-19 -25 -31 -57 -31 -91c0 -83 66 -149 149 -149c34 0 66 12 91 31zM64 421l27 27l357 -357l-27 -27l-44 44c-28 -23 -62 -39 -100 -43v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c4 38 20 72 43 100zM447 277h44v-42h-44c-3 -24 -10 -48 -21 -68
+l-32 32c7 17 11 37 11 57c0 83 -66 149 -149 149c-20 0 -40 -4 -57 -11l-32 32c21 11 44 18 68 21v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="location_off" unicode="location_off" 
+d="M250 267c59.1765 -58.4901 118.284 -117.049 177 -176l-27 -27l-72 71c-36 -53 -72 -92 -72 -92s-149 165 -149 277c0 11 2 22 4 33l-68 68l27 27l178 -178zM256 373c-16 0 -29 -7 -39 -18l-69 68c27 28 66 46 108 46c83 0 149 -66 149 -149c0 -36 -15 -77 -36 -117
+l-77 78c11 10 17 23 17 39c0 29 -24 53 -53 53z" />
+    <glyph glyph-name="location_on" unicode="location_on" 
+d="M256 267c29 0 53 24 53 53s-24 53 -53 53s-53 -24 -53 -53s24 -53 53 -53zM256 469c83 0 149 -66 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 83 66 149 149 149z" />
+    <glyph glyph-name="location_searching" unicode="location_searching" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170z" />
+    <glyph glyph-name="lock" unicode="lock" 
+d="M322 341v43c0 36 -30 66 -66 66s-66 -30 -66 -66v-43h132zM256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107
+s107 -48 107 -107v-43h21z" />
+    <glyph glyph-name="lock_open" unicode="lock_open" 
+d="M384 85v214h-256v-214h256zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h194v43c0 36 -30 66 -66 66s-66 -30 -66 -66h-41c0 59 48 107 107 107s107 -48 107 -107v-43h21zM256 149c-23 0 -43 20 -43 43
+s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43z" />
+    <glyph glyph-name="lock_outline" unicode="lock_outline" 
+d="M384 85v214h-256v-214h256zM190 384v-43h132v43c0 36 -30 66 -66 66s-66 -30 -66 -66zM384 341c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h21v43c0 59 48 107 107 107s107 -48 107 -107v-43h21zM256 149
+c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43z" />
+    <glyph glyph-name="looks" unicode="looks" 
+d="M256 384c129 0 235 -106 235 -235h-43c0 106 -86 192 -192 192s-192 -86 -192 -192h-43c0 129 106 235 235 235zM256 299c82 0 149 -68 149 -150h-42c0 59 -48 107 -107 107s-107 -48 -107 -107h-42c0 82 67 150 149 150z" />
+    <glyph glyph-name="looks_3" unicode="looks_&#x33;" 
+d="M320 288v32c0 24 -19 43 -42 43h-86v-43h86v-43h-43v-42h43v-43h-86v-43h86c23 0 42 19 42 43v32c0 18 -14 32 -32 32c18 0 32 14 32 32zM406 448c23 0 42 -20 42 -43v-298c0 -23 -19 -43 -42 -43h-299c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h299z" />
+    <glyph glyph-name="looks_4" unicode="looks_&#x34;" 
+d="M320 149v214h-43v-86h-42v86h-43v-128h85v-86h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="looks_5" unicode="looks_&#x35;" 
+d="M320 320v43h-128v-128h85v-43h-85v-43h85c23 0 43 19 43 43v43c0 24 -20 42 -43 42h-42v43h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="looks_6" unicode="looks_&#x36;" 
+d="M320 320v43h-85c-23 0 -43 -19 -43 -43v-128c0 -24 20 -43 43 -43h42c23 0 43 19 43 43v43c0 24 -20 42 -43 42h-42v43h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM235 192v43h42v-43h-42z" />
+    <glyph glyph-name="looks_one" unicode="looks_one" 
+d="M299 149v214h-86v-43h43v-171h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="looks_two" unicode="looks_two" 
+d="M320 277v43c0 24 -20 43 -43 43h-85v-43h85v-43h-42c-23 0 -43 -18 -43 -42v-86h128v43h-85v43h42c23 0 43 18 43 42zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="loop" unicode="loop" 
+d="M256 128v64l85 -85l-85 -86v64c-94 0 -171 77 -171 171c0 33 10 65 27 91l31 -31c-10 -18 -15 -38 -15 -60c0 -71 57 -128 128 -128zM256 427c94 0 171 -77 171 -171c0 -33 -10 -65 -27 -91l-31 31c10 18 15 38 15 60c0 71 -57 128 -128 128v-64l-85 85l85 86v-64z" />
+    <glyph glyph-name="loupe" unicode="loupe" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213v-171c0 -23 -19 -42 -42 -42h-171c-118 0 -213 95 -213 213s95 213 213 213zM277 363v-86h86v-42h-86v-86h-42v86h-86v42h86v86h42z" />
+    <glyph glyph-name="low_priority" unicode="low_priority" 
+d="M43 267c0 76 62 138 138 138h75v-42h-75c-53 0 -96 -43 -96 -96s43 -96 96 -96h11v42l64 -64l-64 -64v43h-11c-76 0 -138 63 -138 139zM299 171h170v-43h-170v43zM299 288h170v-43h-170v43zM299 405h170v-42h-170v42z" />
+    <glyph glyph-name="loyalty" unicode="loyalty" 
+d="M368 186c10 10 16 23 16 38c0 29 -24 53 -53 53c-15 0 -28 -5 -38 -15l-16 -16l-15 16c-10 10 -23 15 -38 15c-29 0 -53 -24 -53 -53c0 -15 5 -28 15 -38l91 -91zM117 363c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM457 265c8 -8 12 -18 12 -30
+s-4 -22 -12 -30l-150 -150c-8 -8 -18 -12 -30 -12s-22 4 -30 12l-192 192c-8 8 -12 18 -12 30v150c0 23 19 42 42 42h150c12 0 22 -4 30 -12z" />
+    <glyph glyph-name="mail" unicode="mail" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="mail_outline" unicode="mail_outline" 
+d="M256 277l171 107h-342zM427 128v213l-171 -106l-171 106v-213h342zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="map" unicode="map" 
+d="M320 107v253l-128 45v-253zM437 448c6 0 11 -5 11 -11v-322c0 -5 -4 -9 -8 -10l-120 -41l-128 45l-114 -44l-3 -1c-6 0 -11 5 -11 11v322c0 5 4 9 8 10l120 41l128 -45l114 44z" />
+    <glyph glyph-name="markunread" unicode="markunread" 
+d="M427 341v43l-171 -107l-171 107v-43l171 -106zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="markunread_mailbox" unicode="markunread_mailbox" 
+d="M427 384c23 0 42 -20 42 -43v-256c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v256c0 23 19 43 42 43h43v128h171v-85h-128v-171h42v128h214z" />
+    <glyph glyph-name="memory" unicode="memory" 
+d="M363 149v214h-214v-214h214zM448 277h-43v-42h43v-43h-43v-43c0 -23 -19 -42 -42 -42h-43v-43h-43v43h-42v-43h-43v43h-43c-23 0 -42 19 -42 42v43h-43v43h43v42h-43v43h43v43c0 23 19 42 42 42h43v43h43v-43h42v43h43v-43h43c23 0 42 -19 42 -42v-43h43v-43zM277 235v42
+h-42v-42h42zM320 320v-128h-128v128h128z" />
+    <glyph glyph-name="menu" unicode="menu" 
+d="M64 384h384v-43h-384v43zM64 235v42h384v-42h-384zM64 128v43h384v-43h-384z" />
+    <glyph glyph-name="merge_type" unicode="merge_type" 
+d="M160 341l96 96l96 -96h-75v-136l-128 -128l-30 30l116 115v119h-75zM363 77l-73 72l30 30l73 -72z" />
+    <glyph glyph-name="message" unicode="message" 
+d="M384 341v43h-256v-43h256zM384 277v43h-256v-43h256zM384 213v43h-256v-43h256zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="mic" unicode="mic" 
+d="M369 277h36c0 -73 -58 -133 -128 -143v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -108 113 -108s113 44 113 108zM256 213c-35 0 -64 29 -64 64v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z" />
+    <glyph glyph-name="mic_none" unicode="mic_none" 
+d="M369 277h36c0 -73 -58 -133 -128 -143v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -108 113 -108s113 44 113 108zM230 407v-132c0 -14 12 -25 26 -25s25 11 25 25l1 132c0 14 -12 26 -26 26s-26 -12 -26 -26zM256 213c-35 0 -64 29 -64 64v128c0 35 29 64 64 64
+s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z" />
+    <glyph glyph-name="mic_off" unicode="mic_off" 
+d="M91 448l357 -357l-27 -27l-89 89c-16 -10 -36 -16 -55 -19v-70h-42v70c-70 10 -128 70 -128 143h36c0 -64 54 -108 113 -108c17 0 34 4 49 11l-35 35c-4 -1 -9 -2 -14 -2c-35 0 -64 29 -64 64v16l-128 128zM320 274l-128 127v4c0 35 29 64 64 64s64 -29 64 -64v-131z
+M405 277c0 -25 -7 -49 -19 -70l-26 27c6 13 9 27 9 43h36z" />
+    <glyph glyph-name="mms" unicode="mms" 
+d="M107 213h298l-96 128l-74 -96l-54 64zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="mode_comment" unicode="mode_comment" 
+d="M469 427v-384l-85 85h-299c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h342c23 0 42 -19 42 -42z" />
+    <glyph glyph-name="mode_edit" unicode="mode_edit" 
+d="M442 362l-39 -39l-80 80l39 39c8 8 22 8 30 0l50 -50c8 -8 8 -22 0 -30zM64 144l236 236l80 -80l-236 -236h-80v80z" />
+    <glyph glyph-name="monetization_on" unicode="monetization_on" 
+d="M286 126c37 7 67 28 67 67c0 54 -47 73 -90 84s-56 23 -56 41c0 20 19 35 51 35c34 0 46 -16 47 -40h42c-1 33 -21 62 -61 72v42h-57v-42c-37 -8 -66 -31 -66 -68c0 -44 36 -65 89 -78c48 -11 57 -28 57 -46c0 -13 -9 -34 -51 -34c-39 0 -55 18 -57 40h-42
+c2 -41 34 -64 70 -72v-42h57v41zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="money_off" unicode="money_off" 
+d="M114 425l311 -312l-27 -27l-47 48c-13 -12 -32 -20 -52 -24v-46h-64v46c-41 9 -76 35 -79 82h47c2 -25 20 -45 64 -45c29 0 44 10 51 20l-75 74c-50 15 -83 40 -83 84l-73 73zM267 365c-13 0 -24 -2 -33 -6l-31 31c10 5 21 9 32 12v46h64v-47c45 -11 67 -44 68 -81h-47
+c-1 27 -15 45 -53 45z" />
+    <glyph glyph-name="monochrome_photos" unicode="monochrome_photos" 
+d="M427 107v256h-171v-22c60 0 107 -46 107 -106s-47 -107 -107 -107v38c-38 0 -68 31 -68 69s30 68 68 68v-137c38 0 68 31 68 69s-30 68 -68 68v38c-60 0 -107 -46 -107 -106s47 -107 107 -107v-21h171zM427 405c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-342
+c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h69l38 43h128l38 -43h69z" />
+    <glyph glyph-name="mood" unicode="mood" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="mood_bad" unicode="mood_bad" 
+d="M256 213c50 0 92 -30 109 -74h-218c17 44 59 74 109 74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="more" unicode="more" 
+d="M405 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM299 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM192 224c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM469 448c23 0 43 -20 43 -43v-298
+c0 -23 -20 -43 -43 -43h-318c-15 0 -28 8 -36 19l-115 173l115 173c8 11 19 19 34 19h320z" />
+    <glyph glyph-name="more_horiz" unicode="more_horiz" 
+d="M256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM384 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM128 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z" />
+    <glyph glyph-name="more_vert" unicode="more_vert" 
+d="M256 171c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM256 341c-23 0 -43 20 -43 43s20 43 43 43s43 -20 43 -43s-20 -43 -43 -43z" />
+    <glyph glyph-name="motorcycle" unicode="motorcycle" 
+d="M405 149c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM167 192h-60v43h60c-9 25 -33 42 -60 42c-35 0 -64 -29 -64 -64s29 -64 64 -64c27 0 51 18 60 43zM415 319c55 -4 97 -49 97 -106c0 -60 -47 -106 -107 -106s-106 46 -106 106c0 13 2 26 6 38
+l-59 -59h-35c-10 -49 -52 -85 -104 -85c-60 0 -107 46 -107 106s47 107 107 107h247l-43 43h-76v42h94z" />
+    <glyph glyph-name="mouse" unicode="mouse" 
+d="M235 489v-169h-150c0 87 66 159 150 169zM85 192v85h342v-85c0 -94 -77 -171 -171 -171s-171 77 -171 171zM277 489c84 -10 150 -82 150 -169h-150v169z" />
+    <glyph glyph-name="move_to_inbox" unicode="move_to_inbox" 
+d="M341 299l-85 -86l-85 86h42v64h86v-64h42zM405 192v213h-299v-213h86c0 -35 29 -64 64 -64s64 29 64 64h85zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-299c-24 0 -42 20 -42 43v298c0 23 18 43 42 43h299z" />
+    <glyph glyph-name="movie" unicode="movie" 
+d="M384 427h85v-299c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h22l42 -86h64l-42 86h42l43 -86h64l-43 86h43l43 -86h64z" />
+    <glyph glyph-name="movie_creation" unicode="movie_creation" 
+d="M384 427h85v-299c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h22l42 -86h64l-42 86h42l43 -86h64l-43 86h43l43 -86h64z" />
+    <glyph glyph-name="movie_filter" unicode="movie_filter" 
+d="M361 257l44 20l-44 20l-20 44l-20 -44l-44 -20l44 -20l20 -44zM240 187l59 26l-59 27l-27 59l-26 -59l-59 -27l59 -26l26 -59zM384 427h85v-299c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h22l42 -64h64l-42 64h42l43 -64h64l-43 64h43
+l43 -64h64z" />
+    <glyph glyph-name="multiline_chart" unicode="multiline_chart" 
+d="M469 364l-65 -73c23 -37 39 -82 44 -131h-43c-4 35 -15 68 -31 97l-86 -97l-85 86l-128 -128l-32 32l160 160l85 -86l61 70c-36 42 -86 69 -144 69c-50 0 -96 -20 -132 -52l-30 30c44 39 100 64 162 64c69 0 129 -30 173 -79l61 68z" />
+    <glyph glyph-name="music_note" unicode="music_note" 
+d="M256 448h128v-85h-85v-214c0 -47 -39 -85 -86 -85s-85 38 -85 85s38 86 85 86c16 0 30 -5 43 -12v225z" />
+    <glyph glyph-name="music_video" unicode="music_video" 
+d="M171 192c0 35 29 64 64 64c7 0 14 -2 21 -4v132h107v-43h-64v-150c0 -35 -29 -63 -64 -63s-64 29 -64 64zM448 107v298h-384v-298h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="my_location" unicode="my_location" 
+d="M256 107c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149s66 -149 149 -149zM447 277h44v-42h-44c-10 -89 -81 -160 -170 -170v-44h-42v44c-89 10 -160 81 -170 170h-44v42h44c10 89 81 160 170 170v44h42v-44c89 -10 160 -81 170 -170zM256 341
+c47 0 85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85s38 85 85 85z" />
+    <glyph glyph-name="nature" unicode="nature" 
+d="M277 168v-83h128v-42h-298v42h128v84c-71 12 -125 73 -125 147c0 83 67 150 150 150s149 -67 149 -150c0 -77 -58 -139 -132 -148z" />
+    <glyph glyph-name="nature_people" unicode="nature_people" 
+d="M96 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM473 316c0 -77 -58 -139 -132 -148v-83h64v-42h-341v106h-21v86c0 12 9 21 21 21h64c12 0 21 -9 21 -21v-86h-21v-64h171v84c-71 12 -125 73 -125 147c0 83 67 150 150 150s149 -67 149 -150z
+" />
+    <glyph glyph-name="navigate_before" unicode="navigate_before" 
+d="M329 354l-98 -98l98 -98l-30 -30l-128 128l128 128z" />
+    <glyph glyph-name="navigate_next" unicode="navigate_next" 
+d="M213 384l128 -128l-128 -128l-30 30l98 98l-98 98z" />
+    <glyph glyph-name="navigation" unicode="navigation" 
+d="M256 469l160 -390l-15 -15l-145 64l-145 -64l-15 15z" />
+    <glyph glyph-name="near_me" unicode="near_me" 
+d="M448 448l-161 -384h-21l-56 146l-146 56v21z" />
+    <glyph glyph-name="network_cell" unicode="network_cell" 
+d="M469 43h-426l426 426v-426z" />
+    <glyph glyph-name="network_check" unicode="network_check" 
+d="M107 235c43 43 100 63 156 61l-28 -61c-31 -4 -62 -19 -86 -43zM363 192c-8 8 -17 15 -26 21l12 62c20 -10 39 -23 56 -40zM448 277c-26 26 -56 46 -88 59l11 60c44 -16 85 -41 120 -76zM21 320c80 80 190 110 293 92l-25 -57c-80 10 -164 -17 -225 -78zM339 405
+c6 0 11 -4 11 -10l-52 -275v-1c-4 -19 -22 -34 -42 -34c-24 0 -43 19 -43 43c0 7 2 15 5 21l111 248c1.57297 4.7189 4.56186 8 10 8z" />
+    <glyph glyph-name="network_locked" unicode="network_locked" 
+d="M448 171v32c0 18 -14 32 -32 32s-32 -14 -32 -32v-32h64zM469 171c12 0 22 -10 22 -22v-85c0 -12 -10 -21 -22 -21h-106c-12 0 -22 9 -22 21v85c0 12 10 22 22 22v32c0 29 24 53 53 53s53 -24 53 -53v-32zM416 299c-53 0 -96 -43 -96 -96v-6c-13 -12 -21 -29 -21 -48v-64
+h-278l406 406v-193c-4 0 -7 1 -11 1z" />
+    <glyph glyph-name="network_wifi" unicode="network_wifi" 
+d="M436.25 278.586c0.284113 -0.222489 0.53415 -0.418301 0.749753 -0.585993l-181 -224l-181 224c0.215604 0.167692 0.46564 0.363504 0.749753 0.585993l-67.7498 84.414c10 7 105 85 248 85s238 -78 248 -85z" />
+    <glyph glyph-name="new_releases" unicode="new_releases" 
+d="M277 235v128h-42v-128h42zM277 149v43h-42v-43h42zM491 256l-52 -59l7 -79l-77 -17l-40 -68l-73 31l-73 -31l-40 67l-77 18l7 79l-52 59l52 60l-7 78l77 17l40 68l73 -31l73 31l40 -68l77 -17l-7 -79z" />
+    <glyph glyph-name="next_week" unicode="next_week" 
+d="M235 117l85 86l-85 85l-22 -21l64 -64l-64 -64zM213 405v-42h86v42h-86zM299 448c23.3225 0 42 -19.4985 42 -43v-42h86c23 0 42 -20 42 -43v-235c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v235c0 23 19 43 42 43h86v42c0 23 19 43 42 43h86z" />
+    <glyph glyph-name="nfc" unicode="nfc" 
+d="M384 384v-256h-256v256h85v-43h-42v-170h170v170h-64v-48c13 -7 22 -21 22 -37c0 -23 -20 -43 -43 -43s-43 20 -43 43c0 16 9 30 22 37v48c0 23 19 43 42 43h107zM427 85v342h-342v-342h342zM427 469c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-342
+c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="no_encryption" unicode="no_encryption" 
+d="M190 384v-26l-39 39c6 53 50 94 105 94c59 0 107 -48 107 -107v-43h21c23 0 43 -19 43 -42v-178l-221 220h116v43c0 36 -30 66 -66 66s-66 -30 -66 -66zM448 47l-26 -26l-24 24c-4 -1 -9 -2 -14 -2h-256c-23 0 -43 19 -43 42v214c0 16 10 30 23 37l-44 43l26 26z" />
+    <glyph glyph-name="no_sim" unicode="no_sim" 
+d="M78 429l373 -372l-28 -28l-40 41c-6 -3 -13 -6 -20 -6h-214c-23 0 -42 20 -42 43v239l-56 56zM405 405v-249l-242 242l50 50h150c23 0 42 -20 42 -43z" />
+    <glyph glyph-name="not_interested" unicode="not_interested" 
+d="M391 151c23 29 36 66 36 105c0 94 -77 171 -171 171c-39 0 -76 -13 -105 -36zM256 85c39 0 76 13 105 36l-240 240c-23 -29 -36 -66 -36 -105c0 -94 77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="note" unicode="note" 
+d="M320 395v-118h117zM469 299v-171c0 -23 -19 -42 -42 -42l-342 -1c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h256z" />
+    <glyph glyph-name="note_add" unicode="note_add" 
+d="M277 320h118l-118 117v-117zM341 171v42h-64v64h-42v-64h-64v-42h64v-64h42v64h64zM299 469l128 -128v-256c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42h171z" />
+    <glyph glyph-name="notifications" unicode="notifications" 
+d="M384 171l43 -43v-21h-342v21l43 43v106c0 66 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135v-106zM256 43c-24 0 -43 19 -43 42h86c0 -23 -20 -42 -43 -42z" />
+    <glyph glyph-name="notifications_active" unicode="notifications_active" 
+d="M256 43c-24 0 -43 19 -43 42h85c0 -24.8376 -18.6125 -42 -42 -42zM384 277v-106l43 -43v-21h-342v21l43 43v106c0 66 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135zM426 288c-3 57 -32 106 -75 137l30 30c51 -39 85 -99 88 -167h-43z
+M162 425c-44 -31 -73 -80 -76 -137h-43c3 68 37 128 88 167z" />
+    <glyph glyph-name="notifications_none" unicode="notifications_none" 
+d="M341 149v128c0 53 -32 96 -85 96s-85 -43 -85 -96v-128h170zM384 171l43 -43v-21h-342v21l43 43v106c0 66 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135v-106zM256 43c-23 0 -43 19 -43 42h86c0 -23 -20 -42 -43 -42z" />
+    <glyph glyph-name="notifications_off" unicode="notifications_off" 
+d="M384 199l-191 201c5 2 10 5 15 7h1l6 3c3 1 6 1 9 2v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -69 96 -135v-78zM256 43c-24 0 -43 18 -43 42h86c0 -24 -19 -42 -43 -42zM167 381c93.6174 -96.7159 187.67 -192.997 281 -290l-27 -27l-43 43h-293v21l43 43v107
+c0 27 6 52 17 73l-60 59l27 28z" />
+    <glyph glyph-name="notifications_paused" unicode="notifications_paused" 
+d="M309 303v38h-106v-38h59l-59 -73v-38h106v38h-59zM384 171l43 -43v-21h-342v21l43 43v106c0 65 35 120 96 135v15c0 18 14 32 32 32s32 -14 32 -32v-15c61 -15 96 -70 96 -135v-106zM256 43c-24 0 -43 19 -43 42h86c0 -23 -20 -42 -43 -42z" />
+    <glyph glyph-name="offline_pin" unicode="offline_pin" 
+d="M220 213l143 143l-30 30l-113 -113l-41 41l-30 -30zM363 128v43h-214v-43h214zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="ondemand_video" unicode="ondemand_video" 
+d="M341 277l-149 -85v171zM448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="opacity" unicode="opacity" 
+d="M128 213h256c0 43 -14 69 -38 93l-90 94l-90 -93c-24 -24 -38 -51 -38 -94zM377 341c33 -33 50 -77 50 -120s-17 -88 -50 -121s-77 -50 -121 -50s-88 17 -121 50s-50 78 -50 121s17 87 50 120l121 121z" />
+    <glyph glyph-name="open_in_browser" unicode="open_in_browser" 
+d="M256 299l85 -86h-64v-128h-42v128h-64zM405 427c24 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-85v43h85v213h-298v-213h85v-43h-85c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="open_in_new" unicode="open_in_new" 
+d="M299 448h149v-149h-43v76l-209 -209l-30 30l209 209h-76v43zM405 107v149h43v-149c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h149v-43h-149v-298h298z" />
+    <glyph glyph-name="open_with" unicode="open_with" 
+d="M299 192v-64h64l-107 -107l-107 107h64v64h86zM491 256l-107 -107v64h-64v86h64v64zM192 299v-86h-64v-64l-107 107l107 107v-64h64zM213 320v64h-64l107 107l107 -107h-64v-64h-86z" />
+    <glyph glyph-name="pages" unicode="pages" 
+d="M405 448c23 0 43 -20 43 -43v-128h-107l22 86l-86 -22v107h128zM363 149l-22 86h107v-128c0 -23 -20 -43 -43 -43h-128v107zM171 235l-22 -86l86 22v-107h-128c-23 0 -43 20 -43 43v128h107zM64 405c0 23 20 43 43 43h128v-107l-86 22l22 -86h-107v128z" />
+    <glyph glyph-name="pageview" unicode="pageview" 
+d="M358 124l30 30l-62 62c9 15 15 32 15 51c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96c19 0 36 6 51 15zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342zM245 320c29 0 54 -24 54 -53
+s-25 -54 -54 -54s-53 25 -53 54s24 53 53 53z" />
+    <glyph glyph-name="palette" unicode="palette" 
+d="M373 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM309 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM203 341c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 256c18 0 32 14 32 32s-14 32 -32 32
+s-32 -14 -32 -32s14 -32 32 -32zM256 448c106 0 192 -77 192 -171c0 -59 -48 -106 -107 -106h-37c-18 0 -32 -14 -32 -32c0 -8 3 -15 8 -21s8 -14 8 -22c0 -18 -14 -32 -32 -32c-106 0 -192 86 -192 192s86 192 192 192z" />
+    <glyph glyph-name="pan_tool" unicode="pan_tool" 
+d="M491 395v-310c0 -47 -39 -85 -86 -85h-155c-23 0 -45 9 -61 25l-168 171s27 26 28 26c5 4 11 6 17 6c5 0 9 -1 13 -3c1 0 92 -52 92 -52v254c0 18 14 32 32 32s32 -14 32 -32v-150h21v203c0 18 14 32 32 32s32 -14 32 -32v-203h21v182c0 18 14 32 32 32s32 -14 32 -32
+v-182h22v118c0 18 14 32 32 32s32 -14 32 -32z" />
+    <glyph glyph-name="panorama" unicode="panorama" 
+d="M181 245l-74 -96h298l-96 128l-74 -96zM491 128c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h384c23 0 43 -20 43 -43v-256z" />
+    <glyph glyph-name="panorama_fish_eye" unicode="panorama_fish_eye" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="panorama_horizontal" unicode="panorama_horizontal" 
+d="M457 427c7 0 12 -5 12 -14v-314c0 -9 -5 -14 -12 -14c-2 0 -4 1 -6 2c-63 23 -129 35 -195 35s-132 -12 -195 -35c-2 -1 -4 -2 -6 -2c-7 0 -12 6 -12 14v314c0 9 5 14 12 14c2 0 4 -1 6 -2c63 -23 129 -35 195 -35s132 12 195 35c2 1 4 2 6 2zM427 372
+c-55 -17 -113 -24 -171 -24s-116 8 -171 24v-232c55 16 113 24 171 24s116 -8 171 -24v232z" />
+    <glyph glyph-name="panorama_vertical" unicode="panorama_vertical" 
+d="M140 85h232c-16 55 -24 113 -24 171s8 116 24 171h-232c16 -55 24 -113 24 -171s-8 -116 -24 -171zM425 61c1 -2 2 -4 2 -6c0 -7 -6 -12 -14 -12h-314c-9 0 -14 5 -14 12c0 2 1 4 2 6c23 63 35 129 35 195s-12 132 -35 195c-1 2 -2 4 -2 6c0 7 5 12 14 12h314
+c9 0 14 -5 14 -12c0 -2 -1 -4 -2 -6c-23 -63 -35 -129 -35 -195s12 -132 35 -195z" />
+    <glyph glyph-name="panorama_wide_angle" unicode="panorama_wide_angle" 
+d="M256 427c58 0 112 -6 170 -16l19 -3l6 -19c12 -44 18 -89 18 -133s-6 -89 -18 -133l-6 -19l-19 -3c-58 -10 -112 -16 -170 -16s-112 6 -170 16l-19 3l-6 19c-12 44 -18 89 -18 133s6 89 18 133l6 19l19 3c58 10 112 16 170 16zM256 384c-52 0 -101 -5 -156 -14
+c-10 -38 -15 -76 -15 -114s5 -76 15 -114c55 -9 104 -14 156 -14s101 5 156 14c10 38 15 76 15 114s-5 76 -15 114c-55 9 -104 14 -156 14z" />
+    <glyph glyph-name="party_mode" unicode="party_mode" 
+d="M256 149c59 0 107 48 107 107c0 7 -1 14 -2 21h-45c2 -7 4 -14 4 -21c0 -35 -29 -64 -64 -64h-85c20 -26 50 -43 85 -43zM256 363c-59 0 -107 -48 -107 -107c0 -7 1 -14 2 -21h45c-2 7 -4 14 -4 21c0 35 29 64 64 64h85c-20 26 -50 43 -85 43zM427 427
+c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68l39 42h128l39 -42h68z" />
+    <glyph glyph-name="pause" unicode="pause" 
+d="M299 405h85v-298h-85v298zM128 107v298h85v-298h-85z" />
+    <glyph glyph-name="pause_circle_filled" unicode="pause_circle_filled" 
+d="M320 171v170h-43v-170h43zM235 171v170h-43v-170h43zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="pause_circle_outline" unicode="pause_circle_outline" 
+d="M277 171v170h43v-170h-43zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM192 171v170h43v-170h-43z" />
+    <glyph glyph-name="payment" unicode="payment" 
+d="M427 341v43h-342v-43h342zM427 128v128h-342v-128h342zM427 427c24 0 42 -19 42 -43v-256c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v256c0 24 18 43 42 43h342z" />
+    <glyph glyph-name="people" unicode="people" 
+d="M341 235c50 0 150 -25 150 -75v-53h-128v53c0 32 -17 56 -42 74c7 1 14 1 20 1zM171 235c50 0 149 -25 149 -75v-53h-299v53c0 50 100 75 150 75zM171 277c-35 0 -64 29 -64 64s29 64 64 64s63 -29 63 -64s-28 -64 -63 -64zM341 277c-35 0 -64 29 -64 64s29 64 64 64
+s64 -29 64 -64s-29 -64 -64 -64z" />
+    <glyph glyph-name="people_outline" unicode="people_outline" 
+d="M352 373c-23 0 -43 -19 -43 -42s20 -43 43 -43s43 20 43 43s-20 42 -43 42zM352 256c-41 0 -75 34 -75 75s34 74 75 74s75 -33 75 -74s-34 -75 -75 -75zM160 373c-23 0 -43 -19 -43 -42s20 -43 43 -43s43 20 43 43s-20 42 -43 42zM160 256c-41 0 -75 34 -75 75
+s34 74 75 74s75 -33 75 -74s-34 -75 -75 -75zM459 139v26c0 12 -55 38 -107 38c-23 0 -45 -6 -64 -12c7 -8 11 -16 11 -26v-26h160zM267 139v26c0 12 -55 38 -107 38s-107 -26 -107 -38v-26h214zM352 235c46 0 139 -24 139 -70v-58h-470v58c0 46 93 70 139 70
+c26 0 65 -8 96 -22c31 14 70 22 96 22z" />
+    <glyph glyph-name="perm_camera_mic" unicode="perm_camera_mic" 
+d="M299 235v85c0 23 -20 43 -43 43s-43 -20 -43 -43v-85c0 -23 20 -43 43 -43s43 20 43 43zM427 405c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-150v45c60 10 107 63 107 126h-43c0 -47 -38 -86 -85 -86s-85 39 -85 86h-43c0 -63 47 -116 107 -126v-45h-150
+c-23 0 -42 20 -42 43v256c0 23 19 42 42 42h68l39 43h128l39 -43h68z" />
+    <glyph glyph-name="perm_contact_calendar" unicode="perm_contact_calendar" 
+d="M384 128v21c0 43 -85 66 -128 66s-128 -23 -128 -66v-21h256zM256 384c-35 0 -64 -29 -64 -64s29 -64 64 -64s64 29 64 64s-29 64 -64 64zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43
+h43v-43h21z" />
+    <glyph glyph-name="perm_data_setting" unicode="perm_data_setting" 
+d="M405 75c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM484 96l23 -17c2 -2 2 -5 1 -7l-21 -37c-1 -2 -5 -4 -7 -3l-26 11c-5 -4 -12 -7 -18 -10l-4 -29c0 -3 -3 -4 -6 -4h-42c-3 0 -6 1 -6 4l-4 29c-7 3 -12 6 -18 10l-26 -11c-3 -1 -6 1 -7 3l-21 37
+c-1 2 -1 5 1 7l23 17c0 3 -1 7 -1 11s1 7 1 10l-23 18c-2 2 -2 5 -1 7l21 37c1 2 5 3 7 2l26 -11c6 4 12 8 18 11l4 28c0 3 3 4 6 4h42c3 0 6 -1 6 -4l4 -28c7 -3 12 -7 18 -11l26 11c3 1 6 0 7 -2l21 -37c1 -2 1 -5 -1 -7l-23 -18c1 -3 1 -6 1 -10s-1 -8 -1 -11zM405 267
+c-88 0 -160 -72 -160 -160c0 -7 1 -15 2 -22h-247l427 427l-1 -247c-7 1 -14 2 -21 2z" />
+    <glyph glyph-name="perm_device_information" unicode="perm_device_information" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43zM277 277v-128h-42v128h42zM277 363v-43h-42v43h42z" />
+    <glyph glyph-name="perm_identity" unicode="perm_identity" 
+d="M256 235c57 0 171 -29 171 -86v-64h-342v64c0 57 114 86 171 86zM256 427c47 0 85 -39 85 -86s-38 -85 -85 -85s-85 38 -85 85s38 86 85 86zM256 194c-63 0 -130 -31 -130 -45v-23h260v23c0 14 -67 45 -130 45zM256 386c-25 0 -45 -20 -45 -45s20 -44 45 -44s45 19 45 44
+s-20 45 -45 45z" />
+    <glyph glyph-name="perm_media" unicode="perm_media" 
+d="M149 192h299l-75 96l-53 -64l-75 96zM469 427c23 0 43 -20 43 -43v-213c0 -23 -20 -43 -43 -43h-341c-23 0 -43 20 -43 43l1 256c0 23 19 42 42 42h128l43 -42h170zM43 384v-299h384v-42h-384c-23 0 -43 19 -43 42v299h43z" />
+    <glyph glyph-name="perm_phone_msg" unicode="perm_phone_msg" 
+d="M256 448h192v-149h-128l-64 -64v213zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -60 81 -110 141 -141l47 47c6 6 15 7 22 5
+c24 -8 49 -12 76 -12z" />
+    <glyph glyph-name="perm_scan_wifi" unicode="perm_scan_wifi" 
+d="M235 341h42v43h-42v-43zM277 171v128h-42v-128h42zM256 448c108 0 189 -40 256 -91l-256 -314l-256 315c67 51 148 90 256 90z" />
+    <glyph glyph-name="person" unicode="person" 
+d="M256 213c57 0 171 -28 171 -85v-43h-342v43c0 57 114 85 171 85zM256 256c-47 0 -85 38 -85 85s38 86 85 86s85 -39 85 -86s-38 -85 -85 -85z" />
+    <glyph glyph-name="person_add" unicode="person_add" 
+d="M320 213c57 0 171 -28 171 -85v-43h-342v43c0 57 114 85 171 85zM128 299h64v-43h-64v-64h-43v64h-64v43h64v64h43v-64zM320 256c-47 0 -85 38 -85 85s38 86 85 86s85 -39 85 -86s-38 -85 -85 -85z" />
+    <glyph glyph-name="person_outline" unicode="person_outline" 
+d="M256 235c57 0 171 -29 171 -86v-64h-342v64c0 57 114 86 171 86zM256 427c47 0 85 -39 85 -86s-38 -85 -85 -85s-85 38 -85 85s38 86 85 86zM256 194c-63 0 -130 -31 -130 -45v-23h260v23c0 14 -67 45 -130 45zM256 386c-25 0 -45 -20 -45 -45s20 -44 45 -44s45 19 45 44
+s-20 45 -45 45z" />
+    <glyph glyph-name="person_pin" unicode="person_pin" 
+d="M384 171v19c0 43 -85 66 -128 66s-128 -23 -128 -66v-19h256zM256 399c-32 0 -58 -26 -58 -58s26 -57 58 -57s58 25 58 57s-26 58 -58 58zM405 469c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-85l-64 -64l-64 64h-85c-24 0 -43 20 -43 43v299c0 23 19 42 43 42h298
+z" />
+    <glyph glyph-name="person_pin_circle" unicode="person_pin_circle" 
+d="M256 213c36 0 67 18 85 46c0 28 -57 44 -85 44s-85 -16 -85 -44c18 -28 49 -46 85 -46zM256 427c-23 0 -43 -20 -43 -43c0 -24 20 -43 43 -43s43 19 43 43c0 23 -20 43 -43 43zM256 469c82 0 149 -67 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277
+c0 82 67 149 149 149z" />
+    <glyph glyph-name="personal_video" unicode="personal_video" 
+d="M448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="pets" unicode="pets" 
+d="M370 195c28 -28 63 -58 56 -102c-6 -22 -22 -44 -50 -50c-16 -3 -65 9 -118 9h-4c-53 0 -102 -12 -118 -9c-28 6 -44 28 -50 50c-6 43 28 74 56 102c19 22 34 40 53 62c10 12 22 23 37 28c2 1 5 2 7 2c6 1 11 1 17 1s12 0 17 -1c2 0 5 -1 7 -2c15 -5 27 -16 37 -28
+c19 -22 34 -40 53 -62zM363 309c0 29 24 54 53 54s53 -25 53 -54s-24 -53 -53 -53s-53 24 -53 53zM267 395c0 29 24 53 53 53s53 -24 53 -53s-24 -54 -53 -54s-53 25 -53 54zM139 395c0 29 24 53 53 53s53 -24 53 -53s-24 -54 -53 -54s-53 25 -53 54zM43 309
+c0 29 24 54 53 54s53 -25 53 -54s-24 -53 -53 -53s-53 24 -53 53z" />
+    <glyph glyph-name="phone" unicode="phone" 
+d="M141 282c31 -60 81 -110 141 -141l47 47c6 6 15 8 22 5c24 -8 50 -12 76 -12c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22z" />
+    <glyph glyph-name="phone_android" unicode="phone_android" 
+d="M368 128v299h-224v-299h224zM299 64v21h-86v-21h86zM341 491c35 0 64 -29 64 -64v-342c0 -35 -29 -64 -64 -64h-170c-35 0 -64 29 -64 64v342c0 35 29 64 64 64h170z" />
+    <glyph glyph-name="phone_bluetooth_speaker" unicode="phone_bluetooth_speaker" 
+d="M427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12zM384 358v-40l20 20zM384 450
+v-40l20 20zM314 309l-15 15l59 60l-59 60l15 15l49 -49v81h10l61 -61l-46 -46l46 -46l-61 -61h-10v81z" />
+    <glyph glyph-name="phone_forwarded" unicode="phone_forwarded" 
+d="M427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12zM384 277v64h-85v86h85v64
+l107 -107z" />
+    <glyph glyph-name="phone_in_talk" unicode="phone_in_talk" 
+d="M320 256c0 35 -29 64 -64 64v43c59 0 107 -48 107 -107h-43zM405 256c0 83 -66 149 -149 149v43c106 0 192 -86 192 -192h-43zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76
+c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z" />
+    <glyph glyph-name="phone_iphone" unicode="phone_iphone" 
+d="M341 128v299h-192v-299h192zM245 43c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM331 491c29 0 53 -25 53 -54v-362c0 -29 -24 -54 -53 -54h-171c-29 0 -53 25 -53 54v362c0 29 24 54 53 54h171z" />
+    <glyph glyph-name="phone_locked" unicode="phone_locked" 
+d="M410 427v10c0 20 -17 37 -37 37s-36 -17 -36 -37v-10h73zM427 427c12 0 21 -10 21 -22v-85c0 -12 -9 -21 -21 -21h-107c-12 0 -21 9 -21 21v85c0 12 9 22 21 22v10c0 29 24 54 53 54s54 -25 54 -54v-10zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21
+c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z" />
+    <glyph glyph-name="phone_missed" unicode="phone_missed" 
+d="M506 156c4 -4 6 -9 6 -15s-2 -11 -6 -15l-53 -53c-4 -4 -9 -6 -15 -6s-11 2 -15 6c-17 16 -36 30 -57 40c-7 3 -12 11 -12 19v66c-31 10 -64 15 -98 15s-67 -5 -98 -15v-66c0 -9 -5 -17 -12 -20c-21 -10 -40 -23 -57 -39c-4 -4 -9 -6 -15 -6s-11 2 -15 6l-53 53
+c-4 4 -6 9 -6 15s2 11 6 15c65 62 153 100 250 100s185 -38 250 -100zM139 395v-75h-32v128h128v-32h-75l96 -96l128 128l21 -21l-149 -150z" />
+    <glyph glyph-name="phone_paused" unicode="phone_paused" 
+d="M405 448h43v-149h-43v149zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -61 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z
+M363 448v-149h-43v149h43z" />
+    <glyph glyph-name="phonelink" unicode="phonelink" 
+d="M469 149v150h-85v-150h85zM491 341c12 0 21 -9 21 -21v-213c0 -12 -9 -22 -21 -22h-128c-12 0 -22 10 -22 22v213c0 12 10 21 22 21h128zM85 384v-235h214v-64h-299v64h43v235c0 23 19 43 42 43h384v-43h-384z" />
+    <glyph glyph-name="phonelink_erase" unicode="phonelink_erase" 
+d="M405 491c23 0 43 -20 43 -43v-384c0 -23 -20 -43 -43 -43h-213c-23 0 -43 20 -43 43v64h43v-43h213v342h-213v-43h-43v64c0 23 20 43 43 43h213zM277 337l-85 -85l85 -86l-21 -21l-85 85l-86 -85l-21 21l85 86l-85 85l21 21l86 -85l85 85z" />
+    <glyph glyph-name="phonelink_lock" unicode="phonelink_lock" 
+d="M203 277v32c0 17 -15 28 -32 28s-32 -11 -32 -28v-32h64zM230 277c13 0 26 -12 26 -27v-75c0 -13 -13 -26 -28 -26h-117c-13 0 -26 13 -26 28v75c0 13 13 25 26 25v32c0 30 30 54 60 54s59 -24 59 -54v-32zM405 491c23 0 43 -20 43 -43v-384c0 -23 -20 -43 -43 -43h-213
+c-23 0 -43 20 -43 43v64h43v-43h213v342h-213v-43h-43v64c0 23 20 43 43 43h213z" />
+    <glyph glyph-name="phonelink_off" unicode="phonelink_off" 
+d="M491 341c12 0 21 -9 21 -21v-213c0 -12 -9 -22 -21 -22h-4l-64 64h46v150h-85v-111l-43 43v89c0 12 10 21 22 21h128zM85 378v-229h229zM41 477c138.107 -138.226 275.985 -276.682 414 -415l-27 -27l-50 50h-378v64h43v235c0 10 4 20 10 27l-39 39zM469 384h-281l-43 43
+h324v-43z" />
+    <glyph glyph-name="phonelink_ring" unicode="phonelink_ring" 
+d="M299 85v342h-214v-342h214zM299 491c23 0 42 -20 42 -43v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43h214zM384 303c26 -28 26 -66 0 -92l-21 22c11 15 11 34 0 49zM429 348c53 -51 53 -133 0 -182l-22 22c38 41 38 100 0 138z" />
+    <glyph glyph-name="phonelink_setup" unicode="phonelink_setup" 
+d="M405 491c23 0 43 -20 43 -43v-384c0 -23 -20 -43 -43 -43h-213c-23 0 -43 20 -43 43v64h43v-43h213v342h-213v-43h-43v64c0 23 20 43 43 43h213zM171 213c23 0 42 20 42 43s-19 43 -42 43s-43 -20 -43 -43s20 -43 43 -43zM252 245l23 -19c2 -2 4 -4 2 -6l-21 -37
+c-2 -2 -4 -2 -6 -2l-28 11c-6 -4 -13 -9 -19 -11l-5 -27c-2 -2 -4 -5 -6 -5h-43c-2 0 -6 3 -4 5l-4 27c-6 2 -13 7 -19 11l-30 -9c-2 -2 -5 1 -7 3l-21 36c0 2 0 4 2 8l24 17v22l-24 17c-2 2 -4 4 -2 6l21 37c2 2 5 2 7 2l27 -11c6 4 14 9 20 11l4 27c2 2 4 5 6 5h43
+c4 0 6 -3 6 -5l5 -27c6 -2 13 -7 19 -11l28 9c2 2 4 -1 6 -3l21 -36c0 -2 0 -4 -2 -6l-23 -17v-22z" />
+    <glyph glyph-name="photo" unicode="photo" 
+d="M181 224l-74 -96h298l-96 128l-74 -96zM448 107c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298c23 0 43 -20 43 -43v-298z" />
+    <glyph glyph-name="photo_album" unicode="photo_album" 
+d="M128 107h256l-82 109l-64 -82l-46 55zM128 427v-171l53 32l54 -32v171h-107zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v342c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="photo_camera" unicode="photo_camera" 
+d="M256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM192 469h128l39 -42h68c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68zM188 256c0 38 30 68 68 68s68 -30 68 -68
+s-30 -68 -68 -68s-68 30 -68 68z" />
+    <glyph glyph-name="photo_filter" unicode="photo_filter" 
+d="M283 283l58 -27l-58 -27l-27 -58l-27 58l-58 27l58 27l27 58zM363 299l-20 44l-44 20l44 20l20 44l20 -44l44 -20l-44 -20zM406 299h42v-192c0 -23 -19 -43 -42 -43h-299c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h192v-43h-192v-298h299v192z" />
+    <glyph glyph-name="photo_library" unicode="photo_library" 
+d="M43 384h42v-299h299v-42h-299c-23 0 -42 19 -42 42v299zM235 256l-64 -85h256l-86 106l-63 -79zM469 171c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256c23 0 42 -19 42 -42v-256z" />
+    <glyph glyph-name="photo_size_select_actual" unicode="photo_size_select_actual" 
+d="M107 149h298l-96 128l-74 -96l-54 64zM448 448c21 0 43 -22 43 -43v-298c0 -21 -22 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 21 22 43 43 43h384z" />
+    <glyph glyph-name="photo_size_select_large" unicode="photo_size_select_large" 
+d="M64 107h213l-68 91l-53 -69l-39 46zM21 277h299v-213h-256c-23 0 -43 20 -43 43v170zM107 448h42v-43h-42v43zM192 448h43v-43h-43v43zM64 448v-43h-43c0 21 22 43 43 43zM363 107h42v-43h-42v43zM363 448h42v-43h-42v43zM21 363h43v-43h-43v43zM448 448
+c21 0 43 -22 43 -43h-43v43zM448 363h43v-43h-43v43zM277 448h43v-43h-43v43zM491 107c0 -21 -22 -43 -43 -43v43h43zM448 277h43v-42h-43v42zM448 192h43v-43h-43v43z" />
+    <glyph glyph-name="photo_size_select_small" unicode="photo_size_select_small" 
+d="M149 448v-43h-42v43h42zM235 448v-43h-43v43h43zM64 277v-42h-43v42h43zM64 448v-43h-43c0 21 22 43 43 43zM405 107v-43h-42v43h42zM405 448v-43h-42v43h42zM320 107v-43h-43v43h43zM64 363v-43h-43v43h43zM64 64c-23 0 -43 20 -43 43v85h214v-128h-171zM448 448
+c21 0 43 -22 43 -43h-43v43zM491 363v-43h-43v43h43zM320 448v-43h-43v43h43zM491 107c0 -21 -22 -43 -43 -43v43h43zM491 277v-42h-43v42h43zM491 192v-43h-43v43h43z" />
+    <glyph glyph-name="picture_as_pdf" unicode="picture_as_pdf" 
+d="M299 267v64h21v-64h-21zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42zM192 309v22h21v-22h-21zM437 331v32h-64v-128h32v42h32v32h-32v22h32zM352 267v64c0 18 -14 32 -32 32h-53v-128h53c18 0 32 14 32 32zM245 309v22c0 18 -14 32 -32 32h-53v-128h32v42h21
+c18 0 32 14 32 32zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256z" />
+    <glyph glyph-name="picture_in_picture" unicode="picture_in_picture" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM405 363v-128h-170v128h170z" />
+    <glyph glyph-name="picture_in_picture_alt" unicode="picture_in_picture_alt" 
+d="M448 106v300h-384v-300h384zM491 107c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h384c23 0 43 -19 43 -42v-299zM405 277v-128h-170v128h170z" />
+    <glyph glyph-name="pie_chart" unicode="pie_chart" 
+d="M278 234h191c-10 -101 -90 -181 -191 -191v191zM278 469c101 -10 181 -90 191 -191h-191v191zM235 469v-426c-108 11 -192 102 -192 213s84 202 192 213z" />
+    <glyph glyph-name="pie_chart_outlined" unicode="pie_chart_outlined" 
+d="M277 87c77 10 138 71 148 148h-148v-148zM85 256c0 -87 66 -158 150 -169v338c-84 -10 -150 -82 -150 -169zM277 425v-148h148c-10 77 -71 138 -148 148zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="pin_drop" unicode="pin_drop" 
+d="M107 85h298v-42h-298v42zM213 341c0 -23 20 -42 43 -42c24 0 43 19 43 42s-20 43 -43 43s-43 -20 -43 -43zM384 341c0 -96 -128 -234 -128 -234s-128 138 -128 234c0 71 57 128 128 128s128 -57 128 -128z" />
+    <glyph glyph-name="place" unicode="place" 
+d="M256 267c29 0 53 24 53 53s-24 53 -53 53s-53 -24 -53 -53s24 -53 53 -53zM256 469c83 0 149 -66 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 83 66 149 149 149z" />
+    <glyph glyph-name="play_arrow" unicode="play_arrow" 
+d="M171 405l234 -149l-234 -149v298z" />
+    <glyph glyph-name="play_circle_filled" unicode="play_circle_filled" 
+d="M213 160l128 96l-128 96v-192zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="play_circle_outline" unicode="play_circle_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM213 160v192l128 -96z" />
+    <glyph glyph-name="play_for_work" unicode="play_for_work" 
+d="M128 213h43c0 -47 38 -85 85 -85s85 38 85 85h43c0 -71 -57 -128 -128 -128s-128 57 -128 128zM235 405h42v-119h75l-96 -96l-96 96h75v119z" />
+    <glyph glyph-name="playlist_add" unicode="playlist_add" 
+d="M43 171v42h170v-42h-170zM384 213h85v-42h-85v-86h-43v86h-85v42h85v86h43v-86zM299 384v-43h-256v43h256zM299 299v-43h-256v43h256z" />
+    <glyph glyph-name="playlist_add_check" unicode="playlist_add_check" 
+d="M459 267l32 -32l-149 -150l-97 96l32 32l65 -64zM43 171v42h170v-42h-170zM299 384v-43h-256v43h256zM299 299v-43h-256v43h256z" />
+    <glyph glyph-name="playlist_play" unicode="playlist_play" 
+d="M363 235l106 -64l-106 -64v128zM43 192v43h277v-43h-277zM405 405v-42h-362v42h362zM405 320v-43h-362v43h362z" />
+    <glyph glyph-name="plus_one" unicode="plus_one" 
+d="M309 382l96 23v-277h-42v226l-54 -11v39zM213 341v-85h86v-43h-86v-85h-42v85h-86v43h86v85h42z" />
+    <glyph glyph-name="poll" unicode="poll" 
+d="M363 149v86h-43v-86h43zM277 149v214h-42v-214h42zM192 149v150h-43v-150h43zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="polymer" unicode="polymer" 
+d="M405 427l96 -171l-96 -171h-85l96 171l-56 99l-168 -270h-85l-96 171l96 171h85l-96 -171l56 -99l168 270h85z" />
+    <glyph glyph-name="pool" unicode="pool" 
+d="M299 395c0 29 24 53 53 53s53 -24 53 -53s-24 -54 -53 -54s-53 25 -53 54zM185 256c-12 0 -17 3 -25 8c-4 3 -9 5 -16 8l69 69l-21 22c-24 24 -46 32 -85 32v53c53 0 84 -10 117 -43l137 -136c-3 -2 -6 -4 -9 -5c-8 -5 -13 -8 -25 -8s-16 3 -24 8c-10 6 -23 13 -47 13
+s-37 -7 -47 -13c-8 -5 -12 -8 -24 -8zM469 160c-24 0 -36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14s-36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14s-36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14v43
+c12 0 16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7s16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7s16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7v-43zM469 64c-24 0 -36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7
+c-10 -6 -23 -14 -47 -14s-36 8 -46 14c-8 5 -13 7 -25 7s-16 -2 -24 -7c-10 -6 -23 -14 -47 -14s-37 8 -47 14c-8 5 -12 7 -24 7s-17 -2 -25 -7c-10 -6 -22 -14 -46 -14v43c12 0 16 2 24 7c10 6 23 14 47 14s36 -8 46 -14c8 -5 13 -7 25 -7s16 2 24 7c10 6 23 14 47 14
+s37 -8 47 -14c8 -5 12 -7 24 -7s17 2 25 7c10 6 22 14 46 14s37 -8 47 -14c8 -5 12 -7 24 -7v-43z" />
+    <glyph glyph-name="portable_wifi_off" unicode="portable_wifi_off" 
+d="M70 459l21 -22l357 -357l-27 -27l-160 161h-1l-4 -1c-23 0 -43 20 -43 43l1 4l-34 34c-6 -12 -9 -24 -9 -38c0 -32 17 -59 42 -74l-21 -37c-38 22 -64 64 -64 111c0 26 7 49 20 69l-30 31c-20 -28 -33 -62 -33 -100c0 -63 34 -118 85 -148l-21 -37
+c-64 37 -106 106 -106 185c0 49 16 95 44 131l-44 45zM256 427c-29 0 -56 -7 -80 -20l-31 31c32 20 70 31 111 31c118 0 213 -95 213 -213c0 -41 -11 -79 -31 -111l-32 31c13 24 21 51 21 80c0 94 -77 171 -171 171zM375 208l-35 35c1 4 1 9 1 13c0 47 -38 85 -85 85
+c-4 0 -9 0 -13 -1l-35 35c15 6 31 9 48 9c71 0 128 -57 128 -128c0 -17 -3 -33 -9 -48z" />
+    <glyph glyph-name="portrait" unicode="portrait" 
+d="M405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM352 165v-16h-192v16c0 32 64 48 96 48s96 -16 96 -48zM256 251c-26 0 -48 22 -48 48s22 48 48 48s48 -22 48 -48
+s-22 -48 -48 -48z" />
+    <glyph glyph-name="power" unicode="power" 
+d="M342 363c21 0 42 -22 42 -43v-117l-75 -75v-64h-106v64l-75 75v117c0 21 21 43 42 43h1v85h42v-85h86v85h42z" />
+    <glyph glyph-name="power_input" unicode="power_input" 
+d="M341 192v43h107v-43h-107zM192 192v43h107v-43h-107zM43 192v43h106v-43h-106zM43 320h405v-43h-405v43z" />
+    <glyph glyph-name="power_settings_new" unicode="power_settings_new" 
+d="M380 402c41 -35 68 -88 68 -146c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 58 27 111 68 146l30 -30c-33 -27 -55 -69 -55 -116c0 -83 66 -149 149 -149s149 66 149 149c0 47 -21 88 -55 115zM277 448v-213h-42v213h42z" />
+    <glyph glyph-name="pregnant_woman" unicode="pregnant_woman" 
+d="M341 235v-86h-64v-106h-64v106h-42v150c0 35 29 64 64 64s64 -29 64 -64c25 -10 42 -35 42 -64zM192 427c0 24 19 42 43 42s42 -18 42 -42s-18 -43 -42 -43s-43 19 -43 43z" />
+    <glyph glyph-name="present_to_all" unicode="present_to_all" 
+d="M213 256h-42l85 85l85 -85h-42v-85h-86v85zM448 106v300h-384v-300h384zM448 448c24 0 43 -19 43 -43v-298c0 -24 -19 -43 -43 -43h-384c-24 0 -43 19 -43 43v298c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="print" unicode="print" 
+d="M384 448v-85h-256v85h256zM405 256c12 0 22 9 22 21s-10 22 -22 22s-21 -10 -21 -22s9 -21 21 -21zM341 107v106h-170v-106h170zM405 341c35 0 64 -29 64 -64v-128h-85v-85h-256v85h-85v128c0 35 29 64 64 64h298z" />
+    <glyph glyph-name="priority_high" unicode="priority_high" 
+d="M213 448h86v-256h-86v256zM213 107c0 24 19 42 43 42s43 -18 43 -42s-19 -43 -43 -43s-43 19 -43 43z" />
+    <glyph glyph-name="public" unicode="public" 
+d="M382 141c28 30 45 71 45 115c0 71 -44 133 -107 158v-9c0 -23 -20 -42 -43 -42h-42v-43c0 -12 -10 -21 -22 -21h-42v-43h128c12 0 21 -9 21 -21v-64h21c19 0 35 -13 41 -30zM235 87v41c-23 0 -43 20 -43 43v21l-102 102c-3 -12 -5 -25 -5 -38c0 -87 66 -159 150 -169z
+M256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="publish" unicode="publish" 
+d="M107 213l149 150l149 -150h-85v-128h-128v128h-85zM107 427h298v-43h-298v43z" />
+    <glyph glyph-name="query_builder" unicode="query_builder" 
+d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="question_answer" unicode="question_answer" 
+d="M363 256c0 -12 -10 -21 -22 -21h-213l-85 -86v299c0 12 9 21 21 21h277c12 0 22 -9 22 -21v-192zM448 384c12 0 21 -9 21 -21v-320l-85 85h-235c-12 0 -21 9 -21 21v43h277v192h43z" />
+    <glyph glyph-name="queue" unicode="queue" 
+d="M405 277v43h-85v85h-43v-85h-85v-43h85v-85h43v85h85zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="queue_music" unicode="queue_music" 
+d="M363 384h106v-43h-64v-192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64c7 0 15 -2 22 -4v175zM64 171v42h171v-42h-171zM320 299v-43h-256v43h256zM320 384v-43h-256v43h256z" />
+    <glyph glyph-name="queue_play_next" unicode="queue_play_next" 
+d="M512 128l-96 -96l-32 32l64 64l-64 64l32 32zM277 299h64v-43h-64v-64h-42v64h-64v43h64v64h42v-64zM448 448c23 0 43 -19 43 -43v-170h-43v170h-384v-256h320v-42h-43v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="radio" unicode="radio" 
+d="M427 256v85h-342v-85h256v43h43v-43h43zM149 85c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM69 381l270 110l14 -36l-176 -71h250c24 0 42 -19 42 -43v-256c0 -23 -18 -42 -42 -42h-342c-24 0 -42 19 -42 42v256c0 18 10 34 26 40z" />
+    <glyph glyph-name="radio_button_checked" unicode="radio_button_checked" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM256 363c59 0 107 -48 107 -107s-48 -107 -107 -107s-107 48 -107 107s48 107 107 107z" />
+    <glyph glyph-name="radio_button_unchecked" unicode="radio_button_unchecked" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="rate_review" unicode="rate_review" 
+d="M384 213v43h-117l-43 -43h160zM128 213h53l147 147c4 4 4 11 0 15l-38 38c-4 4 -11 4 -15 0l-147 -147v-53zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="receipt" unicode="receipt" 
+d="M64 43v426l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32l32 -32l32 32v-426l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32l-32 -32l-32 32zM384 320v43h-256v-43h256zM384 235v42h-256v-42h256zM384 149v43h-256v-43h256z
+" />
+    <glyph glyph-name="recent_actors" unicode="recent_actors" 
+d="M267 149v16c0 32 -64 48 -96 48s-96 -16 -96 -48v-16h192zM171 347c-26 0 -48 -22 -48 -48s22 -48 48 -48s48 22 48 48s-22 48 -48 48zM299 405c12 0 21 -9 21 -21v-256c0 -12 -9 -21 -21 -21h-256c-12 0 -22 9 -22 21v256c0 12 10 21 22 21h256zM363 107v298h42v-298
+h-42zM448 405h43v-298h-43v298z" />
+    <glyph glyph-name="record_voice_over" unicode="record_voice_over" 
+d="M428 469c83 -86 83 -215 0 -298l-35 34c59 68 59 166 0 230zM358 398c43 -47 43 -112 0 -155l-36 36c18 25 18 58 0 83zM192 192c57 0 171 -28 171 -85v-43h-342v43c0 57 114 85 171 85zM107 320c0 47 38 85 85 85s85 -38 85 -85s-38 -85 -85 -85s-85 38 -85 85z" />
+    <glyph glyph-name="redeem" unicode="redeem" 
+d="M427 213v128h-109l45 -60l-35 -25c-24.0378 32.6288 -48.3187 65.0147 -72 98c-23.6829 -32.9837 -47.9614 -65.3719 -72 -98l-35 25l45 60h-109v-128h342zM427 107v42h-342v-42h342zM192 427c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM320 427
+c-12 0 -21 -10 -21 -22s9 -21 21 -21s21 9 21 21s-9 22 -21 22zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h47c-2 7 -4 14 -4 21c0 35 29 64 64 64c22 0 41 -11 53 -28l11 -15l11 15c12 17 31 28 53 28
+c35 0 64 -29 64 -64c0 -7 -2 -14 -4 -21h47z" />
+    <glyph glyph-name="redo" unicode="redo" 
+d="M393 286l76 77v-192h-192l78 77c-30 25 -68 40 -110 40c-76 0 -140 -49 -162 -117l-50 16c29 89 113 154 212 154c57 0 109 -21 148 -55z" />
+    <glyph glyph-name="refresh" unicode="refresh" 
+d="M377 377l50 50v-150h-150l69 69c-23 23 -55 38 -90 38c-71 0 -128 -57 -128 -128s57 -128 128 -128c56 0 104 35 121 85h44c-19 -74 -85 -128 -165 -128c-94 0 -170 77 -170 171s76 171 170 171c47 0 90 -19 121 -50z" />
+    <glyph glyph-name="remove" unicode="remove" 
+d="M405 235h-298v42h298v-42z" />
+    <glyph glyph-name="remove_circle" unicode="remove_circle" 
+d="M363 235v42h-214v-42h214zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="remove_circle_outline" unicode="remove_circle_outline" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM149 277h214v-42h-214v42z" />
+    <glyph glyph-name="remove_from_queue" unicode="remove_from_queue" 
+d="M341 299v-43h-170v43h170zM448 149v256h-384v-256h384zM448 448c23 0 43 -19 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-24 0 -43 19 -43 42v256c0 24 19 43 43 43h384z" />
+    <glyph glyph-name="remove_red_eye" unicode="remove_red_eye" 
+d="M256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM256 416c107 0 198 -66 235 -160c-37 -94 -128 -160 -235 -160s-198 66 -235 160c37 94 128 160 235 160z
+" />
+    <glyph glyph-name="remove_shopping_cart" unicode="remove_shopping_cart" 
+d="M149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43zM332 235l-192 192h287c12 0 21 -10 21 -22c0 -4 -1 -7 -3 -10l-76 -138c-7 -13 -21 -22 -37 -22zM158 192h108l-43 43h-50l-19 -35l-1 -3c0 -3 2 -5 5 -5zM485 27l-27 -27l-61 61
+c-8 -11 -20 -18 -34 -18c-23 0 -43 19 -43 42c0 14 7 27 18 35l-30 29h-159c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53l-47 99l-94 94l27 27z" />
+    <glyph glyph-name="reorder" unicode="reorder" 
+d="M64 405h384v-42h-384v42zM64 277v43h384v-43h-384zM64 107v42h384v-42h-384zM64 192v43h384v-43h-384z" />
+    <glyph glyph-name="repeat" unicode="repeat" 
+d="M363 149v86h42v-128h-256v-64l-85 85l85 85v-64h214zM149 363v-86h-42v128h256v64l85 -85l-85 -85v64h-214z" />
+    <glyph glyph-name="repeat_one" unicode="repeat_one" 
+d="M277 192h-32v85h-32v22l43 21h21v-128zM363 149v86h42v-128h-256v-64l-85 85l85 85v-64h214zM149 363v-86h-42v128h256v64l85 -85l-85 -85v64h-214z" />
+    <glyph glyph-name="replay" unicode="replay" 
+d="M256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -71 57 -128 128 -128s128 57 128 128s-57 128 -128 128v-86l-107 107l107 107v-86z" />
+    <glyph glyph-name="replay_10" unicode="replay_&#x31;&#x30;" 
+d="M282 188c0 -3.2653 6.32517 -7 10 -7c2 0 5 0 7 2l4 5s2 4 2 6v43c0 0 -2 4 -2 6c0 2.75261 -8.21183 7 -11 7c-2 0 -4 -1 -6 -3l-4 -4s-3 -4 -3 -6v-43s3 -4 3 -6zM324 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2s-9 0 -13 2s-6 4 -10 6
+c-6.74403 3.37202 -9 19.7461 -9 30v15c0 6 0 13 2 17l7 13s6 6 10 6s9 2 13 2s9 0 13 -2s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM233 171h-20v70l-21 -6v15l38 12h3v-91zM256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -70 58 -128 128 -128
+s128 58 128 128s-58 128 -128 128v-86l-107 107l107 107v-86z" />
+    <glyph glyph-name="replay_30" unicode="replay_&#x33;&#x30;" 
+d="M286 188c0 -3.76553 6.92157 -7 11 -7c2 0 4 0 6 2l4 5s2 4 2 6v43c0 2 -2 4 -2 6c0 2.33563 -7.56075 7 -10 7c-2 0 -5 -1 -7 -3l-4 -4s-2 -4 -2 -6v-43s2 -4 2 -6zM326 209c0 -6 0 -13 -2 -17l-6 -13s-7 -6 -11 -6s-9 -2 -13 -2c-10.126 0 -16.1493 4.57466 -23 8
+c-4 2 -4 7 -6 13s-3 11 -3 17v15c0 6 1 13 3 17l6 13s7 6 11 6s8 2 12 2s9 0 13 -2s7 -4 11 -6s4 -7 6 -13s2 -11 2 -17v-15zM213 224c8.11936 0 15 4.95913 15 13v4s-2 2 -2 4s-2 2 -4 2h-11s-2 -2 -4 -2s-2 -2 -2 -4v-4h-22c0 9.89385 8.81974 23 18 23c2 0 8 2 10 2
+c8.67272 0 17.6319 -2.81597 24 -6c5.06488 -2.53244 8 -12.109 8 -19v-7s-2 -4 -2 -6s-2 -4 -4 -4s-5 -3 -7 -5c4 -2 9 -4 11 -8s4 -9 4 -13s0 -9 -2 -11s-4 -6 -6 -8s-7 -4 -11 -4s-9 -2 -13 -2s-8 0 -10 2s-7 2 -11 4c-5.58093 2.79046 -9 13.5084 -9 21h18v-4s2 -2 2 -4
+s2 -2 4 -2h11s2 2 4 2s2 2 2 4v11s-2 2 -2 4s-2 2 -4 2h-13v15h8zM256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -70 58 -128 128 -128s128 58 128 128s-58 128 -128 128v-86l-107 107l107 107v-86z" />
+    <glyph glyph-name="replay_5" unicode="replay_&#x35;" 
+d="M252 222c-1.79204 -0.716817 -7 -2.40231 -7 -4c0 -2 -2 -3 -2 -3h-15l5 47h51v-15h-37l-2 -19s2 0 2 2s3 1 3 3s2 0 4 0h4c4 0 9 -1 11 -3s6 -4 8 -6c4.43641 -4.43641 9 -13.6284 9 -23c0 -4 0 -9 -2 -11s-3 -7 -7 -11s-6 -4 -8 -6s-9 -2 -13 -2s-9 0 -11 2s-6 2 -10 4
+c-5.5956 2.7978 -9 11.277 -9 19h17c0 -7.40446 5.29508 -10 13 -10c2 0 4 0 6 2l5 4s2 4 2 6v13l-2 4l-5 5s-4 2 -6 2h-4zM256 405c94 0 171 -76 171 -170s-77 -171 -171 -171s-171 77 -171 171h43c0 -70 58 -128 128 -128s128 58 128 128s-58 128 -128 128v-86l-107 107
+l107 107v-86z" />
+    <glyph glyph-name="reply" unicode="reply" 
+d="M213 320c149 -21 214 -128 235 -235c-53 75 -128 109 -235 109v-87l-149 149l149 149v-85z" />
+    <glyph glyph-name="reply_all" unicode="reply_all" 
+d="M277 320c149 -21 214 -128 235 -235c-53 75 -128 109 -235 109v-87l-149 149l149 149v-85zM149 341l-85 -85l85 -85v-64l-149 149l149 149v-64z" />
+    <glyph glyph-name="report" unicode="report" 
+d="M277 235v128h-42v-128h42zM256 143c15 0 28 13 28 28s-13 27 -28 27s-28 -12 -28 -27s13 -28 28 -28zM336 448l112 -112v-160l-112 -112h-160l-112 112v160l112 112h160z" />
+    <glyph glyph-name="report_problem" unicode="report_problem" 
+d="M277 213v86h-42v-86h42zM277 128v43h-42v-43h42zM21 64l235 405l235 -405h-470z" />
+    <glyph glyph-name="restaurant" unicode="restaurant" 
+d="M341 384c0 38 48 85 107 85v-426h-53v170h-54v171zM235 320v149h42v-149c0 -45 -35 -82 -80 -85v-192h-53v192c-45 3 -80 40 -80 85v149h43v-149h42v149h43v-149h43z" />
+    <glyph glyph-name="restaurant_menu" unicode="restaurant_menu" 
+d="M317 266l-31 -31l147 -147l-30 -30l-147 147l-147 -147l-30 30l208 208c-15 33 -4 79 30 113c41 41 99 48 130 17s24 -90 -17 -131c-34 -34 -80 -44 -113 -29zM173 227l-90 90c-33 33 -33 87 0 120l150 -149z" />
+    <glyph glyph-name="restore" unicode="restore" 
+d="M256 341h32v-90l75 -45l-16 -26l-91 55v106zM277 448c106 0 192 -86 192 -192s-86 -192 -192 -192c-53 0 -100 21 -135 56l30 31c27 -27 64 -44 105 -44c83 0 150 66 150 149s-67 149 -150 149s-149 -66 -149 -149h64l-86 -86l-2 3l-83 83h64c0 106 86 192 192 192z" />
+    <glyph glyph-name="restore_page" unicode="restore_page" 
+d="M256 128c59 0 107 48 107 107s-48 106 -107 106c-38 0 -71 -20 -90 -49l-27 28v-85h85l-34 34c12 24 37 40 66 40c41 0 75 -33 75 -74s-34 -75 -75 -75c-25 0 -48 13 -61 32h-37c16 -38 54 -64 98 -64zM299 469l128 -128v-256c0 -23 -20 -42 -43 -42h-256
+c-23 0 -43 19 -43 42l1 342c0 23 19 42 42 42h171z" />
+    <glyph glyph-name="ring_volume" unicode="ring_volume" 
+d="M137 303c0 0 -74 74 -76 75l30 31l76 -76zM277 469v-106h-42v106h42zM451 378c-2 -1 -76 -75 -76 -75l-30 30l76 76zM506 156c4 -4 6 -9 6 -15s-2 -11 -6 -15l-53 -53c-4 -4 -9 -6 -15 -6s-11 2 -15 6c-17 16 -36 30 -57 40c-7 3 -12 11 -12 19v66c-31 10 -64 15 -98 15
+s-67 -5 -98 -15v-66c0 -9 -5 -17 -12 -20c-21 -10 -40 -23 -57 -39c-4 -4 -9 -6 -15 -6s-11 2 -15 6l-53 53c-4 4 -6 9 -6 15s2 11 6 15c65 62 153 100 250 100s185 -38 250 -100z" />
+    <glyph glyph-name="room" unicode="room" 
+d="M256 267c29 0 53 24 53 53s-24 53 -53 53s-53 -24 -53 -53s24 -53 53 -53zM256 469c83 0 149 -66 149 -149c0 -112 -149 -277 -149 -277s-149 165 -149 277c0 83 66 149 149 149z" />
+    <glyph glyph-name="room_service" unicode="room_service" 
+d="M295 346c83 -17 147 -88 153 -175h-384c6 87 70 158 153 175c-2 5 -4 11 -4 17c0 23 20 42 43 42s43 -19 43 -42c0 -6 -2 -12 -4 -17zM43 149h426v-42h-426v42z" />
+    <glyph glyph-name="rotate_90_degrees_ccw" unicode="rotate_&#x39;&#x30;_degrees_ccw" 
+d="M413 370c75 -75 75 -196 0 -271c-37 -38 -87 -56 -136 -56c-32 0 -63 8 -92 24l32 31c19 -9 39 -13 60 -13c38 0 77 15 106 44c58 58 58 153 0 211c-29 29 -68 44 -106 44v-69l-90 90l90 91v-69c49 0 99 -19 136 -57zM79 237l78 -78l78 78l-78 78zM157 375l138 -138
+l-138 -138l-139 138z" />
+    <glyph glyph-name="rotate_left" unicode="rotate_left" 
+d="M277 425c84 -10 150 -82 150 -169s-66 -159 -150 -169v43c61 10 107 63 107 126s-46 116 -107 126v-83l-97 95l97 97v-66zM151 121l31 31c16 -12 34 -19 53 -22v-43c-30 4 -59 15 -84 34zM130 235c3 -19 10 -37 21 -53l-30 -30c-19 25 -30 53 -34 83h43zM152 330
+c-11 -16 -19 -34 -22 -53h-43c4 30 16 58 35 83z" />
+    <glyph glyph-name="rotate_right" unicode="rotate_right" 
+d="M360 182c12 16 19 34 22 53h43c-4 -30 -15 -58 -34 -83zM277 130c19 3 37 10 53 22l31 -31c-25 -19 -54 -30 -84 -34v43zM425 277h-43c-3 19 -10 37 -22 53l31 30c19 -25 30 -53 34 -83zM332 394l-97 -95v83c-61 -10 -107 -63 -107 -126s46 -116 107 -126v-43
+c-84 10 -150 82 -150 169s66 159 150 169v66z" />
+    <glyph glyph-name="rounded_corner" unicode="rounded_corner" 
+d="M448 341v-106h-43v106c0 35 -29 64 -64 64h-106v43h106c59 0 107 -48 107 -107zM64 64v43h43v-43h-43zM149 64v43h43v-43h-43zM235 64v43h42v-43h-42zM149 405v43h43v-43h-43zM64 405v43h43v-43h-43zM64 320v43h43v-43h-43zM64 149v43h43v-43h-43zM64 235v42h43v-42h-43z
+M405 149v43h43v-43h-43zM405 107h43v-43h-43v43z" />
+    <glyph glyph-name="router" unicode="router" 
+d="M320 128v43h-43v-43h43zM245 128v43h-42v-43h42zM171 128v43h-43v-43h43zM405 235c23 0 43 -20 43 -43v-85c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85c0 23 20 43 43 43h213v85h43v-85h42zM412 369l-17 -17c-15 15 -35 21 -54 21s-38 -6 -53 -21l-17 17
+c19 19 44 30 70 30s52 -11 71 -30zM431 386c-26 23 -58 36 -90 36s-63 -13 -89 -36l-17 17c30 30 68 45 106 45s77 -15 107 -45z" />
+    <glyph glyph-name="rowing" unicode="rowing" 
+d="M448 64l-64 -64l-64 64v32l-151 151c-7 -1 -14 -1 -20 -1v46c35 -1 77 18 100 43l30 33c7.60688 7.60688 20.1539 16 35 16h1c26 0 48 -22 48 -48v-123c0 -18 -8 -34 -20 -46l-76 76v49c-13 -11 -31 -22 -49 -30l134 -134h32zM320 491c23 0 43 -20 43 -43
+s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM181 203l54 -54h-43l-75 -74l-32 32z" />
+    <glyph glyph-name="rss_feed" unicode="rss_feed" 
+d="M85 297c117 0 212 -95 212 -212h-61c0 83 -68 151 -151 151v61zM85 417c183 0 332 -149 332 -332h-60c0 150 -122 272 -272 272v60zM85 132c0 26 21 46 47 46s46 -20 46 -46s-20 -47 -46 -47s-47 21 -47 47z" />
+    <glyph glyph-name="rv_hookup" unicode="rv_hookup" 
+d="M363 469l64 -64l-64 -64v43h-171v43h171v42zM384 213v64h-85v-64h85zM235 85c12 0 21 10 21 22s-9 21 -21 21s-22 -9 -22 -21s10 -22 22 -22zM427 149h42v-42h-170c0 -35 -29 -64 -64 -64s-64 29 -64 64h-43c-23 0 -43 19 -43 42v64h150v64h-86v-42l-64 64l64 64v-43h235
+c23 0 43 -20 43 -43v-128z" />
+    <glyph glyph-name="satellite" unicode="satellite" 
+d="M107 128h298l-96 128l-74 -96l-54 64zM107 256c83 0 149 67 149 150h-43c0 -59 -47 -107 -106 -107v-43zM107 406v-65c35 0 64 30 64 65h-64zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298z" />
+    <glyph glyph-name="save" unicode="save" 
+d="M320 320v85h-213v-85h213zM256 107c35 0 64 29 64 64s-29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64zM363 448l85 -85v-256c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h256z" />
+    <glyph glyph-name="scanner" unicode="scanner" 
+d="M405 149v43h-213v-43h213zM149 149v43h-42v-43h42zM422 284c15 -4 26 -22 26 -39v-117c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v85c0 23 20 43 43 43h268l-300 109l15 40z" />
+    <glyph glyph-name="schedule" unicode="schedule" 
+d="M267 363v-112l96 -57l-16 -27l-112 68v128h32zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="school" unicode="school" 
+d="M256 448l235 -128v-171h-43v148l-192 -105l-235 128zM107 231l149 -82l149 82v-86l-149 -81l-149 81v86z" />
+    <glyph glyph-name="screen_lock_landscape" unicode="screen_lock_landscape" 
+d="M230 299v-22h52v22c0 14 -12 25 -26 25s-26 -11 -26 -25zM213 171c-12 0 -21 9 -21 21v64c0 12 9 21 21 21v22c0 23 19 42 43 42c23 0 43 -18 43 -42v-22c12 0 21 -9 21 -21v-64c0 -12 -9 -21 -21 -21h-86zM405 149v214h-298v-214h298zM448 405c23 0 43 -19 43 -42v-214
+c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v214c0 23 20 42 43 42h384z" />
+    <glyph glyph-name="screen_lock_portrait" unicode="screen_lock_portrait" 
+d="M363 107v298h-214v-298h214zM363 491c23 0 42 -20 42 -43v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43h214zM230 299v-22h52v22c0 14 -12 25 -26 25s-26 -11 -26 -25zM213 171c-12 0 -21 9 -21 21v64c0 12 9 21 21 21v22
+c0 23 19 42 43 42c23 0 43 -18 43 -42v-22c12 0 21 -9 21 -21v-64c0 -12 -9 -21 -21 -21h-86z" />
+    <glyph glyph-name="screen_lock_rotation" unicode="screen_lock_rotation" 
+d="M358 459v-11h73v11c0 20 -16 36 -36 36s-37 -16 -37 -36zM341 320c-12 0 -21 9 -21 21v86c0 12 9 21 21 21v11c0 29 25 53 54 53s53 -24 53 -53v-11c12 0 21 -9 21 -21v-86c0 -12 -9 -21 -21 -21h-107zM181 75l28 28l81 -81l-14 -1c-134 0 -244 104 -255 235h32
+c8 -80 58 -148 128 -181zM496 240c13 -12 13 -33 0 -46l-136 -135c-12 -13 -32 -13 -45 0l-256 256c-13 12 -13 32 0 45l135 136c12 13 33 13 46 0l52 -52l-30 -30l-45 44l-121 -120l242 -242l120 121l-47 47l30 30z" />
+    <glyph glyph-name="screen_rotation" unicode="screen_rotation" 
+d="M160 54l29 28l81 -81l-14 -1c-134 0 -244 104 -255 235h32c8 -80 57 -148 127 -181zM316 60l136 136l-256 256l-136 -136zM218 475l257 -257c13 -12 13 -32 0 -45l-136 -136c-12 -13 -32 -13 -45 0l-257 257c-13 12 -13 32 0 45l136 136c12 13 32 13 45 0zM352 458
+l-29 -28l-81 81l14 1c134 0 244 -104 255 -235h-32c-8 80 -57 148 -127 181z" />
+    <glyph glyph-name="screen_share" unicode="screen_share" 
+d="M277 203l86 80l-86 80v-46c-83 -12 -116 -68 -128 -125c30 40 69 58 128 58v-47zM427 128h85v-43h-512v43h85c-24 0 -42 20 -42 43v213c0 24 18 43 42 43h342c23 0 42 -19 42 -43v-213c0 -23 -19 -43 -42 -43z" />
+    <glyph glyph-name="sd_card" unicode="sd_card" 
+d="M384 341v86h-43v-86h43zM320 341v86h-43v-86h43zM256 341v86h-43v-86h43zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 256l127 128h171z" />
+    <glyph glyph-name="sd_storage" unicode="sd_storage" 
+d="M384 341v86h-43v-86h43zM320 341v86h-43v-86h43zM256 341v86h-43v-86h43zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 256l127 128h171z" />
+    <glyph glyph-name="search" unicode="search" 
+d="M203 213c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM331 213l106 -106l-32 -32l-106 106v17l-6 6c-24 -21 -56 -33 -90 -33c-77 0 -139 61 -139 138s62 139 139 139s138 -62 138 -139c0 -34 -12 -66 -33 -90l6 -6h17z" />
+    <glyph glyph-name="security" unicode="security" 
+d="M256 491l192 -86v-128c0 -118 -82 -229 -192 -256c-110 27 -192 138 -192 256v128zM256 256v-191c79 25 138 103 149 191h-149zM256 256v188l-149 -66v-122h149z" />
+    <glyph glyph-name="select_all" unicode="select_all" 
+d="M192 320v-128h128v128h-128zM149 149v214h214v-214h-214zM320 405v43h43v-43h-43zM320 64v43h43v-43h-43zM405 149v43h43v-43h-43zM405 320v43h43v-43h-43zM405 64v43h43c0 -23 -20 -43 -43 -43zM405 235v42h43v-42h-43zM235 64v43h42v-43h-42zM192 448v-43h-43v43h43z
+M64 149v43h43v-43h-43zM107 64c-23 0 -43 20 -43 43h43v-43zM405 448c23 0 43 -20 43 -43h-43v43zM277 448v-43h-42v43h42zM64 320v43h43v-43h-43zM149 64v43h43v-43h-43zM64 235v42h43v-42h-43zM64 405c0 23 20 43 43 43v-43h-43z" />
+    <glyph glyph-name="send" unicode="send" 
+d="M43 64v149l320 43l-320 43v149l448 -192z" />
+    <glyph glyph-name="sentiment_dissatisfied" unicode="sentiment_dissatisfied" 
+d="M256 213c50 0 92 -30 109 -74h-35c-15 25 -42 42 -74 42s-59 -17 -74 -42h-35c17 44 59 74 109 74zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213
+s95 213 213 213zM149 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM299 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32z" />
+    <glyph glyph-name="sentiment_neutral" unicode="sentiment_neutral" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM149 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM299 309
+c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM192 213h128v-32h-128v32z" />
+    <glyph glyph-name="sentiment_satisfied" unicode="sentiment_satisfied" 
+d="M256 171c32 0 59 17 74 42h35c-17 -44 -59 -74 -109 -74s-92 30 -109 74h35c15 -25 42 -42 74 -42zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213
+s95 213 213 213zM149 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32zM299 309c0 18 14 32 32 32s32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32z" />
+    <glyph glyph-name="sentiment_very_dissatisfied" unicode="sentiment_very_dissatisfied" 
+d="M256 213c50 0 92 -30 109 -74h-218c17 44 59 74 109 74zM167 256l-23 23l23 22l-23 23l23 22l22 -22l23 22l23 -22l-23 -23l23 -22l-23 -23l-23 23zM345 346l23 -22l-23 -23l23 -22l-23 -23l-22 23l-23 -23l-23 23l23 22l-23 23l23 22l23 -22zM256 85
+c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="sentiment_very_satisfied" unicode="sentiment_very_satisfied" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM189 300l-22 -23l-23 23l45 45l46 -45l-23 -23zM277 300l46 45l45 -45l-23 -23l-22 23l-23 -23zM256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469
+c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="settings" unicode="settings" 
+d="M256 181c41 0 75 34 75 75s-34 75 -75 75s-75 -34 -75 -75s34 -75 75 -75zM415 235l45 -35c4 -3 5 -9 2 -14l-43 -74c-3 -5 -8 -6 -13 -4l-53 21c-11 -8 -23 -16 -36 -21l-8 -56c-1 -5 -5 -9 -10 -9h-86c-5 0 -9 4 -10 9l-8 56c-13 5 -25 12 -36 21l-53 -21
+c-5 -2 -10 -1 -13 4l-43 74c-3 5 -2 11 2 14l45 35c-1 7 -1 14 -1 21s0 14 1 21l-45 35c-4 3 -5 9 -2 14l43 74c3 5 8 6 13 4l53 -21c11 8 23 16 36 21l8 56c1 5 5 9 10 9h86c5 0 9 -4 10 -9l8 -56c13 -5 25 -12 36 -21l53 21c5 2 10 1 13 -4l43 -74c3 -5 2 -11 -2 -14
+l-45 -35c1 -7 1 -14 1 -21s0 -14 -1 -21z" />
+    <glyph glyph-name="settings_applications" unicode="settings_applications" 
+d="M368 256c0 5 0 10 -1 15l32 24c3 2 3 7 1 10l-30 52c-2 3 -6 4 -9 3l-37 -15c-8 6 -16 11 -25 15l-6 39c-1 3 -3 6 -7 6h-60c-4 0 -6 -2 -7 -6l-6 -40c-9 -4 -17 -8 -25 -14l-37 15c-3 1 -7 -1 -9 -4l-30 -51c-2 -3 -2 -8 1 -10l32 -24c-1 -5 -1 -10 -1 -15s0 -10 1 -15
+l-32 -24c-3 -2 -3 -7 -1 -10l30 -52c2 -3 6 -4 9 -3l37 15c8 -6 16 -11 25 -15l6 -39c1 -3 3 -6 7 -6h60c4 0 6 2 7 6l6 40c9 4 17 8 25 14l37 -15c3 -1 7 1 9 4l30 51c2 3 2 8 -1 10l-32 24c1 5 1 10 1 15zM405 448c24 0 43 -20 43 -43v-298c0 -23 -19 -43 -43 -43h-298
+c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h298zM256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43z" />
+    <glyph glyph-name="settings_backup_restore" unicode="settings_backup_restore" 
+d="M256 448c106 0 192 -86 192 -192s-86 -192 -192 -192c-44 0 -85 15 -117 40l30 30c25 -17 55 -27 87 -27c83 0 149 66 149 149s-66 149 -149 149s-149 -66 -149 -149h64l-86 -85l-85 85h64c0 106 86 192 192 192zM299 256c0 -23 -20 -43 -43 -43s-43 20 -43 43
+s20 43 43 43s43 -20 43 -43z" />
+    <glyph glyph-name="settings_bluetooth" unicode="settings_bluetooth" 
+d="M317 207l-40 40v-80zM277 430v-80l40 40zM378 390l-92 -91l92 -92l-122 -122h-21v162l-98 -98l-30 30l119 120l-119 119l30 30l98 -98v162h21zM320 0v43h43v-43h-43zM149 0v43h43v-43h-43zM235 0v43h42v-43h-42z" />
+    <glyph glyph-name="settings_brightness" unicode="settings_brightness" 
+d="M256 320v-128c35 0 64 29 64 64s-29 64 -64 64zM171 171v53l-32 32l32 32v53h53l32 32l32 -32h53v-53l32 -32l-32 -32v-53h-53l-32 -32l-32 32h-53zM448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298
+c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="settings_cell" unicode="settings_cell" 
+d="M341 171v256h-170v-256h170zM341 512c23 0 43 -20 43 -43v-341c0 -23 -20 -43 -43 -43h-170c-23 0 -43 20 -43 43v341c0 23 20 43 43 43h170zM320 0v43h43v-43h-43zM235 0v43h42v-43h-42zM149 0v43h43v-43h-43z" />
+    <glyph glyph-name="settings_ethernet" unicode="settings_ethernet" 
+d="M379 395l116 -139l-116 -139l-33 27l93 112l-93 112zM235 235v42h42v-42h-42zM363 277v-42h-43v42h43zM149 235v42h43v-42h-43zM166 368l-93 -112l93 -112l-33 -27l-116 139l116 139z" />
+    <glyph glyph-name="settings_input_antenna" unicode="settings_input_antenna" 
+d="M256 491c129 0 235 -106 235 -235h-43c0 106 -86 192 -192 192s-192 -86 -192 -192h-43c0 129 106 235 235 235zM277 207v-70l73 -73l-30 -30l-64 64l-64 -64l-30 30l73 73v70c-19 8 -32 27 -32 49c0 29 24 53 53 53s53 -24 53 -53c0 -22 -13 -41 -32 -49zM256 405
+c83 0 149 -66 149 -149h-42c0 59 -48 107 -107 107s-107 -48 -107 -107h-42c0 83 66 149 149 149z" />
+    <glyph glyph-name="settings_input_component" unicode="settings_input_component" 
+d="M363 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-43v90c-25 9 -42 32 -42 60zM277 469v-85h43v-128h-128v128h43v85c0 12 9 22 21 22s21 -10 21 -22zM448 384h43v-128h-128v128h42v85c0 12 10 22 22 22s21 -10 21 -22v-85zM21 171v42h128v-42c0 -28 -17 -51 -42 -60v-90
+h-43v90c-25 9 -43 32 -43 60zM192 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-42v90c-25 9 -43 32 -43 60zM107 469v-85h42v-128h-128v128h43v85c0 12 9 22 21 22s22 -10 22 -22z" />
+    <glyph glyph-name="settings_input_composite" unicode="settings_input_composite" 
+d="M363 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-43v90c-25 9 -42 32 -42 60zM277 469v-85h43v-128h-128v128h43v85c0 12 9 22 21 22s21 -10 21 -22zM448 384h43v-128h-128v128h42v85c0 12 10 22 22 22s21 -10 21 -22v-85zM21 171v42h128v-42c0 -28 -17 -51 -42 -60v-90
+h-43v90c-25 9 -43 32 -43 60zM192 171v42h128v-42c0 -28 -18 -51 -43 -60v-90h-42v90c-25 9 -43 32 -43 60zM107 469v-85h42v-128h-128v128h43v85c0 12 9 22 21 22s22 -10 22 -22z" />
+    <glyph glyph-name="settings_input_hdmi" unicode="settings_input_hdmi" 
+d="M171 427v-64h42v42h22v-42h42v42h22v-42h42v64h-170zM384 363h21v-128l-64 -128v-64h-170v64l-64 128v128h21v64c0 23 20 42 43 42h170c23 0 43 -19 43 -42v-64z" />
+    <glyph glyph-name="settings_input_svideo" unicode="settings_input_svideo" 
+d="M331 192c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM373 299c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM256 64c106 0 192 86 192 192s-86 192 -192 192s-192 -86 -192 -192s86 -192 192 -192zM256 491
+c129 0 235 -106 235 -235s-106 -235 -235 -235s-235 106 -235 235s106 235 235 235zM181 192c18 0 32 -14 32 -32s-14 -32 -32 -32s-32 14 -32 32s14 32 32 32zM320 373c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32s14 32 32 32h64c18 0 32 -14 32 -32zM171 267
+c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32z" />
+    <glyph glyph-name="settings_overscan" unicode="settings_overscan" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM299 171l-43 -54l-43 54h86zM128 299v-86l-53 43zM384 299l53 -43l-53 -43v86zM256 395l43 -54h-86z" />
+    <glyph glyph-name="settings_phone" unicode="settings_phone" 
+d="M405 320h43v-43h-43v43zM427 181c12 0 21 -9 21 -21v-75c0 -12 -9 -21 -21 -21c-200 0 -363 163 -363 363c0 12 9 21 21 21h75c12 0 21 -9 21 -21c0 -27 4 -52 12 -76c2 -7 1 -16 -5 -22l-47 -47c31 -60 81 -110 141 -141l47 47c6 6 15 7 22 5c24 -8 49 -12 76 -12z
+M363 320v-43h-43v43h43zM277 320v-43h-42v43h42z" />
+    <glyph glyph-name="settings_power" unicode="settings_power" 
+d="M320 0v43h43v-43h-43zM353 417c44 -31 74 -82 74 -140c0 -94 -77 -170 -171 -170s-171 76 -171 170c0 58 30 109 74 140l30 -30c-37 -23 -61 -64 -61 -110c0 -71 57 -128 128 -128s128 57 128 128c0 46 -25 87 -62 109zM277 469v-213h-42v213h42zM235 0v43h42v-43h-42z
+M149 0v43h43v-43h-43z" />
+    <glyph glyph-name="settings_remote" unicode="settings_remote" 
+d="M256 512c65 0 124 -26 166 -69l-30 -30c-35 35 -83 56 -136 56s-101 -21 -136 -56l-30 30c42 42 101 69 166 69zM150 383c27 27 65 44 106 44s79 -17 106 -44l-30 -30c-19 19 -47 31 -76 31s-57 -12 -76 -31zM256 192c23 0 43 20 43 43s-20 42 -43 42s-43 -19 -43 -42
+s20 -43 43 -43zM320 320c12 0 21 -9 21 -21v-256c0 -12 -9 -22 -21 -22h-128c-12 0 -21 10 -21 22v256c0 12 9 21 21 21h128z" />
+    <glyph glyph-name="settings_system_daydream" unicode="settings_system_daydream" 
+d="M448 106v300h-384v-300h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384zM192 171c-35 0 -64 29 -64 64c0 33 25 60 57 63h4c12 25 37 43 67 43c38 0 69 -28 74 -64h1c29 0 53 -24 53 -53
+s-24 -53 -53 -53h-139z" />
+    <glyph glyph-name="settings_voice" unicode="settings_voice" 
+d="M405 299c0 -73 -58 -134 -128 -144v-70h-42v70c-70 10 -128 71 -128 144h36c0 -64 54 -109 113 -109s113 45 113 109h36zM320 0v43h43v-43h-43zM235 0v43h42v-43h-42zM256 235c-35 0 -64 29 -64 64v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -35 -29 -64 -64 -64z
+M149 0v43h43v-43h-43z" />
+    <glyph glyph-name="share" unicode="share" 
+d="M384 169c34 0 62 -28 62 -62s-28 -63 -62 -63s-62 29 -62 63c0 5 0 10 1 14l-151 88c-12 -11 -27 -17 -44 -17c-35 0 -64 29 -64 64s29 64 64 64c17 0 32 -6 44 -17l150 87c-1 5 -2 10 -2 15c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64c-17 0 -32 7 -44 18
+l-150 -88c1 -5 2 -10 2 -15s-1 -10 -2 -15l152 -88c11 10 26 16 42 16z" />
+    <glyph glyph-name="shop" unicode="shop" 
+d="M192 128l160 107l-160 85v-192zM213 427v-43h86v43h-86zM341 384h128v-277c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v277h128v43c0 24 18 42 42 42h86c24 0 42 -18 42 -42v-43z" />
+    <glyph glyph-name="shop_two" unicode="shop_two" 
+d="M256 192l117 85l-117 64v-149zM256 448v-43h85v43h-85zM384 405h107v-234c0 -24 -19 -43 -43 -43h-299c-24 0 -42 19 -42 43v234h106v43c0 24 19 43 43 43h85c24 0 43 -19 43 -43v-43zM64 320v-235h341c0 -24 -18 -42 -42 -42h-299c-24 0 -43 18 -43 42v235h43z" />
+    <glyph glyph-name="shopping_basket" unicode="shopping_basket" 
+d="M256 149c23 0 43 20 43 43s-20 43 -43 43s-43 -20 -43 -43s20 -43 43 -43zM192 320h128l-64 94zM367 320h102c12 0 22 -9 22 -21c-17.3126 -69.0207 -36.8524 -135.814 -55 -204c-5 -18 -21 -31 -41 -31h-278c-20 0 -36 13 -41 31l-54 198c-1 2 -1 4 -1 6
+c0 12 10 21 22 21h102l93 140c4 6 11 9 18 9s14 -3 18 -9z" />
+    <glyph glyph-name="shopping_cart" unicode="shopping_cart" 
+d="M363 128c23 0 42 -20 42 -43s-19 -42 -42 -42s-43 19 -43 42s20 43 43 43zM21 469h70l20 -42h316c12 0 21 -10 21 -22c0 -4 -1 -7 -3 -10l-76 -138c-7 -13 -21 -22 -37 -22h-159l-19 -35l-1 -3c0 -3 2 -5 5 -5h247v-43h-256c-23 0 -42 20 -42 43c0 7 2 14 5 20l29 53
+l-77 162h-43v42zM149 128c23 0 43 -20 43 -43s-20 -42 -43 -42s-42 19 -42 42s19 43 42 43z" />
+    <glyph glyph-name="short_text" unicode="short_text" 
+d="M85 235h214v-43h-214v43zM85 320h342v-43h-342v43z" />
+    <glyph glyph-name="show_chart" unicode="show_chart" 
+d="M75 118l-32 32l160 160l85 -86l151 170l30 -30l-181 -204l-85 86z" />
+    <glyph glyph-name="shuffle" unicode="shuffle" 
+d="M316 226l67 -67l44 44v-118h-118l44 44l-67 67zM309 427h118v-118l-44 44l-268 -268l-30 30l268 268zM226 316l-30 -30l-111 111l30 30z" />
+    <glyph glyph-name="signal_cellular_4_bar" unicode="signal_cellular_&#x34;_bar" 
+d="M43 43l426 426v-426h-426z" />
+    <glyph glyph-name="signal_cellular_connected_no_internet_4_bar" unicode="signal_cellular_connected_no_internet_&#x34;_bar" 
+d="M43 43l426 426v-128h-85v-298h-341zM427 43v42h42v-42h-42zM427 128v171h42v-171h-42z" />
+    <glyph glyph-name="signal_cellular_no_sim" unicode="signal_cellular_no_sim" 
+d="M78 429l373 -372l-28 -28l-40 41c-6 -3 -13 -6 -20 -6h-214c-23 0 -42 20 -42 43v239l-56 56zM405 405v-249l-242 242l50 50h150c23 0 42 -20 42 -43z" />
+    <glyph glyph-name="signal_cellular_null" unicode="signal_cellular_null" 
+d="M469 469v-426h-426zM427 366l-281 -281h281v281z" />
+    <glyph glyph-name="signal_cellular_off" unicode="signal_cellular_off" 
+d="M102 416l367 -368l-27 -27l-42 43h-379l189 189l-135 136zM448 491v-367l-183 183z" />
+    <glyph glyph-name="signal_wifi_4_bar" unicode="signal_wifi_&#x34;_bar" 
+d="M256 54l-248 309c10 7 105 85 248 85s238 -78 248 -85z" />
+    <glyph glyph-name="signal_wifi_4_bar_lock" unicode="signal_wifi_&#x34;_bar_lock" 
+d="M331 203v-56l-75 -94l-247 310c9 6 104 85 247 85s238 -79 247 -85l-44 -56c-6 2 -13 2 -22 2c-60 0 -106 -46 -106 -106zM469 171v32c0 17 -15 32 -32 32s-32 -15 -32 -32v-32h64zM491 171c11 0 21 -11 21 -22v-85c0 -11 -10 -21 -21 -21h-107c-11 0 -21 10 -21 21v85
+c0 11 10 22 21 22v32c0 30 23 53 53 53s54 -23 54 -53v-32z" />
+    <glyph glyph-name="signal_wifi_off" unicode="signal_wifi_off" 
+d="M70 481c122.302 -122.698 245.474 -244.526 367 -368l-27 -27l-71 71l-83 -103l-248 309c5 4 32 26 78 47l-43 44zM504 363l-116 -145l-221 220c27 6 57 10 89 10c143 0 238 -78 248 -85z" />
+    <glyph glyph-name="sim_card" unicode="sim_card" 
+d="M363 192v85h-43v-85h43zM277 235v42h-42v-42h42zM277 107v85h-42v-85h42zM192 192v85h-43v-85h43zM363 107v42h-43v-42h43zM192 107v42h-43v-42h43zM426 427l1 -342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42v256l128 128h171c23 0 42 -19 42 -42z" />
+    <glyph glyph-name="sim_card_alert" unicode="sim_card_alert" 
+d="M277 235v106h-42v-106h42zM277 149v43h-42v-43h42zM384 469c23 0 43 -19 43 -42v-342c0 -23 -20 -42 -43 -42h-256c-23 0 -43 19 -43 42l1 256l127 128h171z" />
+    <glyph glyph-name="skip_next" unicode="skip_next" 
+d="M341 384h43v-256h-43v256zM128 128v256l181 -128z" />
+    <glyph glyph-name="skip_previous" unicode="skip_previous" 
+d="M203 256l181 128v-256zM128 384h43v-256h-43v256z" />
+    <glyph glyph-name="slideshow" unicode="slideshow" 
+d="M405 107v298h-298v-298h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h298zM213 341l107 -85l-107 -85v170z" />
+    <glyph glyph-name="slow_motion_video" unicode="slow_motion_video" 
+d="M469 256c0 -110 -84 -201 -191 -212v43c84 11 149 83 149 169s-65 158 -149 169v43c107 -11 191 -102 191 -212zM121 91l30 30c24 -18 53 -30 84 -34v-43c-43 4 -82 21 -114 47zM87 235c4 -31 16 -60 34 -83l-30 -31c-26 32 -43 71 -47 114h43zM121 361
+c-18 -24 -30 -53 -34 -84h-43c4 43 21 82 47 114zM235 425c-31 -4 -60 -16 -84 -34l-30 30c32 26 71 43 114 47v-43zM278 303l63 -47c-42.8195 -31.8471 -85.479 -63.8543 -128 -96z" />
+    <glyph glyph-name="smartphone" unicode="smartphone" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="smoke_free" unicode="smoke_free" 
+d="M363 172l-63 63h63v-63zM309 326c-39 0 -71 33 -71 72s32 71 71 71v-32c-22 0 -39 -15 -39 -37s17 -43 39 -43h33c40 0 74 -29 74 -67v-34h-32v27c0 28 -20 43 -42 43h-33zM402 408c40 -19 67 -60 67 -108v-44h-32v44c0 48 -37 87 -85 87v32c22 0 39 18 39 40h32
+c0 -20 -8 -38 -21 -51zM384 235h32v-64h-32v64zM437 235h32v-64h-32v64zM43 384l26 27l363 -363l-27 -27l-149 150h-213v64h149z" />
+    <glyph glyph-name="smoking_rooms" unicode="smoking_rooms" 
+d="M342 294c40 0 74 -28 74 -67v-35h-32v28c0 28 -20 43 -42 43h-33c-39 0 -71 33 -71 72s32 71 71 71v-32c-22 0 -39 -15 -39 -37s17 -43 39 -43h33zM402 347c40 -19 67 -60 67 -107v-48h-32v48c0 48 -37 86 -85 86v32c22 0 39 18 39 40s-17 39 -39 39v32
+c39 0 71 -32 71 -71c0 -20 -8 -38 -21 -51zM384 171h32v-64h-32v64zM437 171h32v-64h-32v64zM43 171h320v-64h-320v64z" />
+    <glyph glyph-name="sms" unicode="sms" 
+d="M363 277v43h-43v-43h43zM277 277v43h-42v-43h42zM192 277v43h-43v-43h43zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="sms_failed" unicode="sms_failed" 
+d="M277 299v85h-42v-85h42zM277 213v43h-42v-43h42zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="snooze" unicode="snooze" 
+d="M192 277v43h128v-38l-77 -90h77v-43h-128v39l77 89h-77zM256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM256 427c106 0 192 -86 192 -192s-86 -192 -192 -192s-192 86 -192 192s86 192 192 192zM469 390l-27 -33l-98 83l27 32z
+M168 440l-98 -82l-27 32l98 82z" />
+    <glyph glyph-name="sort" unicode="sort" 
+d="M64 235v42h256v-42h-256zM64 384h384v-43h-384v43zM64 128v43h128v-43h-128z" />
+    <glyph glyph-name="sort_by_alpha" unicode="sort_by_alpha" 
+d="M336 168h130v-34h-182v27l126 183h-125v34h177v-27zM106 221h83l-42 111zM130 378h35l96 -244h-39l-20 52h-109l-20 -52h-39zM219 99h99l-50 -50zM319 413h-101l50 50z" />
+    <glyph glyph-name="spa" unicode="spa" 
+d="M330 307c-27 -15 -52 -34 -74 -57c-22 23 -47 42 -74 57c5 59 29 116 75 162c45 -45 69 -102 73 -162zM43 299c95.1702 0 171.746 -54.2229 213 -117c41.2966 62.8426 117.856 117 213 117c0 -113 -71 -209 -171 -245c-14 -5 -27 -8 -42 -11c-15 2 -29 6 -42 11
+c-100 36 -171 132 -171 245z" />
+    <glyph glyph-name="space_bar" unicode="space_bar" 
+d="M384 320h43v-128h-342v128h43v-85h256v85z" />
+    <glyph glyph-name="speaker" unicode="speaker" 
+d="M256 256c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM256 85c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM256 427c-24 0 -43 -20 -43 -43s19 -43 43 -43c23 0 43 20 43 43s-20 43 -43 43zM363 469
+c23 0 42 -19 42 -42v-342c0 -23 -19 -42 -42 -42h-214c-23 0 -42 19 -42 42v342c0 23 19 42 42 42h214z" />
+    <glyph glyph-name="speaker_group" unicode="speaker_group" 
+d="M128 405v-341h213v-43h-213c-24 0 -43 20 -43 43v341h43zM245 245c0 29 25 54 54 54s53 -25 53 -54s-24 -53 -53 -53s-54 24 -54 53zM299 160c47 0 85 38 85 85s-38 86 -85 86s-86 -39 -86 -86s39 -85 86 -85zM299 448c-23 0 -43 -19 -43 -43s20 -42 43 -42s42 18 42 42
+s-19 43 -42 43zM388 491c21 0 39 -18 39 -39v-307c0 -21 -18 -38 -39 -38h-179c-21 0 -38 17 -38 38v307c0 21 17 39 38 39h179z" />
+    <glyph glyph-name="speaker_notes" unicode="speaker_notes" 
+d="M384 341v43h-171v-43h171zM384 277v43h-171v-43h171zM320 213v43h-107v-43h107zM171 341v43h-43v-43h43zM171 277v43h-43v-43h43zM171 213v43h-43v-43h43zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="speaker_notes_off" unicode="speaker_notes_off" 
+d="M427 469c23 0 42 -19 42 -42v-256c0 -23 -18 -42 -41 -43l-149 149h105v43h-148l-21 21h169v43h-171v-41l-126 126h340zM128 277h43l-43 43v-43zM171 213v43h-43v-43h43zM27 475l442 -442l-27 -27l-122 122h-192l-85 -85v362l-43 43z" />
+    <glyph glyph-name="speaker_phone" unicode="speaker_phone" 
+d="M320 85v171h-128v-171h128zM317 298c13 0 24 -11 24 -24v-207c0 -13 -11 -24 -24 -24h-122c-13 0 -24 11 -24 24v207c0 13 11 25 24 25zM256 491c64 0 123 -27 165 -69l-30 -30c-35 35 -82 56 -135 56s-100 -21 -135 -56l-30 30c42 42 101 69 165 69zM149 361
+c27 27 65 44 107 44s80 -17 107 -44l-31 -30c-19 19 -46 31 -76 31s-57 -12 -76 -31z" />
+    <glyph glyph-name="spellcheck" unicode="spellcheck" 
+d="M461 265l30 -30l-203 -203l-108 109l30 30l78 -79zM137 277h88l-44 118zM266 171l-25 64h-120l-24 -64h-45l109 277h40l109 -277h-44z" />
+    <glyph glyph-name="star" unicode="star" 
+d="M256 144l-132 -80l35 150l-116 101l153 13l60 141l60 -141l153 -13l-116 -101l35 -150z" />
+    <glyph glyph-name="star_border" unicode="star_border" 
+d="M256 183l80 -48l-21 91l71 62l-94 8l-36 86l-36 -86l-94 -8l71 -62l-21 -91zM469 315l-116 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141z" />
+    <glyph glyph-name="star_half" unicode="star_half" 
+d="M256 183l80 -48l-21 91l71 62l-94 8l-36 86v-199zM469 315l-116 -101l35 -150l-132 80l-132 -80l35 150l-116 101l153 13l60 141l60 -141z" />
+    <glyph glyph-name="stars" unicode="stars" 
+d="M346 128l-24 103l80 69l-105 9l-41 96l-41 -97l-105 -8l80 -69l-24 -103l90 54zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="stay_current_landscape" unicode="stay_current_landscape" 
+d="M405 363h-298v-214h298v214zM22 363c0 23 19 42 42 42h384c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42z" />
+    <glyph glyph-name="stay_current_portrait" unicode="stay_current_portrait" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="stay_primary_landscape" unicode="stay_primary_landscape" 
+d="M405 363h-298v-214h298v214zM22 363c0 23 19 42 42 42h384c23 0 43 -19 43 -42v-214c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42z" />
+    <glyph glyph-name="stay_primary_portrait" unicode="stay_primary_portrait" 
+d="M363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="stop" unicode="stop" 
+d="M128 384h256v-256h-256v256z" />
+    <glyph glyph-name="stop_screen_share" unicode="stop_screen_share" 
+d="M149 192c20 28 45 44 78 52l-34 34c-25 -24 -37 -54 -44 -86zM51 475l421 -421l-27 -27l-58 58h-387v43h85c-24 0 -42 19 -42 42v214c0 13 5 23 14 31l-33 33zM469 170c0 -16 -9 -30 -22 -37l-118 118l34 32l-86 79v-45c-4 -1 -7 -1 -11 -2l-112 111h273
+c23 0 42 -18 42 -42v-214zM453 128h59v-43h-17z" />
+    <glyph glyph-name="storage" unicode="storage" 
+d="M85 277v-42h43v42h-43zM43 213v86h426v-86h-426zM128 363v42h-43v-42h43zM43 427h426v-86h-426v86zM85 149v-42h43v42h-43zM43 85v86h426v-86h-426z" />
+    <glyph glyph-name="store" unicode="store" 
+d="M256 128v85h-128v-85h128zM448 213h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM427 427v-43h-342v43h342z" />
+    <glyph glyph-name="store_mall_directory" unicode="store_mall_directory" 
+d="M256 128v85h-128v-85h128zM448 213h-21v-128h-43v128h-85v-128h-214v128h-21v43l21 107h342l21 -107v-43zM427 427v-43h-342v43h342z" />
+    <glyph glyph-name="straighten" unicode="straighten" 
+d="M448 171v170h-43v-85h-42v85h-43v-85h-43v85h-42v-85h-43v85h-43v-85h-42v85h-43v-170h384zM448 384c23 0 43 -20 43 -43v-170c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v170c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="streetview" unicode="streetview" 
+d="M245 384c0 -38 16 -73 41 -98l-209 -209c-8 8 -13 18 -13 30v298c0 23 20 43 43 43h154c-10 -19 -16 -41 -16 -64zM277 384c0 59 48 107 107 107s107 -48 107 -107s-48 -107 -107 -107s-107 48 -107 107zM268 206c32 24 73 39 116 39c22 0 44 -4 64 -11v-127
+c0 -23 -20 -43 -43 -43h-149v117c0 10 5 19 12 25z" />
+    <glyph glyph-name="strikethrough_s" unicode="strikethrough_s" 
+d="M200 232c0 -38.1216 24.1545 -54 62 -54c26.1564 0 49 10.6702 49 36c0 23.9161 -12.6848 29.3424 -30 38c-3 1 -8 3 -12 4h-205v43h384v-43h-83c1 -2 3 -5 4 -7c4 -10 7 -22 7 -35c0 -46.2545 -30.1882 -69.4824 -67 -80c-14 -4 -29 -6 -46 -6c-10 0 -21 1 -31 3
+c-21.9156 4.38312 -40.6035 10.4527 -56 22c-22.8363 17.1272 -39 39.9131 -39 79h63zM311 352c0 30.7771 -19.602 45 -51 45c-22.5729 0 -39.6285 -7.25692 -47 -22c-2 -4 -3 -9 -3 -14c0 -10 6 -19 16 -26c8 -5 16 -10 30 -15h-98c-1 2 -3 3 -4 5c-6 10 -8 22 -8 36
+c0 28.7417 14.9303 49.3443 32 63c20.5411 14.3788 47.8126 24 83 24c35.0657 0 64.1326 -10.0193 83 -27c17.5603 -15.8042 31 -37.9468 31 -69h-64z" />
+    <glyph glyph-name="style" unicode="style" 
+d="M125 91v135l74 -178h-31c-23 0 -43 20 -43 43zM168 325c12 0 21 10 21 22s-9 21 -21 21s-21 -9 -21 -21s9 -22 21 -22zM470 172c9 -22 -1 -47 -23 -56l-157 -65c-5 -2 -11 -3 -17 -3c-17 0 -32 10 -39 26l-106 256c-2 6 -3 11 -3 17c0 16 10 31 26 38l158 65
+c6 2 11 3 17 3c16 0 31 -10 38 -26zM54 93c-22 9 -32 33 -23 55l52 125v-192z" />
+    <glyph glyph-name="subdirectory_arrow_left" unicode="subdirectory_arrow_left" 
+d="M235 320l30 -30l-77 -77h196v214h43v-256h-239l77 -77l-30 -30l-128 128z" />
+    <glyph glyph-name="subdirectory_arrow_right" unicode="subdirectory_arrow_right" 
+d="M405 192l-128 -128l-30 30l77 77h-239v256h43v-214h196l-77 77l30 30z" />
+    <glyph glyph-name="subject" unicode="subject" 
+d="M85 405h342v-42h-342v42zM85 192v43h342v-43h-342zM427 320v-43h-342v43h342zM299 149v-42h-214v42h214z" />
+    <glyph glyph-name="subscriptions" unicode="subscriptions" 
+d="M341 171l-128 69v-139zM469 256v-171c0 -23 -19 -42 -42 -42h-342c-23 0 -42 19 -42 42v171c0 23 19 43 42 43h342c23 0 42 -20 42 -43zM384 469v-42h-256v42h256zM427 341h-342v43h342v-43z" />
+    <glyph glyph-name="subtitles" unicode="subtitles" 
+d="M427 213v43h-214v-43h214zM427 128v43h-86v-43h86zM299 128v43h-214v-43h214zM85 256v-43h86v43h-86zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="subway" unicode="subway" 
+d="M384 173v147c0 56 -57 64 -128 64c-64 0 -128 -8 -128 -64v-147c0 -31 25 -56 56 -56l-24 -24v-8h36l32 32h60l32 -32h32v8l-24 24c31 0 56 25 56 56zM380 452c57 -22 89 -69 89 -129v-280h-426v280c0 60 32 107 89 129c38 15 84 17 124 17s86 -2 124 -17zM150 320h213
+v-107h-213v107zM160 171c0 12 9 21 21 21s22 -9 22 -21s-10 -22 -22 -22s-21 10 -21 22zM309 171c0 12 10 21 22 21s21 -9 21 -21s-9 -22 -21 -22s-22 10 -22 22z" />
+    <glyph glyph-name="supervisor_account" unicode="supervisor_account" 
+d="M192 235c14 0 32 -2 51 -6c-44 -24 -51 -56 -51 -74v-48h-149v53c0 50 99 75 149 75zM352 213c39 0 117 -19 117 -58v-48h-234v48c0 39 78 58 117 58zM192 277c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM352 256c-29 0 -53 24 -53 53s24 54 53 54
+s53 -25 53 -54s-24 -53 -53 -53z" />
+    <glyph glyph-name="surround_sound" unicode="surround_sound" 
+d="M256 299c23 0 43 -20 43 -43s-20 -43 -43 -43s-43 20 -43 43s20 43 43 43zM377 135c33 33 50 77 50 121s-17 88 -50 121l-31 -31c25 -25 38 -57 38 -90s-12 -66 -37 -91zM256 171c47 0 85 38 85 85s-38 85 -85 85s-85 -38 -85 -85s38 -85 85 -85zM166 166
+c-25 25 -38 57 -38 90s12 66 37 91l-30 30c-33 -33 -50 -77 -50 -121s17 -88 50 -121zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="swap_calls" unicode="swap_calls" 
+d="M384 427l85 -86h-64v-149c0 -47 -38 -85 -85 -85s-85 38 -85 85v149c0 23 -20 43 -43 43s-43 -20 -43 -43v-149h64l-85 -85l-85 85h64v149c0 47 38 86 85 86s85 -39 85 -86v-149c0 -23 20 -43 43 -43s43 20 43 43v149h-64z" />
+    <glyph glyph-name="swap_horiz" unicode="swap_horiz" 
+d="M448 320l-85 -85v64h-150v42h150v64zM149 277v-64h150v-42h-150v-64l-85 85z" />
+    <glyph glyph-name="swap_vert" unicode="swap_vert" 
+d="M192 448l85 -85h-64v-150h-42v150h-64zM341 149h64l-85 -85l-85 85h64v150h42v-150z" />
+    <glyph glyph-name="swap_vertical_circle" unicode="swap_vertical_circle" 
+d="M373 192h-53v85h-43v-85h-53l75 -75zM139 320h53v-85h43v85h53l-75 75zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="switch_camera" unicode="switch_camera" 
+d="M320 181l75 75l-75 75v-54h-128v54l-75 -75l75 -75v54h128v-54zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h68l39 42h128l39 -42h68z" />
+    <glyph glyph-name="switch_video" unicode="switch_video" 
+d="M277 181l75 75l-75 75v-54h-128v54l-74 -75l74 -75v54h128v-54zM384 309l85 86v-278l-85 86v-75c0 -12 -9 -21 -21 -21h-299c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h299c12 0 21 -9 21 -21v-75z" />
+    <glyph glyph-name="sync" unicode="sync" 
+d="M256 128v64l85 -85l-85 -86v64c-94 0 -171 77 -171 171c0 33 10 65 27 91l31 -31c-10 -18 -15 -38 -15 -60c0 -71 57 -128 128 -128zM256 427c94 0 171 -77 171 -171c0 -33 -10 -65 -27 -91l-31 31c10 18 15 38 15 60c0 71 -57 128 -128 128v-64l-85 85l85 86v-64z" />
+    <glyph glyph-name="sync_disabled" unicode="sync_disabled" 
+d="M427 427l-51 -51c31 -31 51 -73 51 -120c0 -33 -10 -64 -26 -90l-32 31c9 18 15 38 15 59c0 35 -15 67 -38 90l-47 -47v128h128zM61 397l27 27l335 -336l-27 -27l-50 50c-15 -9 -31 -16 -48 -20v44c6 2 12 5 17 8l-172 172c-9 -18 -15 -38 -15 -59c0 -35 15 -67 38 -90
+l47 47v-128h-128l51 51c-31 31 -51 73 -51 120c0 33 10 64 26 90zM213 377c-6 -2 -11 -5 -16 -8l-31 32c15 9 30 16 47 20v-44z" />
+    <glyph glyph-name="sync_problem" unicode="sync_problem" 
+d="M235 235v128h42v-128h-42zM448 427l-50 -51c31 -31 50 -73 50 -120c0 -80 -54 -146 -128 -165v44c50 17 85 65 85 121c0 35 -14 67 -37 90l-48 -47v128h128zM235 149v43h42v-43h-42zM64 256c0 80 54 146 128 165v-44c-50 -17 -85 -65 -85 -121c0 -35 14 -67 37 -90l48 47
+v-128h-128l50 51c-31 31 -50 73 -50 120z" />
+    <glyph glyph-name="system_update" unicode="system_update" 
+d="M341 235l-85 -86l-85 86h64v106h42v-106h64zM363 107v298h-214v-298h214zM363 490c23 0 42 -19 42 -42v-384c0 -23 -19 -43 -42 -43h-214c-23 0 -42 20 -42 43v384c0 23 19 43 42 43z" />
+    <glyph glyph-name="system_update_alt" unicode="system_update_alt" 
+d="M448 437c23 0 43 -19 43 -42v-299c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v299c0 23 20 42 43 42h128v-42h-128v-299h384v299h-128v42h128zM256 160l-85 85h64v192h42v-192h64z" />
+    <glyph glyph-name="tab" unicode="tab" 
+d="M448 107v213h-171v85h-213v-298h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="tab_unselected" unicode="tab_unselected" 
+d="M363 64v43h42v-43h-42zM277 64v43h43v-43h-43zM448 235v42h43v-42h-43zM448 64v43h43c0 -23 -20 -43 -43 -43zM107 405v43h42v-43h-42zM107 64v43h42v-43h-42zM192 405v43h43v-43h-43zM448 149v43h43v-43h-43zM448 448c23 0 43 -20 43 -43v-85h-214v128h171zM64 64
+c-23 0 -43 20 -43 43h43v-43zM21 149v43h43v-43h-43zM192 64v43h43v-43h-43zM21 405c0 23 20 43 43 43v-43h-43zM21 235v42h43v-42h-43zM21 320v43h43v-43h-43z" />
+    <glyph glyph-name="tablet" unicode="tablet" 
+d="M405 128v256h-298v-256h298zM448 427c23 0 43 -20 43 -43l-1 -256c0 -23 -19 -43 -42 -43h-384c-23 0 -43 20 -43 43v256c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="tablet_android" unicode="tablet_android" 
+d="M411 107v341h-310v-341h310zM299 43v21h-86v-21h86zM384 512c35 0 64 -29 64 -64v-384c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h256z" />
+    <glyph glyph-name="tablet_mac" unicode="tablet_mac" 
+d="M405 107v341h-320v-341h320zM245 21c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM395 512c29 0 53 -24 53 -53v-406c0 -29 -24 -53 -53 -53h-299c-29 0 -53 24 -53 53v406c0 29 24 53 53 53h299z" />
+    <glyph glyph-name="tag_faces" unicode="tag_faces" 
+d="M256 139c-50 0 -92 30 -109 74h218c-17 -44 -59 -74 -109 -74zM181 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM331 277c-18 0 -32 14 -32 32s14 32 32 32s32 -14 32 -32s-14 -32 -32 -32zM256 85c94 0 171 77 171 171s-77 171 -171 171
+s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="tap_and_play" unicode="tap_and_play" 
+d="M363 490c23 0 42 -19 42 -42v-363c0 -23 -19 -42 -42 -42h-45c-2 30 -9 58 -20 85h65v277h-214v-128c-14 6 -27 11 -42 14v157c0 23 19 43 42 43zM43 256c130 0 234 -105 234 -235h-42c0 106 -86 192 -192 192v43zM43 85c35 0 64 -29 64 -64h-64v64zM43 171
+c83 0 149 -67 149 -150h-43c0 59 -47 107 -106 107v43z" />
+    <glyph glyph-name="terrain" unicode="terrain" 
+d="M299 384l192 -256h-470l128 171l96 -128l34 25l-60 81z" />
+    <glyph glyph-name="text_fields" unicode="text_fields" 
+d="M459 320v-64h-64v-149h-64v149h-64v64h192zM53 427h278v-64h-107v-256h-64v256h-107v64z" />
+    <glyph glyph-name="text_format" unicode="text_format" 
+d="M256 384l-40 -107h80zM203 239l-20 -47h-44l101 235h32l101 -235h-44l-20 47h-106zM107 149h298v-42h-298v42z" />
+    <glyph glyph-name="textsms" unicode="textsms" 
+d="M363 277v43h-43v-43h43zM277 277v43h-42v-43h42zM192 277v43h-43v-43h43zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="texture" unicode="texture" 
+d="M198 64l250 250v-61l-189 -189h-61zM448 107c0 -22.9739 -20.0355 -43 -43 -43h-42l85 85v-42zM107 448h42l-85 -85v42c0 23 20 43 43 43zM253 448h61l-250 -250v61zM416 446c15 -4 27 -15 31 -30l-351 -350c-14.6749 4.19283 -25.8059 15.3206 -30 30z" />
+    <glyph glyph-name="theaters" unicode="theaters" 
+d="M384 320v43h-43v-43h43zM384 235v42h-43v-42h43zM384 149v43h-43v-43h43zM171 320v43h-43v-43h43zM171 235v42h-43v-42h43zM171 149v43h-43v-43h43zM384 448h43v-384h-43v43h-43v-43h-170v43h-43v-43h-43v384h43v-43h43v43h170v-43h43v43z" />
+    <glyph glyph-name="thumb_down" unicode="thumb_down" 
+d="M405 448h86v-256h-86v256zM320 448c23 0 43 -20 43 -43v-213c0 -12 -5 -22 -13 -30l-140 -141l-23 23c-6 6 -9 13 -9 22v7l21 98h-135c-23 0 -43 19 -43 42l1 2h-1v41c0 6 1 11 3 16l65 150c6 15 21 26 39 26h192z" />
+    <glyph glyph-name="thumb_up" unicode="thumb_up" 
+d="M491 299l-1 -2h1v-41c0 -6 -1 -11 -3 -16l-65 -150c-6 -15 -21 -26 -39 -26h-192c-23 0 -43 20 -43 43v213c0 12 5 22 13 30l140 141l23 -23c6 -6 9 -13 9 -22v-7l-21 -98h135c23 0 43 -19 43 -42zM21 64v256h86v-256h-86z" />
+    <glyph glyph-name="thumbs_up_down" unicode="thumbs_up_down" 
+d="M480 299c18 0 32 -14 32 -32v-139c0 -9 -3 -17 -9 -23l-106 -105l-17 17c-4 4 -7 10 -7 17c4.95149 24.3818 10.0081 48.6586 15 73h-111c-12 0 -21 9 -21 21v27c0 4 1 7 2 11l49 113c5 11 16 20 29 20h144zM256 384v-27c0 -4 -1 -7 -2 -11l-49 -113
+c-5 -11 -16 -20 -29 -20h-144c-18 0 -32 14 -32 32v139c0 9 3 17 9 23l106 105l17 -17c4 -4 7 -10 7 -17c-4.95149 -24.3818 -10.0081 -48.6586 -15 -73h111c12 0 21 -9 21 -21z" />
+    <glyph glyph-name="time_to_leave" unicode="time_to_leave" 
+d="M107 299h298l-32 96h-234zM373 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM139 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM404 405l44 -128v-170c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v21h-256v-21
+c0 -12 -9 -22 -21 -22h-22c-12 0 -21 10 -21 22v170l44 128c4 13 17 22 31 22h234c14 0 27 -9 31 -22z" />
+    <glyph glyph-name="timelapse" unicode="timelapse" 
+d="M256 85c94 0 171 77 171 171s-77 171 -171 171s-171 -77 -171 -171s77 -171 171 -171zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213zM346 346c50 -50 51 -130 1 -180s-131 -50 -181 0l90 90v128c33 0 65 -13 90 -38z" />
+    <glyph glyph-name="timeline" unicode="timeline" 
+d="M491 341c0 -23 -20 -42 -43 -42c-4 0 -8 0 -11 1l-76 -76c1 -3 2 -7 2 -11c0 -23 -20 -42 -43 -42s-43 19 -43 42c0 4 1 8 2 11l-55 55c-3 -1 -7 -2 -11 -2s-8 1 -11 2l-97 -97c1 -3 2 -7 2 -11c0 -23 -20 -43 -43 -43s-43 20 -43 43s20 42 43 42c4 0 8 0 11 -1l97 97
+c-1 3 -1 7 -1 11c0 23 19 43 42 43s43 -20 43 -43c0 -4 0 -8 -1 -11l54 -54c3 1 7 1 11 1s8 0 11 -1l76 75c-1 3 -2 7 -2 11c0 23 20 43 43 43s43 -20 43 -43z" />
+    <glyph glyph-name="timer" unicode="timer" 
+d="M256 85c83 0 149 67 149 150s-66 149 -149 149s-149 -66 -149 -149s66 -150 149 -150zM406 354c26 -33 42 -74 42 -119c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192c45 0 87 -17 120 -43l30 31c11 -9 21 -19 30 -30zM235 213v128h42v-128h-42zM320 491
+v-43h-128v43h128z" />
+    <glyph glyph-name="timer_10" unicode="timer_&#x31;&#x30;" 
+d="M275 230v54c0 23.1679 -2.28229 40.1372 -10 53c-5.32529 10.6506 -15.2041 15 -30 15c-6 0 -13 -1 -18 -3c-19.376 -11.6256 -23 -33.9937 -23 -66v-53c0 -13 0 -24 2 -33s6 -15 9 -21c5.59145 -11.1829 14.1701 -16 30 -16c15.4236 0 24.6161 5.23229 30 16
+c3 6 6 12 8 21s2 20 2 33zM152 277c0 64.1175 20.6864 109 83 109c25.9331 0 47.8484 -8.37646 60 -24c15.2136 -19.5604 22 -48.5586 22 -85v-41c0 -63.9076 -19.6435 -110 -82 -110c-62.0914 0 -83 46.0788 -83 110v41zM436 289c-16.3185 0 -30 -6.67853 -30 -23
+c0 -14.5467 7.81248 -15.525 19 -20c5 -2 12 -4 19 -5c11 -2 19 -5 28 -8s16 -8 22 -12s10 -10 13 -16s5 -12 5 -21c0 -30.9206 -20.0931 -44.031 -44 -52c-9 -3 -19 -4 -30 -4c-35.9519 0 -63.4589 14.4041 -74 39c-3 7 -5 14 -5 22h41c0 -21.2888 17.0766 -30 38 -30
+c18.6968 0 33 5.89308 33 23c0 13.5739 -8.51234 16.8049 -19 21c-12.7341 5.09362 -34.9088 9.09079 -48 14c-8 3 -14 7 -20 11c-11.0546 7.36974 -19 18.5758 -19 36c0 27.5628 20.3776 44.7925 42 52c9 3 18 4 29 4c40.9316 0 75 -19.1355 75 -59h-42
+c0 12.2774 -7.84356 22.4609 -18 25c-4 1 -10 3 -15 3zM0 347l101 37h6v-256h-43v205l-64 -22v36z" />
+    <glyph glyph-name="timer_3" unicode="timer_&#x33;" 
+d="M374 289c-15.9409 0 -31 -7.57315 -31 -23c0 -13.6828 9.30955 -15.7238 20 -20c5 -2 11 -4 18 -5c11 -2 20 -5 29 -8s16 -8 22 -12s10 -10 13 -16s5 -12 5 -21c0 -30.9206 -20.0931 -44.031 -44 -52c-9 -3 -20 -4 -31 -4c-35.3954 0 -62.613 14.7638 -73 39
+c-3 7 -5 14 -5 22h40c0 -20.4241 18.5387 -30 39 -30c18.6968 0 33 5.89308 33 23c0 13.5739 -8.51234 16.8049 -19 21c-5 2 -13 4 -21 6c-18.808 3.76159 -34.9505 10.3003 -48 19c-10.5283 7.01889 -18 19.4522 -18 36c0 27.5628 20.3776 44.7925 42 52c9 3 18 4 29 4
+c40.9316 0 75 -19.1355 75 -59h-42c0 13.019 -8.2055 22.3014 -19 25c-4 1 -9 3 -14 3zM215 259c24.7243 -9.2716 42 -25.484 42 -58c0 -25.5996 -8.85495 -43.6412 -24 -55c-14.0356 -12.0305 -34.4533 -20 -60 -20c-46.8771 0 -84 25.2474 -84 72h43
+c0 -11.5043 4.1483 -22.8612 11 -28c7.35188 -5.51391 17.5339 -10 30 -10c27.0755 0 42 14.0756 42 41c0 28.626 -17.0664 41 -46 41h-26v33h25c20.5078 0 35.1083 8.27068 41 23c2 5 2 10 2 16c0 24.8875 -12.4571 38 -38 38c-18.723 0 -29.7305 -7.46097 -36 -20
+c-2 -4 -3 -9 -3 -15h-42c0 34.3341 22.95 53.98 48 64c10 3 21 5 33 5c48.7123 0 80 -23.4793 80 -72c0 -28.4847 -18.378 -45.189 -38 -55z" />
+    <glyph glyph-name="timer_off" unicode="timer_off" 
+d="M256 85c27 0 53 8 75 21l-204 204c-13 -22 -20 -48 -20 -75c0 -83 66 -150 149 -150zM64 427l379 -379l-27 -27l-54 54c-31 -20 -67 -32 -106 -32c-106 0 -192 86 -192 192c0 39 12 76 32 106l-59 59zM235 311v30h42v-73zM320 491v-43h-128v43h128zM406 415l30 -30
+l-30 -31c26 -33 42 -74 42 -119c0 -39 -12 -76 -32 -106l-31 31c13 22 20 48 20 75c0 83 -66 149 -149 149c-27 0 -52 -7 -74 -20l-32 31c30 20 67 32 106 32c45 0 87 -16 120 -42z" />
+    <glyph glyph-name="title" unicode="title" 
+d="M107 427h298v-64h-117v-256h-64v256h-117v64z" />
+    <glyph glyph-name="toc" unicode="toc" 
+d="M405 235v42h43v-42h-43zM405 363h43v-43h-43v43zM405 149v43h43v-43h-43zM64 149v43h299v-43h-299zM64 235v42h299v-42h-299zM64 320v43h299v-43h-299z" />
+    <glyph glyph-name="today" unicode="today" 
+d="M149 299h107v-107h-107v107zM405 107v234h-298v-234h298zM405 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v298c0 23 19 43 43 43h21v43h43v-43h170v43h43v-43h21z" />
+    <glyph glyph-name="toll" unicode="toll" 
+d="M64 256c0 -56 35 -104 85 -121v-44c-74 19 -128 85 -128 165s54 146 128 165v-44c-50 -17 -85 -65 -85 -121zM320 128c71 0 128 57 128 128s-57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128zM320 427c94 0 171 -77 171 -171s-77 -171 -171 -171s-171 77 -171 171
+s77 171 171 171z" />
+    <glyph glyph-name="tonality" unicode="tonality" 
+d="M421 213c2 7 3 15 4 22h-148v-22h144zM389 149c5 7 11 15 15 22h-127v-22h112zM277 87c22 3 43 10 62 20h-62v-20zM277 299v-22h148c-1 7 -2 15 -4 22h-144zM277 363v-22h127c-4 7 -10 15 -15 22h-112zM277 425v-20h62c-19 10 -40 17 -62 20zM235 87v338
+c-84 -10 -150 -82 -150 -169s66 -159 150 -169zM256 469c118 0 213 -95 213 -213s-95 -213 -213 -213s-213 95 -213 213s95 213 213 213z" />
+    <glyph glyph-name="touch_app" unicode="touch_app" 
+d="M402 173c11 -5 19 -16 19 -29v-4l-16 -113c-2 -16 -15 -27 -31 -27h-145c-9 0 -16 3 -22 9l-106 106l17 17c4 4 10 7 17 7c2 0 3 -1 5 -1l73 -15v229c0 18 14 32 32 32s32 -14 32 -32v-128h17c4 0 7 -1 11 -2zM192 272c-26 17 -43 47 -43 80c0 53 43 96 96 96
+s96 -43 96 -96c0 -33 -16 -63 -42 -80v80c0 29 -25 53 -54 53s-53 -24 -53 -53v-80z" />
+    <glyph glyph-name="toys" unicode="toys" 
+d="M256 256c0 -64 -53 -117 -117 -117s-118 53 -118 117h235zM256 256c-64 0 -117 53 -117 117s53 118 117 118v-235zM256 256c64 0 117 -53 117 -117s-53 -118 -117 -118v235zM256 256c0 64 53 117 117 117s118 -53 118 -117h-235z" />
+    <glyph glyph-name="track_changes" unicode="track_changes" 
+d="M407 407c39 -39 62 -92 62 -151c0 -118 -95 -213 -213 -213s-213 95 -213 213s95 213 213 213h21v-176c13 -7 22 -21 22 -37c0 -23 -20 -43 -43 -43s-43 20 -43 43c0 16 9 30 22 37v45c-37 -10 -64 -42 -64 -82c0 -47 38 -85 85 -85s85 38 85 85c0 23 -10 44 -25 60
+l30 30c23 -23 38 -55 38 -90c0 -71 -57 -128 -128 -128s-128 57 -128 128c0 63 46 116 107 126v43c-84 -10 -150 -82 -150 -169c0 -94 77 -171 171 -171s171 77 171 171c0 47 -19 90 -50 121z" />
+    <glyph glyph-name="traffic" unicode="traffic" 
+d="M256 320c24 0 43 20 43 43c0 24 -20 42 -43 42c-24 0 -43 -18 -43 -42c0 -23 19 -43 43 -43zM256 213c24 0 43 20 43 43s-20 43 -43 43c-24 0 -43 -20 -43 -43s19 -43 43 -43zM256 107c24 0 43 19 43 42s-20 43 -43 43c-24 0 -43 -20 -43 -43s19 -42 43 -42zM427 299
+c0 -40 -27 -73 -64 -83v-24h64c0 -40 -27 -72 -64 -82v-25c0 -12 -10 -21 -22 -21h-170c-12 0 -22 9 -22 21v25c-37 10 -64 42 -64 82h64v24c-37 10 -64 43 -64 83h64v24c-37 10 -64 42 -64 82h64v22c0 12 10 21 22 21h170c12 0 22 -9 22 -21v-22h64c0 -40 -27 -72 -64 -82
+v-24h64z" />
+    <glyph glyph-name="train" unicode="train" 
+d="M352 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM277 299h107v85h-107v-85zM235 299v85h-107v-85h107zM160 149c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM256 469c94 0 171 -10 171 -85v-203c0 -41 -34 -74 -75 -74
+l32 -32v-11h-43l-42 43h-81l-42 -43h-48v11l32 32c-41 0 -75 33 -75 74v203c0 75 86 85 171 85z" />
+    <glyph glyph-name="tram" unicode="tram" 
+d="M363 213v107h-214v-107h214zM256 117c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM405 151c0 -36 -19 -66 -55 -66h2l32 -32v-10h-43l-42 42h-81l-42 -42h-48v10l34 34c-30 7 -55 33 -55 64v180c0 59 60 72 127 74l17 32h-102v32h214v-32h-70
+l-16 -32c73 -2 128 -14 128 -74v-180z" />
+    <glyph glyph-name="transfer_within_a_station" unicode="transfer_within_a_station" 
+d="M123 322l-59 -301h45l37 171l46 -43v-128h43v161l-44 44l13 64c28 -34 69 -55 116 -55v42c-39 0 -74 22 -93 53l-20 34c-7 13 -21 20 -36 20c-5 0 -11 -1 -16 -3l-112 -46v-100h42v71l38 16zM203 395c-23 0 -43 19 -43 42s20 43 43 43s42 -20 42 -43s-19 -42 -42 -42z
+M416 91v37l53 -53l-53 -54v38h-117v32h117zM352 181h117v-32h-117v-37l-53 53l53 54v-38z" />
+    <glyph glyph-name="transform" unicode="transform" 
+d="M213 341v43h128c23 0 43 -20 43 -43v-128h-43v128h-128zM469 128h-85v-43h43l-64 -64l-64 64h42v43h-170c-23 0 -43 20 -43 43v170h-85v43h85v43h-43l64 64l64 -64h-42v-256h298v-43z" />
+    <glyph glyph-name="translate" unicode="translate" 
+d="M339 149h69l-35 93zM395 299l96 -256h-43l-24 64h-101l-24 -64h-43l96 256h43zM275 191l-17 -44l-66 66l-107 -106l-30 30l109 107c-27 30 -48 62 -64 97h43c13 -25 29 -49 49 -71c31 34 54 73 68 114h-239v43h150v42h42v-42h150v-43h-63c-16 -50 -42 -98 -79 -139l-1 -1
+z" />
+    <glyph glyph-name="trending_down" unicode="trending_down" 
+d="M341 128l49 49l-104 104l-85 -85l-158 158l30 30l128 -128l85 85l134 -134l49 49v-128h-128z" />
+    <glyph glyph-name="trending_flat" unicode="trending_flat" 
+d="M469 256l-85 -85v64h-320v42h320v64z" />
+    <glyph glyph-name="trending_up" unicode="trending_up" 
+d="M341 384h128v-128l-49 49l-134 -134l-85 85l-128 -128l-30 30l158 158l85 -85l104 104z" />
+    <glyph glyph-name="tune" unicode="tune" 
+d="M320 320v128h43v-43h85v-42h-85v-43h-43zM448 235h-213v42h213v-42zM149 320h43v-128h-43v43h-85v42h85v43zM277 64h-42v128h42v-43h171v-42h-171v-43zM64 405h213v-42h-213v42zM64 149h128v-42h-128v42z" />
+    <glyph glyph-name="turned_in" unicode="turned_in" 
+d="M363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="turned_in_not" unicode="turned_in_not" 
+d="M363 128v277h-214v-277l107 47zM363 448c23 0 42 -20 42 -43v-341l-149 64l-149 -64v341c0 23 19 43 42 43h214z" />
+    <glyph glyph-name="tv" unicode="tv" 
+d="M448 149v256h-384v-256h384zM448 448c23 0 43 -20 43 -43l-1 -256c0 -23 -19 -42 -42 -42h-107v-43h-170v43h-107c-23 0 -43 19 -43 42v256c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="unarchive" unicode="unarchive" 
+d="M109 405h294l-20 22h-256zM256 309l-117 -117h74v-43h86v43h74zM438 401c6 -7 10 -18 10 -28v-266c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v266c0 10 4 21 10 28l29 35c6 7 15 12 25 12h256c10 0 19 -5 25 -12z" />
+    <glyph glyph-name="undo" unicode="undo" 
+d="M267 341c99 0 182 -65 212 -154l-50 -16c-22 68 -86 117 -162 117c-42 0 -80 -15 -110 -40l78 -77h-192v192l76 -77c39 34 91 55 148 55z" />
+    <glyph glyph-name="unfold_less" unicode="unfold_less" 
+d="M354 397l-98 -98l-98 98l30 30l68 -68l68 68zM158 115l98 98l98 -98l-30 -30l-68 68l-68 -68z" />
+    <glyph glyph-name="unfold_more" unicode="unfold_more" 
+d="M256 124l68 68l30 -30l-98 -98l-98 98l30 30zM256 388l-68 -68l-30 30l98 98l98 -98l-30 -30z" />
+    <glyph glyph-name="update" unicode="update" 
+d="M267 341v-90l74 -45l-15 -26l-91 55v106h32zM448 296h-145l59 60c-58 58 -153 60 -211 2s-58 -150 0 -208s153 -58 211 0c29 29 43 62 43 104h43c0 -42 -18 -97 -56 -134c-75 -74 -197 -74 -272 0s-75 194 0 268s195 74 270 0l58 60v-152z" />
+    <glyph glyph-name="usb" unicode="usb" 
+d="M320 363h85v-86h-21v-42c0 -24 -19 -43 -43 -43h-64v-65c15 -8 26 -24 26 -42c0 -26 -21 -47 -47 -47s-47 21 -47 47c0 18 11 34 26 42v65h-64c-24 0 -43 19 -43 43v44c-15 8 -26 23 -26 41c0 26 21 47 47 47s47 -21 47 -47c0 -18 -10 -33 -25 -41v-44h64v170h-43l64 86
+l64 -86h-43v-170h64v42h-21v86z" />
+    <glyph glyph-name="verified_user" unicode="verified_user" 
+d="M213 149l171 171l-30 30l-141 -140l-55 55l-30 -30zM256 491l192 -86v-128c0 -118 -82 -229 -192 -256c-110 27 -192 138 -192 256v128z" />
+    <glyph glyph-name="vertical_align_bottom" unicode="vertical_align_bottom" 
+d="M85 107h342v-43h-342v43zM341 235l-85 -86l-85 86h64v213h42v-213h64z" />
+    <glyph glyph-name="vertical_align_center" unicode="vertical_align_center" 
+d="M85 277h342v-42h-342v42zM341 405l-85 -85l-85 85h64v86h42v-86h64zM171 107l85 85l85 -85h-64v-86h-42v86h-64z" />
+    <glyph glyph-name="vertical_align_top" unicode="vertical_align_top" 
+d="M85 448h342v-43h-342v43zM171 277l85 86l85 -86h-64v-213h-42v213h-64z" />
+    <glyph glyph-name="vibration" unicode="vibration" 
+d="M341 107v298h-170v-298h170zM352 448c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h192zM405 149v214h43v-214h-43zM469 320h43v-128h-43v128zM64 149v214h43v-214h-43zM0 192v128h43v-128h-43z" />
+    <glyph glyph-name="video_call" unicode="video_call" 
+d="M299 235v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM363 288l85 85v-234l-85 85v-75c0 -12 -10 -21 -22 -21h-256c-12 0 -21 9 -21 21v214c0 12 9 21 21 21h256c12 0 22 -9 22 -21v-75z" />
+    <glyph glyph-name="video_label" unicode="video_label" 
+d="M448 171v234h-384v-234h384zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="video_library" unicode="video_library" 
+d="M256 203l128 96l-128 96v-192zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-256c-23 0 -43 20 -43 43v256c0 23 20 42 43 42h256zM85 384v-299h299v-42h-299c-23 0 -42 19 -42 42v299h42z" />
+    <glyph glyph-name="videocam" unicode="videocam" 
+d="M363 288l85 85v-234l-85 85v-75c0 -12 -10 -21 -22 -21h-256c-12 0 -21 9 -21 21v214c0 12 9 21 21 21h256c12 0 22 -9 22 -21v-75z" />
+    <glyph glyph-name="videocam_off" unicode="videocam_off" 
+d="M70 469l378 -378l-27 -27l-68 68c-3 -2 -8 -4 -12 -4h-256c-12 0 -21 9 -21 21v214c0 12 9 21 21 21h16l-58 58zM448 373v-228l-239 239h132c12 0 22 -9 22 -21v-75z" />
+    <glyph glyph-name="videogame_asset" unicode="videogame_asset" 
+d="M416 256c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM331 192c18 0 32 14 32 32s-14 32 -32 32s-32 -14 -32 -32s14 -32 32 -32zM235 235v42h-64v64h-43v-64h-64v-42h64v-64h43v64h64zM448 384c23 0 43 -20 43 -43v-170c0 -23 -20 -43 -43 -43h-384
+c-23 0 -43 20 -43 43v170c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="view_agenda" unicode="view_agenda" 
+d="M427 448c12 0 21 -9 21 -21v-128c0 -12 -9 -22 -21 -22h-363c-12 0 -21 10 -21 22v128c0 12 9 21 21 21h363zM427 235c12 0 21 -10 21 -22v-128c0 -12 -9 -21 -21 -21h-363c-12 0 -21 9 -21 21v128c0 12 9 22 21 22h363z" />
+    <glyph glyph-name="view_array" unicode="view_array" 
+d="M171 128v277h192v-277h-192zM384 405h64v-277h-64v277zM85 128v277h64v-277h-64z" />
+    <glyph glyph-name="view_carousel" unicode="view_carousel" 
+d="M384 384h85v-235h-85v235zM43 149v235h85v-235h-85zM149 107v320h214v-320h-214z" />
+    <glyph glyph-name="view_column" unicode="view_column" 
+d="M341 405h107v-277h-107v277zM85 128v277h107v-277h-107zM213 128v277h107v-277h-107z" />
+    <glyph glyph-name="view_comfy" unicode="view_comfy" 
+d="M384 405h85v-85h-85v85zM384 107v85h85v-85h-85zM277 107v85h86v-85h-86zM171 107v85h85v-85h-85zM64 107v85h85v-85h-85zM384 213v86h85v-86h-85zM277 405h86v-85h-86v85zM171 320v85h85v-85h-85zM277 213v86h86v-86h-86zM171 213v86h85v-86h-85zM64 213v86h85v-86h-85z
+M64 320v85h85v-85h-85z" />
+    <glyph glyph-name="view_compact" unicode="view_compact" 
+d="M64 405h405v-128h-405v128zM213 107v149h256v-149h-256zM64 107v149h128v-149h-128z" />
+    <glyph glyph-name="view_day" unicode="view_day" 
+d="M43 448h405v-64h-405v64zM427 341c12 0 21 -9 21 -21v-128c0 -12 -9 -21 -21 -21h-363c-12 0 -21 9 -21 21v128c0 12 9 21 21 21h363zM43 64v64h405v-64h-405z" />
+    <glyph glyph-name="view_headline" unicode="view_headline" 
+d="M85 405h342v-42h-342v42zM85 277v43h342v-43h-342zM85 107v42h342v-42h-342zM85 192v43h342v-43h-342z" />
+    <glyph glyph-name="view_list" unicode="view_list" 
+d="M192 405h256v-85h-256v85zM192 107v85h256v-85h-256zM192 213v86h256v-86h-256zM85 320v85h86v-85h-86zM85 107v85h86v-85h-86zM85 213v86h86v-86h-86z" />
+    <glyph glyph-name="view_module" unicode="view_module" 
+d="M341 405h107v-128h-107v128zM213 277v128h107v-128h-107zM341 128v128h107v-128h-107zM213 128v128h107v-128h-107zM85 128v128h107v-128h-107zM85 277v128h107v-128h-107z" />
+    <glyph glyph-name="view_quilt" unicode="view_quilt" 
+d="M213 405h235v-128h-235v128zM341 128v128h107v-128h-107zM85 128v277h107v-277h-107zM213 128v128h107v-128h-107z" />
+    <glyph glyph-name="view_stream" unicode="view_stream" 
+d="M85 405h363v-128h-363v128zM85 128v128h363v-128h-363z" />
+    <glyph glyph-name="view_week" unicode="view_week" 
+d="M277 405c12 0 22 -9 22 -21v-256c0 -12 -10 -21 -22 -21h-64c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h64zM427 405c12 0 21 -9 21 -21v-256c0 -12 -9 -21 -21 -21h-64c-12 0 -22 9 -22 21v256c0 12 10 21 22 21h64zM128 405c12 0 21 -9 21 -21v-256
+c0 -12 -9 -21 -21 -21h-64c-12 0 -21 9 -21 21v256c0 12 9 21 21 21h64z" />
+    <glyph glyph-name="vignette" unicode="vignette" 
+d="M256 128c94 0 171 57 171 128s-77 128 -171 128s-171 -57 -171 -128s77 -128 171 -128zM448 448c23 0 43 -20 43 -43v-298c0 -23 -20 -43 -43 -43h-384c-23 0 -43 20 -43 43v298c0 23 20 43 43 43h384z" />
+    <glyph glyph-name="visibility" unicode="visibility" 
+d="M256 320c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM256 149c59 0 107 48 107 107s-48 107 -107 107s-107 -48 -107 -107s48 -107 107 -107zM256 416c107 0 198 -66 235 -160c-37 -94 -128 -160 -235 -160s-198 66 -235 160c37 94 128 160 235 160z
+" />
+    <glyph glyph-name="visibility_off" unicode="visibility_off" 
+d="M253 320h3c35 0 64 -29 64 -64v-4zM161 303c-7 -14 -12 -30 -12 -47c0 -59 48 -107 107 -107c17 0 33 5 47 12l-33 33c-4 -1 -9 -2 -14 -2c-35 0 -64 29 -64 64c0 5 1 10 2 14zM43 421l27 27l378 -378l-27 -27c-23.9841 23.6825 -48.1328 47.2006 -72 71
+c-29 -12 -60 -18 -93 -18c-107 0 -198 66 -235 160c17 42 45 78 80 106c-19.5086 19.4914 -38.6537 39.3463 -58 59zM256 363c-14 0 -27 -3 -39 -8l-46 46c26 10 55 15 85 15c107 0 197 -66 234 -160c-16 -40 -41 -74 -73 -101l-62 62c5 12 8 25 8 39c0 59 -48 107 -107 107
+z" />
+    <glyph glyph-name="voice_chat" unicode="voice_chat" 
+d="M384 213v171l-85 -68v68h-171v-171h171v69zM427 469c23 0 42 -19 42 -42v-256c0 -23 -19 -43 -42 -43h-299l-85 -85v384c0 23 19 42 42 42h342z" />
+    <glyph glyph-name="voicemail" unicode="voicemail" 
+d="M395 192c41 0 74 34 74 75s-33 74 -74 74s-75 -33 -75 -74s34 -75 75 -75zM117 192c41 0 75 34 75 75s-34 74 -75 74s-74 -33 -74 -74s33 -75 74 -75zM395 384c65 0 117 -52 117 -117s-52 -118 -117 -118h-278c-65 0 -117 53 -117 118s52 117 117 117s118 -52 118 -117
+c0 -28 -10 -55 -27 -75h96c-17 20 -27 47 -27 75c0 65 53 117 118 117z" />
+    <glyph glyph-name="volume_down" unicode="volume_down" 
+d="M107 320h85l107 107v-342l-107 107h-85v128zM395 256c0 -38 -22 -70 -54 -86v172c32 -16 54 -48 54 -86z" />
+    <glyph glyph-name="volume_mute" unicode="volume_mute" 
+d="M149 320h86l106 107v-342l-106 107h-86v128z" />
+    <glyph glyph-name="volume_off" unicode="volume_off" 
+d="M256 427v-90l-45 45zM91 448l357 -357l-27 -27l-44 44c-23 -18 -49 -32 -78 -39v44c18 5 34 14 48 25l-91 91v-144l-107 107h-85v128h101l-101 101zM405 256c0 68 -44 125 -106 143v44c86 -19 149 -96 149 -187c0 -32 -8 -63 -22 -89l-32 33c7 17 11 36 11 56zM352 256
+c0 -5 0 -9 -1 -13l-52 52v47c32 -16 53 -48 53 -86z" />
+    <glyph glyph-name="volume_up" unicode="volume_up" 
+d="M299 443c86 -19 149 -96 149 -187s-63 -168 -149 -187v44c62 18 106 75 106 143s-44 125 -106 143v44zM352 256c0 -38 -21 -70 -53 -86v172c32 -16 53 -48 53 -86zM64 320h85l107 107v-342l-107 107h-85v128z" />
+    <glyph glyph-name="vpn_key" unicode="vpn_key" 
+d="M149 213c23 0 43 20 43 43s-20 43 -43 43s-42 -20 -42 -43s19 -43 42 -43zM270 299h221v-86h-43v-85h-85v85h-93c-17 -50 -65 -85 -121 -85c-71 0 -128 57 -128 128s57 128 128 128c56 0 104 -35 121 -85z" />
+    <glyph glyph-name="vpn_lock" unicode="vpn_lock" 
+d="M213 65v42c-23 0 -42 19 -42 42v22l-103 102c-3 -12 -4 -25 -4 -38c0 -87 65 -160 149 -170zM404 256h43c1 -7 1 -14 1 -21c0 -118 -95 -214 -213 -214s-214 96 -214 214s96 213 214 213c22 0 44 -4 64 -10v-54c0 -23 -20 -43 -43 -43h-43v-42c0 -12 -9 -22 -21 -22h-43
+v-42h128c12 0 22 -10 22 -22v-64h21c19 0 35 -12 41 -29c28 30 44 71 44 115c0 7 0 14 -1 21zM452 427v10c0 20 -16 37 -36 37s-36 -17 -36 -37v-10h72zM469 427c12 0 22 -10 22 -22v-85c0 -12 -10 -21 -22 -21h-106c-12 0 -22 9 -22 21v85c0 12 10 22 22 22v10
+c0 29 24 54 53 54s53 -25 53 -54v-10z" />
+    <glyph glyph-name="wallpaper" unicode="wallpaper" 
+d="M85 235v-150h150v-42h-150c-23 0 -42 19 -42 42v150h42zM427 85v150h42v-150c0 -23 -19 -42 -42 -42h-150v42h150zM427 469c23 0 42 -19 42 -42v-150h-42v150h-150v42h150zM363 331c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM213 235l64 -79
+l43 57l64 -85h-256zM85 427v-150h-42v150c0 23 19 42 42 42h150v-42h-150z" />
+    <glyph glyph-name="warning" unicode="warning" 
+d="M277 213v86h-42v-86h42zM277 128v43h-42v-43h42zM21 64l235 405l235 -405h-470z" />
+    <glyph glyph-name="watch" unicode="watch" 
+d="M128 256c0 -71 57 -128 128 -128s128 57 128 128s-57 128 -128 128s-128 -57 -128 -128zM427 256c0 -54 -26 -103 -65 -134l-21 -122h-170l-21 122c-40 31 -65 80 -65 134s25 103 65 134l21 122h170l21 -122c39 -31 65 -80 65 -134z" />
+    <glyph glyph-name="watch_later" unicode="watch_later" 
+d="M346 166l17 28l-96 58v111h-32v-128zM256 469c117 0 213 -96 213 -213s-96 -213 -213 -213s-213 96 -213 213s96 213 213 213z" />
+    <glyph glyph-name="wb_auto" unicode="wb_auto" 
+d="M220 171h40l-68 192h-43l-68 -192h41l15 42h68zM469 363h39l-44 -192h-37l-32 130l-32 -130h-38l-2 9c-28 -56 -85 -95 -152 -95c-94 0 -171 77 -171 171s77 171 171 171c54 0 102 -25 133 -64h16l26 -135l32 135h34l32 -135zM146 242l25 78l24 -78h-49z" />
+    <glyph glyph-name="wb_cloudy" unicode="wb_cloudy" 
+d="M413 298c55 -4 99 -50 99 -106c0 -59 -48 -107 -107 -107h-277c-71 0 -128 57 -128 128c0 66 50 120 114 127c27 51 80 87 142 87c78 0 142 -55 157 -129z" />
+    <glyph glyph-name="wb_incandescent" unicode="wb_incandescent" 
+d="M368 125l30 29l38 -38l-30 -30zM427 288h64v-43h-64v43zM320 377c38 -22 64 -63 64 -110c0 -71 -57 -128 -128 -128s-128 57 -128 128c0 47 26 88 64 110v103h128v-103zM85 288v-43h-64v43h64zM235 33v63h42v-63h-42zM76 116l38 39l30 -30l-38 -39z" />
+    <glyph glyph-name="wb_iridescent" unicode="wb_iridescent" 
+d="M106 86l-30 31l38 38l30 -30zM76 417l30 30l38 -38l-30 -30zM436 116l-30 -30l-38 39l30 30zM277 33h-42v63h42v-63zM406 447l30 -30l-38 -38l-30 30zM235 500h42v-63h-42v63zM107 203v128h298v-128h-298z" />
+    <glyph glyph-name="wb_sunny" unicode="wb_sunny" 
+d="M76 116l38 39l30 -30l-38 -39zM235 33v63h42v-63h-42zM256 395c71 0 128 -57 128 -128s-57 -128 -128 -128s-128 57 -128 128s57 128 128 128zM427 288h64v-43h-64v43zM368 125l30 29l38 -38l-30 -30zM436 417l-38 -38l-30 30l38 38zM277 500v-63h-42v63h42zM85 288v-43
+h-64v43h64zM144 409l-30 -30l-38 38l30 30z" />
+    <glyph glyph-name="wc" unicode="wc" 
+d="M352 384c-24 0 -43 19 -43 43s19 42 43 42s43 -18 43 -42s-19 -43 -43 -43zM160 384c-24 0 -43 19 -43 43s19 42 43 42s43 -18 43 -42s-19 -43 -43 -43zM384 43h-64v128h-64l54 162c6 17 23 30 41 30h2c18 0 35 -13 41 -30l54 -162h-64v-128zM117 43v160h-32v117
+c0 23 20 43 43 43h64c23 0 43 -20 43 -43v-117h-32v-160h-86z" />
+    <glyph glyph-name="web" unicode="web" 
+d="M427 128v192h-86v-192h86zM320 235v85h-235v-85h235zM320 128v85h-235v-85h235zM427 427c23 0 42 -20 42 -43v-256c0 -23 -19 -43 -42 -43h-342c-23 0 -42 20 -42 43v256c0 23 19 43 42 43h342z" />
+    <glyph glyph-name="web_asset" unicode="web_asset" 
+d="M405 128v213h-298v-213h298zM405 427c24 0 43 -20 43 -43v-256c0 -23 -20 -43 -43 -43h-298c-24 0 -43 20 -43 43v256c0 23 19 43 43 43h298z" />
+    <glyph glyph-name="weekend" unicode="weekend" 
+d="M384 405c23 0 43 -19 43 -42v-46c-25 -9 -43 -32 -43 -60v-44h-256v44c0 28 -18 51 -43 60v46c0 23 20 42 43 42h256zM448 299c23 0 43 -20 43 -43v-107c0 -23 -20 -42 -43 -42h-384c-23 0 -43 19 -43 42v107c0 23 20 43 43 43s43 -20 43 -43v-64h298v64
+c0 23 20 43 43 43z" />
+    <glyph glyph-name="whatshot" unicode="whatshot" 
+d="M250 107c57 0 102 45 102 102c0 30 -4 58 -12 86c-22 -29 -61 -47 -99 -55s-60 -31 -60 -66c0 -37 31 -67 69 -67zM288 498c83 -67 139 -170 139 -285c0 -94 -77 -170 -171 -170s-171 76 -171 170c0 72 26 139 69 190v-8c0 -44 33 -79 77 -79s73 35 73 79
+c0 46 -16 103 -16 103z" />
+    <glyph glyph-name="widgets" unicode="widgets" 
+d="M355 476l121 -121l-121 -120h93v-171h-171v171h78l-120 120v-78h-171v171h171v-93zM64 64v171h171v-171h-171z" />
+    <glyph glyph-name="wifi" unicode="wifi" 
+d="M107 235c83 82 216 82 298 0l-42 -43c-59 59 -155 59 -214 0zM192 149c35 35 93 35 128 0l-64 -64zM21 320c130 129 341 129 470 0l-43 -43c-106 106 -278 106 -384 0z" />
+    <glyph glyph-name="wifi_lock" unicode="wifi_lock" 
+d="M469 171v32c0 18 -14 32 -32 32s-32 -14 -32 -32v-32h64zM491 171c12 0 21 -10 21 -22v-85c0 -12 -9 -21 -21 -21h-107c-12 0 -21 9 -21 21v85c0 12 9 22 21 22v32c0 29 24 53 53 53s54 -24 54 -53v-32zM437 309c-59 0 -106 -47 -106 -106v-61l-75 -99l-256 341
+c71 54 160 85 256 85s185 -31 256 -85l-57 -76c-6 1 -12 1 -18 1z" />
+    <glyph glyph-name="wifi_tethering" unicode="wifi_tethering" 
+d="M256 448c118 0 213 -95 213 -213c0 -79 -42 -148 -106 -185l-22 37c51 30 86 85 86 148c0 94 -77 170 -171 170s-171 -76 -171 -170c0 -63 34 -118 85 -148l-21 -37c-64 37 -106 106 -106 185c0 118 95 213 213 213zM384 235c0 -47 -26 -89 -64 -111l-21 37
+c25 15 42 42 42 74c0 47 -38 85 -85 85s-85 -38 -85 -85c0 -32 17 -59 42 -74l-21 -37c-38 22 -64 64 -64 111c0 71 57 128 128 128s128 -57 128 -128zM256 277c23 0 43 -19 43 -42s-20 -43 -43 -43s-43 20 -43 43s20 42 43 42z" />
+    <glyph glyph-name="work" unicode="work" 
+d="M299 384v43h-86v-43h86zM427 384c24 0 42 -19 42 -43v-234c0 -24 -18 -43 -42 -43h-342c-24 0 -42 19 -42 43v234c0 24 18 43 42 43h86v43c0 24 18 42 42 42h86c24 0 42 -18 42 -42v-43h86z" />
+    <glyph glyph-name="wrap_text" unicode="wrap_text" 
+d="M363 277c47 0 85 -38 85 -85s-38 -85 -85 -85h-43v-43l-64 64l64 64v-43h48c23 0 43 20 43 43s-20 43 -43 43h-283v42h278zM427 405v-42h-342v42h342zM85 107v42h128v-42h-128z" />
+    <glyph glyph-name="youtube_searched_for" unicode="youtube_searched_for" 
+d="M363 213l106 -106l-31 -32l-107 107v16l-6 6c-24 -21 -56 -33 -90 -33c-26 0 -50 7 -71 19l32 31c12 -5 25 -8 39 -8c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96h74l-88 -85l-82 85h53c0 75 62 139 139 139s139 -62 139 -139c0 -35 -13 -66 -34 -90l6 -6h17z" />
+    <glyph glyph-name="zoom_in" unicode="zoom_in" 
+d="M256 299h-43v-43h-21v43h-43v21h43v43h21v-43h43v-21zM203 213c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM331 213l106 -106l-32 -32l-106 106v17l-6 6c-24 -21 -56 -33 -90 -33c-77 0 -139 61 -139 138s62 139 139 139s138 -62 138 -139
+c0 -34 -12 -66 -33 -90l6 -6h17z" />
+    <glyph glyph-name="zoom_out" unicode="zoom_out" 
+d="M149 320h107v-21h-107v21zM203 213c53 0 96 43 96 96s-43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96zM331 213l106 -106l-32 -32l-106 106v17l-6 6c-24 -21 -56 -33 -90 -33c-77 0 -139 61 -139 138s62 139 139 139s138 -62 138 -139c0 -34 -12 -66 -33 -90l6 -6h17z" />
+    <glyph glyph-name="zoom_out_map" unicode="zoom_out_map" 
+d="M448 192v-128h-128l49 49l-62 61l31 31l61 -62zM192 64h-128v128l49 -49l61 62l31 -31l-62 -61zM64 320v128h128l-49 -49l62 -61l-31 -31l-61 62zM320 448h128v-128l-49 49l-61 -62l-31 31l62 61z" />
+    <glyph glyph-name="3" unicode="3" 
+d="M0 0z" />
+    <glyph glyph-name="d" unicode="d" 
+d="M0 0z" />
+    <glyph glyph-name="_" unicode="_" 
+d="M0 0z" />
+    <glyph glyph-name="r" unicode="r" 
+d="M0 0z" />
+    <glyph glyph-name="o" unicode="o" 
+d="M0 0z" />
+    <glyph glyph-name="t" unicode="t" 
+d="M0 0z" />
+    <glyph glyph-name="a" unicode="a" 
+d="M0 0z" />
+    <glyph glyph-name="i" unicode="i" 
+d="M0 0z" />
+    <glyph glyph-name="n" unicode="n" 
+d="M0 0z" />
+    <glyph glyph-name="c" unicode="c" 
+d="M0 0z" />
+    <glyph glyph-name="u" unicode="u" 
+d="M0 0z" />
+    <glyph glyph-name="e" unicode="e" 
+d="M0 0z" />
+    <glyph glyph-name="s" unicode="s" 
+d="M0 0z" />
+    <glyph glyph-name="l" unicode="l" 
+d="M0 0z" />
+    <glyph glyph-name="m" unicode="m" 
+d="M0 0z" />
+    <glyph glyph-name="b" unicode="b" 
+d="M0 0z" />
+    <glyph glyph-name="y" unicode="y" 
+d="M0 0z" />
+    <glyph glyph-name="w" unicode="w" 
+d="M0 0z" />
+    <glyph glyph-name="x" unicode="x" 
+d="M0 0z" />
+    <glyph glyph-name="p" unicode="p" 
+d="M0 0z" />
+    <glyph glyph-name="h" unicode="h" 
+d="M0 0z" />
+    <glyph glyph-name="g" unicode="g" 
+d="M0 0z" />
+    <glyph glyph-name="q" unicode="q" 
+d="M0 0z" />
+    <glyph glyph-name="j" unicode="j" 
+d="M0 0z" />
+    <glyph glyph-name="f" unicode="f" 
+d="M0 0z" />
+    <glyph glyph-name="v" unicode="v" 
+d="M0 0z" />
+    <glyph glyph-name="k" unicode="k" 
+d="M0 0z" />
+    <glyph glyph-name="z" unicode="z" 
+d="M0 0z" />
+    <glyph glyph-name="1" unicode="1" 
+d="M0 0z" />
+    <glyph glyph-name="2" unicode="2" 
+d="M0 0z" />
+    <glyph glyph-name="4" unicode="4" 
+d="M0 0z" />
+    <glyph glyph-name="5" unicode="5" 
+d="M0 0z" />
+    <glyph glyph-name="6" unicode="6" 
+d="M0 0z" />
+    <glyph glyph-name="7" unicode="7" 
+d="M0 0z" />
+    <glyph glyph-name="9" unicode="9" 
+d="M0 0z" />
+    <glyph glyph-name="8" unicode="8" 
+d="M0 0z" />
+    <glyph glyph-name="0" unicode="0" 
+d="M0 0z" />
+  </font>
+</defs></svg>

BIN
misago/static/misago/fonts/MaterialIcons-Regular.ttf


BIN
misago/static/misago/fonts/MaterialIcons-Regular.woff


BIN
misago/static/misago/fonts/MaterialIcons-Regular.woff2


+ 2 - 4
misago/static/misago/fonts/README.md

@@ -1,11 +1,9 @@
-The recommended way to use the Material Icons font is hosted by Google Fonts,
-available here:
+The recommended way to use the Material Icons font is by linking to the web font hosted on Google Fonts:
 
-```
+```html
 <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
       rel="stylesheet">
 ```
 
 Read more in our full usage guide:
 http://google.github.io/material-design-icons/#icon-font-for-the-web
-

+ 137 - 0
misago/static/misago/fonts/codepoints

@@ -1,21 +1,26 @@
 3d_rotation e84d
+ac_unit eb3b
 access_alarm e190
 access_alarms e191
 access_time e192
 accessibility e84e
+accessible e914
 account_balance e84f
 account_balance_wallet e850
 account_box e851
 account_circle e853
 adb e60e
 add e145
+add_a_photo e439
 add_alarm e193
 add_alert e003
 add_box e146
 add_circle e147
 add_circle_outline e148
+add_location e567
 add_shopping_cart e854
 add_to_photos e39d
+add_to_queue e05c
 adjust e39e
 airline_seat_flat e630
 airline_seat_flat_angled e631
@@ -28,20 +33,26 @@ airline_seat_recline_normal e637
 airplanemode_active e195
 airplanemode_inactive e194
 airplay e055
+airport_shuttle eb3c
 alarm e855
 alarm_add e856
 alarm_off e857
 alarm_on e858
 album e019
+all_inclusive eb3d
+all_out e90b
 android e859
 announcement e85a
 apps e5c3
 archive e149
 arrow_back e5c4
+arrow_downward e5db
 arrow_drop_down e5c5
 arrow_drop_down_circle e5c6
 arrow_drop_up e5c7
 arrow_forward e5c8
+arrow_upward e5d8
+art_track e060
 aspect_ratio e85b
 assessment e85c
 assignment e85d
@@ -65,6 +76,7 @@ battery_charging_full e1a3
 battery_full e1a4
 battery_std e1a5
 battery_unknown e1a6
+beach_access eb3e
 beenhere e52d
 block e14b
 bluetooth e1a7
@@ -91,6 +103,7 @@ border_right e230
 border_style e231
 border_top e232
 border_vertical e233
+branding_watermark e06b
 brightness_1 e3a6
 brightness_2 e3a7
 brightness_3 e3a8
@@ -104,9 +117,12 @@ brightness_low e1ad
 brightness_medium e1ae
 broken_image e3ad
 brush e3ae
+bubble_chart e6dd
 bug_report e868
 build e869
+burst_mode e43c
 business e0af
+business_center eb3f
 cached e86a
 cake e7e9
 call e0b0
@@ -114,8 +130,10 @@ call_end e0b1
 call_made e0b2
 call_merge e0b3
 call_missed e0b4
+call_missed_outgoing e0e4
 call_received e0b5
 call_split e0b6
+call_to_action e06c
 camera e3af
 camera_alt e3b0
 camera_enhance e8fc
@@ -126,6 +144,7 @@ cancel e5c9
 card_giftcard e8f6
 card_membership e8f7
 card_travel e8f8
+casino eb40
 cast e307
 cast_connected e308
 center_focus_strong e3b4
@@ -140,6 +159,8 @@ check_box_outline_blank e835
 check_circle e86c
 chevron_left e5cb
 chevron_right e5cc
+child_care eb41
+child_friendly eb42
 chrome_reader_mode e86d
 class e86e
 clear e14c
@@ -160,8 +181,10 @@ color_lens e3b7
 colorize e3b8
 comment e0b9
 compare e3b9
+compare_arrows e915
 computer e30a
 confirmation_number e638
+contact_mail e0d0
 contact_phone e0cf
 contacts e0ba
 content_copy e14d
@@ -169,7 +192,9 @@ content_cut e14e
 content_paste e14f
 control_point e3ba
 control_point_duplicate e3bb
+copyright e90c
 create e150
+create_new_folder e2cc
 credit_card e870
 crop e3be
 crop_16_9 e3bc
@@ -181,11 +206,15 @@ crop_free e3c2
 crop_landscape e3c3
 crop_original e3c4
 crop_portrait e3c5
+crop_rotate e437
 crop_square e3c6
 dashboard e871
 data_usage e1af
+date_range e916
 dehaze e3c7
 delete e872
+delete_forever e92b
+delete_sweep e16c
 description e873
 desktop_mac e30b
 desktop_windows e30c
@@ -194,6 +223,7 @@ developer_board e30d
 developer_mode e1b0
 device_hub e335
 devices e1b1
+devices_other e337
 dialer_sip e0bb
 dialpad e0bc
 directions e52e
@@ -210,19 +240,28 @@ disc_full e610
 dns e875
 do_not_disturb e612
 do_not_disturb_alt e611
+do_not_disturb_off e643
+do_not_disturb_on e644
 dock e30e
 domain e7ee
 done e876
 done_all e877
+donut_large e917
+donut_small e918
 drafts e151
+drag_handle e25d
 drive_eta e613
 dvr e1b2
 edit e3c9
+edit_location e568
 eject e8fb
 email e0be
+enhanced_encryption e63f
 equalizer e01d
 error e000
 error_outline e001
+euro_symbol e926
+ev_station e56d
 event e878
 event_available e614
 event_busy e615
@@ -245,7 +284,14 @@ fast_forward e01f
 fast_rewind e020
 favorite e87d
 favorite_border e87e
+featured_play_list e06d
+featured_video e06e
 feedback e87f
+fiber_dvr e05d
+fiber_manual_record e061
+fiber_new e05e
+fiber_pin e06a
+fiber_smart_record e062
 file_download e2c4
 file_upload e2c6
 filter e3d3
@@ -270,6 +316,9 @@ filter_tilt_shift e3e2
 filter_vintage e3e3
 find_in_page e880
 find_replace e881
+fingerprint e90d
+first_page e5dc
+fitness_center eb43
 flag e153
 flare e3e4
 flash_auto e3e5
@@ -303,6 +352,7 @@ format_list_bulleted e241
 format_list_numbered e242
 format_paint e243
 format_quote e244
+format_shapes e25e
 format_size e245
 format_strikethrough e246
 format_textdirection_l_to_r e247
@@ -313,14 +363,18 @@ forward e154
 forward_10 e056
 forward_30 e057
 forward_5 e058
+free_breakfast eb44
 fullscreen e5d0
 fullscreen_exit e5d1
 functions e24a
+g_translate e927
 gamepad e30f
 games e021
+gavel e90e
 gesture e155
 get_app e884
 gif e908
+golf_course eb45
 gps_fixed e1b3
 gps_not_fixed e1b4
 gps_off e1b5
@@ -345,9 +399,11 @@ hearing e023
 help e887
 help_outline e8fd
 high_quality e024
+highlight e25f
 highlight_off e888
 history e889
 home e88a
+hot_tub eb46
 hotel e53a
 hourglass_empty e88b
 hourglass_full e88c
@@ -355,7 +411,9 @@ http e902
 https e88d
 image e3f4
 image_aspect_ratio e3f5
+import_contacts e0e0
 import_export e0c3
+important_devices e912
 inbox e156
 indeterminate_check_box e909
 info e88e
@@ -382,6 +440,7 @@ keyboard_hide e31a
 keyboard_return e31b
 keyboard_tab e31c
 keyboard_voice e31d
+kitchen eb47
 label e892
 label_outline e893
 landscape e3f7
@@ -390,6 +449,7 @@ laptop e31e
 laptop_chromebook e31f
 laptop_mac e320
 laptop_windows e321
+last_page e5dd
 launch e895
 layers e53b
 layers_clear e53c
@@ -399,7 +459,12 @@ lens e3fa
 library_add e02e
 library_books e02f
 library_music e030
+lightbulb_outline e90f
+line_style e919
+line_weight e91a
+linear_scale e260
 link e157
+linked_camera e438
 list e896
 live_help e0c6
 live_tv e639
@@ -449,8 +514,10 @@ looks_one e400
 looks_two e401
 loop e028
 loupe e402
+low_priority e16d
 loyalty e89a
 mail e158
+mail_outline e0e1
 map e55b
 markunread e159
 markunread_mailbox e89b
@@ -464,6 +531,7 @@ mic_off e02b
 mms e618
 mode_comment e253
 mode_edit e254
+monetization_on e263
 money_off e25c
 monochrome_photos e403
 mood e7f2
@@ -471,23 +539,33 @@ mood_bad e7f3
 more e619
 more_horiz e5d3
 more_vert e5d4
+motorcycle e91b
 mouse e323
+move_to_inbox e168
 movie e02c
 movie_creation e404
+movie_filter e43a
+multiline_chart e6df
 music_note e405
+music_video e063
 my_location e55c
 nature e406
 nature_people e407
 navigate_before e408
 navigate_next e409
 navigation e55d
+near_me e569
 network_cell e1b9
+network_check e640
 network_locked e61a
 network_wifi e1ba
 new_releases e031
+next_week e16a
 nfc e1bb
+no_encryption e641
 no_sim e0cc
 not_interested e033
+note e06f
 note_add e89c
 notifications e7f4
 notifications_active e7f7
@@ -496,12 +574,14 @@ notifications_off e7f6
 notifications_paused e7f8
 offline_pin e90a
 ondemand_video e63a
+opacity e91c
 open_in_browser e89d
 open_in_new e89e
 open_with e89f
 pages e7f9
 pageview e8a0
 palette e40a
+pan_tool e925
 panorama e40b
 panorama_fish_eye e40c
 panorama_horizontal e40d
@@ -526,7 +606,9 @@ person e7fd
 person_add e7fe
 person_outline e7ff
 person_pin e55a
+person_pin_circle e56a
 personal_video e63b
+pets e91d
 phone e0cd
 phone_android e324
 phone_bluetooth_speaker e61b
@@ -545,12 +627,16 @@ phonelink_setup e0de
 photo e410
 photo_album e411
 photo_camera e412
+photo_filter e43b
 photo_library e413
 photo_size_select_actual e432
 photo_size_select_large e433
 photo_size_select_small e434
 picture_as_pdf e415
 picture_in_picture e8aa
+picture_in_picture_alt e911
+pie_chart e6c4
+pie_chart_outlined e6c5
 pin_drop e55e
 place e55f
 play_arrow e037
@@ -558,35 +644,44 @@ play_circle_filled e038
 play_circle_outline e039
 play_for_work e906
 playlist_add e03b
+playlist_add_check e065
+playlist_play e05f
 plus_one e800
 poll e801
 polymer e8ab
+pool eb48
 portable_wifi_off e0ce
 portrait e416
 power e63c
 power_input e336
 power_settings_new e8ac
+pregnant_woman e91e
 present_to_all e0df
 print e8ad
+priority_high e645
 public e80b
 publish e255
 query_builder e8ae
 question_answer e8af
 queue e03c
 queue_music e03d
+queue_play_next e066
 radio e03e
 radio_button_checked e837
 radio_button_unchecked e836
 rate_review e560
 receipt e8b0
 recent_actors e03f
+record_voice_over e91f
 redeem e8b1
 redo e15a
 refresh e5d5
 remove e15b
 remove_circle e15c
 remove_circle_outline e15d
+remove_from_queue e067
 remove_red_eye e417
+remove_shopping_cart e928
 reorder e8fe
 repeat e040
 repeat_one e041
@@ -598,14 +693,21 @@ reply e15e
 reply_all e15f
 report e160
 report_problem e8b2
+restaurant e56c
 restaurant_menu e561
 restore e8b3
+restore_page e929
 ring_volume e0d1
 room e8b4
+room_service eb49
 rotate_90_degrees_ccw e418
 rotate_left e419
 rotate_right e41a
+rounded_corner e920
 router e328
+rowing e921
+rss_feed e0e5
+rv_hookup e642
 satellite e562
 save e161
 scanner e329
@@ -615,12 +717,18 @@ screen_lock_landscape e1be
 screen_lock_portrait e1bf
 screen_lock_rotation e1c0
 screen_rotation e1c1
+screen_share e0e2
 sd_card e623
 sd_storage e1c2
 search e8b6
 security e32a
 select_all e162
 send e163
+sentiment_dissatisfied e811
+sentiment_neutral e812
+sentiment_satisfied e813
+sentiment_very_dissatisfied e814
+sentiment_very_satisfied e815
 settings e8b8
 settings_applications e8b9
 settings_backup_restore e8ba
@@ -644,6 +752,8 @@ shop e8c9
 shop_two e8ca
 shopping_basket e8cb
 shopping_cart e8cc
+short_text e261
+show_chart e6e1
 shuffle e043
 signal_cellular_4_bar e1c8
 signal_cellular_connected_no_internet_4_bar e1cd
@@ -658,16 +768,21 @@ sim_card_alert e624
 skip_next e044
 skip_previous e045
 slideshow e41b
+slow_motion_video e068
 smartphone e32c
+smoke_free eb4a
+smoking_rooms eb4b
 sms e625
 sms_failed e626
 snooze e046
 sort e164
 sort_by_alpha e053
+spa eb4c
 space_bar e256
 speaker e32d
 speaker_group e32e
 speaker_notes e8cd
+speaker_notes_off e92a
 speaker_phone e0d2
 spellcheck e8ce
 star e838
@@ -679,14 +794,20 @@ stay_current_portrait e0d4
 stay_primary_landscape e0d5
 stay_primary_portrait e0d6
 stop e047
+stop_screen_share e0e3
 storage e1db
 store e8d1
 store_mall_directory e563
 straighten e41c
+streetview e56e
 strikethrough_s e257
 style e41d
+subdirectory_arrow_left e5d9
+subdirectory_arrow_right e5da
 subject e8d2
+subscriptions e064
 subtitles e048
+subway e56f
 supervisor_account e8d3
 surround_sound e049
 swap_calls e0d7
@@ -708,6 +829,7 @@ tablet_mac e331
 tag_faces e420
 tap_and_play e62b
 terrain e564
+text_fields e262
 text_format e165
 textsms e0d8
 texture e421
@@ -717,17 +839,23 @@ thumb_up e8dc
 thumbs_up_down e8dd
 time_to_leave e62c
 timelapse e422
+timeline e922
 timer e425
 timer_10 e423
 timer_3 e424
 timer_off e426
+title e264
 toc e8de
 today e8df
 toll e8e0
 tonality e427
+touch_app e913
 toys e332
 track_changes e8e1
 traffic e565
+train e570
+tram e571
+transfer_within_a_station e572
 transform e428
 translate e8e2
 trending_down e8e3
@@ -737,18 +865,23 @@ tune e429
 turned_in e8e6
 turned_in_not e8e7
 tv e333
+unarchive e169
 undo e166
 unfold_less e5d6
 unfold_more e5d7
+update e923
 usb e1e0
 verified_user e8e8
 vertical_align_bottom e258
 vertical_align_center e259
 vertical_align_top e25a
 vibration e62d
+video_call e070
+video_label e071
 video_library e04a
 videocam e04b
 videocam_off e04c
+videogame_asset e338
 view_agenda e8e9
 view_array e8ea
 view_carousel e8eb
@@ -776,6 +909,7 @@ vpn_lock e62f
 wallpaper e1bc
 warning e002
 watch e334
+watch_later e924
 wb_auto e42c
 wb_cloudy e42d
 wb_incandescent e42e
@@ -783,6 +917,8 @@ wb_iridescent e436
 wb_sunny e430
 wc e63d
 web e051
+web_asset e069
+weekend e16b
 whatshot e80e
 widgets e1bd
 wifi e63e
@@ -793,3 +929,4 @@ wrap_text e25b
 youtube_searched_for e8fa
 zoom_in e8ff
 zoom_out e900
+zoom_out_map e56b

BIN
misago/static/misago/img/site-icon.png


BIN
misago/static/misago/img/site-logo.png


+ 14102 - 9
misago/static/misago/js/misago.js

@@ -1,9 +1,14102 @@
-!function e(t,n,a){function r(s,i){if(!n[s]){if(!t[s]){var u="function"==typeof require&&require;if(!i&&u)return u(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[s]={exports:{}};t[s][0].call(c.exports,function(e){var n=t[s][1][e];return r(n?n:e)},c,c.exports,e,t,n,a)}return n[s].exports}for(var o="function"==typeof require&&require,s=0;s<a.length;s++)r(a[s]);return r}({1:[function(e,t,n){function a(){c=!1,i.length?l=i.concat(l):f=-1,l.length&&r()}function r(){if(!c){var e=setTimeout(a);c=!0;for(var t=l.length;t;){for(i=l,l=[];++f<t;)i&&i[f].run();f=-1,t=l.length}i=null,c=!1,clearTimeout(e)}}function o(e,t){this.fun=e,this.array=t}function s(){}var i,u=t.exports={},l=[],c=!1,f=-1;u.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new o(e,t)),1!==l.length||c||setTimeout(r,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=s,u.addListener=s,u.once=s,u.off=s,u.removeListener=s,u.removeAllListeners=s,u.emit=s,u.binding=function(e){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(e){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],2:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Misago=void 0;var s=e("../../../../documents/misago/frontend/src/utils/ordered-list"),i=a(s),u=n.Misago=function(){function e(){r(this,e),this._initializers=[],this._context={}}return o(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e;var n=new i["default"](this._initializers).orderedValues();n.forEach(function(e){e(t)})}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}(),l=new u;t.misago=l,n["default"]=l}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../../../documents/misago/frontend/src/utils/ordered-list":130}],3:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(s["default"].get("CSRF_COOKIE_NAME"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/ajax"),u=a(i);s["default"].addInitializer({name:"ajax",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/ajax":114}],4:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(d["default"],m["default"],c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/auth"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/modal"),c=a(l),f=e("../../../../../documents/misago/frontend/src/services/store"),d=a(f),p=e("../../../../../documents/misago/frontend/src/services/local-storage"),m=a(p);s["default"].addInitializer({name:"auth",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/auth":115,"../../../../../documents/misago/frontend/src/services/local-storage":118,"../../../../../documents/misago/frontend/src/services/modal":120,"../../../../../documents/misago/frontend/src/services/store":124}],5:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){c["default"].init(e,u["default"],d["default"],m["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/ajax"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/captcha"),c=a(l),f=e("../../../../../documents/misago/frontend/src/services/include"),d=a(f),p=e("../../../../../documents/misago/frontend/src/services/snackbar"),m=a(p);s["default"].addInitializer({name:"captcha",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/ajax":114,"../../../../../documents/misago/frontend/src/services/captcha":116,"../../../../../documents/misago/frontend/src/services/include":117,"../../../../../documents/misago/frontend/src/services/snackbar":123}],6:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,f["default"])((0,o.connect)(u.select)(l["default"]),"auth-message-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../../documents/misago/frontend/src/index"),i=a(s),u=e("../../../../../../documents/misago/frontend/src/components/auth-message"),l=a(u),c=e("../../../../../../documents/misago/frontend/src/utils/mount-component"),f=a(c);i["default"].addInitializer({name:"component:auth-message",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/auth-message":52,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/mount-component":129,"react-redux":"react-redux"}],7:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("BAN_MESSAGE")&&(0,u["default"])(e.get("BAN_MESSAGE"),!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/utils/banned-page"),u=a(i);s["default"].addInitializer({name:"component:baned-page",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/banned-page":126}],8:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("USER_OPTIONS")&&(0,c["default"])({root:u["default"].get("USERCP_URL"),component:s["default"],paths:(0,o.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/components/options/root"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/index"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/utils/routed-component"),c=a(l);u["default"].addInitializer({name:"component:options",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/options/root":73,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/routed-component":133}],9:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("PROFILE")&&e.has("PROFILE_PAGES")&&(0,f["default"])({root:l["default"].get("PROFILE").absolute_url,component:(0,o.connect)(s.select)(i["default"]),paths:(0,s.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../../documents/misago/frontend/src/components/profile/root"),i=a(s),u=e("../../../../../../documents/misago/frontend/src/index"),l=a(u),c=e("../../../../../../documents/misago/frontend/src/utils/routed-component"),f=a(c);l["default"].addInitializer({name:"component:profile",initializer:r,after:"reducer:profile-dehydrate"})},{"../../../../../../documents/misago/frontend/src/components/profile/root":81,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/routed-component":133,"react-redux":"react-redux"}],10:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("request-activation-link-mount")&&(0,c["default"])(u["default"],"request-activation-link-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/components/request-activation-link"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);s["default"].addInitializer({name:"component:request-activation-link",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/request-activation-link":84,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/mount-component":129}],11:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("request-password-reset-mount")&&(0,c["default"])(u["default"],"request-password-reset-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/components/request-password-reset"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);s["default"].addInitializer({name:"component:request-password-reset",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/request-password-reset":85,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/mount-component":129}],12:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("reset-password-form-mount")&&(0,c["default"])(u["default"],"reset-password-form-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/components/reset-password-form"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);s["default"].addInitializer({name:"component:reset-password-form",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/reset-password-form":86,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/mount-component":129}],13:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,c["default"])((0,o.connect)(u.select)(u.Snackbar),"snackbar-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../../documents/misago/frontend/src/index"),i=a(s),u=e("../../../../../../documents/misago/frontend/src/components/snackbar"),l=e("../../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);i["default"].addInitializer({name:"component:snackbar",initializer:r,after:"snackbar"})},{"../../../../../../documents/misago/frontend/src/components/snackbar":89,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/mount-component":129,"react-redux":"react-redux"}],14:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,c["default"])((0,o.connect)(u.select)(u.UserMenu),"user-menu-mount"),(0,c["default"])((0,o.connect)(u.select)(u.CompactUserMenu),"user-menu-compact-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../../documents/misago/frontend/src/index"),i=a(s),u=e("../../../../../../documents/misago/frontend/src/components/user-menu/root"),l=e("../../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);i["default"].addInitializer({name:"component:user-menu",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/user-menu/root":91,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/mount-component":129,"react-redux":"react-redux"}],15:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("USERS_LISTS")&&(0,c["default"])({root:u["default"].get("USERS_LIST_URL"),component:s["default"],paths:(0,o.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/components/users/root"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/index"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/utils/routed-component"),c=a(l);u["default"].addInitializer({name:"component:users",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/components/users/root":105,"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/utils/routed-component":133}],16:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){u["default"].init(e.get("STATIC_URL"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/include"),u=a(i);s["default"].addInitializer({name:"include",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/include":117}],17:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init("misago_")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/local-storage"),u=a(i);s["default"].addInitializer({name:"local-storage",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/local-storage":118}],18:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=document.getElementById("mobile-navbar-dropdown-mount");e&&u["default"].init(e)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown"),u=a(i);s["default"].addInitializer({name:"dropdown",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown":119}],19:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=document.getElementById("modal-mount");e&&u["default"].init(e)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/modal"),u=a(i);s["default"].addInitializer({name:"modal",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/modal":120}],20:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){s["default"].locale($("html").attr("lang"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("moment"),s=a(o),i=e("../../../../../documents/misago/frontend/src/index"),u=a(i);u["default"].addInitializer({name:"moment",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,moment:"moment"}],21:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){u["default"].init(e.get("SETTINGS").forum_name)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/page-title"),u=a(i);s["default"].addInitializer({name:"page-title",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/page-title":121}],22:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){d["default"].init(u["default"],c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/ajax"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/snackbar"),c=a(l),f=e("../../../../../documents/misago/frontend/src/services/polls"),d=a(f);s["default"].addInitializer({name:"polls",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/ajax":114,"../../../../../documents/misago/frontend/src/services/polls":122,"../../../../../documents/misago/frontend/src/services/snackbar":123}],23:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){c["default"].addReducer("auth",u["default"],Object.assign({isAuthenticated:e.get("isAuthenticated"),isAnonymous:!e.get("isAuthenticated"),user:e.get("user")},i.initialState))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/auth"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:auth",initializer:r,before:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/auth":108,"../../../../../../documents/misago/frontend/src/services/store":124}],24:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){s["default"].has("PROFILE")&&l["default"].dispatch((0,i.dehydrate)(s["default"].get("PROFILE")))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/profile"),u=e("../../../../../../documents/misago/frontend/src/services/store"),l=a(u);s["default"].addInitializer({name:"reducer:profile-dehydrate",initializer:r,after:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/profile":109,"../../../../../../documents/misago/frontend/src/services/store":124}],25:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("profile",u["default"],{})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/profile"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:profile",initializer:r,before:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/profile":109,"../../../../../../documents/misago/frontend/src/services/store":124}],26:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("snackbar",u["default"],i.initialState)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/snackbar"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:snackbar",initializer:r,before:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/snackbar":110,"../../../../../../documents/misago/frontend/src/services/store":124}],27:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("tick",u["default"],i.initialState)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/tick"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:tick",initializer:r,before:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/tick":111,"../../../../../../documents/misago/frontend/src/services/store":124}],28:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("username-history",u["default"],[])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/username-history"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:username-history",initializer:r,before:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/username-history":112,"../../../../../../documents/misago/frontend/src/services/store":124}],29:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("users",u["default"],[])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../../documents/misago/frontend/src/reducers/users"),u=a(i),l=e("../../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:users",initializer:r,before:"store"})},{"../../../../../../documents/misago/frontend/src/index":107,"../../../../../../documents/misago/frontend/src/reducers/users":113,"../../../../../../documents/misago/frontend/src/services/store":124}],30:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/snackbar"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"snackbar",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/snackbar":123,"../../../../../documents/misago/frontend/src/services/store":124}],31:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init()}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/store"),u=a(i);s["default"].addInitializer({name:"store",initializer:r,before:"_end"})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/store":124}],32:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){window.setInterval(function(){l["default"].dispatch((0,i.doTick)())},c)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/reducers/tick"),u=e("../../../../../documents/misago/frontend/src/services/store"),l=a(u),c=5e4;s["default"].addInitializer({name:"tick-start",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/reducers/tick":111,"../../../../../documents/misago/frontend/src/services/store":124}],33:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].init(u["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../documents/misago/frontend/src/index"),s=a(o),i=e("../../../../../documents/misago/frontend/src/services/include"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/zxcvbn"),c=a(l);s["default"].addInitializer({name:"zxcvbn",initializer:r})},{"../../../../../documents/misago/frontend/src/index":107,"../../../../../documents/misago/frontend/src/services/include":117,"../../../../../documents/misago/frontend/src/services/zxcvbn":125}],34:[function(e,t,n){function a(e){return null===e||void 0===e}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length?"function"!=typeof e.copy||"function"!=typeof e.slice?!1:e.length>0&&"number"!=typeof e[0]?!1:!0:!1}function o(e,t,n){var o,c;if(a(e)||a(t))return!1;if(e.prototype!==t.prototype)return!1;if(u(e))return u(t)?(e=s.call(e),t=s.call(t),l(e,t,n)):!1;if(r(e)){if(!r(t))return!1;if(e.length!==t.length)return!1;for(o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0}try{var f=i(e),d=i(t)}catch(p){return!1}if(f.length!=d.length)return!1;for(f.sort(),d.sort(),o=f.length-1;o>=0;o--)if(f[o]!=d[o])return!1;for(o=f.length-1;o>=0;o--)if(c=f[o],!l(e[c],t[c],n))return!1;return typeof e==typeof t}var s=Array.prototype.slice,i=e("./lib/keys.js"),u=e("./lib/is_arguments.js"),l=t.exports=function(e,t,n){return n||(n={}),e===t?!0:e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:o(e,t,n)}},{"./lib/is_arguments.js":35,"./lib/keys.js":36}],35:[function(e,t,n){function a(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();n=t.exports=o?a:r,n.supported=a,n.unsupported=r},{}],36:[function(e,t,n){function a(e){var t=[];for(var n in e)t.push(n);return t}n=t.exports="function"==typeof Object.keys?Object.keys:a,n.shim=a},{}],37:[function(e,t,n){"use strict";n.__esModule=!0;var a="PUSH";n.PUSH=a;var r="REPLACE";n.REPLACE=r;var o="POP";n.POP=o,n["default"]={PUSH:a,REPLACE:r,POP:o}},{}],38:[function(e,t,n){"use strict";function a(e,t,n){function a(){s=!0,n.apply(this,arguments)}function r(){s||(e>o?t.call(this,o++,r,a):a.apply(this,arguments))}var o=0,s=!1;r()}n.__esModule=!0,n.loopAsync=a},{}],39:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return l+e}function o(e,n){try{window.sessionStorage.setItem(r(e),JSON.stringify(n))}catch(a){if(a.name===f)return void("production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to save state; sessionStorage is not available due to security settings"):void 0);if(a.name===c&&0===window.sessionStorage.length)return void("production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to save state; sessionStorage is not available in Safari private mode"):void 0);throw a}}function s(e){var n=void 0;try{n=window.sessionStorage.getItem(r(e))}catch(a){if(a.name===f)return"production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to read state; sessionStorage is not available due to security settings"):void 0,null}if(n)try{return JSON.parse(n)}catch(a){}return null}n.__esModule=!0,n.saveState=o,n.readState=s;var i=e("warning"),u=a(i),l="@@History/",c="QuotaExceededError",f="SecurityError"}).call(this,e("_process"))},{_process:1,warning:51}],40:[function(e,t,n){"use strict";function a(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)}function r(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on"+t,n)}function o(){return window.location.href.split("#")[1]||""}function s(e){window.location.replace(window.location.pathname+window.location.search+"#"+e)}function i(){return window.location.pathname+window.location.search+window.location.hash}function u(e){e&&window.history.go(e)}function l(e,t){t(window.confirm(e))}function c(){var e=navigator.userAgent;return-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone")?-1!==e.indexOf("CriOS")?!1:window.history&&"pushState"in window.history:!1}function f(){var e=navigator.userAgent;return-1===e.indexOf("Firefox")}n.__esModule=!0,n.addEventListener=a,n.removeEventListener=r,n.getHashPath=o,n.replaceHashPath=s,n.getWindowPath=i,n.go=u,n.getUserConfirmation=l,n.supportsHistory=c,n.supportsGoWithoutReloadUsingHash=f},{}],41:[function(e,t,n){"use strict";n.__esModule=!0;var a=!("undefined"==typeof window||!window.document||!window.document.createElement);n.canUseDOM=a},{}],42:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(){function e(e){e=e||window.history.state||{};var t=f.getWindowPath(),n=e,a=n.key,r=void 0;a?r=d.readState(a):(r=null,a=_.createKey(),b&&window.history.replaceState(s({},e,{key:a}),null,t));var o=v["default"](t);return _.createLocation(s({},o,{state:r}),void 0,a)}function t(t){function n(t){void 0!==t.state&&a(e(t.state))}var a=t.transitionTo;return f.addEventListener(window,"popstate",n),function(){f.removeEventListener(window,"popstate",n)}}function n(e){var t=e.basename,n=e.pathname,a=e.search,r=e.hash,o=e.state,s=e.action,i=e.key;if(s!==l.POP){d.saveState(i,o);var u=(t||"")+n+a+r,c={key:i};if(s===l.PUSH){if(y)return window.location.href=u,!1;window.history.pushState(c,null,u)}else{if(y)return window.location.replace(u),!1;window.history.replaceState(c,null,u)}}}function r(e){1===++w&&(E=t(_));var n=_.listenBefore(e);return function(){n(),0===--w&&E()}}function o(e){1===++w&&(E=t(_));var n=_.listen(e);return function(){n(),0===--w&&E()}}function i(e){1===++w&&(E=t(_)),_.registerTransitionHook(e)}function p(e){_.unregisterTransitionHook(e),0===--w&&E()}var h=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];c.canUseDOM?void 0:"production"!==a.env.NODE_ENV?u["default"](!1,"Browser history needs a DOM"):u["default"](!1);var g=h.forceRefresh,b=f.supportsHistory(),y=!b||g,_=m["default"](s({},h,{getCurrentLocation:e,finishTransition:n,saveState:d.saveState})),w=0,E=void 0;return s({},_,{listenBefore:r,listen:o,registerTransitionHook:i,unregisterTransitionHook:p})}n.__esModule=!0;var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i=e("invariant"),u=r(i),l=e("./Actions"),c=e("./ExecutionEnvironment"),f=e("./DOMUtils"),d=e("./DOMStateStorage"),p=e("./createDOMHistory"),m=r(p),h=e("./parsePath"),v=r(h);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{"./Actions":37,
-"./DOMStateStorage":39,"./DOMUtils":40,"./ExecutionEnvironment":41,"./createDOMHistory":43,"./parsePath":48,_process:1,invariant:50}],43:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){function t(e){return l.canUseDOM?void 0:"production"!==a.env.NODE_ENV?u["default"](!1,"DOM history needs a DOM"):u["default"](!1),n.listen(e)}var n=d["default"](s({getUserConfirmation:c.getUserConfirmation},e,{go:c.go}));return s({},n,{listen:t})}n.__esModule=!0;var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i=e("invariant"),u=r(i),l=e("./ExecutionEnvironment"),c=e("./DOMUtils"),f=e("./createHistory"),d=r(f);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{"./DOMUtils":40,"./ExecutionEnvironment":41,"./createHistory":44,_process:1,invariant:50}],44:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return Math.random().toString(36).substr(2,e)}function o(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.key===t.key&&l["default"](e.state,t.state)}function s(){function e(e){return A.push(e),function(){A=A.filter(function(t){return t!==e})}}function t(){return F&&F.action===f.POP?z.indexOf(F.key):H?z.indexOf(H.key):-1}function n(e){var n=t();H=e,H.action===f.PUSH?z=[].concat(z.slice(0,n+1),[H.key]):H.action===f.REPLACE&&(z[n]=H.key),D.forEach(function(e){e(H)})}function a(e){if(D.push(e),H)e(H);else{var t=M();z=[t.key],n(t)}return function(){D=D.filter(function(t){return t!==e})}}function s(e,t){c.loopAsync(A.length,function(t,n,a){h["default"](A[t],e,function(e){null!=e?a(e):n()})},function(e){U&&"string"==typeof e?U(e,function(e){t(e!==!1)}):t(e!==!1)})}function u(e){H&&o(H,e)||(F=e,s(e,function(t){if(F===e)if(t){if(e.action===f.PUSH){var a=w(H),r=w(e);r===a&&(e.action=f.REPLACE)}T(e)!==!1&&n(e)}else if(H&&e.action===f.POP){var o=z.indexOf(H.key),s=z.indexOf(e.key);-1!==o&&-1!==s&&R(o-s)}}))}function l(e){u(O(e,f.PUSH,b()))}function d(e){u(O(e,f.REPLACE,b()))}function m(){R(-1)}function v(){R(1)}function b(){return r(I)}function w(e){if(null==e||"string"==typeof e)return e;var t=e.pathname,n=e.search,a=e.hash,r=t;return n&&(r+=n),a&&(r+=a),r}function E(e){return w(e)}function O(e,t){var n=arguments.length<=2||void 0===arguments[2]?b():arguments[2];return"object"==typeof t&&("string"==typeof e&&(e=g["default"](e)),e=i({},e,{state:t}),t=n,n=arguments[3]||b()),p["default"](e,t,n)}function k(e){H?(N(H,e),n(H)):N(M(),e)}function N(e,t){e.state=i({},e.state,t),L(e.key,e.state)}function x(e){-1===A.indexOf(e)&&A.push(e)}function j(e){A=A.filter(function(t){return t!==e})}function P(e,t){"string"==typeof t&&(t=g["default"](t)),l(i({state:e},t))}function S(e,t){"string"==typeof t&&(t=g["default"](t)),d(i({state:e},t))}var C=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],M=C.getCurrentLocation,T=C.finishTransition,L=C.saveState,R=C.go,I=C.keyLength,U=C.getUserConfirmation;"number"!=typeof I&&(I=_);var A=[],z=[],D=[],H=void 0,F=void 0;return{listenBefore:e,listen:a,transitionTo:u,push:l,replace:d,go:R,goBack:m,goForward:v,createKey:b,createPath:w,createHref:E,createLocation:O,setState:y["default"](k,"setState is deprecated; use location.key to save state instead"),registerTransitionHook:y["default"](x,"registerTransitionHook is deprecated; use listenBefore instead"),unregisterTransitionHook:y["default"](j,"unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead"),pushState:y["default"](P,"pushState is deprecated; use push instead"),replaceState:y["default"](S,"replaceState is deprecated; use replace instead")}}n.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},u=e("deep-equal"),l=a(u),c=e("./AsyncUtils"),f=e("./Actions"),d=e("./createLocation"),p=a(d),m=e("./runTransitionHook"),h=a(m),v=e("./parsePath"),g=a(v),b=e("./deprecate"),y=a(b),_=6;n["default"]=s,t.exports=n["default"]},{"./Actions":37,"./AsyncUtils":38,"./createLocation":45,"./deprecate":46,"./parsePath":48,"./runTransitionHook":49,"deep-equal":34}],45:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=arguments.length<=0||void 0===arguments[0]?"/":arguments[0],t=arguments.length<=1||void 0===arguments[1]?s.POP:arguments[1],n=arguments.length<=2||void 0===arguments[2]?null:arguments[2],a=arguments.length<=3||void 0===arguments[3]?null:arguments[3];"string"==typeof e&&(e=u["default"](e)),"object"==typeof t&&(e=o({},e,{state:t}),t=n||s.POP,n=a);var r=e.pathname||"/",i=e.search||"",l=e.hash||"",c=e.state||null;return{pathname:r,search:i,hash:l,state:c,action:t,key:n}}n.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s=e("./Actions"),i=e("./parsePath"),u=a(i);n["default"]=r,t.exports=n["default"]},{"./Actions":37,"./parsePath":48}],46:[function(e,t,n){"use strict";function a(e){return e}n.__esModule=!0,n["default"]=a,t.exports=n["default"]},{}],47:[function(e,t,n){"use strict";function a(e){var t=e.match(/^https?:\/\/[^\/]*/);return null==t?e:e.substring(t[0].length)}n.__esModule=!0,n["default"]=a,t.exports=n["default"]},{}],48:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){var t=l["default"](e),n="",r="";"production"!==a.env.NODE_ENV?i["default"](e===t,'A path must be pathname + search + hash only, not a fully qualified URL like "%s"',e):void 0;var o=t.indexOf("#");-1!==o&&(r=t.substring(o),t=t.substring(0,o));var s=t.indexOf("?");return-1!==s&&(n=t.substring(s),t=t.substring(0,s)),""===t&&(t="/"),{pathname:t,search:n,hash:r}}n.__esModule=!0;var s=e("warning"),i=r(s),u=e("./extractPath"),l=r(u);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{"./extractPath":47,_process:1,warning:51}],49:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){var r=e(t,n);e.length<2?n(r):"production"!==a.env.NODE_ENV?i["default"](void 0===r,'You should not "return" in a transition hook with a callback argument; call the callback instead'):void 0}n.__esModule=!0;var s=e("warning"),i=r(s);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{_process:1,warning:51}],50:[function(e,t,n){"use strict";var a=function(e,t,n,a,r,o,s,i){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,a,r,o,s,i],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}};t.exports=a},{}],51:[function(e,t,n){"use strict";var a=function(){};t.exports=a},{}],52:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user,signedIn:e.auth.signedIn,signedOut:e.auth.signedOut}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i;var l=e("react"),c=a(l),f=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"refresh",value:function(){window.location.reload()}},{key:"getMessage",value:function(){return this.props.signedIn?interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."),{username:this.props.signedIn.username},!0):this.props.signedOut?interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."),{username:this.props.user.username},!0):void 0}},{key:"getClassName",value:function(){return this.props.signedIn||this.props.signedOut?"auth-message show":"auth-message"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName()},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead"},this.getMessage()),c["default"].createElement("p",null,c["default"].createElement("button",{type:"button",className:"btn btn-default",onClick:this.refresh},gettext("Reload page"))," ",c["default"].createElement("span",{className:"hidden-xs hidden-sm text-muted"},gettext("or press F5 key.")))))}}]),t}(c["default"].Component);n["default"]=f},{react:"react"}],53:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=$("base").attr("href")+"user-avatar/",f=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getSrc",value:function(){var e=this.props.size||100,t=c;return t+=this.props.user&&this.props.user.id?this.props.user.avatar_hash+"/"+e+"/"+this.props.user.id+".png":e+".png"}},{key:"render",value:function(){return l["default"].createElement("img",{src:this.getSrc(),className:this.props.className||"user-avatar",title:gettext("User avatar")})}}]),t}(l["default"].Component);n["default"]=f},{react:"react"}],54:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("moment"),l=a(u),c=e("react"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getReasonMessage",value:function(){return this.props.message.html?f["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.message.html}}):f["default"].createElement("p",{className:"lead"},this.props.message.plain)}},{key:"getExpirationMessage",value:function(){return this.props.expires?this.props.expires.isAfter((0,l["default"])())?interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.props.expires.fromNow()},!0):gettext("This ban has expired."):gettext("This ban is permanent.")}},{key:"render",value:function(){return f["default"].createElement("div",{className:"page page-error page-error-banned"},f["default"].createElement("div",{className:"container"},f["default"].createElement("div",{className:"message-panel"},f["default"].createElement("div",{className:"message-icon"},f["default"].createElement("span",{className:"material-icon"},"highlight_off")),f["default"].createElement("div",{className:"message-body"},this.getReasonMessage(),f["default"].createElement("p",{className:"message-footnote"},this.getExpirationMessage())))))}}]),t}(f["default"].Component);n["default"]=d},{moment:"moment",react:"react"}],55:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e="btn "+this.props.className,t=this.props.disabled;return this.props.loading&&(e+=" btn-loading",t=!0),l["default"].createElement("button",{type:this.props.onClick?"button":"submit",className:e,disabled:t,onClick:this.props.onClick},this.props.children,this.props.loading?l["default"].createElement(f["default"],null):null)}}]),t}(l["default"].Component);n["default"]=d,d.defaultProps={className:"btn-default",type:"submit",loading:!1,disabled:!1,onClick:null}},{"./loader":64,react:"react"}],56:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=(a(c),e("../button")),d=a(f),p=e("../../services/ajax"),m=a(p),h=e("../../services/snackbar"),v=a(h),g=$("base").attr("href")+"user-avatar",b=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.cropAvatar=function(){if(n.state.isLoading)return!1;n.setState({isLoading:!0});var e=n.props.upload?"crop_tmp":"crop_org",t=$(".crop-form");m["default"].post(n.props.user.api_url.avatar,{avatar:e,crop:{offset:t.cropit("offset"),zoom:t.cropit("zoom")}}).then(function(e){n.props.onComplete(e.avatar_hash,e.options),v["default"].success(e.detail)},function(e){400===e.status?(v["default"].error(e.detail),n.setState({isLoading:!1})):n.props.showError(e)})},n.state={isLoading:!1},n}return s(t,e),i(t,[{key:"getAvatarSize",value:function(){return this.props.upload?this.props.options.crop_tmp.size:this.props.options.crop_org.size}},{key:"getAvatarSecret",value:function(){return this.props.upload?this.props.options.crop_tmp.secret:this.props.options.crop_org.secret}},{key:"getAvatarHash",value:function(){return this.props.upload||this.props.user.avatar_hash}},{key:"getImagePath",value:function(){return[g,this.getAvatarSecret()+":"+this.getAvatarHash(),this.props.user.id+".png"].join("/")}},{key:"componentDidMount",value:function(){var e=this,t=$(".crop-form");t.width(this.getAvatarSize()),t.cropit({width:this.getAvatarSize(),height:this.getAvatarSize(),imageState:{src:this.getImagePath()},onImageLoaded:function(){if(e.props.upload){var n=t.cropit("zoom"),a=t.cropit("imageSize");if(a.width>a.height){var r=a.width*n,o=(r-e.getAvatarSize())/-2;t.cropit("offset",{x:o,y:0})}else if(a.width<a.height){var s=a.height*n,i=(s-e.getAvatarSize())/-2;t.cropit("offset",{x:0,y:i})}}else{var u=e.props.options.crop_org.crop;u&&(t.cropit("zoom",u.zoom),t.cropit("offset",{x:u.x,y:u.y}))}}})}},{key:"componentWillUnmount",value:function(){$(".crop-form").cropit("disable")}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement("div",{className:"modal-body modal-avatar-crop"},l["default"].createElement("div",{className:"crop-form"},l["default"].createElement("div",{className:"cropit-image-preview"}),l["default"].createElement("input",{type:"range",className:"cropit-image-zoom-input"}))),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(d["default"],{onClick:this.cropAvatar,loading:this.state.isLoading,className:"btn-primary btn-block"},this.props.upload?gettext("Set avatar"):gettext("Crop image")),l["default"].createElement(d["default"],{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},gettext("Cancel")))))}}]),t}(l["default"].Component);n["default"]=b},{"../../services/ajax":114,"../../services/snackbar":123,"../avatar":53,"../button":55,react:"react"}],57:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Gallery=n.GalleryItem=void 0;var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../../index"),p=a(d),m=e("../../services/ajax"),h=a(m),v=e("../../services/snackbar"),g=a(v),b=e("../../utils/batch"),y=a(b),_=n.GalleryItem=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.select=function(){a.props.select(a.props.image)},s=n,o(a,s)}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.selection===this.props.image?this.props.disabled?"btn btn-avatar btn-disabled avatar-selected":"btn btn-avatar avatar-selected":this.props.disabled?"btn btn-avatar btn-disabled":"btn btn-avatar"}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",className:this.getClassName(),disabled:this.props.disabled,onClick:this.select},l["default"].createElement("img",{src:p["default"].get("MEDIA_URL")+this.props.image}))}}]),t}(l["default"].Component),w=n.Gallery=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"avatars-gallery"},l["default"].createElement("h3",null,this.props.name),l["default"].createElement("div",{className:"avatars-gallery-images"},(0,y["default"])(this.props.images,4,null).map(function(t,n){return l["default"].createElement("div",{className:"row",key:n},t.map(function(t,n){return l["default"].createElement("div",{className:"col-xs-3",key:n},t?l["default"].createElement(_,{image:t,disabled:e.props.disabled,select:e.props.select,selection:e.props.selection}):l["default"].createElement("div",{className:"blank-avatar"}))}))})))}}]),t}(l["default"].Component),E=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.select=function(e){n.setState({selection:e})},n.save=function(){return n.state.isLoading?!1:(n.setState({isLoading:!0}),void h["default"].post(n.props.user.api_url.avatar,{avatar:"galleries",image:n.state.selection}).then(function(e){n.setState({isLoading:!1}),g["default"].success(e.detail),n.props.onComplete(e.avatar_hash,e.options)},function(e){400===e.status?(g["default"].error(e.detail),n.setState({isLoading:!1})):n.props.showError(e)}))},n.state={selection:null,isLoading:!1},n}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",null,l["default"].createElement("div",{className:"modal-body modal-avatar-gallery"},this.props.options.galleries.map(function(t,n){return l["default"].createElement(w,{name:t.name,images:t.images,selection:e.state.selection,disabled:e.state.isLoading,select:e.select,key:n})})),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(f["default"],{onClick:this.save,loading:this.state.isLoading,disabled:!this.state.selection,className:"btn-primary btn-block"},this.state.selection?gettext("Save choice"):gettext("Select avatar")),l["default"].createElement(f["default"],{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},gettext("Cancel"))))))}}]),t}(l["default"].Component);n["default"]=E},{"../../index":107,"../../services/ajax":114,"../../services/snackbar":123,"../../utils/batch":127,"../button":55,react:"react"}],58:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("../button"),p=a(d),m=e("../loader"),h=a(m),v=e("../../services/ajax"),g=a(v),b=e("../../services/snackbar"),y=a(b),_=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.setGravatar=function(){n.callApi("gravatar")},n.setGenerated=function(){n.callApi("generated")},n.state={isLoading:!1},n}return s(t,e),i(t,[{key:"callApi",value:function(e){var t=this;return this.state.isLoading?!1:(this.setState({isLoading:!0}),void g["default"].post(this.props.user.api_url.avatar,{avatar:e}).then(function(e){t.setState({isLoading:!1}),y["default"].success(e.detail),t.props.onComplete(e.avatar_hash,e.options)},function(e){400===e.status?(y["default"].error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))}},{key:"getGravatarButton",value:function(){return this.props.options.gravatar?l["default"].createElement(p["default"],{onClick:this.setGravatar,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gravatar"},gettext("Download my Gravatar")):null}},{key:"getCropButton",value:function(){return this.props.options.crop_org?l["default"].createElement(p["default"],{onClick:this.props.showCrop,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-crop"},gettext("Re-crop uploaded image")):null}},{key:"getUploadButton",value:function(){return this.props.options.upload?l["default"].createElement(p["default"],{onClick:this.props.showUpload,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-upload"},gettext("Upload new image")):null}},{key:"getGalleryButton",value:function(){return this.props.options.galleries?l["default"].createElement(p["default"],{onClick:this.props.showGallery,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gallery"},gettext("Pick avatar from gallery")):null}},{key:"getAvatarPreview",value:function(){return this.state.isLoading?l["default"].createElement("div",{className:"avatar-preview preview-loading"},l["default"].createElement(f["default"],{user:this.props.user,size:"200"}),l["default"].createElement(h["default"],null)):l["default"].createElement("div",{className:"avatar-preview"},l["default"].createElement(f["default"],{user:this.props.user,size:"200"}))}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-index"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-5"},this.getAvatarPreview()),l["default"].createElement("div",{className:"col-md-7"},this.getGravatarButton(),l["default"].createElement(p["default"],{onClick:this.setGenerated,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-generate"},gettext("Generate my individual avatar")),this.getCropButton(),this.getUploadButton(),this.getGalleryButton())))}}]),t}(l["default"].Component);n["default"]=_},{"../../services/ajax":114,"../../services/snackbar":123,"../avatar":53,"../button":55,"../loader":64,react:"react"}],59:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.ChangeAvatarError=void 0,n.select=i;var l=e("react"),c=a(l),f=e("./index"),d=a(f),p=e("./crop"),m=a(p),h=e("./upload"),v=a(h),g=e("./gallery"),b=a(g),y=e("../modal-loader"),_=a(y),w=e("../../reducers/users"),E=e("../../services/ajax"),O=a(E),k=e("../../services/store"),N=a(k),x=n.ChangeAvatarError=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"getErrorReason",value:function(){return this.props.reason?c["default"].createElement("p",{dangerouslySetInnerHTML:{__html:this.props.reason}}):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-body"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"remove_circle_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},this.props.message),this.getErrorReason()))}}]),t}(c["default"].Component),j=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.showError=function(e){a.setState({error:e})},a.showIndex=function(){a.setState({component:d["default"]})},a.showUpload=function(){a.setState({component:v["default"]})},a.showCrop=function(){a.setState({component:m["default"]})},a.showGallery=function(){a.setState({component:b["default"]})},a.completeFlow=function(e,t){N["default"].dispatch((0,w.updateAvatar)(a.props.user,e)),a.setState({component:d["default"],options:t})},s=n,o(a,s)}return s(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this;O["default"].get(this.props.user.api_url.avatar).then(function(t){e.setState({component:d["default"],options:t,error:null})},function(t){e.showError(t)})}},{key:"getBody",value:function(){return this.state?this.state.error?c["default"].createElement(x,{message:this.state.error.detail,reason:this.state.error.reason}):c["default"].createElement(this.state.component,{options:this.state.options,user:this.props.user,onComplete:this.completeFlow,showError:this.showError,showIndex:this.showIndex,showCrop:this.showCrop,showUpload:this.showUpload,showGallery:this.showGallery}):c["default"].createElement(_["default"],null)}},{key:"getClassName",value:function(){return this.state&&this.state.error?"modal-dialog modal-message modal-change-avatar":"modal-dialog modal-change-avatar"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName(),role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Change your avatar"))),this.getBody()))}}]),t}(c["default"].Component);n["default"]=j},{"../../reducers/users":113,"../../services/ajax":114,"../../services/store":124,"../modal-loader":65,"./crop":56,"./gallery":57,"./index":58,"./upload":60,react:"react"}],60:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{
-constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./crop"),f=a(c),d=e("../button"),p=a(d),m=e("../../services/ajax"),h=a(m),v=e("../../services/snackbar"),g=a(v),b=e("../../utils/file-size"),y=a(b),_=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.pickFile=function(){document.getElementById("avatar-hidden-upload").click()},n.uploadFile=function(){var e=document.getElementById("avatar-hidden-upload").files[0],t=n.validateFile(e);if(t)return void g["default"].error(t);n.setState({image:e,preview:URL.createObjectURL(e),progress:0});var a=new FormData;a.append("avatar","upload"),a.append("image",e),h["default"].upload(n.props.user.api_url.avatar,a,function(e){n.setState({progress:e})}).then(function(e){n.setState({options:e.options,uploaded:e.detail}),g["default"].info(gettext("Your image has been uploaded and you may now crop it."))},function(e){400===e.status?(g["default"].error(e.detail),n.setState({isLoading:!1,image:null,progress:0})):n.props.showError(e)})},n.state={image:null,preview:null,progress:0,uploaded:null},n}return s(t,e),i(t,[{key:"validateFile",value:function(e){if(e.size>this.props.options.upload.limit)return interpolate(gettext("Selected file is too big. (%(filesize)s)"),{filesize:(0,y["default"])(e.size)},!0);var t=gettext("Selected file type is not supported.");if(-1===this.props.options.upload.allowed_mime_types.indexOf(e.type))return t;var n=!1,a=e.name.toLowerCase();return this.props.options.upload.allowed_extensions.map(function(e){a.substr(-1*e.length)===e&&(n=!0)}),n?!1:t}},{key:"getUploadRequirements",value:function(e){var t=e.allowed_extensions.map(function(e){return e.substr(1)});return interpolate(gettext("%(files)s files smaller than %(limit)s"),{files:t.join(", "),limit:(0,y["default"])(e.limit)},!0)}},{key:"getUploadButton",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-upload"},l["default"].createElement(p["default"],{className:"btn-pick-file",onClick:this.pickFile},l["default"].createElement("div",{className:"material-icon"},"input"),gettext("Select file")),l["default"].createElement("p",{className:"text-muted"},this.getUploadRequirements(this.props.options.upload)))}},{key:"getUploadProgressLabel",value:function(){return interpolate(gettext("%(progress)s % complete"),{progress:this.state.progress},!0)}},{key:"getUploadProgress",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-upload"},l["default"].createElement("div",{className:"upload-progress"},l["default"].createElement("img",{src:this.state.preview}),l["default"].createElement("div",{className:"progress"},l["default"].createElement("div",{className:"progress-bar",role:"progressbar","aria-valuenow":"{this.state.progress}","aria-valuemin":"0","aria-valuemax":"100",style:{width:this.state.progress+"%"}},l["default"].createElement("span",{className:"sr-only"},this.getUploadProgressLabel())))))}},{key:"renderUpload",value:function(){return l["default"].createElement("div",null,l["default"].createElement("input",{type:"file",id:"avatar-hidden-upload",className:"hidden-file-upload",onChange:this.uploadFile}),this.state.image?this.getUploadProgress():this.getUploadButton(),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(p["default"],{onClick:this.props.showIndex,disabled:!!this.state.image,className:"btn-default btn-block"},gettext("Cancel")))))}},{key:"renderCrop",value:function(){return l["default"].createElement(f["default"],{options:this.state.options,user:this.props.user,upload:this.state.uploaded,onComplete:this.props.onComplete,showError:this.props.showError,showIndex:this.props.showIndex})}},{key:"render",value:function(){return this.state.uploaded?this.renderCrop():this.renderUpload()}}]),t}(l["default"].Component);n["default"]=_},{"../../services/ajax":114,"../../services/snackbar":123,"../../utils/file-size":128,"../button":55,"./crop":56,react:"react"}],61:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"isValidated",value:function(){return"undefined"!=typeof this.props.validation}},{key:"getClassName",value:function(){var e="form-group";return this.isValidated()&&(e+=" has-feedback",e+=null===this.props.validation?" has-success":" has-error"),e}},{key:"getFeedback",value:function(){var e=this;return this.props.validation?l["default"].createElement("div",{className:"help-block errors"},this.props.validation.map(function(t,n){return l["default"].createElement("p",{key:e.props["for"]+"FeedbackItem"+n},t)})):null}},{key:"getFeedbackIcon",value:function(){return this.isValidated()?l["default"].createElement("span",{className:"material-icon form-control-feedback","aria-hidden":"true",key:this.props["for"]+"FeedbackIcon"},this.props.validation?"clear":"check"):null}},{key:"getFeedbackDescription",value:function(){return this.isValidated()?l["default"].createElement("span",{id:this.props["for"]+"_status",className:"sr-only"},this.props.validation?gettext("(error)"):gettext("(success)")):null}},{key:"getHelpText",value:function(){return this.props.helpText?l["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("label",{className:"control-label "+(this.props.labelClass||""),htmlFor:this.props["for"]||""},this.props.label+":"),l["default"].createElement("div",{className:this.props.controlClass||""},this.props.children,this.getFeedbackIcon(),this.getFeedbackDescription(),this.getFeedback(),this.getHelpText(),this.props.extra||null))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],62:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=a(l),f=e("../utils/validators"),d=(0,f.required)(),p=function(e){function t(){var e,n,a,i;o(this,t);for(var u=arguments.length,l=Array(u),c=0;u>c;c++)l[c]=arguments[c];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),a.bindInput=function(e){return function(t){var n=r({},e,t.target.value),o=a.state.errors||{};o[e]=a.validateField(e,n[e]),n.errors=o,a.setState(n)}},a.handleSubmit=function(e){if(e.preventDefault(),!a.state.isLoading&&a.clean()){a.setState({isLoading:!0});var t=a.send();t?t.then(function(e){a.setState({isLoading:!1}),a.handleSuccess(e)},function(e){a.setState({isLoading:!1}),a.handleError(e)}):a.setState({isLoading:!1})}},i=n,s(a,i)}return i(t,e),u(t,[{key:"validate",value:function(){var e={};if(!this.state.validators)return e;var t={required:this.state.validators.required||this.state.validators,optional:this.state.validators.optional||{}},n=[];for(var a in t.required)t.required.hasOwnProperty(a)&&t.required[a]&&n.push(a);for(var a in t.optional)t.optional.hasOwnProperty(a)&&t.optional[a]&&n.push(a);for(var r in n){var a=n[r],o=this.validateField(a,this.state[a]);null===o?e[a]=null:o&&(e[a]=o)}return e}},{key:"isValid",value:function(){var e=this.validate();for(var t in e)if(e.hasOwnProperty(t)&&null!==e[t])return!1;return!0}},{key:"validateField",value:function(e,t){var n=[];if(!this.state.validators)return n;var a={required:(this.state.validators.required||this.state.validators)[e],optional:(this.state.validators.optional||{})[e]},r=d(t)||!1;if(a.required){if(r)n=[r];else for(var o in a.required){var s=a.required[o](t);s&&n.push(s)}return n.length?n:null}if(r===!1&&a.optional){for(var o in a.optional){var s=a.optional[o](t);s&&n.push(s)}return n.length?n:null}return!1}},{key:"clean",value:function(){return!0}},{key:"send",value:function(){return null}},{key:"handleSuccess",value:function(e){}},{key:"handleError",value:function(e){}}]),t}(c["default"].Component);n["default"]=p},{"../utils/validators":134,react:"react"}],63:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"isActive",value:function(){return this.props.path?0===document.location.pathname.indexOf(this.props.path):!1}},{key:"getClassName",value:function(){return this.isActive()?(this.props.className||"")+" "+(this.props.activeClassName||"active"):this.props.className||""}},{key:"render",value:function(){return l["default"].createElement("li",{className:this.getClassName()},this.props.children)}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],64:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:this.props.className||"loader"},l["default"].createElement("div",{className:"loader-spinning-wheel"}))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],65:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body modal-loader"},l["default"].createElement(f["default"],null))}}]),t}(l["default"].Component);n["default"]=d},{"./loader":64,react:"react"}],66:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),l["default"].createElement("div",{className:"panel-body panel-body-loading"},l["default"].createElement(f["default"],{className:"loader loader-spaced"})))}}]),t}(l["default"].Component);n["default"]=d},{"../../loader":64,react:"react"}],67:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getHelpText",value:function(){return this.props.options.next_on?interpolate(gettext("You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):gettext("You have used up available name changes.")}},{key:"render",value:function(){return l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),l["default"].createElement("div",{className:"panel-body panel-message-body"},l["default"].createElement("div",{className:"message-icon"},l["default"].createElement("span",{className:"material-icon"},"info_outline")),l["default"].createElement("div",{className:"message-body"},l["default"].createElement("p",{className:"lead"},gettext("You can't change your username at the moment.")),l["default"].createElement("p",{className:"help-block"},this.getHelpText()))))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],68:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),v=r(h),g=e("../../../services/ajax"),b=r(g),y=e("../../../services/snackbar"),_=r(y),w=e("../../../utils/validators"),E=a(w),O=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={username:"",validators:{username:[E.usernameContent(),E.usernameMinLength({username_length_min:e.options.length_min}),E.usernameMaxLength({username_length_max:e.options.length_max})]},isLoading:!1},n}return i(t,e),u(t,[{key:"getHelpText",value:function(){var e=[];if(this.props.options.changes_left>0){var t=ngettext("You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){var t=ngettext("Used changes redeem after %(name_changes_expire)s day.","Used changes redeem after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(t,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}},{key:"clean",value:function(){var e=this.validate();return e.username?(_["default"].error(e.username[0]),!1):this.state.username.trim()===this.props.user.username?(_["default"].info(gettext("Your new username is same as current one.")),!1):!0}},{key:"send",value:function(){return b["default"].post(this.props.user.api_url.username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}},{key:"handleError",value:function(e){_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(v["default"],{label:gettext("New username"),"for":"id_username",labelClass:"col-sm-4",controlClass:"col-sm-8",helpText:this.getHelpText()},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change username")))))))}}]),t}(m["default"]);n["default"]=O},{"../../../services/ajax":114,"../../../services/snackbar":123,"../../../utils/validators":134,"../../button":55,"../../form":62,"../../form-group":61,react:"react"}],69:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("moment"),l=a(u),c=e("react"),f=a(c),d=e("./form-loading"),p=a(d),m=e("./form-locked"),h=a(m),v=e("./form"),g=a(v),b=e("./username-history"),y=a(b),_=e("../../../index"),w=a(_),E=e("../../../reducers/username-history"),O=e("../../../reducers/users"),k=e("../../../services/ajax"),N=a(k),x=e("../../../services/page-title"),j=a(x),P=e("../../../services/snackbar"),S=a(P),C=e("../../../services/store"),M=a(C),T=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.onComplete=function(e,t,a){n.setState({options:a}),M["default"].dispatch((0,E.addNameChange)({username:e,slug:t},n.props.user,n.props.user)),M["default"].dispatch((0,O.updateUsername)(n.props.user,e,t)),S["default"].success(gettext("Your username has been changed successfully."))},n.state={isLoaded:!1,options:null},n}return s(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;j["default"].set({title:gettext("Change username"),parent:gettext("Change your options")}),Promise.all([N["default"].get(this.props.user.api_url.username),N["default"].get(w["default"].get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then(function(t){e.setState({isLoaded:!0,options:{changes_left:t[0].changes_left,length_min:t[0].length_min,length_max:t[0].length_max,next_on:t[0].next_on?(0,l["default"])(t[0].next_on):null}}),M["default"].dispatch((0,E.dehydrate)(t[1].results))})}},{key:"getChangeForm",value:function(){return this.state.isLoaded?this.state.options.changes_left>0?f["default"].createElement(g["default"],{user:this.props.user,options:this.state.options,complete:this.onComplete}):f["default"].createElement(h["default"],{options:this.state.options}):f["default"].createElement(p["default"],null)}},{key:"render",value:function(){return f["default"].createElement("div",null,this.getChangeForm(),f["default"].createElement(y["default"],{isLoaded:this.state.isLoaded,changes:this.props["username-history"]}))}}]),t}(f["default"].Component);n["default"]=T},{"../../../index":107,"../../../reducers/username-history":112,"../../../reducers/users":113,"../../../services/ajax":114,"../../../services/page-title":121,"../../../services/snackbar":123,"../../../services/store":124,"./form":68,"./form-loading":66,"./form-locked":67,"./username-history":70,moment:"moment",react:"react"}],70:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../avatar"),d=r(f),p=e("../../../utils/random"),m=a(p),h=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"renderUserAvatar",value:function(e){return e.changed_by?c["default"].createElement("a",{href:e.changed_by.absolute_url,className:"user-avatar"},c["default"].createElement(d["default"],{user:e.changed_by,size:"100"})):c["default"].createElement("span",{className:"user-avatar"},c["default"].createElement(d["default"],{size:"100"}))}},{key:"renderUsername",value:function(e){return e.changed_by?c["default"].createElement("a",{href:e.changed_by.absolute_url,className:"item-title"},e.changed_by.username):c["default"].createElement("span",{className:"item-title"},e.changed_by_username)}},{key:"renderHistory",value:function(){var e=this;return c["default"].createElement("div",{className:"username-history ui-ready"},c["default"].createElement("ul",{className:"list-group"},this.props.changes.map(function(t){return c["default"].createElement("li",{className:"list-group-item",key:t.id},c["default"].createElement("div",{className:"username-change-avatar"},e.renderUserAvatar(t)),c["default"].createElement("div",{className:"username-change-author"},e.renderUsername(t)),c["default"].createElement("div",{className:"username-change"},t.old_username,c["default"].createElement("span",{className:"material-icon"},"arrow_forward"),t.new_username),c["default"].createElement("div",{className:"username-change-date"},c["default"].createElement("abbr",{title:t.changed_on.format("LLL")},t.changed_on.fromNow())))})))}},{key:"renderEmptyHistory",value:function(){return c["default"].createElement("div",{className:"username-history ui-ready"},c["default"].createElement("ul",{className:"list-group"},c["default"].createElement("li",{className:"list-group-item empty-message"},gettext("No name changes have been recorded for your account."))))}},{key:"renderHistoryPreview",value:function(){return c["default"].createElement("div",{className:"username-history ui-preview"},c["default"].createElement("ul",{className:"list-group"},m.range(3,5).map(function(e){return c["default"].createElement("li",{className:"list-group-item",key:e},c["default"].createElement("div",{className:"username-change-avatar"},c["default"].createElement("span",{className:"user-avatar"},c["default"].createElement(d["default"],{size:"100"}))),c["default"].createElement("div",{className:"username-change-author"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,100)+"px"}}," ")),c["default"].createElement("div",{className:"username-change"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," "),c["default"].createElement("span",{className:"material-icon"},"arrow_forward"),c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," ")),c["default"].createElement("div",{className:"username-change-date"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](50,100)+"px"}}," ")))})))}},{key:"render",value:function(){return this.props.isLoaded?this.props.changes.length?this.renderHistory():this.renderEmptyHistory():this.renderHistoryPreview()}}]),t}(c["default"].Component);n["default"]=h},{"../../../utils/random":131,"../../avatar":53,react:"react"}],71:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../form"),p=a(d),m=e("../form-group"),h=a(m),v=e("../select"),g=a(v),b=e("../yes-no-switch"),y=a(b),_=e("../../reducers/auth"),w=e("../../services/ajax"),E=a(w),O=e("../../services/page-title"),k=a(O),N=e("../../services/snackbar"),x=a(N),j=e("../../services/store"),P=a(j),S=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,subscribe_to_started_threads:e.user.subscribe_to_started_threads,subscribe_to_replied_threads:e.user.subscribe_to_replied_threads,errors:{}},n.privateThreadInvitesChoices=[{
-value:0,icon:"help_outline",label:gettext("Everybody")},{value:1,icon:"done_all",label:gettext("Users I follow")},{value:2,icon:"highlight_off",label:gettext("Nobody")}],n.subscribeToChoices=[{value:0,icon:"bookmark_border",label:gettext("No")},{value:1,icon:"bookmark",label:gettext("Bookmark")},{value:2,icon:"mail",label:gettext("Bookmark with e-mail notification")}],n}return s(t,e),i(t,[{key:"send",value:function(){return E["default"].post(this.props.user.api_url.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})}},{key:"handleSuccess",value:function(){P["default"].dispatch((0,_.patchUser)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})),x["default"].success(gettext("Your forum options have been changed."))}},{key:"handleError",value:function(e){400===e.status?x["default"].error(gettext("Please reload page and try again.")):x["default"].apiError(e)}},{key:"componentDidMount",value:function(){k["default"].set({title:gettext("Forum options"),parent:gettext("Change your options")})}},{key:"render",value:function(){return l["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change forum options"))),l["default"].createElement("div",{className:"panel-body"},l["default"].createElement("fieldset",null,l["default"].createElement("legend",null,gettext("Privacy settings")),l["default"].createElement(h["default"],{label:gettext("Hide my presence"),helpText:gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),"for":"id_is_hiding_presence",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(y["default"],{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility",iconOff:"visibility_off",labelOn:gettext("Show my presence to other users"),labelOff:gettext("Hide my presence from other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),l["default"].createElement(h["default"],{label:gettext("Private thread invitations"),"for":"id_limits_private_thread_invites_to",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(g["default"],{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),l["default"].createElement("fieldset",null,l["default"].createElement("legend",null,gettext("Automatic subscriptions")),l["default"].createElement(h["default"],{label:gettext("Threads I start"),"for":"id_subscribe_to_started_threads",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(g["default"],{id:"id_subscribe_to_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_started_threads"),value:this.state.subscribe_to_started_threads,choices:this.subscribeToChoices})),l["default"].createElement(h["default"],{label:gettext("Threads I reply to"),"for":"id_subscribe_to_replied_threads",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(g["default"],{id:"id_subscribe_to_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_replied_threads"),value:this.state.subscribe_to_replied_threads,choices:this.subscribeToChoices})))),l["default"].createElement("div",{className:"panel-footer"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},l["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Save changes")))))))}}]),t}(p["default"]);n["default"]=S},{"../../reducers/auth":108,"../../services/ajax":114,"../../services/page-title":121,"../../services/snackbar":123,"../../services/store":124,"../button":55,"../form":62,"../form-group":61,"../select":87,"../yes-no-switch":106,react:"react"}],72:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.SideNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=e("../../index");a(p),n.SideNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"list-group nav-side"},this.props.options.map(function(t){return l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active",key:t.component},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name)}))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},this.props.options.map(function(t){return l["default"].createElement(d["default"],{path:e.props.baseUrl+t.component+"/",key:t.component},l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",onClick:e.props.hideNav},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name))}))}}]),t}(l["default"].Component)},{"../../index":107,"../li":63,react:"react","react-router":"react-router"}],73:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function u(){return[{path:w["default"].get("USERCP_URL")+"forum-options/",component:(0,d.connect)(i)(h["default"])},{path:w["default"].get("USERCP_URL")+"change-username/",component:(0,d.connect)(i)(g["default"])},{path:w["default"].get("USERCP_URL")+"sign-in-credentials/",component:(0,d.connect)(i)(y["default"])}]}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),f=a(c),d=e("react-redux"),p=e("./navs"),m=e("./forum-options"),h=a(m),v=e("./change-username/root"),g=a(v),b=e("./sign-in-credentials/root"),y=a(b),_=e("../../index"),w=a(_),E=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.toggleNav=function(){n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:!0})},n.hideNav=function(){n.setState({dropdown:!1})},n.state={dropdown:!1},n}return s(t,e),l(t,[{key:"getToggleNavClassName",value:function(){return this.state.dropdown?"btn btn-default btn-icon open":"btn btn-default btn-icon"}},{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}},{key:"render",value:function(){return f["default"].createElement("div",{className:"page page-options"},f["default"].createElement("div",{className:"page-header"},f["default"].createElement("div",{className:"container"},f["default"].createElement("h1",{className:"pull-left"},gettext("Change your options")),f["default"].createElement("button",{className:"btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg",type:"button",onClick:this.toggleNav,"aria-haspopup":"true","aria-expanded":this.state.dropdown?"true":"false"},f["default"].createElement("i",{className:"material-icon"},"menu")))),f["default"].createElement("div",{className:this.getCompactNavClassName()},f["default"].createElement(p.CompactNav,{options:w["default"].get("USER_OPTIONS"),baseUrl:w["default"].get("USERCP_URL"),hideNav:this.hideNav})),f["default"].createElement("div",{className:"container"},f["default"].createElement("div",{className:"row"},f["default"].createElement("div",{className:"col-md-3 hidden-xs hidden-sm"},f["default"].createElement(p.SideNav,{options:w["default"].get("USER_OPTIONS"),baseUrl:w["default"].get("USERCP_URL")})),f["default"].createElement("div",{className:"col-md-9"},this.props.children))))}}]),t}(f["default"].Component);n["default"]=E},{"../../index":107,"./change-username/root":69,"./forum-options":71,"./navs":72,"./sign-in-credentials/root":76,react:"react","react-redux":"react-redux"}],74:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),v=r(h),g=e("../../../services/ajax"),b=r(g),y=e("../../../services/snackbar"),_=r(y),w=e("../../../utils/validators"),E=a(w),O=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={new_email:"",password:"",validators:{new_email:[E.email()],password:[]},isLoading:!1},n}return i(t,e),u(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_email.trim().length,this.state.password.trim().length];return-1!==t.indexOf(0)?(_["default"].error(gettext("Fill out all fields.")),!1):e.new_email?(_["default"].error(e.new_email[0]),!1):!0}},{key:"send",value:function(){return b["default"].post(this.props.user.api_url.change_email,{new_email:this.state.new_email,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_email:"",password:""}),_["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_email?_["default"].error(e.new_email):_["default"].error(e.password):_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change e-mail address"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(v["default"],{label:gettext("New e-mail"),"for":"id_new_email",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),c["default"].createElement("hr",null),c["default"].createElement(v["default"],{label:gettext("Your current password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change e-mail")))))))}}]),t}(m["default"]);n["default"]=O},{"../../../services/ajax":114,"../../../services/snackbar":123,"../../../utils/validators":134,"../../button":55,"../../form":62,"../../form-group":61,react:"react"}],75:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),v=r(h),g=e("../../../index"),b=r(g),y=e("../../../services/ajax"),_=r(y),w=e("../../../services/snackbar"),E=r(w),O=e("../../../utils/validators"),k=a(O),N=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={new_password:"",repeat_password:"",password:"",validators:{new_password:[k.passwordMinLength(b["default"].get("SETTINGS"))],repeat_password:[],password:[]},isLoading:!1},n}return i(t,e),u(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length];return-1!==t.indexOf(0)?(E["default"].error(gettext("Fill out all fields.")),!1):e.new_password?(E["default"].error(e.new_password[0]),!1):this.state.new_password.trim()!==this.state.repeat_password.trim()?(E["default"].error(gettext("New passwords are different.")),!1):!0}},{key:"send",value:function(){return _["default"].post(this.props.user.api_url.change_password,{new_password:this.state.new_password,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_password:"",repeat_password:"",password:""}),E["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_password?E["default"].error(e.new_password):E["default"].error(e.password):E["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change password"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(v["default"],{label:gettext("New password"),"for":"id_new_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),c["default"].createElement(v["default"],{label:gettext("Repeat password"),"for":"id_repeat_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),c["default"].createElement("hr",null),c["default"].createElement(v["default"],{label:gettext("Your current password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change password")))))))}}]),t}(m["default"]);n["default"]=N},{"../../../index":107,"../../../services/ajax":114,"../../../services/snackbar":123,"../../../utils/validators":134,"../../button":55,"../../form":62,"../../form-group":61,react:"react"}],76:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./change-email"),f=a(c),d=e("./change-password"),p=a(d),m=e("../../../index"),h=a(m),v=e("../../../services/page-title"),g=a(v),b=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"componentDidMount",value:function(){g["default"].set({title:gettext("Change email or password"),parent:gettext("Change your options")})}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement(f["default"],{user:this.props.user}),l["default"].createElement(p["default"],{user:this.props.user}),l["default"].createElement("p",{className:"message-line"},l["default"].createElement("span",{className:"material-icon"},"warning"),l["default"].createElement("a",{href:h["default"].get("FORGOTTEN_PASSWORD_URL")},gettext("Change forgotten password"))))}}]),t}(l["default"].Component);n["default"]=b},{"../../../index":107,"../../../services/page-title":121,"./change-email":74,"./change-password":75,react:"react"}],77:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.LABELS=n.STYLES=void 0;var u=e("react"),l=a(u),c=e("../services/zxcvbn"),f=a(c),d=n.STYLES=["progress-bar-danger","progress-bar-warning","progress-bar-warning","progress-bar-primary","progress-bar-success"],p=n.LABELS=[gettext("Entered password is very weak."),gettext("Entered password is weak."),gettext("Entered password is average."),gettext("Entered password is strong."),gettext("Entered password is very strong.")],m=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n._score=0,n._password=null,n._inputs=[],n}return s(t,e),i(t,[{key:"getScore",value:function(e,t){var n=this,a=!1;return e.trim()!==this._password&&(a=!0),t.length!==this._inputs.length?a=!0:t.map(function(e,t){e.trim()!==n._inputs[t]&&(a=!0)}),a&&(this._score=f["default"].scorePassword(e,t),this._password=e.trim(),this._inputs=t.map(function(e){return e.trim()})),this._score}},{key:"render",value:function(){var e=this.getScore(this.props.password,this.props.inputs);return l["default"].createElement("div",{className:"help-block password-strength"},l["default"].createElement("div",{className:"progress"},l["default"].createElement("div",{className:"progress-bar "+d[e],style:{width:20+20*e+"%"},role:"progress-bar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"4"},l["default"].createElement("span",{className:"sr-only"},p[e]))),l["default"].createElement("p",{className:"text-small"},p[e]))}}]),t}(l["default"].Component);n["default"]=m},{"../services/zxcvbn":125,react:"react"}],78:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("./follow-button"),p=a(d),m=e("../user-status"),h=a(m),v=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getUserStatus",value:function(){return l["default"].createElement("li",{className:"user-status-display"},l["default"].createElement(h["default"],{user:this.props.profile,status:this.props.profile.status},l["default"].createElement(m.StatusIcon,{user:this.props.profile,status:this.props.profile.status}),l["default"].createElement(m.StatusLabel,{user:this.props.profile,status:this.props.profile.status,className:"status-label"})))}},{key:"getUserRank",value:function(){return this.props.profile.rank.is_tab?l["default"].createElement("li",{className:"user-rank"},l["default"].createElement("a",{href:this.props.profile.rank.absolute_url,className:"item-title"},this.props.profile.rank.name)):l["default"].createElement("li",{className:"user-rank"},l["default"].createElement("span",{className:"item-title"},this.props.profile.rank.name))}},{key:"getUserTitle",value:function(){return this.props.profile.title?l["default"].createElement("li",{className:"user-title"},this.props.profile.title):this.props.profile.rank.title?l["default"].createElement("li",{className:"user-title"},this.props.profile.rank.title):null}},{key:"getJoinedOn",value:function(){var e=interpolate(gettext("Joined on %(joined_on)s"),{joined_on:this.props.profile.joined_on.format("LL, LT")},!0),t=interpolate(gettext("Joined %(joined_on)s"),{joined_on:this.props.profile.joined_on.fromNow()},!0);return l["default"].createElement("li",{className:"user-joined-on"},l["default"].createElement("abbr",{title:e},t))}},{key:"getFollowButton",value:function(){return this.props.profile.acl.can_follow?l["default"].createElement(p["default"],{className:"btn btn-aligned",profile:this.props.profile}):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"page-header"},l["default"].createElement("div",{className:"container"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-9 col-md-offset-3"},l["default"].createElement("h1",{className:"pull-left"},l["default"].createElement(f["default"],{user:this.props.profile,size:"100"}),l["default"].createElement("span",{className:"user-name"},this.props.profile.username)),this.getFollowButton(),l["default"].createElement("button",{className:"btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg",type:"button",onClick:this.props.toggleNav,"aria-haspopup":"true","aria-expanded":this.props.dropdown?"true":"false"},l["default"].createElement("i",{className:"material-icon"},"menu"))))),l["default"].createElement("div",{className:"header-stats"},l["default"].createElement("div",{className:"container"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-9 col-md-offset-3"},l["default"].createElement("ul",{className:"list-inline"},this.getUserStatus(),this.getUserRank(),this.getUserTitle(),this.getJoinedOn()))))))}}]),t}(l["default"].Component);n["default"]=v},{"../avatar":53,"../user-status":93,"./follow-button":79,react:"react"}],79:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../../reducers/profile"),p=e("../../services/ajax"),m=a(p),h=e("../../services/snackbar"),v=a(h),g=e("../../services/store"),b=a(g),y=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.action=function(){n.setState({isLoading:!0}),n.props.profile.is_followed?b["default"].dispatch((0,d.patchProfile)({is_followed:!1,followers:n.props.profile.followers-1})):b["default"].dispatch((0,d.patchProfile)({is_followed:!0,followers:n.props.profile.followers+1})),m["default"].post(n.props.profile.api_url.follow).then(function(e){n.setState({isLoading:!1}),b["default"].dispatch((0,d.patchProfile)(e))},function(e){v["default"].apiError(e),this.setState({isLoading:!1})})},n.state={isLoading:!1},n}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.profile.is_followed?this.props.className+" btn-default btn-following":this.props.className+" btn-default btn-follow"}},{key:"getIcon",value:function(){return this.props.profile.is_followed?"favorite":"favorite_border"}},{key:"getLabel",value:function(){return this.props.profile.is_followed?gettext("Following"):gettext("Follow")}},{key:"render",value:function(){return l["default"].createElement(f["default"],{className:this.getClassName(),disabled:this.state.isLoading,onClick:this.action},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel())}}]),t}(l["default"].Component);n["default"]=y},{"../../reducers/profile":109,"../../services/ajax":114,"../../services/snackbar":123,"../../services/store":124,"../button":55,react:"react"}],80:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.SideNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=e("../../index"),m=(a(p),n.SideNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getMeta",value:function(e){return e?l["default"].createElement("span",{className:"badge"},this.props.profile[e.attr]):null}},{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"list-group nav-side"},this.props.pages.map(function(t){return l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active",
-key:t.component},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name,e.getMeta(t.meta))}))}}]),t}(l["default"].Component));n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},this.props.pages.map(function(t){return l["default"].createElement(d["default"],{path:e.props.baseUrl+t.component+"/",key:t.component},l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",onClick:e.props.hideNav},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name,e.getMeta(t.meta)))}))}}]),t}(m)},{"../../index":107,"../li":63,react:"react","react-router":"react-router"}],81:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users,profile:e.profile,"username-history":e["username-history"]}}function u(){var e=[];return y["default"].get("PROFILE_PAGES").forEach(function(t){e.push(Object.assign({},t,{path:y["default"].get("PROFILE").absolute_url+t.component+"/",component:(0,d.connect)(i)(j[t.component])}))}),e}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),f=a(c),d=e("react-redux"),p=e("../avatar"),m=a(p),h=e("./Header"),v=a(h),g=e("./navs"),b=e("../../index"),y=a(b),_=e("../../reducers/profile"),w=e("../../services/polls"),E=a(w),O=e("../../services/store"),k=a(O),N=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){k["default"].dispatch((0,_.dehydrate)(e))},n.toggleNav=function(){n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:!0})},n.hideNav=function(){n.setState({dropdown:!1})},n.state={dropdown:!1},n.startPolling(e.profile.api_url.root),n}return s(t,e),l(t,[{key:"startPolling",value:function(e){E["default"].start({poll:"user-profile",url:e,frequency:9e4,update:this.update})}},{key:"getToggleNavClassName",value:function(){return this.state.dropdown?"btn btn-default btn-icon open":"btn btn-default btn-icon"}},{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}},{key:"getClassName",value:function(){var e="page page-user-profile";return e}},{key:"render",value:function(){return f["default"].createElement("div",{className:this.getClassName()},f["default"].createElement(v["default"],{user:this.props.user,profile:this.props.profile,toggleNav:this.toggleNav}),f["default"].createElement("div",{className:this.getCompactNavClassName()},f["default"].createElement(g.CompactNav,{pages:y["default"].get("PROFILE_PAGES"),baseUrl:y["default"].get("PROFILE").absolute_url,profile:this.props.profile,hideNav:this.hideNav,dropdown:this.state.dropdown})),f["default"].createElement("div",{className:"container"},f["default"].createElement("div",{className:"row"},f["default"].createElement("div",{className:"col-md-3 hidden-xs hidden-sm"},f["default"].createElement("div",{className:"profile-side-avatar"},f["default"].createElement(m["default"],{user:this.props.profile,size:"400"})),f["default"].createElement(g.SideNav,{pages:y["default"].get("PROFILE_PAGES"),baseUrl:y["default"].get("PROFILE").absolute_url,profile:this.props.profile})),f["default"].createElement("div",{className:"col-md-9"},this.props.children))))}}]),t}(f["default"].Component);n["default"]=N;var x=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),l(t,[{key:"render",value:function(){return f["default"].createElement("div",{className:"container"},f["default"].createElement("p",null,"Hello, I'm placeholder for "+this.props.route.name))}}]),t}(f["default"].Component),j={posts:x,threads:x,followers:x,follows:x,"username-history":x,"ban-details":x}},{"../../index":107,"../../reducers/profile":109,"../../services/polls":122,"../../services/store":124,"../avatar":53,"./Header":78,"./navs":80,react:"react","react-redux":"react-redux"}],82:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=e("./register.js"),p=a(d),m=e("../services/captcha"),h=a(m),v=e("../services/modal"),g=a(v),b=e("../services/snackbar"),y=a(b),_=e("../services/zxcvbn"),w=a(_),E=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.showRegisterModal=function(){"closed"===misago.get("SETTINGS").account_activation?y["default"].info(gettext("New registrations are currently disabled.")):n.state.isLoaded?g["default"].show(p["default"]):(n.setState({isLoading:!0}),Promise.all([h["default"].load(),w["default"].load()]).then(function(){n.state.isLoaded||n.setState({isLoading:!1,isLoaded:!1}),g["default"].show(p["default"])}))},n.state={isLoading:!1,isLoaded:!1},n}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.className+(this.state.isLoading?" btn-loading":"")}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.showRegisterModal,className:"btn "+this.getClassName(),disabled:this.state.isLoaded},gettext("Register"),this.state.isLoading?l["default"].createElement(f["default"],null):null)}}]),t}(l["default"].Component);n["default"]=E},{"../services/captcha":116,"../services/modal":120,"../services/snackbar":123,"../services/zxcvbn":125,"./loader":64,"./register.js":83,react:"react"}],83:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.RegisterComplete=n.RegisterForm=void 0;var l=e("react"),c=r(l),f=e("./button"),d=r(f),p=e("./form"),m=r(p),h=e("./form-group"),v=r(h),g=e("./password-strength"),b=r(g),y=e("../index"),_=r(y),w=e("../services/ajax"),E=r(w),O=e("../services/auth"),k=r(O),N=e("../services/captcha"),x=r(N),j=e("../services/modal"),P=r(j),S=e("../services/snackbar"),C=r(S),M=e("../utils/banned-page"),T=r(M),L=e("../utils/validators"),R=a(L),I=n.RegisterForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,username:"",email:"",password:"",captcha:"",validators:{username:[R.usernameContent(),R.usernameMinLength(_["default"].get("SETTINGS")),R.usernameMaxLength(_["default"].get("SETTINGS"))],email:[R.email()],password:[R.passwordMinLength(_["default"].get("SETTINGS"))],captcha:x["default"].validator()},errors:{}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(C["default"].error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return E["default"].post(_["default"].get("USERS_API"),{username:this.state.username,email:this.state.email,password:this.state.password,captcha:this.state.captcha})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),C["default"].error(gettext("Form contains errors."))):403===e.status&&e.ban?((0,T["default"])(e.ban),P["default"].hide()):C["default"].apiError(e)}},{key:"getLegalFootNote",value:function(){return _["default"].get("TERMS_OF_SERVICE_URL")?c["default"].createElement("a",{href:_["default"].get("TERMS_OF_SERVICE_URL"),target:"_blank"},gettext("By registering you agree to site's terms and conditions.")):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-dialog modal-register",role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Register"))),c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"modal-body"},c["default"].createElement(v["default"],{label:gettext("Username"),"for":"id_username",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.username},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control","aria-describedby":"id_username_status",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username})),c["default"].createElement(v["default"],{label:gettext("E-mail"),"for":"id_email",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.email},c["default"].createElement("input",{type:"text",id:"id_email",className:"form-control","aria-describedby":"id_email_status",disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email})),c["default"].createElement(v["default"],{label:gettext("Password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.password,extra:c["default"].createElement(b["default"],{password:this.state.password,inputs:[this.state.username,this.state.email]})},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control","aria-describedby":"id_password_status",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password})),x["default"].component({form:this,labelClass:"col-sm-4",controlClass:"col-sm-8"})),c["default"].createElement("div",{className:"modal-footer"},this.getLegalFootNote(),c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Register account"))))))}}]),t}(m["default"]),U=n.RegisterComplete=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getLead",value:function(){return"user"===this.props.activation?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===this.props.activation?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):void 0}},{key:"getSubscript",value:function(){return"user"===this.props.activation?gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account."):"admin"===this.props.activation?gettext("We will send an e-mail to %(email)s when this takes place."):void 0}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-dialog modal-message modal-register",role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Registration complete"))),c["default"].createElement("div",{className:"modal-body"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"info_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},interpolate(this.getLead(),{username:this.props.username},!0)),c["default"].createElement("p",null,interpolate(this.getSubscript(),{email:this.props.email},!0))))))}}]),t}(c["default"].Component),A=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.completeRegistration=function(e){"active"===e.activation?(P["default"].hide(),k["default"].signIn(e)):n.setState({complete:e})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"render",value:function(){return this.state.complete?c["default"].createElement(U,{activation:this.state.complete.activation,username:this.state.complete.username,email:this.state.complete.email}):c["default"].createElement(I,{callback:this.completeRegistration})}}]),t}(c["default"].Component);n["default"]=A},{"../index":107,"../services/ajax":114,"../services/auth":115,"../services/captcha":116,"../services/modal":120,"../services/snackbar":123,"../utils/banned-page":126,"../utils/validators":134,"./button":55,"./form":62,"./form-group":61,"./password-strength":77,react:"react"}],84:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.LinkSent=n.RequestLinkForm=void 0;var l=e("react"),c=r(l),f=e("../index"),d=r(f),p=e("./button"),m=r(p),h=e("./form"),v=r(h),g=e("../services/ajax"),b=r(g),y=e("../services/snackbar"),_=r(y),w=e("../utils/validators"),E=a(w),O=e("../utils/banned-page"),k=r(O),N=n.RequestLinkForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,email:"",validators:{email:[E.email()]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(_["default"].error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return b["default"].post(d["default"].get("SEND_ACTIVATION_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["already_active","inactive_admin"].indexOf(e.code)>-1?_["default"].info(e.detail):403===e.status&&e.ban?(0,k["default"])(e.ban):_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-activation-link"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),c["default"].createElement(m["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Send link"))))}}]),t}(v["default"]),x=n.LinkSent=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("Activation link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-activation-link well-done"},c["default"].createElement("div",{className:"done-message"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",null,this.getMessage())),c["default"].createElement("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},gettext("Request another link"))))}}]),t}(c["default"].Component),j=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.complete=function(e){n.setState({complete:e})},n.reset=function(){n.setState({complete:!1})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"render",value:function(){return this.state.complete?c["default"].createElement(x,{user:this.state.complete,callback:this.reset}):c["default"].createElement(N,{callback:this.complete})}}]),t}(c["default"].Component);n["default"]=j},{"../index":107,"../services/ajax":114,"../services/snackbar":123,"../utils/banned-page":126,"../utils/validators":134,"./button":55,"./form":62,react:"react"}],85:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.AccountInactivePage=n.LinkSent=n.RequestResetForm=void 0;var l=e("react"),c=r(l),f=e("react-dom"),d=r(f),p=e("../index"),m=r(p),h=e("./button"),v=r(h),g=e("./form"),b=r(g),y=e("../services/ajax"),_=r(y),w=e("../services/snackbar"),E=r(w),O=e("../utils/validators"),k=a(O),N=e("../utils/banned-page"),x=r(N),j=n.RequestResetForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,email:"",validators:{email:[k.email()]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(E["default"].error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return _["default"].post(m["default"].get("SEND_PASSWORD_RESET_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["inactive_user","inactive_admin"].indexOf(e.code)>-1?this.props.showInactivePage(e):403===e.status&&e.ban?(0,x["default"])(e.ban):E["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-password-reset"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),c["default"].createElement(v["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Send link"))))}}]),t}(b["default"]),P=n.LinkSent=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("Reset password link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-password-reset well-done"},c["default"].createElement("div",{className:"done-message"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",null,this.getMessage())),c["default"].createElement("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},gettext("Request another link"))))}}]),t}(c["default"].Component),S=n.AccountInactivePage=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getActivateButton",value:function(){return"inactive_user"===this.props.activation?c["default"].createElement("p",null,c["default"].createElement("a",{href:m["default"].get("REQUEST_ACTIVATION_URL")},gettext("Activate your account."))):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"page page-message page-message-info page-forgotten-password-inactive"},c["default"].createElement("div",{className:"container"},c["default"].createElement("div",{className:"message-panel"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"info_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},gettext("Your account is inactive.")),c["default"].createElement("p",null,this.props.message),this.getActivateButton()))))}}]),t}(c["default"].Component),C=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.complete=function(e){n.setState({complete:e})},n.reset=function(){n.setState({complete:!1})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"showInactivePage",value:function(e){d["default"].render(c["default"].createElement(S,{activation:e.code,message:e.detail}),document.getElementById("page-mount"))}},{key:"render",value:function(){return this.state.complete?c["default"].createElement(P,{user:this.state.complete,callback:this.reset}):c["default"].createElement(j,{callback:this.complete,showInactivePage:this.showInactivePage})}}]),t}(c["default"].Component);n["default"]=C},{"../index":107,"../services/ajax":114,"../services/snackbar":123,"../utils/banned-page":126,"../utils/validators":134,"./button":55,"./form":62,react:"react","react-dom":"react-dom"}],86:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.PasswordChangedPage=n.ResetPasswordForm=void 0;var l=e("react"),c=r(l),f=e("react-dom"),d=r(f),p=e("../index"),m=r(p),h=e("./button"),v=r(h),g=e("./form"),b=r(g),y=e("./sign-in.js"),_=r(y),w=e("../services/ajax"),E=r(w),O=e("../services/auth"),k=r(O),N=e("../services/modal"),x=r(N),j=e("../services/snackbar"),P=r(j),S=e("../utils/validators"),C=a(S),M=e("../utils/banned-page"),T=r(M),L=n.ResetPasswordForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,password:"",validators:{password:[C.passwordMinLength(m["default"].get("SETTINGS"))]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(this.state.password.trim().length?P["default"].error(this.state.errors.password[0]):P["default"].error(gettext("Enter new password.")),!1)}},{key:"send",value:function(){return E["default"].post(m["default"].get("CHANGE_PASSWORD_API"),{password:this.state.password})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){403===e.status&&e.ban?(0,T["default"])(e.ban):P["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-reset-password"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"password",className:"form-control",placeholder:gettext("Enter new password"),disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement(v["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Change password"))))}}]),t}(b["default"]),R=n.PasswordChangedPage=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("%(username)s, your password has been changed successfully."),{username:this.props.user.username},!0)}},{key:"showSignIn",value:function(){x["default"].show(_["default"])}},{key:"render",value:function(){return c["default"].createElement("div",{className:"page page-message page-message-success page-forgotten-password-changed"},c["default"].createElement("div",{className:"container"},c["default"].createElement("div",{className:"message-panel"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},this.getMessage()),c["default"].createElement("p",null,gettext("You will have to sign in using new password before continuing.")),c["default"].createElement("p",null,c["default"].createElement("button",{type:"button",className:"btn btn-primary",onClick:this.showSignIn},gettext("Sign in")))))))}}]),t}(c["default"].Component),I=function(e){function t(){var e,n,a,r;o(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.complete=function(e){k["default"].softSignOut(),$('#hidden-login-form input[name="redirect_to"]').remove(),d["default"].render(c["default"].createElement(R,{user:e}),document.getElementById("page-mount"))},r=n,s(a,r)}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement(L,{callback:this.complete})}}]),t}(c["default"].Component);n["default"]=I},{"../index":107,"../services/ajax":114,"../services/auth":115,"../services/modal":120,"../services/snackbar":123,"../utils/banned-page":126,"../utils/validators":134,"./button":55,"./form":62,"./sign-in.js":88,react:"react","react-dom":"react-dom"}],87:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.change=function(e){return function(){a.props.onChange({target:{value:e}})}},s=n,o(a,s)}return s(t,e),i(t,[{key:"getChoice",value:function(){var e=this,t=null;return this.props.choices.map(function(n){n.value===e.props.value&&(t=n)}),t}},{key:"getIcon",value:function(){return this.getChoice().icon}},{key:"getLabel",value:function(){return this.getChoice().label}},{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"btn-group btn-select-group"},l["default"].createElement("button",{type:"button",className:"btn btn-select dropdown-toggle",id:this.props.id||null,"data-toggle":"dropdown","aria-haspopup":"true",
-"aria-expanded":"false","aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel()),l["default"].createElement("ul",{className:"dropdown-menu"},this.props.choices.map(function(t,n){return l["default"].createElement("li",{key:n},l["default"].createElement("button",{type:"button",className:"btn-link",onClick:e.change(t.value)},l["default"].createElement("span",{className:"material-icon"},t.icon),t.label))})))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],88:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../index"),f=a(c),d=e("./button"),p=a(d),m=e("./form"),h=a(m),v=e("../services/ajax"),g=a(v),b=e("../services/modal"),y=a(b),_=e("../services/snackbar"),w=a(_),E=e("../utils/banned-page"),O=a(E),k=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,showActivation:!1,username:"",password:"",validators:{username:[],password:[]}},n}return s(t,e),i(t,[{key:"clean",value:function(){return this.isValid()?!0:(w["default"].error(gettext("Fill out both fields.")),!1)}},{key:"send",value:function(){return g["default"].post(f["default"].get("AUTH_API"),{username:this.state.username,password:this.state.password})}},{key:"handleSuccess",value:function(){var e=$("#hidden-login-form");e.append('<input type="text" name="username" />'),e.append('<input type="password" name="password" />'),e.find('input[type="hidden"]').val(g["default"].getCsrfToken()),e.find('input[name="redirect_to"]').val(window.location.pathname),e.find('input[name="username"]').val(this.state.username),e.find('input[name="password"]').val(this.state.password),e.submit(),this.setState({isLoading:!0})}},{key:"handleError",value:function(e){400===e.status?"inactive_admin"===e.code?w["default"].info(e.detail):"inactive_user"===e.code?(w["default"].info(e.detail),this.setState({showActivation:!0})):"banned"===e.code?((0,O["default"])(e.detail),y["default"].hide()):w["default"].error(e.detail):403===e.status&&e.ban?((0,O["default"])(e.ban),y["default"].hide()):w["default"].apiError(e)}},{key:"getActivationButton",value:function(){return this.state.showActivation?l["default"].createElement("a",{href:f["default"].get("REQUEST_ACTIVATION_URL"),className:"btn btn-success btn-block"},gettext("Activate account")):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-dialog modal-sm modal-sign-in",role:"document"},l["default"].createElement("div",{className:"modal-content"},l["default"].createElement("div",{className:"modal-header"},l["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},l["default"].createElement("span",{"aria-hidden":"true"},"×")),l["default"].createElement("h4",{className:"modal-title"},gettext("Sign in"))),l["default"].createElement("form",{onSubmit:this.handleSubmit},l["default"].createElement("div",{className:"modal-body"},l["default"].createElement("div",{className:"form-group"},l["default"].createElement("div",{className:"control-input"},l["default"].createElement("input",{id:"id_username",className:"form-control",type:"text",disabled:this.state.isLoading,placeholder:gettext("Username or e-mail"),onChange:this.bindInput("username"),value:this.state.username}))),l["default"].createElement("div",{className:"form-group"},l["default"].createElement("div",{className:"control-input"},l["default"].createElement("input",{id:"id_password",className:"form-control",type:"password",disabled:this.state.isLoading,placeholder:gettext("Password"),onChange:this.bindInput("password"),value:this.state.password})))),l["default"].createElement("div",{className:"modal-footer"},this.getActivationButton(),l["default"].createElement(p["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Sign in")),l["default"].createElement("a",{href:f["default"].get("FORGOTTEN_PASSWORD_URL"),className:"btn btn-default btn-block"},gettext("Forgot password?"))))))}}]),t}(h["default"]);n["default"]=k},{"../index":107,"../services/ajax":114,"../services/modal":120,"../services/snackbar":123,"../utils/banned-page":126,"./button":55,"./form":62,react:"react"}],89:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.snackbar}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Snackbar=void 0,n.select=i;var l=e("react"),c=a(l),f={info:"alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"};n.Snackbar=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"getSnackbarClass",value:function(){var e="alerts-snackbar";return e+=this.props.isVisible?" in":" out"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getSnackbarClass()},c["default"].createElement("p",{className:"alert "+f[this.props.type]},this.props.message))}}]),t}(c["default"].Component)},{react:"react"}],90:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactGuestNav=n.GuestNav=n.GuestMenu=void 0;var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("../register-button"),p=a(d),m=e("../sign-in.js"),h=a(m),v=e("../../services/mobile-navbar-dropdown"),g=a(v),b=e("../../services/modal"),y=a(b),_=n.GuestMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"showSignInModal",value:function(){y["default"].show(h["default"])}},{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},l["default"].createElement("li",{className:"guest-preview"},l["default"].createElement("h4",null,gettext("You are browsing as guest.")),l["default"].createElement("p",null,gettext("Sign in or register to start and participate in discussions.")),l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-xs-6"},l["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.showSignInModal},gettext("Sign in"))),l["default"].createElement("div",{className:"col-xs-6"},l["default"].createElement(p["default"],{className:"btn-primary btn-block"},gettext("Register"))))))}}]),t}(l["default"].Component);n.GuestNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"nav nav-guest"},l["default"].createElement("button",{type:"button",className:"btn navbar-btn btn-default",onClick:this.showSignInModal},gettext("Sign in")),l["default"].createElement(p["default"],{className:"navbar-btn btn-primary"},gettext("Register")))}}]),t}(_),n.CompactGuestNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"showGuestMenu",value:function(){g["default"].show(_)}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.showGuestMenu},l["default"].createElement(f["default"],{size:"64"}))}}]),t}(l["default"].Component)},{"../../services/mobile-navbar-dropdown":119,"../../services/modal":120,"../avatar":53,"../register-button":82,"../sign-in.js":88,react:"react"}],91:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.auth}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactUserMenu=n.UserMenu=void 0,n.select=i;var l=e("react"),c=a(l),f=e("./guest-nav"),d=e("./user-nav");n.UserMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"render",value:function(){return this.props.isAuthenticated?c["default"].createElement(d.UserNav,{user:this.props.user}):c["default"].createElement(f.GuestNav,null)}}]),t}(c["default"].Component),n.CompactUserMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"render",value:function(){return this.props.isAuthenticated?c["default"].createElement(d.CompactUserNav,{user:this.props.user}):c["default"].createElement(f.CompactGuestNav,null)}}]),t}(c["default"].Component)},{"./guest-nav":90,"./user-nav":92,react:"react"}],92:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactUserNav=n.UserNav=n.UserMenu=void 0,n.selectUserMenu=i;var l=e("react"),c=a(l),f=e("react-redux"),d=e("../avatar"),p=a(d),m=e("../change-avatar/root"),h=a(m),v=e("../../index"),g=a(v),b=e("../../services/mobile-navbar-dropdown"),y=a(b),_=e("../../services/modal"),w=a(_),E=n.UserMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"logout",value:function(){var e=confirm(gettext("Are you sure you want to sign out?"));e&&$("#hidden-logout-form").submit()}},{key:"changeAvatar",value:function(){w["default"].show((0,f.connect)(m.select)(h["default"]))}},{key:"render",value:function(){return c["default"].createElement("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},c["default"].createElement("li",{className:"dropdown-header"},c["default"].createElement("strong",null,this.props.user.username)),c["default"].createElement("li",{className:"divider"}),c["default"].createElement("li",null,c["default"].createElement("a",{href:this.props.user.absolute_url},c["default"].createElement("span",{className:"material-icon"},"account_circle"),gettext("See your profile"))),c["default"].createElement("li",null,c["default"].createElement("a",{href:g["default"].get("USERCP_URL")},c["default"].createElement("span",{className:"material-icon"},"done_all"),gettext("Change options"))),c["default"].createElement("li",null,c["default"].createElement("button",{type:"button",className:"btn-link",onClick:this.changeAvatar},c["default"].createElement("span",{className:"material-icon"},"portrait"),gettext("Change avatar"))),c["default"].createElement("li",{className:"divider"}),c["default"].createElement("li",{className:"dropdown-footer"},c["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.logout},gettext("Log out"))))}}]),t}(c["default"].Component);n.UserNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("ul",{className:"ul nav navbar-nav nav-user"},c["default"].createElement("li",{className:"dropdown"},c["default"].createElement("a",{href:this.props.user.absolute_url,className:"dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",role:"button"},c["default"].createElement(p["default"],{user:this.props.user,size:"64"})),c["default"].createElement(E,{user:this.props.user})))}}]),t}(c["default"].Component),n.CompactUserNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"showUserMenu",value:function(){y["default"].showConnected("user-menu",(0,f.connect)(i)(E))}},{key:"render",value:function(){return c["default"].createElement("button",{type:"button",onClick:this.showUserMenu},c["default"].createElement(p["default"],{user:this.props.user,size:"64"}))}}]),t}(c["default"].Component)},{"../../index":107,"../../services/mobile-navbar-dropdown":119,"../../services/modal":120,"../avatar":53,"../change-avatar/root":59,react:"react","react-redux":"react-redux"}],93:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.StatusLabel=n.StatusIcon=void 0;var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClass",value:function(){var e="";return this.props.status.is_banned?e="banned":this.props.status.is_hidden?e="offline":this.props.status.is_online_hidden?e="online":this.props.status.is_offline_hidden?e="offline":this.props.status.is_online?e="online":this.props.status.is_offline&&(e="offline"),"user-status user-"+e}},{key:"render",value:function(){return l["default"].createElement("span",{className:this.getClass()},this.props.children)}}]),t}(l["default"].Component);n["default"]=c;n.StatusIcon=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getIcon",value:function(){return this.props.status.is_banned?"remove_circle_outline":this.props.status.is_hidden?"help_outline":this.props.status.is_online_hidden?"label":this.props.status.is_offline_hidden?"label_outline":this.props.status.is_online?"lens":this.props.status.is_offline?"panorama_fish_eye":void 0}},{key:"render",value:function(){return l["default"].createElement("span",{className:"material-icon status-icon"},this.getIcon())}}]),t}(l["default"].Component),n.StatusLabel=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getHelp",value:function(){return this.props.status.is_banned?this.props.status.banned_until?interpolate(gettext("%(username)s is banned until %(ban_expires)s"),{username:this.props.user.username,ban_expires:this.props.status.banned_until.format("LL, LT")},!0):interpolate(gettext("%(username)s is banned"),{username:this.props.user.username},!0):this.props.status.is_hidden?interpolate(gettext("%(username)s is hiding presence"),{username:this.props.user.username},!0):this.props.status.is_online_hidden?interpolate(gettext("%(username)s is online (hidden)"),{username:this.props.user.username},!0):this.props.status.is_offline_hidden?interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"),{username:this.props.user.username,last_click:this.props.status.last_click.fromNow()},!0):this.props.status.is_online?interpolate(gettext("%(username)s is online"),{username:this.props.user.username},!0):this.props.status.is_offline?interpolate(gettext("%(username)s was last seen %(last_click)s"),{username:this.props.user.username,last_click:this.props.status.last_click.fromNow()},!0):void 0}},{key:"getLabel",value:function(){return this.props.status.is_banned?gettext("Banned"):this.props.status.is_hidden?gettext("Hidden"):this.props.status.is_online_hidden?gettext("Online (hidden)"):this.props.status.is_offline_hidden?gettext("Offline (hidden)"):this.props.status.is_online?gettext("Online"):this.props.status.is_offline?gettext("Offline"):void 0}},{key:"render",value:function(){return l["default"].createElement("span",{className:this.props.className||"status-label",title:this.getHelp()},this.getLabel())}}]),t}(l["default"].Component)},{react:"react"}],94:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getEmptyMessage",value:function(){return interpolate(gettext("No users have posted any new messages during last %(days)s days."),{days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return l["default"].createElement("div",{className:"active-posters-list"},l["default"].createElement("div",{className:"container"},l["default"].createElement("p",{className:"lead"},this.getEmptyMessage())))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],95:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("react-router"),f=e("../../avatar"),d=a(f),p=e("../../user-status"),m=a(p),h=e("../../../index"),v=a(h),g=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.rank.css_class?"list-group-item list-group-rank-"+this.props.rank.css_class:"list-group-item"}},{key:"getUserStatus",value:function(){return this.props.user.status?l["default"].createElement(m["default"],{user:this.props.user,status:this.props.user.status},l["default"].createElement(p.StatusIcon,{user:this.props.user,status:this.props.user.status}),l["default"].createElement(p.StatusLabel,{user:this.props.user,status:this.props.user.status,className:"status-label hidden-xs hidden-sm"})):l["default"].createElement("span",{className:"user-status"},l["default"].createElement("span",{className:"status-icon ui-preview"}," "),l["default"].createElement("span",{className:"status-label ui-preview hidden-xs hidden-sm"}," "))}},{key:"getRankName",value:function(){if(this.props.rank.is_tab){var e=v["default"].get("USERS_LIST_URL")+this.props.rank.slug+"/";return l["default"].createElement(c.Link,{to:e,className:"item-title rank-name"},this.props.rank.name)}return l["default"].createElement("span",{className:"item-title rank-name"},this.props.rank.name)}},{key:"getUserTitle",value:function(){return this.props.user.title?l["default"].createElement("span",{className:"user-title hidden-xs hidden-sm"},this.props.user.title):null}},{key:"render",value:function(){return l["default"].createElement("li",{className:this.getClassName()},l["default"].createElement("div",{className:"rank-user-avatar"},l["default"].createElement("a",{href:this.props.user.absolute_url},l["default"].createElement(d["default"],{user:this.props.user,size:"50"}))),l["default"].createElement("div",{className:"rank-user"},l["default"].createElement("div",{className:"user-name"},l["default"].createElement("a",{href:this.props.user.absolute_url,className:"item-title"},this.props.user.username)),this.getUserStatus(),this.getRankName(),this.getUserTitle()),l["default"].createElement("div",{className:"rank-position"},l["default"].createElement("strong",null,"#",this.props.counter),l["default"].createElement("small",null,gettext("Rank"))),l["default"].createElement("div",{className:"rank-posts-counted"},l["default"].createElement("strong",null,this.props.user.meta.score),l["default"].createElement("small",null,gettext("Ranked posts"))),l["default"].createElement("div",{className:"rank-posts-total"},l["default"].createElement("strong",null,this.props.user.posts),l["default"].createElement("small",null,gettext("Total posts"))))}}]),t}(l["default"].Component);n["default"]=g},{"../../../index":107,"../../avatar":53,"../../user-status":93,react:"react","react-router":"react-router"}],96:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../avatar"),d=r(f),p=e("../../../utils/random"),m=a(p),h=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("div",{className:"active-posters-list"},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead ui-preview-paragraph"},m.range(3,4).map(function(e){return c["default"].createElement("span",{key:e,className:"ui-preview-text",style:{width:m["int"](50,120)+"px"}}," ")})),c["default"].createElement("div",{className:"active-posters ui-preview"},c["default"].createElement("ul",{className:"list-group"},m.range(5,10).map(function(e,t){return c["default"].createElement("li",{key:e,className:"list-group-item"},c["default"].createElement("div",{className:"rank-user-avatar"},c["default"].createElement("span",null,c["default"].createElement(d["default"],{size:"50"}))),c["default"].createElement("div",{className:"rank-user"},c["default"].createElement("div",{className:"user-name"},c["default"].createElement("span",{className:"item-title"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,80)+"px"}}," "))),c["default"].createElement("span",{className:"user-status"},c["default"].createElement("span",{className:"status-icon ui-preview"}," "),c["default"].createElement("span",{className:"status-label ui-preview hidden-xs hidden-sm"}," ")),c["default"].createElement("span",{className:"rank-name"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," ")),c["default"].createElement("span",{className:"user-title hidden-xs hidden-sm"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," "))),c["default"].createElement("div",{className:"rank-position"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("small",null,gettext("Rank"))),c["default"].createElement("div",{className:"rank-posts-counted"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("small",null,gettext("Ranked posts"))),c["default"].createElement("div",{className:"rank-posts-total"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("small",null,gettext("Total posts"))))})))))}}]),t}(c["default"].Component);n["default"]=h},{"../../../utils/random":131,"../../avatar":53,react:"react"}],97:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./list-item"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getLeadMessage",value:function(){var e=ngettext("%(posters)s most active poster from last %(days)s days.","%(posters)s most active posters from last %(days)s days.",this.props.count);return interpolate(e,{posters:this.props.count,days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return l["default"].createElement("div",{className:"active-posters-list"},l["default"].createElement("div",{className:"container"},l["default"].createElement("p",{className:"lead"},this.getLeadMessage()),l["default"].createElement("div",{className:"active-posters ui-ready"},l["default"].createElement("ul",{className:"list-group"},this.props.users.map(function(e,t){return l["default"].createElement(f["default"],{user:e,rank:e.rank,counter:t+1,key:e.id})})))))}}]),t}(l["default"].Component);n["default"]=d},{"./list-item":95,react:"react"}],98:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t);
-}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./list-empty"),f=a(c),d=e("./list-loading"),p=a(d),m=e("./list"),h=a(m),v=e("../../../index"),g=a(v),b=e("../../../reducers/users"),y=e("../../../services/polls"),_=a(y),w=e("../../../services/store"),E=a(w),O=e("../../../services/page-title"),k=a(O),N=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){E["default"].dispatch((0,b.dehydrate)(e.results)),n.setState({isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count})},g["default"].has("USERS")?n.initWithPreloadedData(g["default"].pop("USERS")):n.initWithoutPreloadedData(),n.startPolling(),n}return s(t,e),i(t,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count},E["default"].dispatch((0,b.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(){_["default"].start({poll:"active-posters",url:g["default"].get("USERS_API"),data:{list:"active"},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){k["default"].set({title:this.props.route.extra.name,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){_["default"].stop("active-posters")}},{key:"render",value:function(){return this.state.isLoaded?this.state.count>0?l["default"].createElement(h["default"],{users:this.props.users,trackedPeriod:this.state.trackedPeriod,count:this.state.count}):l["default"].createElement(f["default"],{trackedPeriod:this.state.trackedPeriod}):l["default"].createElement(p["default"],null)}}]),t}(l["default"].Component);n["default"]=N},{"../../../index":107,"../../../reducers/users":113,"../../../services/page-title":121,"../../../services/polls":122,"../../../services/store":124,"./list":97,"./list-empty":94,"./list-loading":96,react:"react"}],99:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.TabsNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=e("../../index"),m=(a(p),function(e,t){var n=e;return n+="rank"===t.component?t.slug:t.component,n+"/"}),h=function(e,t,n){return t.map(function(t){var a=m(e,t);return l["default"].createElement(d["default"],{path:a,key:a},l["default"].createElement(c.Link,{to:a,onClick:n},t.name))})};n.TabsNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"nav nav-pills"},h(this.props.baseUrl,this.props.lists))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},h(this.props.baseUrl,this.props.lists,this.props.hideNav))}}]),t}(l["default"].Component)},{"../../index":107,"../li":63,react:"react","react-router":"react-router"}],100:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../avatar"),f=a(c),d=e("../../user-status"),p=a(d),m=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.user.rank.css_class?"user-card user-card-"+this.props.user.rank.css_class:"user-card"}},{key:"getUserStatus",value:function(){return this.props.user.status?l["default"].createElement(p["default"],{user:this.props.user,status:this.props.user.status},l["default"].createElement(d.StatusIcon,{user:this.props.user,status:this.props.user.status}),l["default"].createElement(d.StatusLabel,{user:this.props.user,status:this.props.user.status,className:"status-label"})):l["default"].createElement("span",{className:"user-status"},l["default"].createElement("span",{className:"status-icon ui-preview"}," "),l["default"].createElement("span",{className:"status-label ui-preview"}," "))}},{key:"getUserTitle",value:function(){return this.props.user.title?l["default"].createElement("span",{className:"user-title"},this.props.user.title):null}},{key:"getUserJoinedOn",value:function(){var e=interpolate(gettext("Joined on %(joined_on)s"),{joined_on:this.props.user.joined_on.format("LL, LT")},!0),t=interpolate(gettext("Joined %(joined_on)s"),{joined_on:this.props.user.joined_on.fromNow()},!0);return l["default"].createElement("span",{className:"user-joined-on",title:e},t)}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("div",{className:"user-card-bg-image"},l["default"].createElement(f["default"],{user:this.props.user,size:"400",className:"bg-image"}),l["default"].createElement("div",{className:"user-card-bg"},l["default"].createElement("div",{className:"user-details"},l["default"].createElement("div",{className:"user-avatar"},l["default"].createElement("a",{href:this.props.user.absolute_url},l["default"].createElement(f["default"],{user:this.props.user,size:"400"}))),l["default"].createElement("h4",{className:"user-name"},l["default"].createElement("a",{href:this.props.user.absolute_url,className:"item-title"},this.props.user.username)),l["default"].createElement("p",{className:"user-subscript"},this.getUserStatus(),this.getUserTitle(),this.getUserJoinedOn())),l["default"].createElement("div",{className:"user-card-stats"},l["default"].createElement("ul",{className:"list-unstyled"},l["default"].createElement("li",{className:"user-posts-count"},l["default"].createElement("strong",null,this.props.user.posts),l["default"].createElement("small",null,gettext("posts"))),l["default"].createElement("li",{className:"user-threads-count"},l["default"].createElement("strong",null,this.props.user.threads),l["default"].createElement("small",null,gettext("threads"))),l["default"].createElement("li",{className:"user-followers-count"},l["default"].createElement("strong",null,this.props.user.followers),l["default"].createElement("small",null,gettext("followers"))))))))}}]),t}(l["default"].Component);n["default"]=m},{"../../avatar":53,"../../user-status":93,react:"react"}],101:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../avatar"),d=r(f),p=e("../../../utils/random"),m=a(p),h=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("div",null,c["default"].createElement("div",{className:"users-cards-list"},c["default"].createElement("div",{className:"row"},[0,1,2,3].map(function(e){return c["default"].createElement("div",{className:"col-md-4",key:e},c["default"].createElement("div",{className:"user-card ui-preview"},c["default"].createElement("div",{className:"user-card-bg-image"},c["default"].createElement(d["default"],{size:"400",className:"bg-image"}),c["default"].createElement("div",{className:"user-card-bg"},c["default"].createElement("div",{className:"user-details"},c["default"].createElement("div",{className:"user-avatar"},c["default"].createElement(d["default"],{size:"400"})),c["default"].createElement("h4",{className:"user-name"},c["default"].createElement("span",{className:"item-title"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](60,150)+"px"}}," "))),c["default"].createElement("p",{className:"user-subscript"},c["default"].createElement("span",{className:"user-status"},c["default"].createElement("span",{className:"status-icon ui-preview"}," "),c["default"].createElement("span",{className:"status-label ui-preview"}," ")),c["default"].createElement("span",{className:"user-joined-on"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," ")))),c["default"].createElement("div",{className:"user-card-stats"},c["default"].createElement("ul",{className:"list-unstyled"},c["default"].createElement("li",{className:"user-posts-count"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text"}," ")),c["default"].createElement("small",null,gettext("posts"))),c["default"].createElement("li",{className:"user-threads-count"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text"}," ")),c["default"].createElement("small",null,gettext("threads"))),c["default"].createElement("li",{className:"user-followers-count"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text"}," ")),c["default"].createElement("small",null,gettext("followers")))))))))}))))}}]),t}(c["default"].Component);n["default"]=h},{"../../../utils/random":131,"../../avatar":53,react:"react"}],102:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./list-item"),f=a(c),d=e("./pager"),p=a(d),m=e("../../../utils/batch"),h=a(m),v=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getPager",value:function(){return this.props.pages>1?l["default"].createElement(p["default"],this.props):null}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement("div",{className:"users-cards-list ui-ready"},(0,h["default"])(this.props.users,3).map(function(e,t){return l["default"].createElement("div",{className:"row",key:t},e.map(function(e){return l["default"].createElement("div",{className:"col-md-4",key:e.id},l["default"].createElement(f["default"],{user:e}))}))})),this.getPager())}}]),t}(l["default"].Component);n["default"]=v},{"../../../utils/batch":127,"./list-item":100,"./pager":103,react:"react"}],103:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("react-router"),f=e("../../../utils/reset-scroll"),d=a(f),p=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getPreviousPage",value:function(){if(this.props.previous||this.props.first){var e=this.props.baseUrl;return this.props.previous&&(e+=this.props.previous+"/"),l["default"].createElement("li",{className:"previous"},l["default"].createElement(c.Link,{to:e,onClick:d["default"]},l["default"].createElement("span",{"aria-hidden":"true",className:"material-icon"},"arrow_back")))}return null}},{key:"getNextPage",value:function(){if(this.props.next){var e=this.props.baseUrl+this.props.next+"/";return l["default"].createElement("li",{className:"next"},l["default"].createElement(c.Link,{to:e,onClick:d["default"]},l["default"].createElement("span",{"aria-hidden":"true",className:"material-icon"},"arrow_forward")))}return null}},{key:"getProgessBar",value:function(){var e=this;return l["default"].createElement("ul",{className:"pager-progress-bar"},this.props.page_range.map(function(t){var n=t===e.props.page?"active":null,a=e.props.baseUrl;return t>1&&(a+=t+"/"),l["default"].createElement("li",{key:t,className:n},l["default"].createElement(c.Link,{to:a,onClick:d["default"]},t))}))}},{key:"render",value:function(){return l["default"].createElement("div",{className:"pager-undercontent"},l["default"].createElement("nav",null,l["default"].createElement("ul",{className:"pager"},this.getPreviousPage(),this.getNextPage()),this.getProgessBar()))}}]),t}(l["default"].Component);n["default"]=p},{"../../../utils/reset-scroll":132,react:"react","react-router":"react-router"}],104:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=a(l),f=e("./list-loading"),d=a(f),p=e("./list"),m=a(p),h=e("../../../index"),v=a(h),g=e("../../../reducers/users"),b=e("../../../services/polls"),y=a(b),_=e("../../../services/store"),w=a(_),E=e("../../../services/page-title"),O=a(E),k=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){w["default"].dispatch((0,g.dehydrate)(e.results)),e.isLoaded=!0,n.setState(e)},v["default"].has("USERS")?n.initWithPreloadedData(v["default"].pop("USERS")):n.initWithoutPreloadedData(),n.startPolling(e.params.page||1),n}return s(t,e),u(t,[{key:"initWithPreloadedData",value:function(e){this.state=Object.assign(e,{isLoaded:!0}),w["default"].dispatch((0,g.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){y["default"].start({poll:"rank-users",url:v["default"].get("USERS_API"),data:{rank:this.props.route.rank.slug,page:e},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){O["default"].set({title:this.props.route.rank.name,page:this.props.params.page||null,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){y["default"].stop("rank-users")}},{key:"componentWillReceiveProps",value:function(e){this.props.params.page!==e.params.page&&(O["default"].set({title:this.props.route.rank.name,page:e.params.page||null,parent:gettext("Users")}),this.setState({isLoaded:!1}),y["default"].stop("rank-users"),this.startPolling(e.params.page))}},{key:"getClassName",value:function(){return this.props.route.rank.css_class?"rank-users-list rank-users-"+this.props.route.rank.css_class:"rank-users-list"}},{key:"getRankDescription",value:function(){return this.props.route.rank.description?c["default"].createElement("div",{className:"rank-description"},c["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.route.rank.description.html}})):null}},{key:"getComponent",value:function(){if(this.state.isLoaded){if(this.state.count>0){var e=v["default"].get("USERS_LIST_URL")+this.props.route.rank.slug+"/";return c["default"].createElement(m["default"],i({baseUrl:e,users:this.props.users},this.state))}return c["default"].createElement("p",{className:"lead"},gettext("There are no users with this rank at the moment."))}return c["default"].createElement(d["default"],null)}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName()},c["default"].createElement("div",{className:"container"},this.getRankDescription(),this.getComponent()))}}]),t}(c["default"].Component);n["default"]=k},{"../../../index":107,"../../../reducers/users":113,"../../../services/page-title":121,"../../../services/polls":122,"../../../services/store":124,"./list":102,"./list-loading":101,react:"react"}],105:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users}}function u(){var e=[];return y["default"].get("USERS_LISTS").forEach(function(t){"rank"===t.component?(e.push({path:y["default"].get("USERS_LIST_URL")+t.slug+"/:page/",component:(0,d.connect)(i)(g["default"]),rank:{name:t.name,slug:t.slug,css_class:t.css_class,description:t.description}}),e.push({path:y["default"].get("USERS_LIST_URL")+t.slug+"/",component:(0,d.connect)(i)(g["default"]),rank:{name:t.name,slug:t.slug,css_class:t.css_class,description:t.description}})):"active-posters"===t.component&&e.push({path:y["default"].get("USERS_LIST_URL")+t.component+"/",component:(0,d.connect)(i)(h["default"]),extra:{name:t.name}})}),e}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),f=a(c),d=e("react-redux"),p=e("./navs"),m=e("./active-posters/root"),h=a(m),v=e("./rank/root"),g=a(v),b=e("../../index"),y=a(b),_=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.toggleNav=function(){n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:!0})},n.hideNav=function(){n.setState({dropdown:!1})},n.state={dropdown:!1},n}return s(t,e),l(t,[{key:"getToggleNavClassName",value:function(){return this.state.dropdown?"btn btn-default btn-icon open":"btn btn-default btn-icon"}},{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}},{key:"render",value:function(){return f["default"].createElement("div",{className:"page page-users-lists"},f["default"].createElement("div",{className:"page-header tabbed"},f["default"].createElement("div",{className:"container"},f["default"].createElement("h1",{className:"pull-left"},gettext("Users")),f["default"].createElement("button",{className:"btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg",type:"button",onClick:this.toggleNav,"aria-haspopup":"true","aria-expanded":this.state.dropdown?"true":"false"},f["default"].createElement("i",{className:"material-icon"},"menu"))),f["default"].createElement("div",{className:"page-tabs hidden-xs hidden-sm"},f["default"].createElement("div",{className:"container"},f["default"].createElement(p.TabsNav,{lists:y["default"].get("USERS_LISTS"),baseUrl:y["default"].get("USERS_LIST_URL")})))),f["default"].createElement("div",{className:this.getCompactNavClassName()},f["default"].createElement(p.CompactNav,{lists:y["default"].get("USERS_LISTS"),baseUrl:y["default"].get("USERS_LIST_URL"),hideNav:this.hideNav})),this.props.children)}}]),t}(f["default"].Component);n["default"]=_},{"../../index":107,"./active-posters/root":98,"./navs":99,"./rank/root":104,react:"react","react-redux":"react-redux"}],106:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.toggle=function(){a.props.onChange({target:{value:!a.props.value}})},s=n,o(a,s)}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.value?"btn btn-yes-no btn-yes-no-on":"btn btn-yes-no btn-yes-no-off"}},{key:"getIcon",value:function(){return this.props.value?this.props.iconOn||"check_box":this.props.iconOff||"check_box_outline_blank"}},{key:"getLabel",value:function(){return this.props.value?this.props.labelOn||gettext("yes"):this.props.labelOff||gettext("no")}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.toggle,className:this.getClassName(),id:this.props.id||null,"aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel())}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],107:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Misago=void 0;var s=e("./utils/ordered-list"),i=a(s),u=n.Misago=function(){function e(){r(this,e),this._initializers=[],this._context={}}return o(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e;var n=new i["default"](this._initializers).orderedValues();n.forEach(function(e){e(t)})}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}(),l=new u;t.misago=l,n["default"]=l}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./utils/ordered-list":130}],108:[function(e,t,n){"use strict";function a(e){return{type:l,patch:e}}function r(e){return{type:c,user:e}}function o(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];return{type:f,soft:e}}function s(){var e=arguments.length<=0||void 0===arguments[0]?u:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case l:var n=Object.assign({},e);return n.user=Object.assign({},e.user,t.patch),n;case c:return Object.assign({},e,{signedIn:t.user});case f:return Object.assign({},e,{isAuthenticated:!1,isAnonymous:!0,signedOut:!t.soft});case i.UPDATE_AVATAR:if(e.isAuthenticated&&e.user.id===t.userId){var a=Object.assign({},e);return a.user=Object.assign({},e.user,{avatar_hash:t.avatarHash}),a}return e;case i.UPDATE_USERNAME:if(e.isAuthenticated&&e.user.id===t.userId){var r=Object.assign({},e);return r.user=Object.assign({},e.user,{username:t.username,slug:t.slug}),r}return e;default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.SIGN_OUT=n.SIGN_IN=n.PATCH_USER=n.initialState=void 0,n.patchUser=a,n.signIn=r,n.signOut=o,n["default"]=s;var i=e("./users"),u=n.initialState={signedIn:!1,signedOut:!1},l=n.PATCH_USER="PATCH_USER",c=n.SIGN_IN="SIGN_IN",f=n.SIGN_OUT="SIGN_OUT"},{"./users":113}],109:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return{type:c,profile:e}}function o(e){return{type:f,patch:e}}function s(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case c:return Object.assign({},t.profile,{joined_on:(0,u["default"])(t.profile.joined_on),status:(0,l.dehydrateStatus)(t.profile.status)});case f:return Object.assign({},e,t.patch);case l.UPDATE_AVATAR:return e.id===t.userId?Object.assign({},e,{avatar_hash:t.avatarHash}):e;default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.PATCH_PROFILE=n.DEHYDRATE_PROFILE=void 0,n.dehydrate=r,n.patchProfile=o,n["default"]=s;var i=e("moment"),u=a(i),l=e("./users"),c=n.DEHYDRATE_PROFILE="DEHYDRATE_PROFILE",f=n.PATCH_PROFILE="PATCH_PROFILE"},{"./users":113,moment:"moment"}],110:[function(e,t,n){"use strict";function a(e,t){return{type:i,message:e,messageType:t}}function r(){return{type:u}}function o(){var e=arguments.length<=0||void 0===arguments[0]?s:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return t.type===i?{type:t.messageType,message:t.message,isVisible:!0}:t.type===u?Object.assign({},e,{isVisible:!1}):e}Object.defineProperty(n,"__esModule",{value:!0}),n.showSnackbar=a,n.hideSnackbar=r,n["default"]=o;var s=n.initialState={type:"info",message:"",isVisible:!1},i=n.SHOW_SNACKBAR="SHOW_SNACKBAR",u=n.HIDE_SNACKBAR="HIDE_SNACKBAR"},{}],111:[function(e,t,n){"use strict";function a(){return{type:s}}function r(){var e=arguments.length<=0||void 0===arguments[0]?o:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return t.type===s?Object.assign({},e,{tick:e.tick+1}):e}Object.defineProperty(n,"__esModule",{value:!0}),n.doTick=a,n["default"]=r;var o=n.initialState={tick:0},s=n.TICK="TICK"},{}],112:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return{type:c,change:e,user:t,changedBy:n}}function o(e){return{type:f,items:e}}function s(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case c:var n=e.slice();return n.unshift({id:Math.floor(Date.now()/1e3),changed_by:t.changedBy,changed_by_username:t.changedBy.username,changed_on:(0,l["default"])(),new_username:t.change.username,old_username:t.user.username}),n;case f:return t.items.map(function(e){return Object.assign({},e,{changed_on:(0,l["default"])(e.changed_on)})});case i.UPDATE_AVATAR:return e.map(function(e){return e=Object.assign({},e),e.changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{avatar_hash:t.avatarHash})),e});case i.UPDATE_USERNAME:return e.map(function(e){return e=Object.assign({},e),e.changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{username:t.username,slug:t.slug})),Object.assign({},e)});default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.DEHYDRATE_HISTORY=n.ADD_NAME_CHANGE=void 0,n.addNameChange=r,n.dehydrate=o,n["default"]=s;var i=e("./users"),u=e("moment"),l=a(u),c=n.ADD_NAME_CHANGE="ADD_NAME_CHANGE",f=n.DEHYDRATE_HISTORY="DEHYDRATE_HISTORY";
-},{"./users":113,moment:"moment"}],113:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return{type:f,items:e}}function o(e){return e?Object.assign({},e,{last_click:e.last_click?(0,c["default"])(e.last_click):null,banned_until:e.banned_until?(0,c["default"])(e.banned_until):null}):null}function s(e,t){return{type:d,userId:e.id,avatarHash:t}}function i(e,t,n){return{type:p,userId:e.id,username:t,slug:n}}function u(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case f:return t.items.map(function(e){return Object.assign({},e,{joined_on:(0,c["default"])(e.joined_on),status:o(e.status)})});case d:return e.map(function(e){return e=Object.assign({},e),e.id===t.userId&&(e.avatar_hash=t.avatarHash),e});default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.UPDATE_USERNAME=n.UPDATE_AVATAR=n.DEHYDRATE_USERS=void 0,n.dehydrate=r,n.dehydrateStatus=o,n.updateAvatar=s,n.updateUsername=i,n["default"]=u;var l=e("moment"),c=a(l),f=n.DEHYDRATE_USERS="DEHYDRATE_USERS",d=n.UPDATE_AVATAR="UPDATE_AVATAR",p=n.UPDATE_USERNAME="UPDATE_USERNAME"},{moment:"moment"}],114:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Ajax=function(){function e(){a(this,e),this._cookieName=null,this._csrfToken=null}return r(e,[{key:"init",value:function(e){this._cookieName=e,this._csrfToken=this.getCsrfToken()}},{key:"getCsrfToken",value:function(){if(-1!==document.cookie.indexOf(this._cookieName)){var e=new RegExp(this._cookieName+"=([^;]*)"),t=document.cookie.match(e)[0];return t?t.split("=")[1]:null}return null}},{key:"request",value:function(e,t,n){var a=this;return new Promise(function(r,o){var s={url:t,method:e,headers:{"X-CSRFToken":a._csrfToken},data:n?JSON.stringify(n):null,contentType:"application/json; charset=utf-8",dataType:"json",success:function(e){r(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),t.statusText=e.statusText,o(t)}};$.ajax(s)})}},{key:"get",value:function(e,t){return t&&(e+="?"+$.param(t)),this.request("GET",e)}},{key:"post",value:function(e,t){return this.request("POST",e,t)}},{key:"patch",value:function(e,t){return this.request("PATCH",e,t)}},{key:"put",value:function(e,t){return this.request("PUT",e,t)}},{key:"delete",value:function(e){return this.request("DELETE",e)}},{key:"upload",value:function(e,t,n){var a=this;return new Promise(function(r,o){var s={url:e,method:"POST",headers:{"X-CSRFToken":a._csrfToken},data:t,contentType:!1,processData:!1,xhr:function i(){var i=new window.XMLHttpRequest;return i.upload.addEventListener("progress",function(e){e.lengthComputable&&n(Math.round(e.loaded/e.total*100))},!1),i},success:function(e){r(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),t.statusText=e.statusText,o(t)}};$.ajax(s)})}}]),e}();n["default"]=new o},{}],115:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Auth=void 0;var o=e("../reducers/auth"),s=n.Auth=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e,t,n){this._store=e,this._local=t,this._modal=n,this.syncSession(),this.watchState()}},{key:"syncSession",value:function(){var e=this._store.getState().auth;e.isAuthenticated?this._local.set("auth",{isAuthenticated:!0,username:e.user.username}):this._local.set("auth",{isAuthenticated:!1})}},{key:"watchState",value:function(){var e=this;this._local.watch("auth",function(t){t.isAuthenticated?e._store.dispatch((0,o.signIn)({username:t.username})):e._store.dispatch((0,o.signOut)())}),this._modal.hide()}},{key:"signIn",value:function(e){this._store.dispatch((0,o.signIn)(e)),this._local.set("auth",{isAuthenticated:!0,username:e.username}),this._modal.hide()}},{key:"signOut",value:function(){this._store.dispatch((0,o.signOut)()),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}},{key:"softSignOut",value:function(){this._store.dispatch((0,o.signOut)(!0)),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}}]),e}();n["default"]=new s},{"../reducers/auth":108}],116:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Captcha=n.ReCaptcha=n.ReCaptchaComponent=n.QACaptcha=n.NoCaptcha=n.BaseCaptcha=void 0;var u=e("react"),l=a(u),c=e("../components/form-group"),f=a(c),d=n.BaseCaptcha=function(){function e(){s(this,e)}return i(e,[{key:"init",value:function(e,t,n,a){this._context=e,this._ajax=t,this._include=n,this._snackbar=a}}]),e}(),p=n.NoCaptcha=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"load",value:function(){return new Promise(function(e){e()})}},{key:"validator",value:function(){return null}},{key:"component",value:function(){return null}}]),t}(d),m=n.QACaptcha=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"load",value:function(){var e=this;return new Promise(function(t,n){e._ajax.get(e._context.get("CAPTCHA_API_URL")).then(function(n){e.question=n.question,e.helpText=n.help_text,t()},function(){e._snackbar.error(gettext("Failed to load CAPTCHA.")),n()})})}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return l["default"].createElement(f["default"],{label:this.question,"for":"id_captcha",labelClass:e.labelClass||"col-sm-4",controlClass:e.controlClass||"col-sm-8",validation:e.form.state.errors.captcha,helpText:this.helpText||null},l["default"].createElement("input",{type:"text",id:"id_captcha",className:"form-control","aria-describedby":"id_captcha_status",disabled:e.form.state.isLoading,onChange:e.form.bindInput("captcha"),value:e.form.state.captcha}))}}]),t}(d),h=n.ReCaptchaComponent=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;grecaptcha.render("recaptcha",{sitekey:this.props.siteKey,callback:function(t){e.props.binding({target:{value:t}})}})}},{key:"render",value:function(){return l["default"].createElement("div",{id:"recaptcha"})}}]),t}(l["default"].Component),v=n.ReCaptcha=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"load",value:function(){return this._include.include("https://www.google.com/recaptcha/api.js",!0),new Promise(function(e){var t=function n(){"undefined"==typeof grecaptcha?window.setTimeout(function(){n()},200):e()};t()})}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return l["default"].createElement(f["default"],{label:gettext("Captcha"),"for":"id_captcha",labelClass:e.labelClass||"col-sm-4",controlClass:e.controlClass||"col-sm-8",validation:e.form.state.errors.captcha,helpText:gettext("Please solve the quick test.")},l["default"].createElement(h,{siteKey:this._context.get("SETTINGS").recaptcha_site_key,binding:e.form.bindInput("captcha")}))}}]),t}(d),g=n.Captcha=function(){function e(){s(this,e)}return i(e,[{key:"init",value:function(e,t,n,a){switch(e.get("SETTINGS").captcha_type){case"no":this._captcha=new p;break;case"qa":this._captcha=new m;break;case"re":this._captcha=new v}this._captcha.init(e,t,n,a)}},{key:"load",value:function(){return this._captcha.load()}},{key:"validator",value:function(){return this._captcha.validator()}},{key:"component",value:function(e){return this._captcha.component(e)}}]),e}();n["default"]=new g},{"../components/form-group":61,react:"react"}],117:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Include=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._staticUrl=e,this._included=[]}},{key:"include",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];-1===this._included.indexOf(e)&&(this._included.push(e),this._include(e,t))}},{key:"_include",value:function(e,t){$.ajax({url:(t?"":this._staticUrl)+e,cache:!0,dataType:"script"})}}]),e}();n["default"]=new o},{}],118:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=window.localStorage,s=n.LocalStorage=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){var t=this;this._prefix=e,this._watchers=[],window.addEventListener("storage",function(e){var n=JSON.parse(e.newValue);t._watchers.forEach(function(t){t.key===e.key&&e.oldValue!==e.newValue&&t.callback(n)})})}},{key:"set",value:function(e,t){o.setItem(this._prefix+e,JSON.stringify(t))}},{key:"get",value:function(e){var t=o.getItem(this._prefix+e);return t?JSON.parse(t):null}},{key:"watch",value:function(e,t){this._watchers.push({key:this._prefix+e,callback:t})}}]),e}();n["default"]=new s},{}],119:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.MobileNavbarDropdown=void 0;var s=e("../utils/mount-component"),i=a(s),u=n.MobileNavbarDropdown=function(){function e(){r(this,e)}return o(e,[{key:"init",value:function(e){this._element=e,this._component=null}},{key:"show",value:function(e){this._component===e?this.hide():(this._component=e,(0,i["default"])(e,this._element.id),$(this._element).addClass("open"))}},{key:"showConnected",value:function(e,t){this._component===e?this.hide():(this._component=e,(0,i["default"])(t,this._element.id,!0),$(this._element).addClass("open"))}},{key:"hide",value:function(){$(this._element).removeClass("open"),this._component=null}}]),e}();n["default"]=new u},{"../utils/mount-component":129}],120:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Modal=void 0;var s=e("react-dom"),i=a(s),u=e("../utils/mount-component"),l=a(u),c=n.Modal=function(){function e(){r(this,e)}return o(e,[{key:"init",value:function(e){var t=this;this._element=e,this._modal=$(e).modal({show:!1}),this._modal.on("hidden.bs.modal",function(){i["default"].unmountComponentAtNode(t._element)})}},{key:"show",value:function(e){(0,l["default"])(e,this._element.id),this._modal.modal("show")}},{key:"hide",value:function(){this._modal.modal("hide")}}]),e}();n["default"]=new c},{"../utils/mount-component":129,"react-dom":"react-dom"}],121:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.PageTitle=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._forumName=e}},{key:"set",value:function(e){"string"==typeof e&&(e={title:e});var t=e.title;if(e.page){var n=interpolate(gettext("page: %(page)s"),{page:e.page},!0);t+=" ("+n+")"}e.parent&&(t+=" | "+e.parent),document.title=t+" | "+this._forumName}}]),e}();n["default"]=new o},{}],122:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Polls=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e,t){this._ajax=e,this._snackbar=t,this._polls={}}},{key:"start",value:function(e){var t=this,n=function a(){t._polls[e.poll]=e,t._ajax.get(e.url,e.data||null).then(function(n){e.update(n),t._polls[e.poll].timeout=window.setTimeout(a,e.frequency)},function(n){e.error?e.error(n):t._snackbar.apiError(n)})};n()}},{key:"stop",value:function(e){this._polls[e]&&window.clearTimeout(this._polls[e].timeout)}}]),e}();n["default"]=new o},{}],123:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Snackbar=void 0;var o=e("../reducers/snackbar"),s=300,i=5e3,u=n.Snackbar=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._store=e,this._timeout=null}},{key:"alert",value:function(e,t){var n=this;this._timeout?(window.clearTimeout(this._timeout),this._store.dispatch((0,o.hideSnackbar)()),this._timeout=window.setTimeout(function(){n._timeout=null,n.alert(e,t)},s)):(this._store.dispatch((0,o.showSnackbar)(e,t)),this._timeout=window.setTimeout(function(){n._store.dispatch((0,o.hideSnackbar)()),n._timeout=null},i))}},{key:"info",value:function(e){this.alert(e,"info")}},{key:"success",value:function(e){this.alert(e,"success")}},{key:"warning",value:function(e){this.alert(e,"warning")}},{key:"error",value:function(e){this.alert(e,"error")}},{key:"apiError",value:function(e){var t=gettext("Unknown error has occured.");0===e.status&&(t=e.detail),400===e.status&&e.detail&&(t=e.detail),403===e.status&&(t=e.detail,"Permission denied"===t&&(t=gettext("You don't have permission to perform this action."))),404===e.status&&(t=gettext("Action link is invalid.")),this.error(t)}}]),e}();n["default"]=new u},{"../reducers/snackbar":110}],124:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.StoreWrapper=void 0;var o=e("redux"),s=n.StoreWrapper=function(){function e(){a(this,e),this._store=null,this._reducers={},this._initialState={}}return r(e,[{key:"addReducer",value:function(e,t,n){this._reducers[e]=t,this._initialState[e]=n}},{key:"init",value:function(){this._store=(0,o.createStore)((0,o.combineReducers)(this._reducers),this._initialState)}},{key:"getStore",value:function(){return this._store}},{key:"getState",value:function(){return this._store.getState()}},{key:"dispatch",value:function(e){return this._store.dispatch(e)}}]),e}();n["default"]=new s},{redux:"redux"}],125:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Zxcvbn=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._include=e}},{key:"scorePassword",value:function(e,t){return zxcvbn(e,t).score}},{key:"load",value:function(){return"undefined"==typeof zxcvbn?(this._include.include("misago/js/zxcvbn.js"),this._loadingPromise()):this._loadedPromise()}},{key:"_loadingPromise",value:function(){return new Promise(function(e){var t=function n(){"undefined"==typeof zxcvbn?window.setTimeout(function(){n()},200):e()};t()})}},{key:"_loadedPromise",value:function(){return new Promise(function(e){e()})}}]),e}();n["default"]=new o},{}],126:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){if(l["default"].render(i["default"].createElement(c.Provider,{store:v["default"].getStore()},i["default"].createElement(b,{message:e.message,expires:e.expires_on?(0,o["default"])(e.expires_on):null})),document.getElementById("page-mount")),"undefined"==typeof t||t){var n=m["default"].get("SETTINGS").forum_name;document.title=gettext("You are banned")+" | "+n,window.history.pushState({},"",m["default"].get("BANNED_URL"))}};var r=e("moment"),o=a(r),s=e("react"),i=a(s),u=e("react-dom"),l=a(u),c=e("react-redux"),f=e("../components/banned-page"),d=a(f),p=e("../index"),m=a(p),h=e("../services/store"),v=a(h),g=function(e){return e.tick},b=(0,c.connect)(g)(d["default"])},{"../components/banned-page":54,"../index":107,"../services/store":124,moment:"moment",react:"react","react-dom":"react-dom","react-redux":"react-redux"}],127:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){var n=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],a=[],r=[];if(e.forEach(function(e){r.push(e),r.length===t&&(a.push(r),r=[])}),n!==!1&&r.length>0&&r.length<t)for(var o=r.length;t>o;o++)r.push(n);return r.length&&a.push(r),a}},{}],128:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){return e>1e9?Math.round(100*e/1e9)/100+" GB":e>1e6?Math.round(100*e/1e6)/100+" MB":e>1e3?Math.round(100*e/1e3)/100+" KB":Math.round(100*e)/100+" B"}},{}],129:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){var n=arguments.length<=2||void 0===arguments[2]?!0:arguments[2],a=document.getElementById(t);a&&(n?i["default"].render(o["default"].createElement(u.Provider,{store:c["default"].getStore()},o["default"].createElement(e,null)),a):i["default"].render(o["default"].createElement(e,null),a))};var r=e("react"),o=a(r),s=e("react-dom"),i=a(s),u=e("react-redux"),l=e("../services/store"),c=a(l)},{"../services/store":124,react:"react","react-dom":"react-dom","react-redux":"react-redux"}],130:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function e(t){a(this,e),this.isOrdered=!1,this._items=t||[]}return r(e,[{key:"add",value:function(e,t,n){this._items.push({key:e,item:t,after:n?n.after||null:null,before:n?n.before||null:null})}},{key:"get",value:function(e,t){for(var n=0;n<this._items.length;n++)if(this._items[n].key===e)return this._items[n].item;return t}},{key:"has",value:function(e){return void 0!==this.get(e)}},{key:"values",value:function t(){for(var t=[],e=0;e<this._items.length;e++)t.push(this._items[e].item);return t}},{key:"order",value:function(e){return this.isOrdered||(this._items=this._order(this._items),this.isOrdered=!0),e||"undefined"==typeof e?this.values():this._items}},{key:"orderedValues",value:function(){return this.order(!0)}},{key:"_order",value:function(e){function t(e){var t=-1;-1===r.indexOf(e.key)&&(e.after?(t=r.indexOf(e.after),-1!==t&&(t+=1)):e.before&&(t=r.indexOf(e.before)),-1!==t&&(a.splice(t,0,e),r.splice(t,0,e.key)))}var n=[];e.forEach(function(e){n.push(e.key)});var a=[],r=[];e.forEach(function(e){e.after||e.before||(a.push(e),r.push(e.key))}),e.forEach(function(e){"_end"===e.before&&(a.push(e),r.push(e.key))});for(var o=200;o>0&&n.length!==r.length;)o-=1,e.forEach(t);return a}}]),e}();n["default"]=o},{}],131:[function(e,t,n){"use strict";function a(e,t){return Math.floor(Math.random()*(t-e+1))+e}function r(e,t){for(var n=new Array(a(e,t)),r=0;r<n.length;r++)n[r]=r;return n}Object.defineProperty(n,"__esModule",{value:!0}),n["int"]=a,n.range=r},{}],132:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(){window.scrollTo(0,0)}},{}],133:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){var t={component:e.component,childRoutes:[{path:e.root,onEnter:function(t,n){n(null,e.paths[0].path)}}].concat(e.paths.map(function(e){return e}))};i["default"].render(o["default"].createElement(u.Provider,{store:p["default"].getStore()},o["default"].createElement(l.Router,{routes:t,history:h})),m)};var r=e("react"),o=a(r),s=e("react-dom"),i=a(s),u=e("react-redux"),l=e("react-router"),c=e("history/lib/createBrowserHistory"),f=a(c),d=e("../services/store"),p=a(d),m=document.getElementById("page-mount"),h=new f["default"]},{"../services/store":124,"history/lib/createBrowserHistory":42,react:"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],134:[function(e,t,n){"use strict";function a(){return function(e){return 0===$.trim(e).length?gettext("This field is required."):void 0}}function r(e){return function(t){return f.test(t)?void 0:e||gettext("Enter a valid email address.")}}function o(e,t){return function(n){var a="",r=$.trim(n).length;return e>r?(a=t?t(e,r):ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).","Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).",e),interpolate(a,{limit_value:e,show_value:r},!0)):void 0}}function s(e,t){return function(n){var a="",r=$.trim(n).length;return r>e?(a=t?t(e,r):ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).","Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).",e),interpolate(a,{limit_value:e,show_value:r},!0)):void 0}}function i(e){var t=function(e){return ngettext("Username must be at least %(limit_value)s character long.","Username must be at least %(limit_value)s characters long.",e)};return this.minLength(e.username_length_min,t)}function u(e){var t=function(e){return ngettext("Username cannot be longer than %(limit_value)s character.","Username cannot be longer than %(limit_value)s characters.",e)};return this.maxLength(e.username_length_max,t)}function l(){return function(e){return d.test($.trim(e))?void 0:gettext("Username can only contain latin alphabet letters and digits.")}}function c(e){var t=function(e){return ngettext("Valid password must be at least %(limit_value)s character long.","Valid password must be at least %(limit_value)s characters long.",e)};return this.minLength(e.password_length_min,t)}Object.defineProperty(n,"__esModule",{value:!0}),n.required=a,n.email=r,n.minLength=o,n.maxLength=s,n.usernameMinLength=i,n.usernameMaxLength=u,n.usernameContent=l,n.passwordMinLength=c;var f=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,d=new RegExp("^[0-9a-z]+$","i")},{}]},{},[2,3,4,5,16,17,18,19,20,21,22,30,31,32,33,6,7,8,9,10,11,12,13,14,15,23,24,25,26,27,28,29]);
-//# sourceMappingURL=misago.js.map
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = setTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    clearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        setTimeout(drainQueue, 0);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],2:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Misago = undefined;
+
+var _orderedList = require('../../../../documents/misago/frontend/src/utils/ordered-list');
+
+var _orderedList2 = _interopRequireDefault(_orderedList);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Misago = exports.Misago = function () {
+  function Misago() {
+    _classCallCheck(this, Misago);
+
+    this._initializers = [];
+    this._context = {};
+  }
+
+  _createClass(Misago, [{
+    key: 'addInitializer',
+    value: function addInitializer(initializer) {
+      this._initializers.push({
+        key: initializer.name,
+
+        item: initializer.initializer,
+
+        after: initializer.after,
+        before: initializer.before
+      });
+    }
+  }, {
+    key: 'init',
+    value: function init(context) {
+      var _this = this;
+
+      this._context = context;
+
+      var initOrder = new _orderedList2.default(this._initializers).orderedValues();
+      initOrder.forEach(function (initializer) {
+        initializer(_this);
+      });
+    }
+
+    // context accessors
+
+  }, {
+    key: 'has',
+    value: function has(key) {
+      return !!this._context[key];
+    }
+  }, {
+    key: 'get',
+    value: function get(key, fallback) {
+      if (this.has(key)) {
+        return this._context[key];
+      } else {
+        return fallback || undefined;
+      }
+    }
+  }, {
+    key: 'pop',
+    value: function pop(key) {
+      if (this.has(key)) {
+        var value = this._context[key];
+        this._context[key] = null;
+        return value;
+      } else {
+        return undefined;
+      }
+    }
+  }]);
+
+  return Misago;
+}();
+
+// create  singleton
+
+var misago = new Misago();
+
+// expose it globally
+global.misago = misago;
+
+// and export it for tests and stuff
+exports.default = misago;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"../../../../documents/misago/frontend/src/utils/ordered-list":131}],3:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));
+}
+
+_index2.default.addInitializer({
+  name: 'ajax',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/ajax":115}],4:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _auth = require('../../../../../documents/misago/frontend/src/services/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _modal = require('../../../../../documents/misago/frontend/src/services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');
+
+var _localStorage2 = _interopRequireDefault(_localStorage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'auth',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/auth":116,"../../../../../documents/misago/frontend/src/services/local-storage":119,"../../../../../documents/misago/frontend/src/services/modal":121,"../../../../../documents/misago/frontend/src/services/store":125}],5:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _captcha = require('../../../../../documents/misago/frontend/src/services/captcha');
+
+var _captcha2 = _interopRequireDefault(_captcha);
+
+var _include = require('../../../../../documents/misago/frontend/src/services/include');
+
+var _include2 = _interopRequireDefault(_include);
+
+var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'captcha',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/ajax":115,"../../../../../documents/misago/frontend/src/services/captcha":117,"../../../../../documents/misago/frontend/src/services/include":118,"../../../../../documents/misago/frontend/src/services/snackbar":124}],6:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _authMessage = require('../../../../../../documents/misago/frontend/src/components/auth-message');
+
+var _authMessage2 = _interopRequireDefault(_authMessage);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');
+}
+
+_index2.default.addInitializer({
+  name: 'component:auth-message',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/auth-message":52,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/mount-component":130,"react-redux":"react-redux"}],7:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _bannedPage = require('../../../../../../documents/misago/frontend/src/utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('BAN_MESSAGE')) {
+    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:baned-page',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/banned-page":127}],8:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/options/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('USER_OPTIONS')) {
+    (0, _routedComponent2.default)({
+      root: _index2.default.get('USERCP_URL'),
+      component: _root2.default,
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:options',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/options/root":73,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/routed-component":134}],9:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/profile/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('PROFILE') && context.has('PROFILE_PAGES')) {
+    (0, _routedComponent2.default)({
+      root: _index2.default.get('PROFILE').absolute_url,
+      component: (0, _reactRedux.connect)(_root.select)(_root2.default),
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:profile',
+  initializer: initializer,
+  after: 'reducer:profile-dehydrate'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/profile/root":82,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/routed-component":134,"react-redux":"react-redux"}],10:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _requestActivationLink = require('../../../../../../documents/misago/frontend/src/components/request-activation-link');
+
+var _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('request-activation-link-mount')) {
+    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:request-activation-link',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/request-activation-link":85,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/mount-component":130}],11:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _requestPasswordReset = require('../../../../../../documents/misago/frontend/src/components/request-password-reset');
+
+var _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('request-password-reset-mount')) {
+    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:request-password-reset',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/request-password-reset":86,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/mount-component":130}],12:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _resetPasswordForm = require('../../../../../../documents/misago/frontend/src/components/reset-password-form');
+
+var _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('reset-password-form-mount')) {
+    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:reset-password-form',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/reset-password-form":87,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/mount-component":130}],13:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _snackbar = require('../../../../../../documents/misago/frontend/src/components/snackbar');
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');
+}
+
+_index2.default.addInitializer({
+  name: 'component:snackbar',
+  initializer: initializer,
+  after: 'snackbar'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/snackbar":90,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/mount-component":130,"react-redux":"react-redux"}],14:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/user-menu/root');
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');
+}
+
+_index2.default.addInitializer({
+  name: 'component:user-menu',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/user-menu/root":92,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/mount-component":130,"react-redux":"react-redux"}],15:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/users/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('USERS_LISTS')) {
+    (0, _routedComponent2.default)({
+      root: _index2.default.get('USERS_LIST_URL'),
+      component: _root2.default,
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:users',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/users/root":106,"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/utils/routed-component":134}],16:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _include = require('../../../../../documents/misago/frontend/src/services/include');
+
+var _include2 = _interopRequireDefault(_include);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _include2.default.init(context.get('STATIC_URL'));
+}
+
+_index2.default.addInitializer({
+  name: 'include',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/include":118}],17:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');
+
+var _localStorage2 = _interopRequireDefault(_localStorage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _localStorage2.default.init('misago_');
+}
+
+_index2.default.addInitializer({
+  name: 'local-storage',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/local-storage":119}],18:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _mobileNavbarDropdown = require('../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown');
+
+var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  var element = document.getElementById('mobile-navbar-dropdown-mount');
+  if (element) {
+    _mobileNavbarDropdown2.default.init(element);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'dropdown',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown":120}],19:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _modal = require('../../../../../documents/misago/frontend/src/services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  var element = document.getElementById('modal-mount');
+  if (element) {
+    _modal2.default.init(element);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'modal',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/modal":121}],20:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _moment2.default.locale($('html').attr('lang'));
+}
+
+_index2.default.addInitializer({
+  name: 'moment',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"moment":"moment"}],21:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _pageTitle = require('../../../../../documents/misago/frontend/src/services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _pageTitle2.default.init(context.get('SETTINGS').forum_name);
+}
+
+_index2.default.addInitializer({
+  name: 'page-title',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/page-title":122}],22:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _polls = require('../../../../../documents/misago/frontend/src/services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _polls2.default.init(_ajax2.default, _snackbar2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'polls',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/ajax":115,"../../../../../documents/misago/frontend/src/services/polls":123,"../../../../../documents/misago/frontend/src/services/snackbar":124}],23:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _auth = require('../../../../../../documents/misago/frontend/src/reducers/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _store2.default.addReducer('auth', _auth2.default, Object.assign({
+    'isAuthenticated': context.get('isAuthenticated'),
+    'isAnonymous': !context.get('isAuthenticated'),
+
+    'user': context.get('user')
+  }, _auth.initialState));
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:auth',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/auth":109,"../../../../../../documents/misago/frontend/src/services/store":125}],24:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _profile = require('../../../../../../documents/misago/frontend/src/reducers/profile');
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (_index2.default.has('PROFILE')) {
+    _store2.default.dispatch((0, _profile.dehydrate)(_index2.default.get('PROFILE')));
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:profile-dehydrate',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/profile":110,"../../../../../../documents/misago/frontend/src/services/store":125}],25:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _profile = require('../../../../../../documents/misago/frontend/src/reducers/profile');
+
+var _profile2 = _interopRequireDefault(_profile);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('profile', _profile2.default, {});
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:profile',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/profile":110,"../../../../../../documents/misago/frontend/src/services/store":125}],26:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _snackbar = require('../../../../../../documents/misago/frontend/src/reducers/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:snackbar',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/snackbar":111,"../../../../../../documents/misago/frontend/src/services/store":125}],27:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _tick = require('../../../../../../documents/misago/frontend/src/reducers/tick');
+
+var _tick2 = _interopRequireDefault(_tick);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:tick',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/tick":112,"../../../../../../documents/misago/frontend/src/services/store":125}],28:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _usernameHistory = require('../../../../../../documents/misago/frontend/src/reducers/username-history');
+
+var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('username-history', _usernameHistory2.default, []);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:username-history',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/username-history":113,"../../../../../../documents/misago/frontend/src/services/store":125}],29:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../../../../../documents/misago/frontend/src/reducers/users');
+
+var _users2 = _interopRequireDefault(_users);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('users', _users2.default, []);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:users',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":108,"../../../../../../documents/misago/frontend/src/reducers/users":114,"../../../../../../documents/misago/frontend/src/services/store":125}],30:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _snackbar2.default.init(_store2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'snackbar',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/snackbar":124,"../../../../../documents/misago/frontend/src/services/store":125}],31:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.init();
+}
+
+_index2.default.addInitializer({
+  name: 'store',
+  initializer: initializer,
+  before: '_end'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/store":125}],32:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var TICK_PERIOD = 50 * 1000; //do the tick every 50s
+
+function initializer() {
+  window.setInterval(function () {
+    _store2.default.dispatch((0, _tick.doTick)());
+  }, TICK_PERIOD);
+}
+
+_index2.default.addInitializer({
+  name: 'tick-start',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/reducers/tick":112,"../../../../../documents/misago/frontend/src/services/store":125}],33:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _include = require('../../../../../documents/misago/frontend/src/services/include');
+
+var _include2 = _interopRequireDefault(_include);
+
+var _zxcvbn = require('../../../../../documents/misago/frontend/src/services/zxcvbn');
+
+var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _zxcvbn2.default.init(_include2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'zxcvbn',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":108,"../../../../../documents/misago/frontend/src/services/include":118,"../../../../../documents/misago/frontend/src/services/zxcvbn":126}],34:[function(require,module,exports){
+var pSlice = Array.prototype.slice;
+var objectKeys = require('./lib/keys.js');
+var isArguments = require('./lib/is_arguments.js');
+
+var deepEqual = module.exports = function (actual, expected, opts) {
+  if (!opts) opts = {};
+  // 7.1. All identical values are equivalent, as determined by ===.
+  if (actual === expected) {
+    return true;
+
+  } else if (actual instanceof Date && expected instanceof Date) {
+    return actual.getTime() === expected.getTime();
+
+  // 7.3. Other pairs that do not both pass typeof value == 'object',
+  // equivalence is determined by ==.
+  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
+    return opts.strict ? actual === expected : actual == expected;
+
+  // 7.4. For all other Object pairs, including Array objects, equivalence is
+  // determined by having the same number of owned properties (as verified
+  // with Object.prototype.hasOwnProperty.call), the same set of keys
+  // (although not necessarily the same order), equivalent values for every
+  // corresponding key, and an identical 'prototype' property. Note: this
+  // accounts for both named and indexed properties on Arrays.
+  } else {
+    return objEquiv(actual, expected, opts);
+  }
+}
+
+function isUndefinedOrNull(value) {
+  return value === null || value === undefined;
+}
+
+function isBuffer (x) {
+  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
+  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
+    return false;
+  }
+  if (x.length > 0 && typeof x[0] !== 'number') return false;
+  return true;
+}
+
+function objEquiv(a, b, opts) {
+  var i, key;
+  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+    return false;
+  // an identical 'prototype' property.
+  if (a.prototype !== b.prototype) return false;
+  //~~~I've managed to break Object.keys through screwy arguments passing.
+  //   Converting to array solves the problem.
+  if (isArguments(a)) {
+    if (!isArguments(b)) {
+      return false;
+    }
+    a = pSlice.call(a);
+    b = pSlice.call(b);
+    return deepEqual(a, b, opts);
+  }
+  if (isBuffer(a)) {
+    if (!isBuffer(b)) {
+      return false;
+    }
+    if (a.length !== b.length) return false;
+    for (i = 0; i < a.length; i++) {
+      if (a[i] !== b[i]) return false;
+    }
+    return true;
+  }
+  try {
+    var ka = objectKeys(a),
+        kb = objectKeys(b);
+  } catch (e) {//happens when one is a string literal and the other isn't
+    return false;
+  }
+  // having the same number of owned properties (keys incorporates
+  // hasOwnProperty)
+  if (ka.length != kb.length)
+    return false;
+  //the same set of keys (although not necessarily the same order),
+  ka.sort();
+  kb.sort();
+  //~~~cheap key test
+  for (i = ka.length - 1; i >= 0; i--) {
+    if (ka[i] != kb[i])
+      return false;
+  }
+  //equivalent values for every corresponding key, and
+  //~~~possibly expensive deep test
+  for (i = ka.length - 1; i >= 0; i--) {
+    key = ka[i];
+    if (!deepEqual(a[key], b[key], opts)) return false;
+  }
+  return typeof a === typeof b;
+}
+
+},{"./lib/is_arguments.js":35,"./lib/keys.js":36}],35:[function(require,module,exports){
+var supportsArgumentsClass = (function(){
+  return Object.prototype.toString.call(arguments)
+})() == '[object Arguments]';
+
+exports = module.exports = supportsArgumentsClass ? supported : unsupported;
+
+exports.supported = supported;
+function supported(object) {
+  return Object.prototype.toString.call(object) == '[object Arguments]';
+};
+
+exports.unsupported = unsupported;
+function unsupported(object){
+  return object &&
+    typeof object == 'object' &&
+    typeof object.length == 'number' &&
+    Object.prototype.hasOwnProperty.call(object, 'callee') &&
+    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
+    false;
+};
+
+},{}],36:[function(require,module,exports){
+exports = module.exports = typeof Object.keys === 'function'
+  ? Object.keys : shim;
+
+exports.shim = shim;
+function shim (obj) {
+  var keys = [];
+  for (var key in obj) keys.push(key);
+  return keys;
+}
+
+},{}],37:[function(require,module,exports){
+/**
+ * Indicates that navigation was caused by a call to history.push.
+ */
+'use strict';
+
+exports.__esModule = true;
+var PUSH = 'PUSH';
+
+exports.PUSH = PUSH;
+/**
+ * Indicates that navigation was caused by a call to history.replace.
+ */
+var REPLACE = 'REPLACE';
+
+exports.REPLACE = REPLACE;
+/**
+ * Indicates that navigation was caused by some other action such
+ * as using a browser's back/forward buttons and/or manually manipulating
+ * the URL in a browser's location bar. This is the default.
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate
+ * for more information.
+ */
+var POP = 'POP';
+
+exports.POP = POP;
+exports['default'] = {
+  PUSH: PUSH,
+  REPLACE: REPLACE,
+  POP: POP
+};
+},{}],38:[function(require,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.loopAsync = loopAsync;
+
+function loopAsync(turns, work, callback) {
+  var currentTurn = 0;
+  var isDone = false;
+
+  function done() {
+    isDone = true;
+    callback.apply(this, arguments);
+  }
+
+  function next() {
+    if (isDone) return;
+
+    if (currentTurn < turns) {
+      work.call(this, currentTurn++, next, done);
+    } else {
+      done.apply(this, arguments);
+    }
+  }
+
+  next();
+}
+},{}],39:[function(require,module,exports){
+(function (process){
+/*eslint-disable no-empty */
+'use strict';
+
+exports.__esModule = true;
+exports.saveState = saveState;
+exports.readState = readState;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+var KeyPrefix = '@@History/';
+var QuotaExceededError = 'QuotaExceededError';
+var SecurityError = 'SecurityError';
+
+function createKey(key) {
+  return KeyPrefix + key;
+}
+
+function saveState(key, state) {
+  try {
+    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));
+  } catch (error) {
+    if (error.name === SecurityError) {
+      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
+      // attempt to access window.sessionStorage.
+      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;
+
+      return;
+    }
+
+    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {
+      // Safari "private mode" throws QuotaExceededError.
+      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;
+
+      return;
+    }
+
+    throw error;
+  }
+}
+
+function readState(key) {
+  var json = undefined;
+  try {
+    json = window.sessionStorage.getItem(createKey(key));
+  } catch (error) {
+    if (error.name === SecurityError) {
+      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
+      // attempt to access window.sessionStorage.
+      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;
+
+      return null;
+    }
+  }
+
+  if (json) {
+    try {
+      return JSON.parse(json);
+    } catch (error) {
+      // Ignore invalid JSON.
+    }
+  }
+
+  return null;
+}
+}).call(this,require('_process'))
+
+},{"_process":1,"warning":51}],40:[function(require,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.addEventListener = addEventListener;
+exports.removeEventListener = removeEventListener;
+exports.getHashPath = getHashPath;
+exports.replaceHashPath = replaceHashPath;
+exports.getWindowPath = getWindowPath;
+exports.go = go;
+exports.getUserConfirmation = getUserConfirmation;
+exports.supportsHistory = supportsHistory;
+exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;
+
+function addEventListener(node, event, listener) {
+  if (node.addEventListener) {
+    node.addEventListener(event, listener, false);
+  } else {
+    node.attachEvent('on' + event, listener);
+  }
+}
+
+function removeEventListener(node, event, listener) {
+  if (node.removeEventListener) {
+    node.removeEventListener(event, listener, false);
+  } else {
+    node.detachEvent('on' + event, listener);
+  }
+}
+
+function getHashPath() {
+  // We can't use window.location.hash here because it's not
+  // consistent across browsers - Firefox will pre-decode it!
+  return window.location.href.split('#')[1] || '';
+}
+
+function replaceHashPath(path) {
+  window.location.replace(window.location.pathname + window.location.search + '#' + path);
+}
+
+function getWindowPath() {
+  return window.location.pathname + window.location.search + window.location.hash;
+}
+
+function go(n) {
+  if (n) window.history.go(n);
+}
+
+function getUserConfirmation(message, callback) {
+  callback(window.confirm(message));
+}
+
+/**
+ * Returns true if the HTML5 history API is supported. Taken from Modernizr.
+ *
+ * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
+ * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
+ * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586
+ */
+
+function supportsHistory() {
+  var ua = navigator.userAgent;
+  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {
+    return false;
+  }
+  // FIXME: Work around our browser history not working correctly on Chrome
+  // iOS: https://github.com/rackt/react-router/issues/2565
+  if (ua.indexOf('CriOS') !== -1) {
+    return false;
+  }
+  return window.history && 'pushState' in window.history;
+}
+
+/**
+ * Returns false if using go(n) with hash history causes a full page reload.
+ */
+
+function supportsGoWithoutReloadUsingHash() {
+  var ua = navigator.userAgent;
+  return ua.indexOf('Firefox') === -1;
+}
+},{}],41:[function(require,module,exports){
+'use strict';
+
+exports.__esModule = true;
+var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
+exports.canUseDOM = canUseDOM;
+},{}],42:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _invariant = require('invariant');
+
+var _invariant2 = _interopRequireDefault(_invariant);
+
+var _Actions = require('./Actions');
+
+var _ExecutionEnvironment = require('./ExecutionEnvironment');
+
+var _DOMUtils = require('./DOMUtils');
+
+var _DOMStateStorage = require('./DOMStateStorage');
+
+var _createDOMHistory = require('./createDOMHistory');
+
+var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);
+
+var _parsePath = require('./parsePath');
+
+var _parsePath2 = _interopRequireDefault(_parsePath);
+
+/**
+ * Creates and returns a history object that uses HTML5's history API
+ * (pushState, replaceState, and the popstate event) to manage history.
+ * This is the recommended method of managing history in browsers because
+ * it provides the cleanest URLs.
+ *
+ * Note: In browsers that do not support the HTML5 history API full
+ * page reloads will be used to preserve URLs.
+ */
+function createBrowserHistory() {
+  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;
+
+  var forceRefresh = options.forceRefresh;
+
+  var isSupported = _DOMUtils.supportsHistory();
+  var useRefresh = !isSupported || forceRefresh;
+
+  function getCurrentLocation(historyState) {
+    historyState = historyState || window.history.state || {};
+
+    var path = _DOMUtils.getWindowPath();
+    var _historyState = historyState;
+    var key = _historyState.key;
+
+    var state = undefined;
+    if (key) {
+      state = _DOMStateStorage.readState(key);
+    } else {
+      state = null;
+      key = history.createKey();
+
+      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);
+    }
+
+    var location = _parsePath2['default'](path);
+
+    return history.createLocation(_extends({}, location, { state: state }), undefined, key);
+  }
+
+  function startPopStateListener(_ref) {
+    var transitionTo = _ref.transitionTo;
+
+    function popStateListener(event) {
+      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.
+
+      transitionTo(getCurrentLocation(event.state));
+    }
+
+    _DOMUtils.addEventListener(window, 'popstate', popStateListener);
+
+    return function () {
+      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);
+    };
+  }
+
+  function finishTransition(location) {
+    var basename = location.basename;
+    var pathname = location.pathname;
+    var search = location.search;
+    var hash = location.hash;
+    var state = location.state;
+    var action = location.action;
+    var key = location.key;
+
+    if (action === _Actions.POP) return; // Nothing to do.
+
+    _DOMStateStorage.saveState(key, state);
+
+    var path = (basename || '') + pathname + search + hash;
+    var historyState = {
+      key: key
+    };
+
+    if (action === _Actions.PUSH) {
+      if (useRefresh) {
+        window.location.href = path;
+        return false; // Prevent location update.
+      } else {
+          window.history.pushState(historyState, null, path);
+        }
+    } else {
+      // REPLACE
+      if (useRefresh) {
+        window.location.replace(path);
+        return false; // Prevent location update.
+      } else {
+          window.history.replaceState(historyState, null, path);
+        }
+    }
+  }
+
+  var history = _createDOMHistory2['default'](_extends({}, options, {
+    getCurrentLocation: getCurrentLocation,
+    finishTransition: finishTransition,
+    saveState: _DOMStateStorage.saveState
+  }));
+
+  var listenerCount = 0,
+      stopPopStateListener = undefined;
+
+  function listenBefore(listener) {
+    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
+
+    var unlisten = history.listenBefore(listener);
+
+    return function () {
+      unlisten();
+
+      if (--listenerCount === 0) stopPopStateListener();
+    };
+  }
+
+  function listen(listener) {
+    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
+
+    var unlisten = history.listen(listener);
+
+    return function () {
+      unlisten();
+
+      if (--listenerCount === 0) stopPopStateListener();
+    };
+  }
+
+  // deprecated
+  function registerTransitionHook(hook) {
+    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
+
+    history.registerTransitionHook(hook);
+  }
+
+  // deprecated
+  function unregisterTransitionHook(hook) {
+    history.unregisterTransitionHook(hook);
+
+    if (--listenerCount === 0) stopPopStateListener();
+  }
+
+  return _extends({}, history, {
+    listenBefore: listenBefore,
+    listen: listen,
+    registerTransitionHook: registerTransitionHook,
+    unregisterTransitionHook: unregisterTransitionHook
+  });
+}
+
+exports['default'] = createBrowserHistory;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"./Actions":37,"./DOMStateStorage":39,"./DOMUtils":40,"./ExecutionEnvironment":41,"./createDOMHistory":43,"./parsePath":48,"_process":1,"invariant":50}],43:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _invariant = require('invariant');
+
+var _invariant2 = _interopRequireDefault(_invariant);
+
+var _ExecutionEnvironment = require('./ExecutionEnvironment');
+
+var _DOMUtils = require('./DOMUtils');
+
+var _createHistory = require('./createHistory');
+
+var _createHistory2 = _interopRequireDefault(_createHistory);
+
+function createDOMHistory(options) {
+  var history = _createHistory2['default'](_extends({
+    getUserConfirmation: _DOMUtils.getUserConfirmation
+  }, options, {
+    go: _DOMUtils.go
+  }));
+
+  function listen(listener) {
+    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;
+
+    return history.listen(listener);
+  }
+
+  return _extends({}, history, {
+    listen: listen
+  });
+}
+
+exports['default'] = createDOMHistory;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"./DOMUtils":40,"./ExecutionEnvironment":41,"./createHistory":44,"_process":1,"invariant":50}],44:[function(require,module,exports){
+//import warning from 'warning'
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _deepEqual = require('deep-equal');
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _AsyncUtils = require('./AsyncUtils');
+
+var _Actions = require('./Actions');
+
+var _createLocation2 = require('./createLocation');
+
+var _createLocation3 = _interopRequireDefault(_createLocation2);
+
+var _runTransitionHook = require('./runTransitionHook');
+
+var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);
+
+var _parsePath = require('./parsePath');
+
+var _parsePath2 = _interopRequireDefault(_parsePath);
+
+var _deprecate = require('./deprecate');
+
+var _deprecate2 = _interopRequireDefault(_deprecate);
+
+function createRandomKey(length) {
+  return Math.random().toString(36).substr(2, length);
+}
+
+function locationsAreEqual(a, b) {
+  return a.pathname === b.pathname && a.search === b.search &&
+  //a.action === b.action && // Different action !== location change.
+  a.key === b.key && _deepEqual2['default'](a.state, b.state);
+}
+
+var DefaultKeyLength = 6;
+
+function createHistory() {
+  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+  var getCurrentLocation = options.getCurrentLocation;
+  var finishTransition = options.finishTransition;
+  var saveState = options.saveState;
+  var go = options.go;
+  var keyLength = options.keyLength;
+  var getUserConfirmation = options.getUserConfirmation;
+
+  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;
+
+  var transitionHooks = [];
+
+  function listenBefore(hook) {
+    transitionHooks.push(hook);
+
+    return function () {
+      transitionHooks = transitionHooks.filter(function (item) {
+        return item !== hook;
+      });
+    };
+  }
+
+  var allKeys = [];
+  var changeListeners = [];
+  var location = undefined;
+
+  function getCurrent() {
+    if (pendingLocation && pendingLocation.action === _Actions.POP) {
+      return allKeys.indexOf(pendingLocation.key);
+    } else if (location) {
+      return allKeys.indexOf(location.key);
+    } else {
+      return -1;
+    }
+  }
+
+  function updateLocation(newLocation) {
+    var current = getCurrent();
+
+    location = newLocation;
+
+    if (location.action === _Actions.PUSH) {
+      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);
+    } else if (location.action === _Actions.REPLACE) {
+      allKeys[current] = location.key;
+    }
+
+    changeListeners.forEach(function (listener) {
+      listener(location);
+    });
+  }
+
+  function listen(listener) {
+    changeListeners.push(listener);
+
+    if (location) {
+      listener(location);
+    } else {
+      var _location = getCurrentLocation();
+      allKeys = [_location.key];
+      updateLocation(_location);
+    }
+
+    return function () {
+      changeListeners = changeListeners.filter(function (item) {
+        return item !== listener;
+      });
+    };
+  }
+
+  function confirmTransitionTo(location, callback) {
+    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {
+      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {
+        if (result != null) {
+          done(result);
+        } else {
+          next();
+        }
+      });
+    }, function (message) {
+      if (getUserConfirmation && typeof message === 'string') {
+        getUserConfirmation(message, function (ok) {
+          callback(ok !== false);
+        });
+      } else {
+        callback(message !== false);
+      }
+    });
+  }
+
+  var pendingLocation = undefined;
+
+  function transitionTo(nextLocation) {
+    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.
+
+    pendingLocation = nextLocation;
+
+    confirmTransitionTo(nextLocation, function (ok) {
+      if (pendingLocation !== nextLocation) return; // Transition was interrupted.
+
+      if (ok) {
+        // treat PUSH to current path like REPLACE to be consistent with browsers
+        if (nextLocation.action === _Actions.PUSH) {
+          var prevPath = createPath(location);
+          var nextPath = createPath(nextLocation);
+
+          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;
+        }
+
+        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);
+      } else if (location && nextLocation.action === _Actions.POP) {
+        var prevIndex = allKeys.indexOf(location.key);
+        var nextIndex = allKeys.indexOf(nextLocation.key);
+
+        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.
+      }
+    });
+  }
+
+  function push(location) {
+    transitionTo(createLocation(location, _Actions.PUSH, createKey()));
+  }
+
+  function replace(location) {
+    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));
+  }
+
+  function goBack() {
+    go(-1);
+  }
+
+  function goForward() {
+    go(1);
+  }
+
+  function createKey() {
+    return createRandomKey(keyLength);
+  }
+
+  function createPath(location) {
+    if (location == null || typeof location === 'string') return location;
+
+    var pathname = location.pathname;
+    var search = location.search;
+    var hash = location.hash;
+
+    var result = pathname;
+
+    if (search) result += search;
+
+    if (hash) result += hash;
+
+    return result;
+  }
+
+  function createHref(location) {
+    return createPath(location);
+  }
+
+  function createLocation(location, action) {
+    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];
+
+    if (typeof action === 'object') {
+      //warning(
+      //  false,
+      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +
+      //  'location descriptor instead'
+      //)
+
+      if (typeof location === 'string') location = _parsePath2['default'](location);
+
+      location = _extends({}, location, { state: action });
+
+      action = key;
+      key = arguments[3] || createKey();
+    }
+
+    return _createLocation3['default'](location, action, key);
+  }
+
+  // deprecated
+  function setState(state) {
+    if (location) {
+      updateLocationState(location, state);
+      updateLocation(location);
+    } else {
+      updateLocationState(getCurrentLocation(), state);
+    }
+  }
+
+  function updateLocationState(location, state) {
+    location.state = _extends({}, location.state, state);
+    saveState(location.key, location.state);
+  }
+
+  // deprecated
+  function registerTransitionHook(hook) {
+    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);
+  }
+
+  // deprecated
+  function unregisterTransitionHook(hook) {
+    transitionHooks = transitionHooks.filter(function (item) {
+      return item !== hook;
+    });
+  }
+
+  // deprecated
+  function pushState(state, path) {
+    if (typeof path === 'string') path = _parsePath2['default'](path);
+
+    push(_extends({ state: state }, path));
+  }
+
+  // deprecated
+  function replaceState(state, path) {
+    if (typeof path === 'string') path = _parsePath2['default'](path);
+
+    replace(_extends({ state: state }, path));
+  }
+
+  return {
+    listenBefore: listenBefore,
+    listen: listen,
+    transitionTo: transitionTo,
+    push: push,
+    replace: replace,
+    go: go,
+    goBack: goBack,
+    goForward: goForward,
+    createKey: createKey,
+    createPath: createPath,
+    createHref: createHref,
+    createLocation: createLocation,
+
+    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),
+    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),
+    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),
+    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),
+    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')
+  };
+}
+
+exports['default'] = createHistory;
+module.exports = exports['default'];
+},{"./Actions":37,"./AsyncUtils":38,"./createLocation":45,"./deprecate":46,"./parsePath":48,"./runTransitionHook":49,"deep-equal":34}],45:[function(require,module,exports){
+//import warning from 'warning'
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _Actions = require('./Actions');
+
+var _parsePath = require('./parsePath');
+
+var _parsePath2 = _interopRequireDefault(_parsePath);
+
+function createLocation() {
+  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];
+  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];
+
+  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];
+
+  if (typeof location === 'string') location = _parsePath2['default'](location);
+
+  if (typeof action === 'object') {
+    //warning(
+    //  false,
+    //  'The state (2nd) argument to createLocation is deprecated; use a ' +
+    //  'location descriptor instead'
+    //)
+
+    location = _extends({}, location, { state: action });
+
+    action = key || _Actions.POP;
+    key = _fourthArg;
+  }
+
+  var pathname = location.pathname || '/';
+  var search = location.search || '';
+  var hash = location.hash || '';
+  var state = location.state || null;
+
+  return {
+    pathname: pathname,
+    search: search,
+    hash: hash,
+    state: state,
+    action: action,
+    key: key
+  };
+}
+
+exports['default'] = createLocation;
+module.exports = exports['default'];
+},{"./Actions":37,"./parsePath":48}],46:[function(require,module,exports){
+//import warning from 'warning'
+
+"use strict";
+
+exports.__esModule = true;
+function deprecate(fn) {
+  return fn;
+  //return function () {
+  //  warning(false, '[history] ' + message)
+  //  return fn.apply(this, arguments)
+  //}
+}
+
+exports["default"] = deprecate;
+module.exports = exports["default"];
+},{}],47:[function(require,module,exports){
+"use strict";
+
+exports.__esModule = true;
+function extractPath(string) {
+  var match = string.match(/^https?:\/\/[^\/]*/);
+
+  if (match == null) return string;
+
+  return string.substring(match[0].length);
+}
+
+exports["default"] = extractPath;
+module.exports = exports["default"];
+},{}],48:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+var _extractPath = require('./extractPath');
+
+var _extractPath2 = _interopRequireDefault(_extractPath);
+
+function parsePath(path) {
+  var pathname = _extractPath2['default'](path);
+  var search = '';
+  var hash = '';
+
+  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like "%s"', path) : undefined;
+
+  var hashIndex = pathname.indexOf('#');
+  if (hashIndex !== -1) {
+    hash = pathname.substring(hashIndex);
+    pathname = pathname.substring(0, hashIndex);
+  }
+
+  var searchIndex = pathname.indexOf('?');
+  if (searchIndex !== -1) {
+    search = pathname.substring(searchIndex);
+    pathname = pathname.substring(0, searchIndex);
+  }
+
+  if (pathname === '') pathname = '/';
+
+  return {
+    pathname: pathname,
+    search: search,
+    hash: hash
+  };
+}
+
+exports['default'] = parsePath;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"./extractPath":47,"_process":1,"warning":51}],49:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+function runTransitionHook(hook, location, callback) {
+  var result = hook(location, callback);
+
+  if (hook.length < 2) {
+    // Assume the hook runs synchronously and automatically
+    // call the callback with the return value.
+    callback(result);
+  } else {
+    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined;
+  }
+}
+
+exports['default'] = runTransitionHook;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"_process":1,"warning":51}],50:[function(require,module,exports){
+(function (process){
+/**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+'use strict';
+
+/**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+var invariant = function(condition, format, a, b, c, d, e, f) {
+  if (process.env.NODE_ENV !== 'production') {
+    if (format === undefined) {
+      throw new Error('invariant requires an error message argument');
+    }
+  }
+
+  if (!condition) {
+    var error;
+    if (format === undefined) {
+      error = new Error(
+        'Minified exception occurred; use the non-minified dev environment ' +
+        'for the full error message and additional helpful warnings.'
+      );
+    } else {
+      var args = [a, b, c, d, e, f];
+      var argIndex = 0;
+      error = new Error(
+        format.replace(/%s/g, function() { return args[argIndex++]; })
+      );
+      error.name = 'Invariant Violation';
+    }
+
+    error.framesToPop = 1; // we don't care about invariant's own frame
+    throw error;
+  }
+};
+
+module.exports = invariant;
+
+}).call(this,require('_process'))
+
+},{"_process":1}],51:[function(require,module,exports){
+(function (process){
+/**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+'use strict';
+
+/**
+ * Similar to invariant but only logs a warning if the condition is not met.
+ * This can be used to log issues in development environments in critical
+ * paths. Removing the logging code for production environments will keep the
+ * same logic and follow the same code paths.
+ */
+
+var warning = function() {};
+
+if (process.env.NODE_ENV !== 'production') {
+  warning = function(condition, format, args) {
+    var len = arguments.length;
+    args = new Array(len > 2 ? len - 2 : 0);
+    for (var key = 2; key < len; key++) {
+      args[key - 2] = arguments[key];
+    }
+    if (format === undefined) {
+      throw new Error(
+        '`warning(condition, format, ...args)` requires a warning ' +
+        'message argument'
+      );
+    }
+
+    if (format.length < 10 || (/^[s\W]*$/).test(format)) {
+      throw new Error(
+        'The warning format should be able to uniquely identify this ' +
+        'warning. Please, use a more descriptive format than: ' + format
+      );
+    }
+
+    if (!condition) {
+      var argIndex = 0;
+      var message = 'Warning: ' +
+        format.replace(/%s/g, function() {
+          return args[argIndex++];
+        });
+      if (typeof console !== 'undefined') {
+        console.error(message);
+      }
+      try {
+        // This error was thrown as a convenience so that you can use this stack
+        // to find the callsite that caused this warning to fire.
+        throw new Error(message);
+      } catch(x) {}
+    }
+  };
+}
+
+module.exports = warning;
+
+}).call(this,require('_process'))
+
+},{"_process":1}],52:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "refresh",
+    value: function refresh() {
+      window.location.reload();
+    }
+  }, {
+    key: "getMessage",
+    value: function getMessage() {
+      if (this.props.signedIn) {
+        return interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."), { username: this.props.signedIn.username }, true);
+      } else if (this.props.signedOut) {
+        return interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."), { username: this.props.user.username }, true);
+      }
+    }
+  }, {
+    key: "getClassName",
+    value: function getClassName() {
+      if (this.props.signedIn || this.props.signedOut) {
+        return "auth-message show";
+      } else {
+        return "auth-message";
+      }
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          "div",
+          { className: "container" },
+          _react2.default.createElement(
+            "p",
+            { className: "lead" },
+            this.getMessage()
+          ),
+          _react2.default.createElement(
+            "p",
+            null,
+            _react2.default.createElement(
+              "button",
+              { type: "button", className: "btn btn-default",
+                onClick: this.refresh },
+              gettext("Reload page")
+            ),
+            " ",
+            _react2.default.createElement(
+              "span",
+              { className: "hidden-xs hidden-sm text-muted" },
+              gettext("or press F5 key.")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(state) {
+  return {
+    user: state.auth.user,
+    signedIn: state.auth.signedIn,
+    signedOut: state.auth.signedOut
+  };
+}
+
+},{"react":"react"}],53:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var BASE_URL = $('base').attr('href') + 'user-avatar/';
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getSrc',
+    value: function getSrc() {
+      var size = this.props.size || 100; // jshint ignore:line
+      var url = BASE_URL;
+
+      if (this.props.user && this.props.user.id) {
+        // just avatar hash, size and user id
+        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';
+      } else {
+        // just append avatar size to file to produce no-avatar placeholder
+        url += size + '.png';
+      }
+
+      return url;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement('img', { src: this.getSrc(),
+        className: this.props.className || 'user-avatar',
+        title: gettext("User avatar") });
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],54:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getReasonMessage',
+    value: function getReasonMessage() {
+      /* jshint ignore:start */
+      if (this.props.message.html) {
+        return _react2.default.createElement('div', { className: 'lead',
+          dangerouslySetInnerHTML: { __html: this.props.message.html } });
+      } else {
+        return _react2.default.createElement(
+          'p',
+          { className: 'lead' },
+          this.props.message.plain
+        );
+      }
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getExpirationMessage',
+    value: function getExpirationMessage() {
+      if (this.props.expires) {
+        if (this.props.expires.isAfter((0, _moment2.default)())) {
+          return interpolate(gettext("This ban expires %(expires_on)s."), { 'expires_on': this.props.expires.fromNow() }, true);
+        } else {
+          return gettext("This ban has expired.");
+        }
+      } else {
+        return gettext("This ban is permanent.");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-error page-error-banned' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-panel' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'highlight_off'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              this.getReasonMessage(),
+              _react2.default.createElement(
+                'p',
+                { className: 'message-footnote' },
+                this.getExpirationMessage()
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"moment":"moment","react":"react"}],55:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var Button = function (_React$Component) {
+  _inherits(Button, _React$Component);
+
+  function Button() {
+    _classCallCheck(this, Button);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));
+  }
+
+  _createClass(Button, [{
+    key: 'render',
+    value: function render() {
+      var className = 'btn ' + this.props.className;
+      var disabled = this.props.disabled;
+
+      if (this.props.loading) {
+        className += ' btn-loading';
+        disabled = true;
+      }
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: this.props.onClick ? 'button' : 'submit',
+          className: className,
+          disabled: disabled,
+          onClick: this.props.onClick },
+        this.props.children,
+        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return Button;
+}(_react2.default.Component);
+
+exports.default = Button;
+
+Button.defaultProps = {
+  className: "btn-default",
+
+  type: "submit",
+
+  loading: false,
+  disabled: false,
+
+  onClick: null
+};
+
+},{"./loader":64,"react":"react"}],56:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var BASE_URL = $('base').attr('href') + 'user-avatar';
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.cropAvatar = function () {
+      if (_this.state.isLoading) {
+        return false;
+      }
+
+      _this.setState({
+        'isLoading': true
+      });
+
+      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';
+      var cropit = $('.crop-form');
+
+      _ajax2.default.post(_this.props.user.api_url.avatar, {
+        'avatar': avatarType,
+        'crop': {
+          'offset': cropit.cropit('offset'),
+          'zoom': cropit.cropit('zoom')
+        }
+      }).then(function (data) {
+        _this.props.onComplete(data.avatar_hash, data.options);
+        _snackbar2.default.success(data.detail);
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this.setState({
+            'isLoading': false
+          });
+        } else {
+          _this.props.showError(rejection);
+        }
+      });
+    };
+
+    _this.state = {
+      'isLoading': false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getAvatarSize',
+    value: function getAvatarSize() {
+      if (this.props.upload) {
+        return this.props.options.crop_tmp.size;
+      } else {
+        return this.props.options.crop_org.size;
+      }
+    }
+  }, {
+    key: 'getAvatarSecret',
+    value: function getAvatarSecret() {
+      if (this.props.upload) {
+        return this.props.options.crop_tmp.secret;
+      } else {
+        return this.props.options.crop_org.secret;
+      }
+    }
+  }, {
+    key: 'getAvatarHash',
+    value: function getAvatarHash() {
+      return this.props.upload || this.props.user.avatar_hash;
+    }
+  }, {
+    key: 'getImagePath',
+    value: function getImagePath() {
+      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');
+    }
+  }, {
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      var cropit = $('.crop-form');
+      cropit.width(this.getAvatarSize());
+
+      cropit.cropit({
+        'width': this.getAvatarSize(),
+        'height': this.getAvatarSize(),
+        'imageState': {
+          'src': this.getImagePath()
+        },
+        onImageLoaded: function onImageLoaded() {
+          if (_this2.props.upload) {
+            // center uploaded image
+            var zoomLevel = cropit.cropit('zoom');
+            var imageSize = cropit.cropit('imageSize');
+
+            // is it wider than taller?
+            if (imageSize.width > imageSize.height) {
+              var displayedWidth = imageSize.width * zoomLevel;
+              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;
+
+              cropit.cropit('offset', {
+                'x': offsetX,
+                'y': 0
+              });
+            } else if (imageSize.width < imageSize.height) {
+              var displayedHeight = imageSize.height * zoomLevel;
+              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;
+
+              cropit.cropit('offset', {
+                'x': 0,
+                'y': offsetY
+              });
+            }
+          } else {
+            // use preserved crop
+            var crop = _this2.props.options.crop_org.crop;
+            if (crop) {
+              cropit.cropit('zoom', crop.zoom);
+              cropit.cropit('offset', {
+                'x': crop.x,
+                'y': crop.y
+              });
+            }
+          }
+        }
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      $('.crop-form').cropit('disable');
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body modal-avatar-crop' },
+          _react2.default.createElement(
+            'div',
+            { className: 'crop-form' },
+            _react2.default.createElement('div', { className: 'cropit-image-preview' }),
+            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-6 col-md-offset-3' },
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.cropAvatar,
+                loading: this.state.isLoading,
+                className: 'btn-primary btn-block' },
+              this.props.upload ? gettext("Set avatar") : gettext("Crop image")
+            ),
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.props.showIndex,
+                disabled: this.state.isLoading,
+                className: 'btn-default btn-block' },
+              gettext("Cancel")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../services/ajax":115,"../../services/snackbar":124,"../avatar":53,"../button":55,"react":"react"}],57:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Gallery = exports.GalleryItem = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _batch = require('../../utils/batch');
+
+var _batch2 = _interopRequireDefault(_batch);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var GalleryItem = exports.GalleryItem = function (_React$Component) {
+  _inherits(GalleryItem, _React$Component);
+
+  function GalleryItem() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, GalleryItem);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {
+      _this.props.select(_this.props.image);
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+  /* jshint ignore:start */
+
+  _createClass(GalleryItem, [{
+    key: 'getClassName',
+
+    /* jshint ignore:end */
+
+    value: function getClassName() {
+      if (this.props.selection === this.props.image) {
+        if (this.props.disabled) {
+          return 'btn btn-avatar btn-disabled avatar-selected';
+        } else {
+          return 'btn btn-avatar avatar-selected';
+        }
+      } else if (this.props.disabled) {
+        return 'btn btn-avatar btn-disabled';
+      } else {
+        return 'btn btn-avatar';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button',
+          className: this.getClassName(),
+          disabled: this.props.disabled,
+          onClick: this.select },
+        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return GalleryItem;
+}(_react2.default.Component);
+
+var Gallery = exports.Gallery = function (_React$Component2) {
+  _inherits(Gallery, _React$Component2);
+
+  function Gallery() {
+    _classCallCheck(this, Gallery);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));
+  }
+
+  _createClass(Gallery, [{
+    key: 'render',
+    value: function render() {
+      var _this3 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'avatars-gallery' },
+        _react2.default.createElement(
+          'h3',
+          null,
+          this.props.name
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'avatars-gallery-images' },
+          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {
+            return _react2.default.createElement(
+              'div',
+              { className: 'row', key: i },
+              row.map(function (item, i) {
+                return _react2.default.createElement(
+                  'div',
+                  { className: 'col-xs-3', key: i },
+                  item ? _react2.default.createElement(GalleryItem, { image: item,
+                    disabled: _this3.props.disabled,
+                    select: _this3.props.select,
+                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })
+                );
+              })
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return Gallery;
+}(_react2.default.Component);
+
+var _class = function (_React$Component3) {
+  _inherits(_class, _React$Component3);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this4.select = function (image) {
+      _this4.setState({
+        selection: image
+      });
+    };
+
+    _this4.save = function () {
+      if (_this4.state.isLoading) {
+        return false;
+      }
+
+      _this4.setState({
+        'isLoading': true
+      });
+
+      _ajax2.default.post(_this4.props.user.api_url.avatar, {
+        avatar: 'galleries',
+        image: _this4.state.selection
+      }).then(function (response) {
+        _this4.setState({
+          'isLoading': false
+        });
+
+        _snackbar2.default.success(response.detail);
+        _this4.props.onComplete(response.avatar_hash, response.options);
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this4.setState({
+            'isLoading': false
+          });
+        } else {
+          _this4.props.showError(rejection);
+        }
+      });
+    };
+
+    _this4.state = {
+      'selection': null,
+      'isLoading': false
+    };
+    return _this4;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      var _this5 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body modal-avatar-gallery' },
+          this.props.options.galleries.map(function (item, i) {
+            return _react2.default.createElement(Gallery, { name: item.name,
+              images: item.images,
+              selection: _this5.state.selection,
+              disabled: _this5.state.isLoading,
+              select: _this5.select,
+              key: i });
+          })
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-6 col-md-offset-3' },
+              _react2.default.createElement(
+                _button2.default,
+                { onClick: this.save,
+                  loading: this.state.isLoading,
+                  disabled: !this.state.selection,
+                  className: 'btn-primary btn-block' },
+                this.state.selection ? gettext("Save choice") : gettext("Select avatar")
+              ),
+              _react2.default.createElement(
+                _button2.default,
+                { onClick: this.props.showIndex,
+                  disabled: this.state.isLoading,
+                  className: 'btn-default btn-block' },
+                gettext("Cancel")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../index":108,"../../services/ajax":115,"../../services/snackbar":124,"../../utils/batch":128,"../button":55,"react":"react"}],58:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _loader = require('../loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.setGravatar = function () {
+      _this.callApi('gravatar');
+    };
+
+    _this.setGenerated = function () {
+      _this.callApi('generated');
+    };
+
+    _this.state = {
+      'isLoading': false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'callApi',
+    value: function callApi(avatarType) {
+      var _this2 = this;
+
+      if (this.state.isLoading) {
+        return false;
+      }
+
+      this.setState({
+        'isLoading': true
+      });
+
+      _ajax2.default.post(this.props.user.api_url.avatar, {
+        avatar: avatarType
+      }).then(function (response) {
+        _this2.setState({
+          'isLoading': false
+        });
+
+        _snackbar2.default.success(response.detail);
+        _this2.props.onComplete(response.avatar_hash, response.options);
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this2.setState({
+            'isLoading': false
+          });
+        } else {
+          _this2.props.showError(rejection);
+        }
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getGravatarButton',
+
+    /* jshint ignore:end */
+
+    value: function getGravatarButton() {
+      if (this.props.options.gravatar) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.setGravatar,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-gravatar' },
+          gettext("Download my Gravatar")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getCropButton',
+    value: function getCropButton() {
+      if (this.props.options.crop_org) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.props.showCrop,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-crop' },
+          gettext("Re-crop uploaded image")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getUploadButton',
+    value: function getUploadButton() {
+      if (this.props.options.upload) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.props.showUpload,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-upload' },
+          gettext("Upload new image")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getGalleryButton',
+    value: function getGalleryButton() {
+      if (this.props.options.galleries) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.props.showGallery,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-gallery' },
+          gettext("Pick avatar from gallery")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getAvatarPreview',
+    value: function getAvatarPreview() {
+      if (this.state.isLoading) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'avatar-preview preview-loading' },
+          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' }),
+          _react2.default.createElement(_loader2.default, null)
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'div',
+            { className: 'avatar-preview' },
+            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' })
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-avatar-index' },
+        _react2.default.createElement(
+          'div',
+          { className: 'row' },
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-5' },
+            this.getAvatarPreview()
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-7' },
+            this.getGravatarButton(),
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.setGenerated,
+                disabled: this.state.isLoading,
+                className: 'btn-default btn-block btn-avatar-generate' },
+              gettext("Generate my individual avatar")
+            ),
+            this.getCropButton(),
+            this.getUploadButton(),
+            this.getGalleryButton()
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../services/ajax":115,"../../services/snackbar":124,"../avatar":53,"../button":55,"../loader":64,"react":"react"}],59:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ChangeAvatarError = undefined;
+exports.select = select;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _index = require('./index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _crop = require('./crop');
+
+var _crop2 = _interopRequireDefault(_crop);
+
+var _upload = require('./upload');
+
+var _upload2 = _interopRequireDefault(_upload);
+
+var _gallery = require('./gallery');
+
+var _gallery2 = _interopRequireDefault(_gallery);
+
+var _modalLoader = require('../modal-loader');
+
+var _modalLoader2 = _interopRequireDefault(_modalLoader);
+
+var _users = require('../../reducers/users');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {
+  _inherits(ChangeAvatarError, _React$Component);
+
+  function ChangeAvatarError() {
+    _classCallCheck(this, ChangeAvatarError);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));
+  }
+
+  _createClass(ChangeAvatarError, [{
+    key: 'getErrorReason',
+    value: function getErrorReason() {
+      if (this.props.reason) {
+        /* jshint ignore:start */
+        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body' },
+        _react2.default.createElement(
+          'div',
+          { className: 'message-icon' },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'remove_circle_outline'
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'message-body' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.props.message
+          ),
+          this.getErrorReason()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return ChangeAvatarError;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this2, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {
+      _this2.setState({
+        error: error
+      });
+    }, _this2.showIndex = function () {
+      _this2.setState({
+        'component': _index2.default
+      });
+    }, _this2.showUpload = function () {
+      _this2.setState({
+        'component': _upload2.default
+      });
+    }, _this2.showCrop = function () {
+      _this2.setState({
+        'component': _crop2.default
+      });
+    }, _this2.showGallery = function () {
+      _this2.setState({
+        'component': _gallery2.default
+      });
+    }, _this2.completeFlow = function (avatarHash, options) {
+      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));
+
+      _this2.setState({
+        'component': _index2.default,
+        options: options
+      });
+    }, _temp), _possibleConstructorReturn(_this2, _ret);
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this3 = this;
+
+      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {
+        _this3.setState({
+          'component': _index2.default,
+          'options': options,
+          'error': null
+        });
+      }, function (rejection) {
+        _this3.showError(rejection);
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getBody',
+
+    /* jshint ignore:end */
+
+    value: function getBody() {
+      if (this.state) {
+        if (this.state.error) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,
+            reason: this.state.error.reason });
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(this.state.component, { options: this.state.options,
+              user: this.props.user,
+              onComplete: this.completeFlow,
+              showError: this.showError,
+              showIndex: this.showIndex,
+              showCrop: this.showCrop,
+              showUpload: this.showUpload,
+              showGallery: this.showGallery });
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_modalLoader2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.state && this.state.error) {
+        return "modal-dialog modal-message modal-change-avatar";
+      } else {
+        return "modal-dialog modal-change-avatar";
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName(),
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Change your avatar")
+            )
+          ),
+          this.getBody()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(state) {
+  return {
+    'user': state.auth.user
+  };
+}
+
+},{"../../reducers/users":114,"../../services/ajax":115,"../../services/store":125,"../modal-loader":65,"./crop":56,"./gallery":57,"./index":58,"./upload":60,"react":"react"}],60:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _crop = require('./crop');
+
+var _crop2 = _interopRequireDefault(_crop);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _fileSize = require('../../utils/file-size');
+
+var _fileSize2 = _interopRequireDefault(_fileSize);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.pickFile = function () {
+      document.getElementById('avatar-hidden-upload').click();
+    };
+
+    _this.uploadFile = function () {
+      var image = document.getElementById('avatar-hidden-upload').files[0];
+
+      var validationError = _this.validateFile(image);
+      if (validationError) {
+        _snackbar2.default.error(validationError);
+        return;
+      }
+
+      _this.setState({
+        image: image,
+        'preview': URL.createObjectURL(image),
+        'progress': 0
+      });
+
+      var data = new FormData();
+      data.append('avatar', 'upload');
+      data.append('image', image);
+
+      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {
+        _this.setState({
+          progress: progress
+        });
+      }).then(function (data) {
+        _this.setState({
+          'options': data.options,
+          'uploaded': data.detail
+        });
+        _snackbar2.default.info(gettext("Your image has been uploaded and you may now crop it."));
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this.setState({
+            'isLoading': false,
+            'image': null,
+            'progress': 0
+          });
+        } else {
+          _this.props.showError(rejection);
+        }
+      });
+    };
+
+    _this.state = {
+      'image': null,
+      'preview': null,
+      'progress': 0,
+      'uploaded': null
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'validateFile',
+    value: function validateFile(image) {
+      if (image.size > this.props.options.upload.limit) {
+        return interpolate(gettext("Selected file is too big. (%(filesize)s)"), {
+          'filesize': (0, _fileSize2.default)(image.size)
+        }, true);
+      }
+
+      var invalidTypeMsg = gettext("Selected file type is not supported.");
+      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {
+        return invalidTypeMsg;
+      }
+
+      var extensionFound = false;
+      var loweredFilename = image.name.toLowerCase();
+      this.props.options.upload.allowed_extensions.map(function (extension) {
+        if (loweredFilename.substr(extension.length * -1) === extension) {
+          extensionFound = true;
+        }
+      });
+
+      if (!extensionFound) {
+        return invalidTypeMsg;
+      }
+
+      return false;
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getUploadRequirements',
+
+    /* jshint ignore:end */
+
+    value: function getUploadRequirements(options) {
+      var extensions = options.allowed_extensions.map(function (extension) {
+        return extension.substr(1);
+      });
+
+      return interpolate(gettext("%(files)s files smaller than %(limit)s"), {
+        'files': extensions.join(', '),
+        'limit': (0, _fileSize2.default)(options.limit)
+      }, true);
+    }
+  }, {
+    key: 'getUploadButton',
+    value: function getUploadButton() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-avatar-upload' },
+        _react2.default.createElement(
+          _button2.default,
+          { className: 'btn-pick-file',
+            onClick: this.pickFile },
+          _react2.default.createElement(
+            'div',
+            { className: 'material-icon' },
+            'input'
+          ),
+          gettext("Select file")
+        ),
+        _react2.default.createElement(
+          'p',
+          { className: 'text-muted' },
+          this.getUploadRequirements(this.props.options.upload)
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getUploadProgressLabel',
+    value: function getUploadProgressLabel() {
+      return interpolate(gettext("%(progress)s % complete"), {
+        'progress': this.state.progress
+      }, true);
+    }
+  }, {
+    key: 'getUploadProgress',
+    value: function getUploadProgress() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-avatar-upload' },
+        _react2.default.createElement(
+          'div',
+          { className: 'upload-progress' },
+          _react2.default.createElement('img', { src: this.state.preview }),
+          _react2.default.createElement(
+            'div',
+            { className: 'progress' },
+            _react2.default.createElement(
+              'div',
+              { className: 'progress-bar', role: 'progressbar',
+                'aria-valuenow': '{this.state.progress}',
+                'aria-valuemin': '0', 'aria-valuemax': '100',
+                style: { width: this.state.progress + '%' } },
+              _react2.default.createElement(
+                'span',
+                { className: 'sr-only' },
+                this.getUploadProgressLabel()
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderUpload',
+    value: function renderUpload() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement('input', { type: 'file',
+          id: 'avatar-hidden-upload',
+          className: 'hidden-file-upload',
+          onChange: this.uploadFile }),
+        this.state.image ? this.getUploadProgress() : this.getUploadButton(),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-6 col-md-offset-3' },
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.props.showIndex,
+                disabled: !!this.state.image,
+                className: 'btn-default btn-block' },
+              gettext("Cancel")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderCrop',
+    value: function renderCrop() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(_crop2.default, { options: this.state.options,
+        user: this.props.user,
+        upload: this.state.uploaded,
+        onComplete: this.props.onComplete,
+        showError: this.props.showError,
+        showIndex: this.props.showIndex });
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return this.state.uploaded ? this.renderCrop() : this.renderUpload();
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../services/ajax":115,"../../services/snackbar":124,"../../utils/file-size":129,"../button":55,"./crop":56,"react":"react"}],61:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'isValidated',
+    value: function isValidated() {
+      return typeof this.props.validation !== "undefined";
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      var className = 'form-group';
+      if (this.isValidated()) {
+        className += ' has-feedback';
+        if (this.props.validation === null) {
+          className += ' has-success';
+        } else {
+          className += ' has-error';
+        }
+      }
+      return className;
+    }
+  }, {
+    key: 'getFeedback',
+    value: function getFeedback() {
+      var _this2 = this;
+
+      if (this.props.validation) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'help-block errors' },
+          this.props.validation.map(function (error, i) {
+            return _react2.default.createElement(
+              'p',
+              { key: _this2.props.for + 'FeedbackItem' + i },
+              error
+            );
+          })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getFeedbackIcon',
+    value: function getFeedbackIcon() {
+      if (this.isValidated()) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'material-icon form-control-feedback',
+            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },
+          this.props.validation ? 'clear' : 'check'
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getFeedbackDescription',
+    value: function getFeedbackDescription() {
+      if (this.isValidated()) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { id: this.props.for + '_status', className: 'sr-only' },
+          this.props.validation ? gettext('(error)') : gettext('(success)')
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getHelpText',
+    value: function getHelpText() {
+      if (this.props.helpText) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'p',
+          { className: 'help-block' },
+          this.props.helpText
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'label',
+          { className: 'control-label ' + (this.props.labelClass || ''),
+            htmlFor: this.props.for || '' },
+          this.props.label + ':'
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: this.props.controlClass || '' },
+          this.props.children,
+          this.getFeedbackIcon(),
+          this.getFeedbackDescription(),
+          this.getFeedback(),
+          this.getHelpText(),
+          this.props.extra || null
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],62:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _validators = require('../utils/validators');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var validateRequired = (0, _validators.required)();
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {
+      return function (event) {
+        var newState = _defineProperty({}, name, event.target.value);
+
+        var formErrors = _this.state.errors || {};
+        formErrors[name] = _this.validateField(name, newState[name]);
+        newState.errors = formErrors;
+
+        _this.setState(newState);
+      };
+    }, _this.handleSubmit = function (event) {
+      // we don't reload page on submissions
+      event.preventDefault();
+      if (_this.state.isLoading) {
+        return;
+      }
+
+      if (_this.clean()) {
+        _this.setState({ isLoading: true });
+        var promise = _this.send();
+
+        if (promise) {
+          promise.then(function (success) {
+            _this.setState({ isLoading: false });
+            _this.handleSuccess(success);
+          }, function (rejection) {
+            _this.setState({ isLoading: false });
+            _this.handleError(rejection);
+          });
+        } else {
+          _this.setState({ isLoading: false });
+        }
+      }
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+
+  _createClass(_class, [{
+    key: 'validate',
+    value: function validate() {
+      var errors = {};
+      if (!this.state.validators) {
+        return errors;
+      }
+
+      var validators = {
+        required: this.state.validators.required || this.state.validators,
+        optional: this.state.validators.optional || {}
+      };
+
+      var validatedFields = [];
+
+      // add required fields to validation
+      for (var name in validators.required) {
+        if (validators.required.hasOwnProperty(name) && validators.required[name]) {
+          validatedFields.push(name);
+        }
+      }
+
+      // add optional fields to validation
+      for (var name in validators.optional) {
+        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {
+          validatedFields.push(name);
+        }
+      }
+
+      // validate fields values
+      for (var i in validatedFields) {
+        var name = validatedFields[i];
+        var fieldErrors = this.validateField(name, this.state[name]);
+
+        if (fieldErrors === null) {
+          errors[name] = null;
+        } else if (fieldErrors) {
+          errors[name] = fieldErrors;
+        }
+      }
+
+      return errors;
+    }
+  }, {
+    key: 'isValid',
+    value: function isValid() {
+      var errors = this.validate();
+      for (var field in errors) {
+        if (errors.hasOwnProperty(field)) {
+          if (errors[field] !== null) {
+            return false;
+          }
+        }
+      }
+
+      return true;
+    }
+  }, {
+    key: 'validateField',
+    value: function validateField(name, value) {
+      var errors = [];
+      if (!this.state.validators) {
+        return errors;
+      }
+
+      var validators = {
+        required: (this.state.validators.required || this.state.validators)[name],
+        optional: (this.state.validators.optional || {})[name]
+      };
+
+      var requiredError = validateRequired(value) || false;
+
+      if (validators.required) {
+        if (requiredError) {
+          errors = [requiredError];
+        } else {
+          for (var i in validators.required) {
+            var validationError = validators.required[i](value);
+            if (validationError) {
+              errors.push(validationError);
+            }
+          }
+        }
+
+        return errors.length ? errors : null;
+      } else if (requiredError === false && validators.optional) {
+        for (var i in validators.optional) {
+          var validationError = validators.optional[i](value);
+          if (validationError) {
+            errors.push(validationError);
+          }
+        }
+
+        return errors.length ? errors : null;
+      }
+
+      return false; // false === field wasn't validated
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'clean',
+    value: function clean() {
+      return true;
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return null;
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(success) {
+      return;
+    }
+  }, {
+    key: 'handleError',
+
+    /* jshint ignore:end */
+    value: function handleError(rejection) {
+      return;
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../utils/validators":135,"react":"react"}],63:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'isActive',
+    value: function isActive() {
+      if (this.props.path) {
+        return document.location.pathname.indexOf(this.props.path) === 0;
+      } else {
+        return false;
+      }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.isActive()) {
+        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');
+      } else {
+        return this.props.className || '';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'li',
+        { className: this.getClassName() },
+        this.props.children
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],64:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: this.props.className || "loader" },
+        _react2.default.createElement("div", { className: "loader-spinning-wheel" })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],65:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-loader' },
+        _react2.default.createElement(_loader2.default, null)
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"./loader":64,"react":"react"}],66:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('../../loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'panel panel-default panel-form' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel-heading' },
+          _react2.default.createElement(
+            'h3',
+            { className: 'panel-title' },
+            gettext("Change username")
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'panel-body panel-body-loading' },
+          _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../loader":64,"react":"react"}],67:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getHelpText',
+    value: function getHelpText() {
+      if (this.props.options.next_on) {
+        return interpolate(gettext("You will be able to change your username %(next_change)s."), { 'next_change': this.props.options.next_on.fromNow() }, true);
+      } else {
+        return gettext("You have used up available name changes.");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'panel panel-default panel-form' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel-heading' },
+          _react2.default.createElement(
+            'h3',
+            { className: 'panel-title' },
+            gettext("Change username")
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'panel-body panel-message-body' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-icon' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'info_outline'
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'message-body' },
+            _react2.default.createElement(
+              'p',
+              { className: 'lead' },
+              gettext("You can't change your username at the moment.")
+            ),
+            _react2.default.createElement(
+              'p',
+              { className: 'help-block' },
+              this.getHelpText()
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],68:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      username: '',
+
+      validators: {
+        username: [validators.usernameContent(), validators.usernameMinLength({
+          username_length_min: props.options.length_min
+        }), validators.usernameMaxLength({
+          username_length_max: props.options.length_max
+        })]
+      },
+
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getHelpText',
+    value: function getHelpText() {
+      var phrases = [];
+
+      if (this.props.options.changes_left > 0) {
+        var message = ngettext("You can change your username %(changes_left)s more time.", "You can change your username %(changes_left)s more times.", this.props.options.changes_left);
+
+        phrases.push(interpolate(message, {
+          'changes_left': this.props.options.changes_left
+        }, true));
+      }
+
+      if (this.props.user.acl.name_changes_expire > 0) {
+        var message = ngettext("Used changes redeem after %(name_changes_expire)s day.", "Used changes redeem after %(name_changes_expire)s days.", this.props.user.acl.name_changes_expire);
+
+        phrases.push(interpolate(message, {
+          'name_changes_expire': this.props.user.acl.name_changes_expire
+        }, true));
+      }
+
+      return phrases.length ? phrases.join(' ') : null;
+    }
+  }, {
+    key: 'clean',
+    value: function clean() {
+      var errors = this.validate();
+      if (errors.username) {
+        _snackbar2.default.error(errors.username[0]);
+        return false;
+      }if (this.state.username.trim() === this.props.user.username) {
+        _snackbar2.default.info(gettext("Your new username is same as current one."));
+        return false;
+      } else {
+        return true;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.username, {
+        'username': this.state.username
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(success) {
+      this.setState({
+        'username': ''
+      });
+
+      this.props.complete(success.username, success.slug, success.options);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      _snackbar2.default.apiError(rejection);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change username")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("New username"), 'for': 'id_username',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                helpText: this.getHelpText() },
+              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('username'),
+                value: this.state.username })
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Change username")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../services/ajax":115,"../../../services/snackbar":124,"../../../utils/validators":135,"../../button":55,"../../form":62,"../../form-group":61,"react":"react"}],69:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _formLoading = require('./form-loading');
+
+var _formLoading2 = _interopRequireDefault(_formLoading);
+
+var _formLocked = require('./form-locked');
+
+var _formLocked2 = _interopRequireDefault(_formLocked);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _usernameHistory = require('./username-history');
+
+var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _usernameHistory3 = require('../../../reducers/username-history');
+
+var _users = require('../../../reducers/users');
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.onComplete = function (username, slug, options) {
+      _this.setState({
+        options: options
+      });
+
+      _store2.default.dispatch((0, _usernameHistory3.addNameChange)({ username: username, slug: slug }, _this.props.user, _this.props.user));
+      _store2.default.dispatch((0, _users.updateUsername)(_this.props.user, username, slug));
+
+      _snackbar2.default.success(gettext("Your username has been changed successfully."));
+    };
+
+    _this.state = {
+      isLoaded: false,
+      options: null
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      _pageTitle2.default.set({
+        title: gettext("Change username"),
+        parent: gettext("Change your options")
+      });
+
+      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {
+        _this2.setState({
+          isLoaded: true,
+          options: {
+            changes_left: data[0].changes_left,
+            length_min: data[0].length_min,
+            length_max: data[0].length_max,
+            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null
+          }
+        });
+
+        _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data[1].results));
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getChangeForm',
+
+    /* jshint ignore:end */
+
+    value: function getChangeForm() {
+      if (this.state.isLoaded) {
+        if (this.state.options.changes_left > 0) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_form2.default, { user: this.props.user,
+            options: this.state.options,
+            complete: this.onComplete });
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(_formLocked2.default, { options: this.state.options });
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_formLoading2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        this.getChangeForm(),
+        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,
+          changes: this.props['username-history'] })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":108,"../../../reducers/username-history":113,"../../../reducers/users":114,"../../../services/ajax":115,"../../../services/page-title":122,"../../../services/snackbar":124,"../../../services/store":125,"./form":68,"./form-loading":66,"./form-locked":67,"./username-history":70,"moment":"moment","react":"react"}],70:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _random = require('../../../utils/random');
+
+var random = _interopRequireWildcard(_random);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'renderUserAvatar',
+    value: function renderUserAvatar(item) {
+      if (item.changed_by) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: item.changed_by.absolute_url, className: 'user-avatar' },
+          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'user-avatar' },
+            _react2.default.createElement(_avatar2.default, { size: '100' })
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'renderUsername',
+    value: function renderUsername(item) {
+      if (item.changed_by) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: item.changed_by.absolute_url, className: 'item-title' },
+          item.changed_by.username
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'item-title' },
+            item.changed_by_username
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'renderHistory',
+    value: function renderHistory() {
+      var _this2 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'username-history ui-ready' },
+        _react2.default.createElement(
+          'ul',
+          { className: 'list-group' },
+          this.props.changes.map(function (item) {
+            return _react2.default.createElement(
+              'li',
+              { className: 'list-group-item', key: item.id },
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-avatar' },
+                _this2.renderUserAvatar(item)
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-author' },
+                _this2.renderUsername(item)
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change' },
+                item.old_username,
+                _react2.default.createElement(
+                  'span',
+                  { className: 'material-icon' },
+                  'arrow_forward'
+                ),
+                item.new_username
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-date' },
+                _react2.default.createElement(
+                  'abbr',
+                  { title: item.changed_on.format('LLL') },
+                  item.changed_on.fromNow()
+                )
+              )
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderEmptyHistory',
+    value: function renderEmptyHistory() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'username-history ui-ready' },
+        _react2.default.createElement(
+          'ul',
+          { className: 'list-group' },
+          _react2.default.createElement(
+            'li',
+            { className: 'list-group-item empty-message' },
+            gettext("No name changes have been recorded for your account.")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderHistoryPreview',
+    value: function renderHistoryPreview() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'username-history ui-preview' },
+        _react2.default.createElement(
+          'ul',
+          { className: 'list-group' },
+          random.range(3, 5).map(function (i) {
+            return _react2.default.createElement(
+              'li',
+              { className: 'list-group-item', key: i },
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-avatar' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'user-avatar' },
+                  _react2.default.createElement(_avatar2.default, { size: '100' })
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-author' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + "px" } },
+                  ' '
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                  ' '
+                ),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'material-icon' },
+                  'arrow_forward'
+                ),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                  ' '
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-date' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + "px" } },
+                  ' '
+                )
+              )
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      if (this.props.isLoaded) {
+        if (this.props.changes.length) {
+          return this.renderHistory();
+        } else {
+          return this.renderEmptyHistory();
+        }
+      } else {
+        return this.renderHistoryPreview();
+      }
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/random":132,"../../avatar":53,"react":"react"}],71:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _select = require('../select');
+
+var _select2 = _interopRequireDefault(_select);
+
+var _yesNoSwitch = require('../yes-no-switch');
+
+var _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);
+
+var _auth = require('../../reducers/auth');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _pageTitle = require('../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'is_hiding_presence': props.user.is_hiding_presence,
+      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,
+      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,
+      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,
+
+      'errors': {}
+    };
+
+    _this.privateThreadInvitesChoices = [{
+      'value': 0,
+      'icon': 'help_outline',
+      'label': gettext('Everybody')
+    }, {
+      'value': 1,
+      'icon': 'done_all',
+      'label': gettext('Users I follow')
+    }, {
+      'value': 2,
+      'icon': 'highlight_off',
+      'label': gettext('Nobody')
+    }];
+
+    _this.subscribeToChoices = [{
+      'value': 0,
+      'icon': 'bookmark_border',
+      'label': gettext('No')
+    }, {
+      'value': 1,
+      'icon': 'bookmark',
+      'label': gettext('Bookmark')
+    }, {
+      'value': 2,
+      'icon': 'mail',
+      'label': gettext('Bookmark with e-mail notification')
+    }];
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.options, {
+        'is_hiding_presence': this.state.is_hiding_presence,
+        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,
+        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,
+        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess() {
+      _store2.default.dispatch((0, _auth.patchUser)({
+        'is_hiding_presence': this.state.is_hiding_presence,
+        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,
+        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,
+        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads
+      }));
+      _snackbar2.default.success(gettext("Your forum options have been changed."));
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        _snackbar2.default.error(gettext("Please reload page and try again."));
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: gettext("Forum options"),
+        parent: gettext("Change your options")
+      });
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change forum options")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              'fieldset',
+              null,
+              _react2.default.createElement(
+                'legend',
+                null,
+                gettext("Privacy settings")
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Hide my presence"),
+                  helpText: gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),
+                  'for': 'id_is_hiding_presence',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',
+                  disabled: this.state.isLoading,
+                  iconOn: 'visibility',
+                  iconOff: 'visibility_off',
+                  labelOn: gettext("Show my presence to other users"),
+                  labelOff: gettext("Hide my presence from other users"),
+                  onChange: this.bindInput('is_hiding_presence'),
+                  value: this.state.is_hiding_presence })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Private thread invitations"),
+                  'for': 'id_limits_private_thread_invites_to',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('limits_private_thread_invites_to'),
+                  value: this.state.limits_private_thread_invites_to,
+                  choices: this.privateThreadInvitesChoices })
+              )
+            ),
+            _react2.default.createElement(
+              'fieldset',
+              null,
+              _react2.default.createElement(
+                'legend',
+                null,
+                gettext("Automatic subscriptions")
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Threads I start"),
+                  'for': 'id_subscribe_to_started_threads',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('subscribe_to_started_threads'),
+                  value: this.state.subscribe_to_started_threads,
+                  choices: this.subscribeToChoices })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Threads I reply to"),
+                  'for': 'id_subscribe_to_replied_threads',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('subscribe_to_replied_threads'),
+                  value: this.state.subscribe_to_replied_threads,
+                  choices: this.subscribeToChoices })
+              )
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Save changes")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../reducers/auth":109,"../../services/ajax":115,"../../services/page-title":122,"../../services/snackbar":124,"../../services/store":125,"../button":55,"../form":62,"../form-group":61,"../select":88,"../yes-no-switch":107,"react":"react"}],72:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.SideNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+//jshint ignore:line
+
+//jshint ignore:line
+
+var SideNav = exports.SideNav = function (_React$Component) {
+  _inherits(SideNav, _React$Component);
+
+  function SideNav() {
+    _classCallCheck(this, SideNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));
+  }
+
+  _createClass(SideNav, [{
+    key: 'render',
+    value: function render() {
+      var _this2 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'list-group nav-side' },
+        this.props.options.map(function (option) {
+          return _react2.default.createElement(
+            _reactRouter.Link,
+            { to: _this2.props.baseUrl + option.component + '/',
+              className: 'list-group-item',
+              activeClassName: 'active',
+              key: option.component },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              option.icon
+            ),
+            option.name
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return SideNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_React$Component2) {
+  _inherits(CompactNav, _React$Component2);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'render',
+    value: function render() {
+      var _this4 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        this.props.options.map(function (option) {
+          return _react2.default.createElement(
+            _li2.default,
+            { path: _this4.props.baseUrl + option.component + '/',
+              key: option.component },
+            _react2.default.createElement(
+              _reactRouter.Link,
+              { to: _this4.props.baseUrl + option.component + '/',
+                onClick: _this4.props.hideNav },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                option.icon
+              ),
+              option.name
+            )
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(_react2.default.Component);
+
+},{"../../index":108,"../li":63,"react":"react","react-router":"react-router"}],73:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.paths = paths;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _navs = require('./navs');
+
+var _forumOptions = require('./forum-options');
+
+var _forumOptions2 = _interopRequireDefault(_forumOptions);
+
+var _root = require('./change-username/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _root3 = require('./sign-in-credentials/root');
+
+var _root4 = _interopRequireDefault(_root3);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.toggleNav = function () {
+      if (_this.state.dropdown) {
+        _this.setState({
+          dropdown: false
+        });
+      } else {
+        _this.setState({
+          dropdown: true
+        });
+      }
+    };
+
+    _this.hideNav = function () {
+      _this.setState({
+        dropdown: false
+      });
+    };
+
+    _this.state = {
+      dropdown: false
+    };
+    return _this;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'getToggleNavClassName',
+
+    /* jshint ignore:end */
+
+    value: function getToggleNavClassName() {
+      if (this.state.dropdown) {
+        return 'btn btn-default btn-icon open';
+      } else {
+        return 'btn btn-default btn-icon';
+      }
+    }
+  }, {
+    key: 'getCompactNavClassName',
+    value: function getCompactNavClassName() {
+      if (this.state.dropdown) {
+        return 'compact-nav open';
+      } else {
+        return 'compact-nav';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-options' },
+        _react2.default.createElement(
+          'div',
+          { className: 'page-header' },
+          _react2.default.createElement(
+            'div',
+            { className: 'container' },
+            _react2.default.createElement(
+              'h1',
+              { className: 'pull-left' },
+              gettext("Change your options")
+            ),
+            _react2.default.createElement(
+              'button',
+              { className: 'btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg',
+                type: 'button',
+                onClick: this.toggleNav,
+                'aria-haspopup': 'true',
+                'aria-expanded': this.state.dropdown ? 'true' : 'false' },
+              _react2.default.createElement(
+                'i',
+                { className: 'material-icon' },
+                'menu'
+              )
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),
+            baseUrl: _index2.default.get('USERCP_URL'),
+            hideNav: this.hideNav })
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-3 hidden-xs hidden-sm' },
+              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),
+                baseUrl: _index2.default.get('USERCP_URL') })
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-9' },
+              this.props.children
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user,
+    'username-history': store['username-history']
+  };
+}
+
+function paths() {
+  return [{
+    path: _index2.default.get('USERCP_URL') + 'forum-options/',
+    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)
+  }, {
+    path: _index2.default.get('USERCP_URL') + 'change-username/',
+    component: (0, _reactRedux.connect)(select)(_root2.default)
+  }, {
+    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',
+    component: (0, _reactRedux.connect)(select)(_root4.default)
+  }];
+}
+
+},{"../../index":108,"./change-username/root":69,"./forum-options":71,"./navs":72,"./sign-in-credentials/root":76,"react":"react","react-redux":"react-redux"}],74:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      new_email: '',
+      password: '',
+
+      validators: {
+        new_email: [validators.email()],
+        password: []
+      },
+
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'clean',
+    value: function clean() {
+      var errors = this.validate();
+      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];
+
+      if (lengths.indexOf(0) !== -1) {
+        _snackbar2.default.error(gettext("Fill out all fields."));
+        return false;
+      }
+
+      if (errors.new_email) {
+        _snackbar2.default.error(errors.new_email[0]);
+        return false;
+      }
+
+      return true;
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.change_email, {
+        new_email: this.state.new_email,
+        password: this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(response) {
+      this.setState({
+        new_email: '',
+        password: ''
+      });
+
+      _snackbar2.default.success(response.detail);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        if (rejection.new_email) {
+          _snackbar2.default.error(rejection.new_email);
+        } else {
+          _snackbar2.default.error(rejection.password);
+        }
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
+        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change e-mail address")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("New e-mail"), 'for': 'id_new_email',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('new_email'),
+                value: this.state.new_email })
+            ),
+            _react2.default.createElement('hr', null),
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("Your current password"), 'for': 'id_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('password'),
+                value: this.state.password })
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Change e-mail")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../services/ajax":115,"../../../services/snackbar":124,"../../../utils/validators":135,"../../button":55,"../../form":62,"../../form-group":61,"react":"react"}],75:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      new_password: '',
+      repeat_password: '',
+      password: '',
+
+      validators: {
+        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],
+        repeat_password: [],
+        password: []
+      },
+
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'clean',
+    value: function clean() {
+      var errors = this.validate();
+      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];
+
+      if (lengths.indexOf(0) !== -1) {
+        _snackbar2.default.error(gettext("Fill out all fields."));
+        return false;
+      }
+
+      if (errors.new_password) {
+        _snackbar2.default.error(errors.new_password[0]);
+        return false;
+      }
+
+      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {
+        _snackbar2.default.error(gettext("New passwords are different."));
+        return false;
+      }
+
+      return true;
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.change_password, {
+        new_password: this.state.new_password,
+        password: this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(response) {
+      this.setState({
+        new_password: '',
+        repeat_password: '',
+        password: ''
+      });
+
+      _snackbar2.default.success(response.detail);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        if (rejection.new_password) {
+          _snackbar2.default.error(rejection.new_password);
+        } else {
+          _snackbar2.default.error(rejection.password);
+        }
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
+        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change password")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("New password"), 'for': 'id_new_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('new_password'),
+                value: this.state.new_password })
+            ),
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("Repeat password"), 'for': 'id_repeat_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('repeat_password'),
+                value: this.state.repeat_password })
+            ),
+            _react2.default.createElement('hr', null),
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("Your current password"), 'for': 'id_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('password'),
+                value: this.state.password })
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Change password")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../index":108,"../../../services/ajax":115,"../../../services/snackbar":124,"../../../utils/validators":135,"../../button":55,"../../form":62,"../../form-group":61,"react":"react"}],76:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _changeEmail = require('./change-email');
+
+var _changeEmail2 = _interopRequireDefault(_changeEmail);
+
+var _changePassword = require('./change-password');
+
+var _changePassword2 = _interopRequireDefault(_changePassword);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: gettext("Change email or password"),
+        parent: gettext("Change your options")
+      });
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(_changeEmail2.default, { user: this.props.user }),
+        _react2.default.createElement(_changePassword2.default, { user: this.props.user }),
+        _react2.default.createElement(
+          'p',
+          { className: 'message-line' },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'warning'
+          ),
+          _react2.default.createElement(
+            'a',
+            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },
+            gettext("Change forgotten password")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":108,"../../../services/page-title":122,"./change-email":74,"./change-password":75,"react":"react"}],77:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LABELS = exports.STYLES = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _zxcvbn = require('../services/zxcvbn');
+
+var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];
+
+var LABELS = exports.LABELS = [gettext("Entered password is very weak."), gettext("Entered password is weak."), gettext("Entered password is average."), gettext("Entered password is strong."), gettext("Entered password is very strong.")];
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this._score = 0;
+    _this._password = null;
+    _this._inputs = [];
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getScore',
+    value: function getScore(password, inputs) {
+      var _this2 = this;
+
+      var cacheStale = false;
+
+      if (password.trim() !== this._password) {
+        cacheStale = true;
+      }
+
+      if (inputs.length !== this._inputs.length) {
+        cacheStale = true;
+      } else {
+        inputs.map(function (value, i) {
+          if (value.trim() !== _this2._inputs[i]) {
+            cacheStale = true;
+          }
+        });
+      }
+
+      if (cacheStale) {
+        this._score = _zxcvbn2.default.scorePassword(password, inputs);
+        this._password = password.trim();
+        this._inputs = inputs.map(function (value) {
+          return value.trim();
+        });
+      }
+
+      return this._score;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      var score = this.getScore(this.props.password, this.props.inputs);
+
+      return _react2.default.createElement(
+        'div',
+        { className: 'help-block password-strength' },
+        _react2.default.createElement(
+          'div',
+          { className: 'progress' },
+          _react2.default.createElement(
+            'div',
+            { className: "progress-bar " + STYLES[score],
+              style: { width: 20 + 20 * score + '%' },
+              role: 'progress-bar',
+              'aria-valuenow': score,
+              'aria-valuemin': '0',
+              'aria-valuemax': '4' },
+            _react2.default.createElement(
+              'span',
+              { className: 'sr-only' },
+              LABELS[score]
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'p',
+          { className: 'text-small' },
+          LABELS[score]
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../services/zxcvbn":126,"react":"react"}],78:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _followButton = require('./follow-button');
+
+var _followButton2 = _interopRequireDefault(_followButton);
+
+var _nav = require('./moderation/nav');
+
+var _nav2 = _interopRequireDefault(_nav);
+
+var _userStatus = require('../user-status');
+
+var _userStatus2 = _interopRequireDefault(_userStatus);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'li',
+        { className: 'user-status-display' },
+        _react2.default.createElement(
+          _userStatus2.default,
+          { user: this.props.profile, status: this.props.profile.status },
+          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.profile,
+            status: this.props.profile.status }),
+          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.profile,
+            status: this.props.profile.status,
+            className: 'status-label' })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getUserRank',
+    value: function getUserRank() {
+      if (this.props.profile.rank.is_tab) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'user-rank' },
+          _react2.default.createElement(
+            'a',
+            { href: this.props.profile.rank.absolute_url, className: 'item-title' },
+            this.props.profile.rank.name
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'li',
+            { className: 'user-rank' },
+            _react2.default.createElement(
+              'span',
+              { className: 'item-title' },
+              this.props.profile.rank.name
+            )
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getUserTitle',
+    value: function getUserTitle() {
+      if (this.props.profile.title) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'user-title' },
+          this.props.profile.title
+        );
+        /* jshint ignore:end */
+      } else if (this.props.profile.rank.title) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'li',
+            { className: 'user-title' },
+            this.props.profile.rank.title
+          );
+          /* jshint ignore:end */
+        } else {
+            return null;
+          }
+    }
+  }, {
+    key: 'getJoinedOn',
+    value: function getJoinedOn() {
+      /* jshint ignore:start */
+      var title = interpolate(gettext("Joined on %(joined_on)s"), {
+        'joined_on': this.props.profile.joined_on.format('LL, LT')
+      }, true);
+
+      var age = interpolate(gettext("Joined %(joined_on)s"), {
+        'joined_on': this.props.profile.joined_on.fromNow()
+      }, true);
+
+      return _react2.default.createElement(
+        'li',
+        { className: 'user-joined-on' },
+        _react2.default.createElement(
+          'abbr',
+          { title: title },
+          age
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getEmail',
+    value: function getEmail() {
+      if (this.props.profile.email) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'user-email' },
+          _react2.default.createElement(
+            'a',
+            { href: 'mailto:' + this.props.profile.email, className: 'item-title' },
+            this.props.profile.email
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getFollowButton',
+    value: function getFollowButton() {
+      if (this.props.profile.acl.can_follow) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-aligned hidden-xs hidden-sm',
+          profile: this.props.profile });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getModerationButton',
+    value: function getModerationButton() {
+      if (this.props.profile.acl.can_moderate) {
+        console.log(this.props.profile.acl);
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'btn-group btn-aligned hidden-xs hidden-sm' },
+          _react2.default.createElement(
+            'button',
+            { className: 'btn btn-default btn-moderate dropdown-toggle',
+              type: 'button',
+              'data-toggle': 'dropdown',
+              'aria-haspopup': 'true',
+              'aria-expanded': 'false' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'tonality'
+            ),
+            gettext("Moderation")
+          ),
+          _react2.default.createElement(_nav2.default, { profile: this.props.profile })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page-header' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-9 col-md-offset-3' },
+              _react2.default.createElement(
+                'h1',
+                { className: 'pull-left' },
+                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '100' }),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'user-name' },
+                  this.props.profile.username
+                )
+              ),
+              this.getFollowButton(),
+              this.getModerationButton(),
+              _react2.default.createElement(
+                'button',
+                { className: 'btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg',
+                  type: 'button',
+                  onClick: this.props.toggleNav,
+                  'aria-haspopup': 'true',
+                  'aria-expanded': this.props.dropdown ? 'true' : 'false' },
+                _react2.default.createElement(
+                  'i',
+                  { className: 'material-icon' },
+                  'menu'
+                )
+              )
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'header-stats' },
+          _react2.default.createElement(
+            'div',
+            { className: 'container' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-md-9 col-md-offset-3' },
+                _react2.default.createElement(
+                  'ul',
+                  { className: 'list-inline' },
+                  this.getUserStatus(),
+                  this.getUserRank(),
+                  this.getUserTitle(),
+                  this.getJoinedOn(),
+                  this.getEmail()
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../avatar":53,"../user-status":94,"./follow-button":79,"./moderation/nav":80,"react":"react"}],79:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _profile = require('../../reducers/profile');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.action = function () {
+      _this.setState({
+        isLoading: true
+      });
+
+      if (_this.props.profile.is_followed) {
+        _store2.default.dispatch((0, _profile.patchProfile)({
+          is_followed: false,
+          followers: _this.props.profile.followers - 1
+        }));
+      } else {
+        _store2.default.dispatch((0, _profile.patchProfile)({
+          is_followed: true,
+          followers: _this.props.profile.followers + 1
+        }));
+      }
+
+      _ajax2.default.post(_this.props.profile.api_url.follow).then(function (data) {
+        _this.setState({
+          isLoading: false
+        });
+
+        _store2.default.dispatch((0, _profile.patchProfile)(data));
+      }, function (rejection) {
+        _snackbar2.default.apiError(rejection);
+        this.setState({
+          isLoading: false
+        });
+      });
+    };
+
+    _this.state = {
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.profile.is_followed) {
+        return this.props.className + ' btn-default btn-following';
+      } else {
+        return this.props.className + ' btn-default btn-follow';
+      }
+    }
+  }, {
+    key: 'getIcon',
+    value: function getIcon() {
+      if (this.props.profile.is_followed) {
+        return 'favorite';
+      } else {
+        return 'favorite_border';
+      }
+    }
+  }, {
+    key: 'getLabel',
+    value: function getLabel() {
+      if (this.props.profile.is_followed) {
+        return gettext('Following');
+      } else {
+        return gettext('Follow');
+      }
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        _button2.default,
+        { className: this.getClassName(),
+          disabled: this.state.isLoading,
+          onClick: this.action },
+        _react2.default.createElement(
+          'span',
+          { className: 'material-icon' },
+          this.getIcon()
+        ),
+        this.getLabel()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../reducers/profile":110,"../../services/ajax":115,"../../services/snackbar":124,"../../services/store":125,"../button":55,"react":"react"}],80:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "render",
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        "ul",
+        { className: "dropdown-menu dropdown-menu-right", role: "menu" },
+        _react2.default.createElement(
+          "li",
+          null,
+          _react2.default.createElement(
+            "button",
+            { className: "btn-link" },
+            _react2.default.createElement(
+              "span",
+              { className: "material-icon" },
+              "explore"
+            ),
+            "Moderate somehow"
+          )
+        ),
+        _react2.default.createElement(
+          "li",
+          null,
+          _react2.default.createElement(
+            "button",
+            { className: "btn-link" },
+            _react2.default.createElement(
+              "span",
+              { className: "material-icon" },
+              "explore"
+            ),
+            "Moderate else"
+          )
+        )
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],81:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.SideNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+var _followButton = require('./follow-button');
+
+var _followButton2 = _interopRequireDefault(_followButton);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+//jshint ignore:line
+// jshint ignore:line
+
+//jshint ignore:line
+
+var SideNav = exports.SideNav = function (_React$Component) {
+  _inherits(SideNav, _React$Component);
+
+  function SideNav() {
+    _classCallCheck(this, SideNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));
+  }
+
+  _createClass(SideNav, [{
+    key: 'getMeta',
+    value: function getMeta(meta) {
+      if (meta) {
+        // jshint ignore:start
+        return _react2.default.createElement(
+          'span',
+          { className: 'badge' },
+          this.props.profile[meta.attr]
+        );
+        // jshint ignore:end
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      var _this2 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'list-group nav-side' },
+        this.props.pages.map(function (page) {
+          return _react2.default.createElement(
+            _reactRouter.Link,
+            { to: _this2.props.baseUrl + page.component + '/',
+              className: 'list-group-item',
+              activeClassName: 'active',
+              key: page.component },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              page.icon
+            ),
+            page.name,
+            _this2.getMeta(page.meta)
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return SideNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_SideNav) {
+  _inherits(CompactNav, _SideNav);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'showSpecialOptions',
+    value: function showSpecialOptions() {
+      return this.props.profile.acl.can_follow || this.props.profile.acl.can_moderate;
+    }
+  }, {
+    key: 'getFollowButton',
+    value: function getFollowButton() {
+      if (this.props.profile.acl.can_follow) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-block',
+          profile: this.props.profile });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getModerationButton',
+    value: function getModerationButton() {
+      if (this.props.profile.acl.can_follow) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'button',
+          { type: 'button', className: 'btn btn-default btn-block',
+            onClick: this.props.toggleModeration },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'tonality'
+          ),
+          gettext("Moderation")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getSpecialOptions',
+    value: function getSpecialOptions() {
+      if (this.showSpecialOptions()) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'dropdown-footer' },
+          this.getFollowButton(),
+          this.getModerationButton()
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      var _this4 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        this.getSpecialOptions(),
+        this.showSpecialOptions() ? _react2.default.createElement('li', { className: 'divider' }) : null,
+        this.props.pages.map(function (page) {
+          return _react2.default.createElement(
+            _li2.default,
+            { path: _this4.props.baseUrl + page.component + '/',
+              key: page.component },
+            _react2.default.createElement(
+              _reactRouter.Link,
+              { to: _this4.props.baseUrl + page.component + '/',
+                onClick: _this4.props.hideNav },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                page.icon
+              ),
+              page.name,
+              _this4.getMeta(page.meta)
+            )
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(SideNav);
+
+},{"../../index":108,"../li":63,"./follow-button":79,"react":"react","react-router":"react-router"}],82:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.paths = paths;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _Header = require('./Header');
+
+var _Header2 = _interopRequireDefault(_Header);
+
+var _nav = require('./moderation/nav');
+
+var _nav2 = _interopRequireDefault(_nav);
+
+var _navs = require('./navs');
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _profile = require('../../reducers/profile');
+
+var _polls = require('../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _store2.default.dispatch((0, _profile.dehydrate)(data));
+    };
+
+    _this.toggleNav = function () {
+      if (_this.state.dropdown === 'pages') {
+        _this.setState({
+          dropdown: false
+        });
+      } else {
+        _this.setState({
+          dropdown: 'pages'
+        });
+      }
+    };
+
+    _this.toggleModeration = function () {
+      if (_this.state.dropdown === 'moderation') {
+        _this.setState({
+          dropdown: false
+        });
+      } else {
+        console.log('show moderation!');
+        _this.setState({
+          dropdown: 'moderation'
+        });
+      }
+    };
+
+    _this.hideNav = function () {
+      _this.setState({
+        dropdown: false
+      });
+    };
+
+    _this.state = {
+      dropdown: false
+    };
+
+    _this.startPolling(props.profile.api_url.root);
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'startPolling',
+    value: function startPolling(api) {
+      _polls2.default.start({
+        poll: 'user-profile',
+        url: api,
+        frequency: 90 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+    /* jshint ignore:end */
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getToggleNavClassName',
+
+    /* jshint ignore:end */
+
+    value: function getToggleNavClassName() {
+      if (this.state.dropdown) {
+        return 'btn btn-default btn-icon open';
+      } else {
+        return 'btn btn-default btn-icon';
+      }
+    }
+  }, {
+    key: 'getCompactNavClassName',
+    value: function getCompactNavClassName() {
+      if (this.state.dropdown) {
+        return 'compact-nav open';
+      } else {
+        return 'compact-nav';
+      }
+    }
+  }, {
+    key: 'getNavDropdown',
+    value: function getNavDropdown() {
+      if (this.state.dropdown === 'pages') {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_navs.CompactNav, { pages: _index2.default.get('PROFILE_PAGES'),
+          baseUrl: _index2.default.get('PROFILE').absolute_url,
+          profile: this.props.profile,
+          toggleModeration: this.toggleModeration,
+          hideNav: this.hideNav });
+        /* jshint ignore:end */
+      } else if (this.state.dropdown === 'moderation') {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_nav2.default, { profile: this.props.profile,
+            toggleNav: this.toggleNav,
+            hideNav: this.hideNav });
+          /* jshint ignore:end */
+        } else {
+            return null;
+          }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      var baseClass = 'page page-user-profile';
+      if (false && this.props.profile.rank.css_class) {
+        return baseClass + ' page-user-profile-' + this.props.profile.rank.css_class;
+      } else {
+        return baseClass;
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(_Header2.default, { user: this.props.user,
+          profile: this.props.profile,
+          toggleNav: this.toggleNav,
+          toggleModeration: this.toggleModeration }),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          this.getNavDropdown()
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-3 hidden-xs hidden-sm' },
+              _react2.default.createElement(
+                'div',
+                { className: 'profile-side-avatar' },
+                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '400' })
+              ),
+              _react2.default.createElement(_navs.SideNav, { pages: _index2.default.get('PROFILE_PAGES'),
+                baseUrl: _index2.default.get('PROFILE').absolute_url,
+                profile: this.props.profile })
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-9' },
+              this.props.children
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user,
+    'users': store.users,
+    'profile': store.profile,
+    'username-history': store['username-history']
+  };
+}
+
+var Placeholder = function (_React$Component2) {
+  _inherits(Placeholder, _React$Component2);
+
+  function Placeholder() {
+    _classCallCheck(this, Placeholder);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Placeholder).apply(this, arguments));
+  }
+
+  _createClass(Placeholder, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'container' },
+        _react2.default.createElement(
+          'p',
+          null,
+          "Hello, I'm placeholder for " + this.props.route.name
+        )
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return Placeholder;
+}(_react2.default.Component);
+
+var COMPONENTS = {
+  'posts': Placeholder,
+  'threads': Placeholder,
+  'followers': Placeholder,
+  'follows': Placeholder,
+  'username-history': Placeholder,
+  'ban-details': Placeholder
+};
+
+function paths() {
+  var paths = [];
+
+  _index2.default.get('PROFILE_PAGES').forEach(function (item) {
+    paths.push(Object.assign({}, item, {
+      path: _index2.default.get('PROFILE').absolute_url + item.component + '/',
+      component: (0, _reactRedux.connect)(select)(COMPONENTS[item.component])
+    }));
+  });
+
+  return paths;
+}
+
+},{"../../index":108,"../../reducers/profile":110,"../../services/polls":123,"../../services/store":125,"../avatar":53,"./Header":78,"./moderation/nav":80,"./navs":81,"react":"react","react-redux":"react-redux"}],83:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+var _register = require('./register.js');
+
+var _register2 = _interopRequireDefault(_register);
+
+var _captcha = require('../services/captcha');
+
+var _captcha2 = _interopRequireDefault(_captcha);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _zxcvbn = require('../services/zxcvbn');
+
+var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.showRegisterModal = function () {
+      if (misago.get('SETTINGS').account_activation === 'closed') {
+        _snackbar2.default.info(gettext("New registrations are currently disabled."));
+      } else if (_this.state.isLoaded) {
+        _modal2.default.show(_register2.default);
+      } else {
+        _this.setState({
+          'isLoading': true
+        });
+
+        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {
+          if (!_this.state.isLoaded) {
+            _this.setState({
+              'isLoading': false,
+              'isLoaded': false
+            });
+          }
+
+          _modal2.default.show(_register2.default);
+        });
+      }
+    };
+
+    _this.state = {
+      'isLoading': false,
+      'isLoaded': false
+    };
+    return _this;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'getClassName',
+
+    /* jshint ignore:end */
+
+    value: function getClassName() {
+      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button', onClick: this.showRegisterModal,
+          className: 'btn ' + this.getClassName(),
+          disabled: this.state.isLoaded },
+        gettext("Register"),
+        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../services/captcha":117,"../services/modal":121,"../services/snackbar":124,"../services/zxcvbn":126,"./loader":64,"./register.js":84,"react":"react"}],84:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RegisterComplete = exports.RegisterForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('./form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _passwordStrength = require('./password-strength');
+
+var _passwordStrength2 = _interopRequireDefault(_passwordStrength);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _auth = require('../services/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _captcha = require('../services/captcha');
+
+var _captcha2 = _interopRequireDefault(_captcha);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var RegisterForm = exports.RegisterForm = function (_Form) {
+  _inherits(RegisterForm, _Form);
+
+  function RegisterForm(props) {
+    _classCallCheck(this, RegisterForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'username': '',
+      'email': '',
+      'password': '',
+      'captcha': '',
+
+      'validators': {
+        'username': [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],
+        'email': [validators.email()],
+        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))],
+        'captcha': _captcha2.default.validator()
+      },
+
+      'errors': {}
+    };
+    return _this;
+  }
+
+  _createClass(RegisterForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(gettext("Form contains errors."));
+        this.setState({
+          'errors': this.validate()
+        });
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('USERS_API'), {
+        'username': this.state.username,
+        'email': this.state.email,
+        'password': this.state.password,
+        'captcha': this.state.captcha
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        this.setState({
+          'errors': Object.assign({}, this.state.errors, rejection)
+        });
+        _snackbar2.default.error(gettext("Form contains errors."));
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+        _modal2.default.hide();
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'getLegalFootNote',
+    value: function getLegalFootNote() {
+      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),
+            target: '_blank' },
+          gettext("By registering you agree to site's terms and conditions.")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-dialog modal-register', role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Register")
+            )
+          ),
+          _react2.default.createElement(
+            'form',
+            { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
+            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-body' },
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Username"), 'for': 'id_username',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                  validation: this.state.errors.username },
+                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
+                  'aria-describedby': 'id_username_status',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('username'),
+                  value: this.state.username })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("E-mail"), 'for': 'id_email',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                  validation: this.state.errors.email },
+                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',
+                  'aria-describedby': 'id_email_status',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('email'),
+                  value: this.state.email })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Password"), 'for': 'id_password',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                  validation: this.state.errors.password,
+                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,
+                    inputs: [this.state.username, this.state.email] }) },
+                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
+                  'aria-describedby': 'id_password_status',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('password'),
+                  value: this.state.password })
+              ),
+              _captcha2.default.component({
+                form: this,
+                labelClass: "col-sm-4",
+                controlClass: "col-sm-8"
+              })
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-footer' },
+              this.getLegalFootNote(),
+              _react2.default.createElement(
+                _button2.default,
+                { className: 'btn-primary', loading: this.state.isLoading },
+                gettext("Register account")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RegisterForm;
+}(_form2.default);
+
+var RegisterComplete = exports.RegisterComplete = function (_React$Component) {
+  _inherits(RegisterComplete, _React$Component);
+
+  function RegisterComplete() {
+    _classCallCheck(this, RegisterComplete);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));
+  }
+
+  _createClass(RegisterComplete, [{
+    key: 'getLead',
+    value: function getLead() {
+      if (this.props.activation === 'user') {
+        return gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in.");
+      } else if (this.props.activation === 'admin') {
+        return gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.");
+      }
+    }
+  }, {
+    key: 'getSubscript',
+    value: function getSubscript() {
+      if (this.props.activation === 'user') {
+        return gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account.");
+      } else if (this.props.activation === 'admin') {
+        return gettext("We will send an e-mail to %(email)s when this takes place.");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-dialog modal-message modal-register',
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Registration complete")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-body' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'info_outline'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                interpolate(this.getLead(), { 'username': this.props.username }, true)
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                interpolate(this.getSubscript(), { 'email': this.props.email }, true)
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RegisterComplete;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this3.completeRegistration = function (apiResponse) {
+      if (apiResponse.activation === 'active') {
+        _modal2.default.hide();
+        _auth2.default.signIn(apiResponse);
+      } else {
+        _this3.setState({
+          'complete': apiResponse
+        });
+      }
+    };
+
+    _this3.state = {
+      'complete': false
+    };
+    return _this3;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.state.complete) {
+        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,
+          username: this.state.complete.username,
+          email: this.state.complete.email });
+      } else {
+        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });
+      }
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":108,"../services/ajax":115,"../services/auth":116,"../services/captcha":117,"../services/modal":121,"../services/snackbar":124,"../utils/banned-page":127,"../utils/validators":135,"./button":55,"./form":62,"./form-group":61,"./password-strength":77,"react":"react"}],85:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LinkSent = exports.RequestLinkForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var RequestLinkForm = exports.RequestLinkForm = function (_Form) {
+  _inherits(RequestLinkForm, _Form);
+
+  function RequestLinkForm(props) {
+    _classCallCheck(this, RequestLinkForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'email': '',
+
+      'validators': {
+        'email': [validators.email()]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(RequestLinkForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(gettext("Enter a valid email address."));
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {
+        'email': this.state.email
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {
+        _snackbar2.default.info(rejection.detail);
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-activation-link' },
+        _react2.default.createElement(
+          'form',
+          { onSubmit: this.handleSubmit },
+          _react2.default.createElement(
+            'div',
+            { className: 'form-group' },
+            _react2.default.createElement(
+              'div',
+              { className: 'control-input' },
+              _react2.default.createElement('input', { type: 'text', className: 'form-control',
+                placeholder: gettext("Your e-mail address"),
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('email'),
+                value: this.state.email })
+            )
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary btn-block',
+              loading: this.state.isLoading },
+            gettext("Send link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RequestLinkForm;
+}(_form2.default);
+
+var LinkSent = exports.LinkSent = function (_React$Component) {
+  _inherits(LinkSent, _React$Component);
+
+  function LinkSent() {
+    _classCallCheck(this, LinkSent);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));
+  }
+
+  _createClass(LinkSent, [{
+    key: 'getMessage',
+    value: function getMessage() {
+      return interpolate(gettext("Activation link was sent to %(email)s"), {
+        email: this.props.user.email
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-activation-link well-done' },
+        _react2.default.createElement(
+          'div',
+          { className: 'done-message' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-icon' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'check'
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'message-body' },
+            _react2.default.createElement(
+              'p',
+              null,
+              this.getMessage()
+            )
+          ),
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-primary btn-block',
+              onClick: this.props.callback },
+            gettext("Request another link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return LinkSent;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this3.complete = function (apiResponse) {
+      _this3.setState({
+        complete: apiResponse
+      });
+    };
+
+    _this3.reset = function () {
+      _this3.setState({
+        complete: false
+      });
+    };
+
+    _this3.state = {
+      complete: false
+    };
+    return _this3;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.state.complete) {
+        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });
+      } else {
+        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });
+      };
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":108,"../services/ajax":115,"../services/snackbar":124,"../utils/banned-page":127,"../utils/validators":135,"./button":55,"./form":62,"react":"react"}],86:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var RequestResetForm = exports.RequestResetForm = function (_Form) {
+  _inherits(RequestResetForm, _Form);
+
+  function RequestResetForm(props) {
+    _classCallCheck(this, RequestResetForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'email': '',
+
+      'validators': {
+        'email': [validators.email()]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(RequestResetForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(gettext("Enter a valid email address."));
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {
+        'email': this.state.email
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {
+        this.props.showInactivePage(rejection);
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-password-reset' },
+        _react2.default.createElement(
+          'form',
+          { onSubmit: this.handleSubmit },
+          _react2.default.createElement(
+            'div',
+            { className: 'form-group' },
+            _react2.default.createElement(
+              'div',
+              { className: 'control-input' },
+              _react2.default.createElement('input', { type: 'text', className: 'form-control',
+                placeholder: gettext("Your e-mail address"),
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('email'),
+                value: this.state.email })
+            )
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary btn-block',
+              loading: this.state.isLoading },
+            gettext("Send link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RequestResetForm;
+}(_form2.default);
+
+var LinkSent = exports.LinkSent = function (_React$Component) {
+  _inherits(LinkSent, _React$Component);
+
+  function LinkSent() {
+    _classCallCheck(this, LinkSent);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));
+  }
+
+  _createClass(LinkSent, [{
+    key: 'getMessage',
+    value: function getMessage() {
+      return interpolate(gettext("Reset password link was sent to %(email)s"), {
+        email: this.props.user.email
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-password-reset well-done' },
+        _react2.default.createElement(
+          'div',
+          { className: 'done-message' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-icon' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'check'
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'message-body' },
+            _react2.default.createElement(
+              'p',
+              null,
+              this.getMessage()
+            )
+          ),
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-primary btn-block',
+              onClick: this.props.callback },
+            gettext("Request another link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return LinkSent;
+}(_react2.default.Component);
+
+var AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {
+  _inherits(AccountInactivePage, _React$Component2);
+
+  function AccountInactivePage() {
+    _classCallCheck(this, AccountInactivePage);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));
+  }
+
+  _createClass(AccountInactivePage, [{
+    key: 'getActivateButton',
+    value: function getActivateButton() {
+      if (this.props.activation === 'inactive_user') {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'p',
+          null,
+          _react2.default.createElement(
+            'a',
+            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },
+            gettext("Activate your account.")
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-message page-message-info page-forgotten-password-inactive' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-panel' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'info_outline'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                gettext("Your account is inactive.")
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                this.props.message
+              ),
+              this.getActivateButton()
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return AccountInactivePage;
+}(_react2.default.Component);
+
+var _class = function (_React$Component3) {
+  _inherits(_class, _React$Component3);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this4.complete = function (apiResponse) {
+      _this4.setState({
+        complete: apiResponse
+      });
+    };
+
+    _this4.reset = function () {
+      _this4.setState({
+        complete: false
+      });
+    };
+
+    _this4.state = {
+      complete: false
+    };
+    return _this4;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'showInactivePage',
+    value: function showInactivePage(apiResponse) {
+      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,
+        message: apiResponse.detail }), document.getElementById('page-mount'));
+    }
+    /* jshint ignore:end */
+
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.state.complete) {
+        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });
+      } else {
+        return _react2.default.createElement(RequestResetForm, { callback: this.complete,
+          showInactivePage: this.showInactivePage });
+      };
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":108,"../services/ajax":115,"../services/snackbar":124,"../utils/banned-page":127,"../utils/validators":135,"./button":55,"./form":62,"react":"react","react-dom":"react-dom"}],87:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PasswordChangedPage = exports.ResetPasswordForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _signIn = require('./sign-in.js');
+
+var _signIn2 = _interopRequireDefault(_signIn);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _auth = require('../services/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {
+  _inherits(ResetPasswordForm, _Form);
+
+  function ResetPasswordForm(props) {
+    _classCallCheck(this, ResetPasswordForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'password': '',
+
+      'validators': {
+        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(ResetPasswordForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        if (this.state.password.trim().length) {
+          _snackbar2.default.error(this.state.errors.password[0]);
+        } else {
+          _snackbar2.default.error(gettext("Enter new password."));
+        }
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {
+        'password': this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-reset-password' },
+        _react2.default.createElement(
+          'form',
+          { onSubmit: this.handleSubmit },
+          _react2.default.createElement(
+            'div',
+            { className: 'form-group' },
+            _react2.default.createElement(
+              'div',
+              { className: 'control-input' },
+              _react2.default.createElement('input', { type: 'password', className: 'form-control',
+                placeholder: gettext("Enter new password"),
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('password'),
+                value: this.state.password })
+            )
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary btn-block',
+              loading: this.state.isLoading },
+            gettext("Change password")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return ResetPasswordForm;
+}(_form2.default);
+
+var PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {
+  _inherits(PasswordChangedPage, _React$Component);
+
+  function PasswordChangedPage() {
+    _classCallCheck(this, PasswordChangedPage);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));
+  }
+
+  _createClass(PasswordChangedPage, [{
+    key: 'getMessage',
+    value: function getMessage() {
+      return interpolate(gettext("%(username)s, your password has been changed successfully."), {
+        username: this.props.user.username
+      }, true);
+    }
+  }, {
+    key: 'showSignIn',
+    value: function showSignIn() {
+      _modal2.default.show(_signIn2.default);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-message page-message-success page-forgotten-password-changed' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-panel' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'check'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                this.getMessage()
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                gettext("You will have to sign in using new password before continuing.")
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                _react2.default.createElement(
+                  'button',
+                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },
+                  gettext("Sign in")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return PasswordChangedPage;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this3, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {
+      _auth2.default.softSignOut();
+
+      // nuke "redirect_to" field so we don't end
+      // coming back to error page after sign in
+      $('#hidden-login-form input[name="redirect_to"]').remove();
+
+      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));
+    }, _temp), _possibleConstructorReturn(_this3, _ret);
+  }
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":108,"../services/ajax":115,"../services/auth":116,"../services/modal":121,"../services/snackbar":124,"../utils/banned-page":127,"../utils/validators":135,"./button":55,"./form":62,"./sign-in.js":89,"react":"react","react-dom":"react-dom"}],88:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {
+      return function () {
+        _this.props.onChange({
+          target: {
+            value: value
+          }
+        });
+      };
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+
+  _createClass(_class, [{
+    key: "getChoice",
+    value: function getChoice() {
+      var _this2 = this;
+
+      var choice = null;
+      this.props.choices.map(function (item) {
+        if (item.value === _this2.props.value) {
+          choice = item;
+        }
+      });
+      return choice;
+    }
+  }, {
+    key: "getIcon",
+    value: function getIcon() {
+      return this.getChoice().icon;
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel() {
+      return this.getChoice().label;
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: "render",
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      var _this3 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: "btn-group btn-select-group" },
+        _react2.default.createElement(
+          "button",
+          { type: "button",
+            className: "btn btn-select dropdown-toggle",
+            id: this.props.id || null,
+            "data-toggle": "dropdown",
+            "aria-haspopup": "true",
+            "aria-expanded": "false",
+            "aria-describedby": this.props['aria-describedby'] || null,
+            disabled: this.props.disabled || false },
+          _react2.default.createElement(
+            "span",
+            { className: "material-icon" },
+            this.getIcon()
+          ),
+          this.getLabel()
+        ),
+        _react2.default.createElement(
+          "ul",
+          { className: "dropdown-menu" },
+          this.props.choices.map(function (item, i) {
+            return _react2.default.createElement(
+              "li",
+              { key: i },
+              _react2.default.createElement(
+                "button",
+                { type: "button", className: "btn-link",
+                  onClick: _this3.change(item.value) },
+                _react2.default.createElement(
+                  "span",
+                  { className: "material-icon" },
+                  item.icon
+                ),
+                item.label
+              )
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],89:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+      'showActivation': false,
+
+      'username': '',
+      'password': '',
+
+      'validators': {
+        'username': [],
+        'password': []
+      }
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'clean',
+    value: function clean() {
+      if (!this.isValid()) {
+        _snackbar2.default.error(gettext("Fill out both fields."));
+        return false;
+      } else {
+        return true;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('AUTH_API'), {
+        'username': this.state.username,
+        'password': this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess() {
+      var form = $('#hidden-login-form');
+
+      form.append('<input type="text" name="username" />');
+      form.append('<input type="password" name="password" />');
+
+      // fill out form with user credentials and submit it, this will tell
+      // Misago to redirect user back to right page, and will trigger browser's
+      // key ring feature
+      form.find('input[type="hidden"]').val(_ajax2.default.getCsrfToken());
+      form.find('input[name="redirect_to"]').val(window.location.pathname);
+      form.find('input[name="username"]').val(this.state.username);
+      form.find('input[name="password"]').val(this.state.password);
+      form.submit();
+
+      // keep form loading
+      this.setState({
+        'isLoading': true
+      });
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        if (rejection.code === 'inactive_admin') {
+          _snackbar2.default.info(rejection.detail);
+        } else if (rejection.code === 'inactive_user') {
+          _snackbar2.default.info(rejection.detail);
+          this.setState({
+            'showActivation': true
+          });
+        } else if (rejection.code === 'banned') {
+          (0, _bannedPage2.default)(rejection.detail);
+          _modal2.default.hide();
+        } else {
+          _snackbar2.default.error(rejection.detail);
+        }
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+        _modal2.default.hide();
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'getActivationButton',
+    value: function getActivationButton() {
+      if (this.state.showActivation) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),
+            className: 'btn btn-success btn-block' },
+          gettext("Activate account")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-dialog modal-sm modal-sign-in',
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Sign in")
+            )
+          ),
+          _react2.default.createElement(
+            'form',
+            { onSubmit: this.handleSubmit },
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-body' },
+              _react2.default.createElement(
+                'div',
+                { className: 'form-group' },
+                _react2.default.createElement(
+                  'div',
+                  { className: 'control-input' },
+                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',
+                    disabled: this.state.isLoading,
+                    placeholder: gettext("Username or e-mail"),
+                    onChange: this.bindInput('username'),
+                    value: this.state.username })
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'form-group' },
+                _react2.default.createElement(
+                  'div',
+                  { className: 'control-input' },
+                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',
+                    disabled: this.state.isLoading,
+                    placeholder: gettext("Password"),
+                    onChange: this.bindInput('password'),
+                    value: this.state.password })
+                )
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-footer' },
+              this.getActivationButton(),
+              _react2.default.createElement(
+                _button2.default,
+                { className: 'btn-primary btn-block',
+                  loading: this.state.isLoading },
+                gettext("Sign in")
+              ),
+              _react2.default.createElement(
+                'a',
+                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),
+                  className: 'btn btn-default btn-block' },
+                gettext("Forgot password?")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../index":108,"../services/ajax":115,"../services/modal":121,"../services/snackbar":124,"../utils/banned-page":127,"./button":55,"./form":62,"react":"react"}],90:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Snackbar = undefined;
+exports.select = select;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/* jshint ignore:start */
+var TYPES_CLASSES = {
+  'info': 'alert-info',
+  'success': 'alert-success',
+  'warning': 'alert-warning',
+  'error': 'alert-danger'
+};
+/* jshint ignore:end */
+
+var Snackbar = exports.Snackbar = function (_React$Component) {
+  _inherits(Snackbar, _React$Component);
+
+  function Snackbar() {
+    _classCallCheck(this, Snackbar);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));
+  }
+
+  _createClass(Snackbar, [{
+    key: 'getSnackbarClass',
+    value: function getSnackbarClass() {
+      var snackbarClass = 'alerts-snackbar';
+      if (this.props.isVisible) {
+        snackbarClass += ' in';
+      } else {
+        snackbarClass += ' out';
+      }
+      return snackbarClass;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getSnackbarClass() },
+        _react2.default.createElement(
+          'p',
+          { className: 'alert ' + TYPES_CLASSES[this.props.type] },
+          this.props.message
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return Snackbar;
+}(_react2.default.Component);
+
+function select(state) {
+  return state.snackbar;
+}
+
+},{"react":"react"}],91:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _registerButton = require('../register-button');
+
+var _registerButton2 = _interopRequireDefault(_registerButton);
+
+var _signIn = require('../sign-in.js');
+
+var _signIn2 = _interopRequireDefault(_signIn);
+
+var _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');
+
+var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
+
+var _modal = require('../../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var GuestMenu = exports.GuestMenu = function (_React$Component) {
+  _inherits(GuestMenu, _React$Component);
+
+  function GuestMenu() {
+    _classCallCheck(this, GuestMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));
+  }
+
+  _createClass(GuestMenu, [{
+    key: 'showSignInModal',
+    value: function showSignInModal() {
+      _modal2.default.show(_signIn2.default);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu user-dropdown dropdown-menu-right',
+          role: 'menu' },
+        _react2.default.createElement(
+          'li',
+          { className: 'guest-preview' },
+          _react2.default.createElement(
+            'h4',
+            null,
+            gettext("You are browsing as guest.")
+          ),
+          _react2.default.createElement(
+            'p',
+            null,
+            gettext('Sign in or register to start and participate in discussions.')
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-xs-6' },
+              _react2.default.createElement(
+                'button',
+                { type: 'button', className: 'btn btn-default btn-block',
+                  onClick: this.showSignInModal },
+                gettext("Sign in")
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'col-xs-6' },
+              _react2.default.createElement(
+                _registerButton2.default,
+                { className: 'btn-primary btn-block' },
+                gettext("Register")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return GuestMenu;
+}(_react2.default.Component);
+
+var GuestNav = exports.GuestNav = function (_GuestMenu) {
+  _inherits(GuestNav, _GuestMenu);
+
+  function GuestNav() {
+    _classCallCheck(this, GuestNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));
+  }
+
+  _createClass(GuestNav, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'nav nav-guest' },
+        _react2.default.createElement(
+          'button',
+          { type: 'button', className: 'btn navbar-btn btn-default',
+            onClick: this.showSignInModal },
+          gettext("Sign in")
+        ),
+        _react2.default.createElement(
+          _registerButton2.default,
+          { className: 'navbar-btn btn-primary' },
+          gettext("Register")
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return GuestNav;
+}(GuestMenu);
+
+var CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {
+  _inherits(CompactGuestNav, _React$Component2);
+
+  function CompactGuestNav() {
+    _classCallCheck(this, CompactGuestNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));
+  }
+
+  _createClass(CompactGuestNav, [{
+    key: 'showGuestMenu',
+    value: function showGuestMenu() {
+      _mobileNavbarDropdown2.default.show(GuestMenu);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button', onClick: this.showGuestMenu },
+        _react2.default.createElement(_avatar2.default, { size: '64' })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return CompactGuestNav;
+}(_react2.default.Component);
+
+},{"../../services/mobile-navbar-dropdown":120,"../../services/modal":121,"../avatar":53,"../register-button":83,"../sign-in.js":89,"react":"react"}],92:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactUserMenu = exports.UserMenu = undefined;
+exports.select = select;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _guestNav = require('./guest-nav');
+
+var _userNav = require('./user-nav');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var UserMenu = exports.UserMenu = function (_React$Component) {
+  _inherits(UserMenu, _React$Component);
+
+  function UserMenu() {
+    _classCallCheck(this, UserMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));
+  }
+
+  _createClass(UserMenu, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.props.isAuthenticated) {
+        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });
+      } else {
+        return _react2.default.createElement(_guestNav.GuestNav, null);
+      }
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return UserMenu;
+}(_react2.default.Component);
+
+var CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {
+  _inherits(CompactUserMenu, _React$Component2);
+
+  function CompactUserMenu() {
+    _classCallCheck(this, CompactUserMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));
+  }
+
+  _createClass(CompactUserMenu, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.props.isAuthenticated) {
+        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });
+      } else {
+        return _react2.default.createElement(_guestNav.CompactGuestNav, null);
+      }
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return CompactUserMenu;
+}(_react2.default.Component);
+
+function select(state) {
+  return state.auth;
+}
+
+},{"./guest-nav":91,"./user-nav":93,"react":"react"}],93:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;
+exports.selectUserMenu = selectUserMenu;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _root = require('../change-avatar/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');
+
+var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
+
+var _modal = require('../../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var UserMenu = exports.UserMenu = function (_React$Component) {
+  _inherits(UserMenu, _React$Component);
+
+  function UserMenu() {
+    _classCallCheck(this, UserMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));
+  }
+
+  _createClass(UserMenu, [{
+    key: 'logout',
+    value: function logout() {
+      var decision = confirm(gettext("Are you sure you want to sign out?"));
+      if (decision) {
+        $('#hidden-logout-form').submit();
+      }
+    }
+  }, {
+    key: 'changeAvatar',
+    value: function changeAvatar() {
+      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu user-dropdown dropdown-menu-right',
+          role: 'menu' },
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown-header' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            this.props.user.username
+          )
+        ),
+        _react2.default.createElement('li', { className: 'divider' }),
+        _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'a',
+            { href: this.props.user.absolute_url },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'account_circle'
+            ),
+            gettext("See your profile")
+          )
+        ),
+        _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'a',
+            { href: _index2.default.get('USERCP_URL') },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'done_all'
+            ),
+            gettext("Change options")
+          )
+        ),
+        _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'portrait'
+            ),
+            gettext("Change avatar")
+          )
+        ),
+        _react2.default.createElement('li', { className: 'divider' }),
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown-footer' },
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-default btn-block',
+              onClick: this.logout },
+            gettext("Log out")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return UserMenu;
+}(_react2.default.Component);
+
+var UserNav = exports.UserNav = function (_React$Component2) {
+  _inherits(UserNav, _React$Component2);
+
+  function UserNav() {
+    _classCallCheck(this, UserNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));
+  }
+
+  _createClass(UserNav, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'ul nav navbar-nav nav-user' },
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown' },
+          _react2.default.createElement(
+            'a',
+            { href: this.props.user.absolute_url, className: 'dropdown-toggle',
+              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',
+              role: 'button' },
+            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })
+          ),
+          _react2.default.createElement(UserMenu, { user: this.props.user })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return UserNav;
+}(_react2.default.Component);
+
+function selectUserMenu(state) {
+  return { user: state.auth.user };
+}
+
+var CompactUserNav = exports.CompactUserNav = function (_React$Component3) {
+  _inherits(CompactUserNav, _React$Component3);
+
+  function CompactUserNav() {
+    _classCallCheck(this, CompactUserNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));
+  }
+
+  _createClass(CompactUserNav, [{
+    key: 'showUserMenu',
+    value: function showUserMenu() {
+      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button', onClick: this.showUserMenu },
+        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return CompactUserNav;
+}(_react2.default.Component);
+
+},{"../../index":108,"../../services/mobile-navbar-dropdown":120,"../../services/modal":121,"../avatar":53,"../change-avatar/root":59,"react":"react","react-redux":"react-redux"}],94:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.StatusLabel = exports.StatusIcon = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClass',
+    value: function getClass() {
+      var status = '';
+      if (this.props.status.is_banned) {
+        status = 'banned';
+      } else if (this.props.status.is_hidden) {
+        status = 'offline';
+      } else if (this.props.status.is_online_hidden) {
+        status = 'online';
+      } else if (this.props.status.is_offline_hidden) {
+        status = 'offline';
+      } else if (this.props.status.is_online) {
+        status = 'online';
+      } else if (this.props.status.is_offline) {
+        status = 'offline';
+      }
+
+      return 'user-status user-' + status;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'span',
+        { className: this.getClass() },
+        this.props.children
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+var StatusIcon = exports.StatusIcon = function (_React$Component2) {
+  _inherits(StatusIcon, _React$Component2);
+
+  function StatusIcon() {
+    _classCallCheck(this, StatusIcon);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusIcon).apply(this, arguments));
+  }
+
+  _createClass(StatusIcon, [{
+    key: 'getIcon',
+    value: function getIcon() {
+      if (this.props.status.is_banned) {
+        return 'remove_circle_outline';
+      } else if (this.props.status.is_hidden) {
+        return 'help_outline';
+      } else if (this.props.status.is_online_hidden) {
+        return 'label';
+      } else if (this.props.status.is_offline_hidden) {
+        return 'label_outline';
+      } else if (this.props.status.is_online) {
+        return 'lens';
+      } else if (this.props.status.is_offline) {
+        return 'panorama_fish_eye';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'span',
+        { className: 'material-icon status-icon' },
+        this.getIcon()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return StatusIcon;
+}(_react2.default.Component);
+
+var StatusLabel = exports.StatusLabel = function (_React$Component3) {
+  _inherits(StatusLabel, _React$Component3);
+
+  function StatusLabel() {
+    _classCallCheck(this, StatusLabel);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusLabel).apply(this, arguments));
+  }
+
+  _createClass(StatusLabel, [{
+    key: 'getHelp',
+    value: function getHelp() {
+      if (this.props.status.is_banned) {
+        if (this.props.status.banned_until) {
+          return interpolate(gettext("%(username)s is banned until %(ban_expires)s"), {
+            username: this.props.user.username,
+            ban_expires: this.props.status.banned_until.format('LL, LT')
+          }, true);
+        } else {
+          return interpolate(gettext("%(username)s is banned"), {
+            username: this.props.user.username
+          }, true);
+        }
+      } else if (this.props.status.is_hidden) {
+        return interpolate(gettext("%(username)s is hiding presence"), {
+          username: this.props.user.username
+        }, true);
+      } else if (this.props.status.is_online_hidden) {
+        return interpolate(gettext("%(username)s is online (hidden)"), {
+          username: this.props.user.username
+        }, true);
+      } else if (this.props.status.is_offline_hidden) {
+        return interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"), {
+          username: this.props.user.username,
+          last_click: this.props.status.last_click.fromNow()
+        }, true);
+      } else if (this.props.status.is_online) {
+        return interpolate(gettext("%(username)s is online"), {
+          username: this.props.user.username
+        }, true);
+      } else if (this.props.status.is_offline) {
+        return interpolate(gettext("%(username)s was last seen %(last_click)s"), {
+          username: this.props.user.username,
+          last_click: this.props.status.last_click.fromNow()
+        }, true);
+      }
+    }
+  }, {
+    key: 'getLabel',
+    value: function getLabel() {
+      if (this.props.status.is_banned) {
+        return gettext("Banned");
+      } else if (this.props.status.is_hidden) {
+        return gettext("Hidden");
+      } else if (this.props.status.is_online_hidden) {
+        return gettext("Online (hidden)");
+      } else if (this.props.status.is_offline_hidden) {
+        return gettext("Offline (hidden)");
+      } else if (this.props.status.is_online) {
+        return gettext("Online");
+      } else if (this.props.status.is_offline) {
+        return gettext("Offline");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'span',
+        { className: this.props.className || "status-label",
+          title: this.getHelp() },
+        this.getLabel()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return StatusLabel;
+}(_react2.default.Component);
+
+},{"react":"react"}],95:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getEmptyMessage',
+    value: function getEmptyMessage() {
+      return interpolate(gettext("No users have posted any new messages during last %(days)s days."), { 'days': this.props.trackedPeriod }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'active-posters-list' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.getEmptyMessage()
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],96:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _userStatus = require('../../user-status');
+
+var _userStatus2 = _interopRequireDefault(_userStatus);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.rank.css_class) {
+        return "list-group-item list-group-rank-" + this.props.rank.css_class;
+      } else {
+        return "list-group-item";
+      }
+    }
+  }, {
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      if (this.props.user.status) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _userStatus2.default,
+          { user: this.props.user, status: this.props.user.status },
+          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,
+            status: this.props.user.status }),
+          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,
+            status: this.props.user.status,
+            className: 'status-label hidden-xs hidden-sm' })
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'user-status' },
+            _react2.default.createElement(
+              'span',
+              { className: 'status-icon ui-preview' },
+              ' '
+            ),
+            _react2.default.createElement(
+              'span',
+              { className: 'status-label ui-preview hidden-xs hidden-sm' },
+              ' '
+            )
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getRankName',
+    value: function getRankName() {
+      if (this.props.rank.is_tab) {
+        /* jshint ignore:start */
+        var rankUrl = _index2.default.get('USERS_LIST_URL') + this.props.rank.slug + '/';
+        return _react2.default.createElement(
+          _reactRouter.Link,
+          { to: rankUrl, className: 'item-title rank-name' },
+          this.props.rank.name
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'item-title rank-name' },
+            this.props.rank.name
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getUserTitle',
+    value: function getUserTitle() {
+      if (this.props.user.title) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'user-title hidden-xs hidden-sm' },
+          this.props.user.title
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'li',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-user-avatar' },
+          _react2.default.createElement(
+            'a',
+            { href: this.props.user.absolute_url },
+            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '50' })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-user' },
+          _react2.default.createElement(
+            'div',
+            { className: 'user-name' },
+            _react2.default.createElement(
+              'a',
+              { href: this.props.user.absolute_url, className: 'item-title' },
+              this.props.user.username
+            )
+          ),
+          this.getUserStatus(),
+          this.getRankName(),
+          this.getUserTitle()
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-position' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            '#',
+            this.props.counter
+          ),
+          _react2.default.createElement(
+            'small',
+            null,
+            gettext("Rank")
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-posts-counted' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            this.props.user.meta.score
+          ),
+          _react2.default.createElement(
+            'small',
+            null,
+            gettext("Ranked posts")
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-posts-total' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            this.props.user.posts
+          ),
+          _react2.default.createElement(
+            'small',
+            null,
+            gettext("Total posts")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":108,"../../avatar":53,"../../user-status":94,"react":"react","react-router":"react-router"}],97:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _random = require('../../../utils/random');
+
+var random = _interopRequireWildcard(_random);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'active-posters-list' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead ui-preview-paragraph' },
+            random.range(3, 4).map(function (i) {
+              return _react2.default.createElement(
+                'span',
+                { key: i, className: 'ui-preview-text', style: { width: random.int(50, 120) + "px" } },
+                ' '
+              );
+            })
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'active-posters ui-preview' },
+            _react2.default.createElement(
+              'ul',
+              { className: 'list-group' },
+              random.range(5, 10).map(function (i, counter) {
+                return _react2.default.createElement(
+                  'li',
+                  { key: i, className: 'list-group-item' },
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-user-avatar' },
+                    _react2.default.createElement(
+                      'span',
+                      null,
+                      _react2.default.createElement(_avatar2.default, { size: '50' })
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-user' },
+                    _react2.default.createElement(
+                      'div',
+                      { className: 'user-name' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'item-title' },
+                        _react2.default.createElement(
+                          'span',
+                          { className: 'ui-preview-text', style: { width: random.int(30, 80) + "px" } },
+                          ' '
+                        )
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'span',
+                      { className: 'user-status' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'status-icon ui-preview' },
+                        ' '
+                      ),
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'status-label ui-preview hidden-xs hidden-sm' },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'span',
+                      { className: 'rank-name' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'span',
+                      { className: 'user-title hidden-xs hidden-sm' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                        ' '
+                      )
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-position' },
+                    _react2.default.createElement(
+                      'strong',
+                      null,
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: "30px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'small',
+                      null,
+                      gettext("Rank")
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-posts-counted' },
+                    _react2.default.createElement(
+                      'strong',
+                      null,
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: "30px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'small',
+                      null,
+                      gettext("Ranked posts")
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-posts-total' },
+                    _react2.default.createElement(
+                      'strong',
+                      null,
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: "30px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'small',
+                      null,
+                      gettext("Total posts")
+                    )
+                  )
+                );
+              })
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/random":132,"../../avatar":53,"react":"react"}],98:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _listItem = require('./list-item');
+
+var _listItem2 = _interopRequireDefault(_listItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getLeadMessage',
+    value: function getLeadMessage() {
+      var message = ngettext("%(posters)s most active poster from last %(days)s days.", "%(posters)s most active posters from last %(days)s days.", this.props.count);
+
+      return interpolate(message, {
+        posters: this.props.count,
+        days: this.props.trackedPeriod
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'active-posters-list' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.getLeadMessage()
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'active-posters ui-ready' },
+            _react2.default.createElement(
+              'ul',
+              { className: 'list-group' },
+              this.props.users.map(function (user, i) {
+                return _react2.default.createElement(_listItem2.default, { user: user,
+                  rank: user.rank,
+                  counter: i + 1,
+                  key: user.id });
+              })
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"./list-item":96,"react":"react"}],99:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _listEmpty = require('./list-empty');
+
+var _listEmpty2 = _interopRequireDefault(_listEmpty);
+
+var _listLoading = require('./list-loading');
+
+var _listLoading2 = _interopRequireDefault(_listLoading);
+
+var _list = require('./list');
+
+var _list2 = _interopRequireDefault(_list);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../../reducers/users');
+
+var _polls = require('../../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+
+      _this.setState({
+        isLoaded: true,
+
+        trackedPeriod: data.tracked_period,
+        count: data.count
+      });
+    };
+
+    if (_index2.default.has('USERS')) {
+      _this.initWithPreloadedData(_index2.default.pop('USERS'));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+
+    _this.startPolling();
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(data) {
+      this.state = {
+        isLoaded: true,
+
+        trackedPeriod: data.tracked_period,
+        count: data.count
+      };
+
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false
+      };
+    }
+  }, {
+    key: 'startPolling',
+    value: function startPolling() {
+      _polls2.default.start({
+        poll: 'active-posters',
+        url: _index2.default.get('USERS_API'),
+        data: {
+          list: 'active'
+        },
+        frequency: 90 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'componentDidMount',
+
+    /* jshint ignore:end */
+
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: this.props.route.extra.name,
+        parent: gettext("Users")
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      _polls2.default.stop('active-posters');
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      if (this.state.isLoaded) {
+        if (this.state.count > 0) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_list2.default, { users: this.props.users,
+            trackedPeriod: this.state.trackedPeriod,
+            count: this.state.count });
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(_listEmpty2.default, { trackedPeriod: this.state.trackedPeriod });
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_listLoading2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":108,"../../../reducers/users":114,"../../../services/page-title":122,"../../../services/polls":123,"../../../services/store":125,"./list":98,"./list-empty":95,"./list-loading":97,"react":"react"}],100:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.TabsNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+//jshint ignore:line
+
+//jshint ignore:line
+
+// jshint ignore:start
+var listUrl = function listUrl(baseUrl, list) {
+  var url = baseUrl;
+  if (list.component === 'rank') {
+    url += list.slug;
+  } else {
+    url += list.component;
+  }
+  return url + '/';
+};
+
+var navLinks = function navLinks(baseUrl, lists, hideNav) {
+  return lists.map(function (list) {
+    var url = listUrl(baseUrl, list);
+    return _react2.default.createElement(
+      _li2.default,
+      { path: url,
+        key: url },
+      _react2.default.createElement(
+        _reactRouter.Link,
+        { to: url, onClick: hideNav },
+        list.name
+      )
+    );
+  });
+};
+// jshint ignore:end
+
+var TabsNav = exports.TabsNav = function (_React$Component) {
+  _inherits(TabsNav, _React$Component);
+
+  function TabsNav() {
+    _classCallCheck(this, TabsNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));
+  }
+
+  _createClass(TabsNav, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'nav nav-pills' },
+        navLinks(this.props.baseUrl, this.props.lists)
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return TabsNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_React$Component2) {
+  _inherits(CompactNav, _React$Component2);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        navLinks(this.props.baseUrl, this.props.lists, this.props.hideNav)
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(_react2.default.Component);
+
+},{"../../index":108,"../li":63,"react":"react","react-router":"react-router"}],101:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _userStatus = require('../../user-status');
+
+var _userStatus2 = _interopRequireDefault(_userStatus);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.user.rank.css_class) {
+        return 'user-card user-card-' + this.props.user.rank.css_class;
+      } else {
+        return 'user-card';
+      }
+    }
+  }, {
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      if (this.props.user.status) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _userStatus2.default,
+          { user: this.props.user, status: this.props.user.status },
+          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,
+            status: this.props.user.status }),
+          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,
+            status: this.props.user.status,
+            className: 'status-label' })
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'user-status' },
+            _react2.default.createElement(
+              'span',
+              { className: 'status-icon ui-preview' },
+              ' '
+            ),
+            _react2.default.createElement(
+              'span',
+              { className: 'status-label ui-preview' },
+              ' '
+            )
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getUserTitle',
+    value: function getUserTitle() {
+      if (this.props.user.title) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'user-title' },
+          this.props.user.title
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getUserJoinedOn',
+    value: function getUserJoinedOn() {
+      /* jshint ignore:start */
+      var title = interpolate(gettext("Joined on %(joined_on)s"), {
+        'joined_on': this.props.user.joined_on.format('LL, LT')
+      }, true);
+
+      var age = interpolate(gettext("Joined %(joined_on)s"), {
+        'joined_on': this.props.user.joined_on.fromNow()
+      }, true);
+
+      return _react2.default.createElement(
+        'span',
+        { className: 'user-joined-on', title: title },
+        age
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'user-card-bg-image' },
+          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400', className: 'bg-image' }),
+          _react2.default.createElement(
+            'div',
+            { className: 'user-card-bg' },
+            _react2.default.createElement(
+              'div',
+              { className: 'user-details' },
+              _react2.default.createElement(
+                'div',
+                { className: 'user-avatar' },
+                _react2.default.createElement(
+                  'a',
+                  { href: this.props.user.absolute_url },
+                  _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400' })
+                )
+              ),
+              _react2.default.createElement(
+                'h4',
+                { className: 'user-name' },
+                _react2.default.createElement(
+                  'a',
+                  { href: this.props.user.absolute_url, className: 'item-title' },
+                  this.props.user.username
+                )
+              ),
+              _react2.default.createElement(
+                'p',
+                { className: 'user-subscript' },
+                this.getUserStatus(),
+                this.getUserTitle(),
+                this.getUserJoinedOn()
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'user-card-stats' },
+              _react2.default.createElement(
+                'ul',
+                { className: 'list-unstyled' },
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-posts-count' },
+                  _react2.default.createElement(
+                    'strong',
+                    null,
+                    this.props.user.posts
+                  ),
+                  _react2.default.createElement(
+                    'small',
+                    null,
+                    gettext("posts")
+                  )
+                ),
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-threads-count' },
+                  _react2.default.createElement(
+                    'strong',
+                    null,
+                    this.props.user.threads
+                  ),
+                  _react2.default.createElement(
+                    'small',
+                    null,
+                    gettext("threads")
+                  )
+                ),
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-followers-count' },
+                  _react2.default.createElement(
+                    'strong',
+                    null,
+                    this.props.user.followers
+                  ),
+                  _react2.default.createElement(
+                    'small',
+                    null,
+                    gettext("followers")
+                  )
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../avatar":53,"../../user-status":94,"react":"react"}],102:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _random = require('../../../utils/random');
+
+var random = _interopRequireWildcard(_random);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(
+          'div',
+          { className: 'users-cards-list' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            [0, 1, 2, 3].map(function (i) {
+              return _react2.default.createElement(
+                'div',
+                { className: 'col-md-4', key: i },
+                _react2.default.createElement(
+                  'div',
+                  { className: 'user-card ui-preview' },
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'user-card-bg-image' },
+                    _react2.default.createElement(_avatar2.default, { size: '400', className: 'bg-image' }),
+                    _react2.default.createElement(
+                      'div',
+                      { className: 'user-card-bg' },
+                      _react2.default.createElement(
+                        'div',
+                        { className: 'user-details' },
+                        _react2.default.createElement(
+                          'div',
+                          { className: 'user-avatar' },
+                          _react2.default.createElement(_avatar2.default, { size: '400' })
+                        ),
+                        _react2.default.createElement(
+                          'h4',
+                          { className: 'user-name' },
+                          _react2.default.createElement(
+                            'span',
+                            { className: 'item-title' },
+                            _react2.default.createElement(
+                              'span',
+                              { className: 'ui-preview-text', style: { width: random.int(60, 150) + "px" } },
+                              ' '
+                            )
+                          )
+                        ),
+                        _react2.default.createElement(
+                          'p',
+                          { className: 'user-subscript' },
+                          _react2.default.createElement(
+                            'span',
+                            { className: 'user-status' },
+                            _react2.default.createElement(
+                              'span',
+                              { className: 'status-icon ui-preview' },
+                              ' '
+                            ),
+                            _react2.default.createElement(
+                              'span',
+                              { className: 'status-label ui-preview' },
+                              ' '
+                            )
+                          ),
+                          _react2.default.createElement(
+                            'span',
+                            { className: 'user-joined-on' },
+                            _react2.default.createElement(
+                              'span',
+                              { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                              ' '
+                            )
+                          )
+                        )
+                      ),
+                      _react2.default.createElement(
+                        'div',
+                        { className: 'user-card-stats' },
+                        _react2.default.createElement(
+                          'ul',
+                          { className: 'list-unstyled' },
+                          _react2.default.createElement(
+                            'li',
+                            { className: 'user-posts-count' },
+                            _react2.default.createElement(
+                              'strong',
+                              null,
+                              _react2.default.createElement(
+                                'span',
+                                { className: 'ui-preview-text' },
+                                ' '
+                              )
+                            ),
+                            _react2.default.createElement(
+                              'small',
+                              null,
+                              gettext("posts")
+                            )
+                          ),
+                          _react2.default.createElement(
+                            'li',
+                            { className: 'user-threads-count' },
+                            _react2.default.createElement(
+                              'strong',
+                              null,
+                              _react2.default.createElement(
+                                'span',
+                                { className: 'ui-preview-text' },
+                                ' '
+                              )
+                            ),
+                            _react2.default.createElement(
+                              'small',
+                              null,
+                              gettext("threads")
+                            )
+                          ),
+                          _react2.default.createElement(
+                            'li',
+                            { className: 'user-followers-count' },
+                            _react2.default.createElement(
+                              'strong',
+                              null,
+                              _react2.default.createElement(
+                                'span',
+                                { className: 'ui-preview-text' },
+                                ' '
+                              )
+                            ),
+                            _react2.default.createElement(
+                              'small',
+                              null,
+                              gettext("followers")
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+              );
+            })
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/random":132,"../../avatar":53,"react":"react"}],103:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _listItem = require('./list-item');
+
+var _listItem2 = _interopRequireDefault(_listItem);
+
+var _pager = require('./pager');
+
+var _pager2 = _interopRequireDefault(_pager);
+
+var _batch = require('../../../utils/batch');
+
+var _batch2 = _interopRequireDefault(_batch);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getPager',
+    value: function getPager() {
+      if (this.props.pages > 1) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_pager2.default, this.props);
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(
+          'div',
+          { className: 'users-cards-list ui-ready' },
+          (0, _batch2.default)(this.props.users, 3).map(function (row, r) {
+            return _react2.default.createElement(
+              'div',
+              { className: 'row', key: r },
+              row.map(function (user) {
+                return _react2.default.createElement(
+                  'div',
+                  { className: 'col-md-4', key: user.id },
+                  _react2.default.createElement(_listItem2.default, { user: user })
+                );
+              })
+            );
+          })
+        ),
+        this.getPager()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/batch":128,"./list-item":101,"./pager":104,"react":"react"}],104:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _resetScroll = require('../../../utils/reset-scroll');
+
+var _resetScroll2 = _interopRequireDefault(_resetScroll);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getPreviousPage',
+    value: function getPreviousPage() {
+      if (this.props.previous || this.props.first) {
+        /* jshint ignore:start */
+        var url = this.props.baseUrl;
+        if (this.props.previous) {
+          url += this.props.previous + '/';
+        }
+
+        return _react2.default.createElement(
+          'li',
+          { className: 'previous' },
+          _react2.default.createElement(
+            _reactRouter.Link,
+            { to: url, onClick: _resetScroll2.default },
+            _react2.default.createElement(
+              'span',
+              { 'aria-hidden': 'true', className: 'material-icon' },
+              'arrow_back'
+            )
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getNextPage',
+    value: function getNextPage() {
+      if (this.props.next) {
+        /* jshint ignore:start */
+        var url = this.props.baseUrl + this.props.next + '/';
+        return _react2.default.createElement(
+          'li',
+          { className: 'next' },
+          _react2.default.createElement(
+            _reactRouter.Link,
+            { to: url, onClick: _resetScroll2.default },
+            _react2.default.createElement(
+              'span',
+              { 'aria-hidden': 'true', className: 'material-icon' },
+              'arrow_forward'
+            )
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getProgessBar',
+    value: function getProgessBar() {
+      var _this2 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'pager-progress-bar' },
+        this.props.page_range.map(function (page) {
+          var className = page === _this2.props.page ? 'active' : null;
+          var url = _this2.props.baseUrl;
+
+          if (page > 1) {
+            url += page + '/';
+          }
+
+          return _react2.default.createElement(
+            'li',
+            { key: page, className: className },
+            _react2.default.createElement(
+              _reactRouter.Link,
+              { to: url, onClick: _resetScroll2.default },
+              page
+            )
+          );
+        })
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'pager-undercontent' },
+        _react2.default.createElement(
+          'nav',
+          null,
+          _react2.default.createElement(
+            'ul',
+            { className: 'pager' },
+            this.getPreviousPage(),
+            this.getNextPage()
+          ),
+          this.getProgessBar()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/reset-scroll":133,"react":"react","react-router":"react-router"}],105:[function(require,module,exports){
+'use strict';
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _listLoading = require('./list-loading');
+
+var _listLoading2 = _interopRequireDefault(_listLoading);
+
+var _list = require('./list');
+
+var _list2 = _interopRequireDefault(_list);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../../reducers/users');
+
+var _polls = require('../../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+
+      data.isLoaded = true;
+      _this.setState(data);
+    };
+
+    if (_index2.default.has('USERS')) {
+      _this.initWithPreloadedData(_index2.default.pop('USERS'));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+
+    _this.startPolling(props.params.page || 1);
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(data) {
+      this.state = Object.assign(data, {
+        isLoaded: true
+      });
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false
+      };
+    }
+  }, {
+    key: 'startPolling',
+    value: function startPolling(page) {
+      _polls2.default.start({
+        poll: 'rank-users',
+        url: _index2.default.get('USERS_API'),
+        data: {
+          rank: this.props.route.rank.slug,
+          page: page
+        },
+        frequency: 90 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'componentDidMount',
+
+    /* jshint ignore:end */
+
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: this.props.route.rank.name,
+        page: this.props.params.page || null,
+        parent: gettext("Users")
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      _polls2.default.stop('rank-users');
+    }
+  }, {
+    key: 'componentWillReceiveProps',
+    value: function componentWillReceiveProps(nextProps) {
+      if (this.props.params.page !== nextProps.params.page) {
+        _pageTitle2.default.set({
+          title: this.props.route.rank.name,
+          page: nextProps.params.page || null,
+          parent: gettext("Users")
+        });
+
+        this.setState({
+          isLoaded: false
+        });
+
+        _polls2.default.stop('rank-users');
+        this.startPolling(nextProps.params.page);
+      }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.route.rank.css_class) {
+        return 'rank-users-list rank-users-' + this.props.route.rank.css_class;
+      } else {
+        return 'rank-users-list';
+      }
+    }
+  }, {
+    key: 'getRankDescription',
+    value: function getRankDescription() {
+      if (this.props.route.rank.description) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'rank-description' },
+          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {
+              __html: this.props.route.rank.description.html
+            } })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getComponent',
+    value: function getComponent() {
+      if (this.state.isLoaded) {
+        if (this.state.count > 0) {
+          /* jshint ignore:start */
+          var baseUrl = _index2.default.get('USERS_LIST_URL') + this.props.route.rank.slug + '/';
+          return _react2.default.createElement(_list2.default, _extends({ baseUrl: baseUrl,
+            users: this.props.users
+          }, this.state));
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              'p',
+              { className: 'lead' },
+              gettext("There are no users with this rank at the moment.")
+            );
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_listLoading2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          this.getRankDescription(),
+          this.getComponent()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":108,"../../../reducers/users":114,"../../../services/page-title":122,"../../../services/polls":123,"../../../services/store":125,"./list":103,"./list-loading":102,"react":"react"}],106:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.paths = paths;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _navs = require('./navs');
+
+var _root = require('./active-posters/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _root3 = require('./rank/root');
+
+var _root4 = _interopRequireDefault(_root3);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.toggleNav = function () {
+      if (_this.state.dropdown) {
+        _this.setState({
+          dropdown: false
+        });
+      } else {
+        _this.setState({
+          dropdown: true
+        });
+      }
+    };
+
+    _this.hideNav = function () {
+      _this.setState({
+        dropdown: false
+      });
+    };
+
+    _this.state = {
+      dropdown: false
+    };
+    return _this;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'getToggleNavClassName',
+
+    /* jshint ignore:end */
+
+    value: function getToggleNavClassName() {
+      if (this.state.dropdown) {
+        return 'btn btn-default btn-icon open';
+      } else {
+        return 'btn btn-default btn-icon';
+      }
+    }
+  }, {
+    key: 'getCompactNavClassName',
+    value: function getCompactNavClassName() {
+      if (this.state.dropdown) {
+        return 'compact-nav open';
+      } else {
+        return 'compact-nav';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-users-lists' },
+        _react2.default.createElement(
+          'div',
+          { className: 'page-header tabbed' },
+          _react2.default.createElement(
+            'div',
+            { className: 'container' },
+            _react2.default.createElement(
+              'h1',
+              { className: 'pull-left' },
+              gettext("Users")
+            ),
+            _react2.default.createElement(
+              'button',
+              { className: 'btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg',
+                type: 'button',
+                onClick: this.toggleNav,
+                'aria-haspopup': 'true',
+                'aria-expanded': this.state.dropdown ? 'true' : 'false' },
+              _react2.default.createElement(
+                'i',
+                { className: 'material-icon' },
+                'menu'
+              )
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'page-tabs hidden-xs hidden-sm' },
+            _react2.default.createElement(
+              'div',
+              { className: 'container' },
+              _react2.default.createElement(_navs.TabsNav, { lists: _index2.default.get('USERS_LISTS'),
+                baseUrl: _index2.default.get('USERS_LIST_URL') })
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          _react2.default.createElement(_navs.CompactNav, { lists: _index2.default.get('USERS_LISTS'),
+            baseUrl: _index2.default.get('USERS_LIST_URL'),
+            hideNav: this.hideNav })
+        ),
+        this.props.children
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user,
+    'users': store.users
+  };
+}
+
+function paths() {
+  var paths = [];
+
+  _index2.default.get('USERS_LISTS').forEach(function (item) {
+    if (item.component === 'rank') {
+      paths.push({
+        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/:page/',
+        component: (0, _reactRedux.connect)(select)(_root4.default),
+        rank: {
+          name: item.name,
+          slug: item.slug,
+          css_class: item.css_class,
+          description: item.description
+        }
+      });
+      paths.push({
+        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/',
+        component: (0, _reactRedux.connect)(select)(_root4.default),
+        rank: {
+          name: item.name,
+          slug: item.slug,
+          css_class: item.css_class,
+          description: item.description
+        }
+      });
+    } else if (item.component === 'active-posters') {
+      paths.push({
+        path: _index2.default.get('USERS_LIST_URL') + item.component + '/',
+        component: (0, _reactRedux.connect)(select)(_root2.default),
+        extra: {
+          name: item.name
+        }
+      });
+    }
+  });
+
+  return paths;
+}
+
+},{"../../index":108,"./active-posters/root":99,"./navs":100,"./rank/root":105,"react":"react","react-redux":"react-redux"}],107:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {
+      _this.props.onChange({
+        target: {
+          value: !_this.props.value
+        }
+      });
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+
+  _createClass(_class, [{
+    key: "getClassName",
+    value: function getClassName() {
+      if (this.props.value) {
+        return "btn btn-yes-no btn-yes-no-on";
+      } else {
+        return "btn btn-yes-no btn-yes-no-off";
+      }
+    }
+  }, {
+    key: "getIcon",
+    value: function getIcon() {
+      if (this.props.value) {
+        return this.props.iconOn || 'check_box';
+      } else {
+        return this.props.iconOff || 'check_box_outline_blank';
+      }
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel() {
+      if (this.props.value) {
+        return this.props.labelOn || gettext("yes");
+      } else {
+        return this.props.labelOff || gettext("no");
+      }
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: "render",
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "button",
+        { type: "button",
+          onClick: this.toggle,
+          className: this.getClassName(),
+          id: this.props.id || null,
+          "aria-describedby": this.props['aria-describedby'] || null,
+          disabled: this.props.disabled || false },
+        _react2.default.createElement(
+          "span",
+          { className: "material-icon" },
+          this.getIcon()
+        ),
+        this.getLabel()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],108:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Misago = undefined;
+
+var _orderedList = require('./utils/ordered-list');
+
+var _orderedList2 = _interopRequireDefault(_orderedList);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Misago = exports.Misago = function () {
+  function Misago() {
+    _classCallCheck(this, Misago);
+
+    this._initializers = [];
+    this._context = {};
+  }
+
+  _createClass(Misago, [{
+    key: 'addInitializer',
+    value: function addInitializer(initializer) {
+      this._initializers.push({
+        key: initializer.name,
+
+        item: initializer.initializer,
+
+        after: initializer.after,
+        before: initializer.before
+      });
+    }
+  }, {
+    key: 'init',
+    value: function init(context) {
+      var _this = this;
+
+      this._context = context;
+
+      var initOrder = new _orderedList2.default(this._initializers).orderedValues();
+      initOrder.forEach(function (initializer) {
+        initializer(_this);
+      });
+    }
+
+    // context accessors
+
+  }, {
+    key: 'has',
+    value: function has(key) {
+      return !!this._context[key];
+    }
+  }, {
+    key: 'get',
+    value: function get(key, fallback) {
+      if (this.has(key)) {
+        return this._context[key];
+      } else {
+        return fallback || undefined;
+      }
+    }
+  }, {
+    key: 'pop',
+    value: function pop(key) {
+      if (this.has(key)) {
+        var value = this._context[key];
+        this._context[key] = null;
+        return value;
+      } else {
+        return undefined;
+      }
+    }
+  }]);
+
+  return Misago;
+}();
+
+// create  singleton
+
+var misago = new Misago();
+
+// expose it globally
+global.misago = misago;
+
+// and export it for tests and stuff
+exports.default = misago;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./utils/ordered-list":131}],109:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;
+exports.patchUser = patchUser;
+exports.signIn = signIn;
+exports.signOut = signOut;
+exports.default = auth;
+
+var _users = require('./users');
+
+var initialState = exports.initialState = {
+  signedIn: false,
+  signedOut: false
+};
+
+var PATCH_USER = exports.PATCH_USER = 'PATCH_USER';
+var SIGN_IN = exports.SIGN_IN = 'SIGN_IN';
+var SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';
+
+function patchUser(patch) {
+  return {
+    type: PATCH_USER,
+    patch: patch
+  };
+}
+
+function signIn(user) {
+  return {
+    type: SIGN_IN,
+    user: user
+  };
+}
+
+function signOut() {
+  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];
+
+  return {
+    type: SIGN_OUT,
+    soft: soft
+  };
+}
+
+function auth() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case PATCH_USER:
+      var newState = Object.assign({}, state);
+      newState.user = Object.assign({}, state.user, action.patch);
+      return newState;
+
+    case SIGN_IN:
+      return Object.assign({}, state, {
+        signedIn: action.user
+      });
+
+    case SIGN_OUT:
+      return Object.assign({}, state, {
+        isAuthenticated: false,
+        isAnonymous: true,
+        signedOut: !action.soft
+      });
+
+    case _users.UPDATE_AVATAR:
+      if (state.isAuthenticated && state.user.id === action.userId) {
+        var _newState = Object.assign({}, state);
+        _newState.user = Object.assign({}, state.user, {
+          'avatar_hash': action.avatarHash
+        });
+        return _newState;
+      }
+      return state;
+
+    case _users.UPDATE_USERNAME:
+      if (state.isAuthenticated && state.user.id === action.userId) {
+        var _newState2 = Object.assign({}, state);
+        _newState2.user = Object.assign({}, state.user, {
+          username: action.username,
+          slug: action.slug
+        });
+        return _newState2;
+      }
+      return state;
+
+    default:
+      return state;
+  }
+}
+
+},{"./users":114}],110:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PATCH_PROFILE = exports.DEHYDRATE_PROFILE = undefined;
+exports.dehydrate = dehydrate;
+exports.patchProfile = patchProfile;
+exports.default = auth;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _users = require('./users');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var DEHYDRATE_PROFILE = exports.DEHYDRATE_PROFILE = 'DEHYDRATE_PROFILE';
+var PATCH_PROFILE = exports.PATCH_PROFILE = 'PATCH_PROFILE';
+
+function dehydrate(profile) {
+  return {
+    type: DEHYDRATE_PROFILE,
+    profile: profile
+  };
+}
+
+function patchProfile(patch) {
+  return {
+    type: PATCH_PROFILE,
+    patch: patch
+  };
+}
+
+function auth() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case DEHYDRATE_PROFILE:
+      return Object.assign({}, action.profile, {
+        joined_on: (0, _moment2.default)(action.profile.joined_on),
+        status: (0, _users.dehydrateStatus)(action.profile.status)
+      });
+
+    case PATCH_PROFILE:
+      return Object.assign({}, state, action.patch);
+
+    case _users.UPDATE_AVATAR:
+      if (state.id === action.userId) {
+        return Object.assign({}, state, {
+          'avatar_hash': action.avatarHash
+        });
+      }
+      return state;
+
+    default:
+      return state;
+  }
+}
+
+},{"./users":114,"moment":"moment"}],111:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.showSnackbar = showSnackbar;
+exports.hideSnackbar = hideSnackbar;
+exports.default = snackbar;
+var initialState = exports.initialState = {
+  type: 'info',
+  message: '',
+  isVisible: false
+};
+
+var SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';
+var HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';
+
+function showSnackbar(message, type) {
+  return {
+    type: SHOW_SNACKBAR,
+    message: message,
+    messageType: type
+  };
+}
+
+function hideSnackbar() {
+  return {
+    type: HIDE_SNACKBAR
+  };
+}
+
+function snackbar() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  if (action.type === SHOW_SNACKBAR) {
+    return {
+      type: action.messageType,
+      message: action.message,
+      isVisible: true
+    };
+  } else if (action.type === HIDE_SNACKBAR) {
+    return Object.assign({}, state, {
+      isVisible: false
+    });
+  } else {
+    return state;
+  }
+}
+
+},{}],112:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.doTick = doTick;
+exports.default = tick;
+var initialState = exports.initialState = {
+  tick: 0
+};
+
+var TICK = exports.TICK = 'TICK';
+
+function doTick() {
+  return {
+    type: TICK
+  };
+}
+
+function tick() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  if (action.type === TICK) {
+    return Object.assign({}, state, {
+      tick: state.tick + 1
+    });
+  } else {
+    return state;
+  }
+}
+
+},{}],113:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DEHYDRATE_HISTORY = exports.ADD_NAME_CHANGE = undefined;
+exports.addNameChange = addNameChange;
+exports.dehydrate = dehydrate;
+exports.default = username;
+
+var _users = require('./users');
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';
+var DEHYDRATE_HISTORY = exports.DEHYDRATE_HISTORY = 'DEHYDRATE_HISTORY';
+
+function addNameChange(change, user, changedBy) {
+  return {
+    type: ADD_NAME_CHANGE,
+    change: change,
+    user: user,
+    changedBy: changedBy
+  };
+}
+
+function dehydrate(items) {
+  return {
+    type: DEHYDRATE_HISTORY,
+    items: items
+  };
+}
+
+function username() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case ADD_NAME_CHANGE:
+      var newState = state.slice();
+      newState.unshift({
+        id: Math.floor(Date.now() / 1000), // just small hax for getting id
+        changed_by: action.changedBy,
+        changed_by_username: action.changedBy.username,
+        changed_on: (0, _moment2.default)(),
+        new_username: action.change.username,
+        old_username: action.user.username
+      });
+      return newState;
+
+    case DEHYDRATE_HISTORY:
+      return action.items.map(function (item) {
+        return Object.assign({}, item, {
+          changed_on: (0, _moment2.default)(item.changed_on)
+        });
+      });
+
+    case _users.UPDATE_AVATAR:
+      return state.map(function (item) {
+        item = Object.assign({}, item);
+        if (item.changed_by && item.changed_by.id === action.userId) {
+          item.changed_by = Object.assign({}, item.changed_by, {
+            'avatar_hash': action.avatarHash
+          });
+        }
+
+        return item;
+      });
+
+    case _users.UPDATE_USERNAME:
+      return state.map(function (item) {
+        item = Object.assign({}, item);
+        if (item.changed_by && item.changed_by.id === action.userId) {
+          item.changed_by = Object.assign({}, item.changed_by, {
+            'username': action.username,
+            'slug': action.slug
+          });
+        }
+
+        return Object.assign({}, item);
+      });
+
+    default:
+      return state;
+  }
+}
+
+},{"./users":114,"moment":"moment"}],114:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.UPDATE_USERNAME = exports.UPDATE_AVATAR = exports.DEHYDRATE_USERS = undefined;
+exports.dehydrate = dehydrate;
+exports.dehydrateStatus = dehydrateStatus;
+exports.updateAvatar = updateAvatar;
+exports.updateUsername = updateUsername;
+exports.default = user;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var DEHYDRATE_USERS = exports.DEHYDRATE_USERS = 'DEHYDRATE_USERS';
+var UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';
+var UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';
+
+function dehydrate(items) {
+  return {
+    type: DEHYDRATE_USERS,
+    items: items
+  };
+}
+
+function dehydrateStatus(status) {
+  if (status) {
+    return Object.assign({}, status, {
+      last_click: status.last_click ? (0, _moment2.default)(status.last_click) : null,
+      banned_until: status.banned_until ? (0, _moment2.default)(status.banned_until) : null
+    });
+  } else {
+    return null;
+  }
+}
+
+function updateAvatar(user, avatarHash) {
+  return {
+    type: UPDATE_AVATAR,
+    userId: user.id,
+    avatarHash: avatarHash
+  };
+}
+
+function updateUsername(user, username, slug) {
+  return {
+    type: UPDATE_USERNAME,
+    userId: user.id,
+    username: username,
+    slug: slug
+  };
+}
+
+function user() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case DEHYDRATE_USERS:
+      return action.items.map(function (item) {
+        return Object.assign({}, item, {
+          joined_on: (0, _moment2.default)(item.joined_on),
+          status: dehydrateStatus(item.status)
+        });
+      });
+
+    case UPDATE_AVATAR:
+      return state.map(function (item) {
+        item = Object.assign({}, item);
+        if (item.id === action.userId) {
+          item.avatar_hash = action.avatarHash;
+        }
+
+        return item;
+      });
+
+    default:
+      return state;
+  }
+}
+
+},{"moment":"moment"}],115:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Ajax = exports.Ajax = function () {
+  function Ajax() {
+    _classCallCheck(this, Ajax);
+
+    this._cookieName = null;
+    this._csrfToken = null;
+  }
+
+  _createClass(Ajax, [{
+    key: 'init',
+    value: function init(cookieName) {
+      this._cookieName = cookieName;
+      this._csrfToken = this.getCsrfToken();
+    }
+  }, {
+    key: 'getCsrfToken',
+    value: function getCsrfToken() {
+      if (document.cookie.indexOf(this._cookieName) !== -1) {
+        var cookieRegex = new RegExp(this._cookieName + '\=([^;]*)');
+        var cookie = document.cookie.match(cookieRegex)[0];
+        return cookie ? cookie.split('=')[1] : null;
+      } else {
+        return null;
+      }
+    }
+  }, {
+    key: 'request',
+    value: function request(method, url, data) {
+      var self = this;
+      return new Promise(function (resolve, reject) {
+        var xhr = {
+          url: url,
+          method: method,
+          headers: {
+            'X-CSRFToken': self._csrfToken
+          },
+
+          data: data ? JSON.stringify(data) : null,
+          contentType: "application/json; charset=utf-8",
+          dataType: 'json',
+
+          success: function success(data) {
+            resolve(data);
+          },
+
+          error: function error(jqXHR) {
+            var rejection = jqXHR.responseJSON || {};
+
+            rejection.status = jqXHR.status;
+
+            if (rejection.status === 0) {
+              rejection.detail = gettext("Lost connection with application.");
+            }
+
+            rejection.statusText = jqXHR.statusText;
+
+            reject(rejection);
+          }
+        };
+
+        $.ajax(xhr);
+      });
+    }
+  }, {
+    key: 'get',
+    value: function get(url, params) {
+      if (params) {
+        url += '?' + $.param(params);
+      }
+      return this.request('GET', url);
+    }
+  }, {
+    key: 'post',
+    value: function post(url, data) {
+      return this.request('POST', url, data);
+    }
+  }, {
+    key: 'patch',
+    value: function patch(url, data) {
+      return this.request('PATCH', url, data);
+    }
+  }, {
+    key: 'put',
+    value: function put(url, data) {
+      return this.request('PUT', url, data);
+    }
+  }, {
+    key: 'delete',
+    value: function _delete(url) {
+      return this.request('DELETE', url);
+    }
+  }, {
+    key: 'upload',
+    value: function upload(url, data, progress) {
+      var self = this;
+      return new Promise(function (resolve, reject) {
+        var xhr = {
+          url: url,
+          method: 'POST',
+          headers: {
+            'X-CSRFToken': self._csrfToken
+          },
+
+          data: data,
+          contentType: false,
+          processData: false,
+
+          xhr: function xhr() {
+            var xhr = new window.XMLHttpRequest();
+            xhr.upload.addEventListener("progress", function (evt) {
+              if (evt.lengthComputable) {
+                progress(Math.round(evt.loaded / evt.total * 100));
+              }
+            }, false);
+            return xhr;
+          },
+
+          success: function success(response) {
+            resolve(response);
+          },
+
+          error: function error(jqXHR) {
+            var rejection = jqXHR.responseJSON || {};
+
+            rejection.status = jqXHR.status;
+
+            if (rejection.status === 0) {
+              rejection.detail = gettext("Lost connection with application.");
+            }
+
+            rejection.statusText = jqXHR.statusText;
+
+            reject(rejection);
+          }
+        };
+
+        $.ajax(xhr);
+      });
+    }
+  }]);
+
+  return Ajax;
+}();
+
+exports.default = new Ajax();
+
+},{}],116:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Auth = undefined;
+
+var _auth = require('../reducers/auth');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// jshint ignore:line
+
+var Auth = exports.Auth = function () {
+  function Auth() {
+    _classCallCheck(this, Auth);
+  }
+
+  _createClass(Auth, [{
+    key: 'init',
+    value: function init(store, local, modal) {
+      this._store = store;
+      this._local = local;
+      this._modal = modal;
+
+      // tell other tabs what auth state is because we are most current with it
+      this.syncSession();
+
+      // listen for other tabs to tell us that state changed
+      this.watchState();
+    }
+  }, {
+    key: 'syncSession',
+    value: function syncSession() {
+      var state = this._store.getState().auth;
+      if (state.isAuthenticated) {
+        this._local.set('auth', {
+          isAuthenticated: true,
+          username: state.user.username
+        });
+      } else {
+        this._local.set('auth', {
+          isAuthenticated: false
+        });
+      }
+    }
+  }, {
+    key: 'watchState',
+    value: function watchState() {
+      var _this = this;
+
+      this._local.watch('auth', function (newState) {
+        if (newState.isAuthenticated) {
+          _this._store.dispatch((0, _auth.signIn)({
+            username: newState.username
+          }));
+        } else {
+          _this._store.dispatch((0, _auth.signOut)());
+        }
+      });
+      this._modal.hide();
+    }
+  }, {
+    key: 'signIn',
+    value: function signIn(user) {
+      this._store.dispatch((0, _auth.signIn)(user));
+      this._local.set('auth', {
+        isAuthenticated: true,
+        username: user.username
+      });
+      this._modal.hide();
+    }
+  }, {
+    key: 'signOut',
+    value: function signOut() {
+      this._store.dispatch((0, _auth.signOut)());
+      this._local.set('auth', {
+        isAuthenticated: false
+      });
+      this._modal.hide();
+    }
+  }, {
+    key: 'softSignOut',
+    value: function softSignOut() {
+      this._store.dispatch((0, _auth.signOut)(true));
+      this._local.set('auth', {
+        isAuthenticated: false
+      });
+      this._modal.hide();
+    }
+  }]);
+
+  return Auth;
+}();
+
+exports.default = new Auth();
+
+},{"../reducers/auth":109}],117:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */
+// jshint ignore:line
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _formGroup = require('../components/form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// jshint ignore:line
+
+var BaseCaptcha = exports.BaseCaptcha = function () {
+  function BaseCaptcha() {
+    _classCallCheck(this, BaseCaptcha);
+  }
+
+  _createClass(BaseCaptcha, [{
+    key: 'init',
+    value: function init(context, ajax, include, snackbar) {
+      this._context = context;
+      this._ajax = ajax;
+      this._include = include;
+      this._snackbar = snackbar;
+    }
+  }]);
+
+  return BaseCaptcha;
+}();
+
+var NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {
+  _inherits(NoCaptcha, _BaseCaptcha);
+
+  function NoCaptcha() {
+    _classCallCheck(this, NoCaptcha);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));
+  }
+
+  _createClass(NoCaptcha, [{
+    key: 'load',
+    value: function load() {
+      return new Promise(function (resolve) {
+        // immediately resolve as we don't have anything to validate
+        resolve();
+      });
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return null;
+    }
+  }, {
+    key: 'component',
+    value: function component() {
+      return null;
+    }
+  }]);
+
+  return NoCaptcha;
+}(BaseCaptcha);
+
+var QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {
+  _inherits(QACaptcha, _BaseCaptcha2);
+
+  function QACaptcha() {
+    _classCallCheck(this, QACaptcha);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));
+  }
+
+  _createClass(QACaptcha, [{
+    key: 'load',
+    value: function load() {
+      var self = this;
+      return new Promise(function (resolve, reject) {
+        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {
+          self.question = data.question;
+          self.helpText = data.help_text;
+          resolve();
+        }, function () {
+          self._snackbar.error(gettext("Failed to load CAPTCHA."));
+          reject();
+        });
+      });
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return [];
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'component',
+    value: function component(kwargs) {
+      return _react2.default.createElement(
+        _formGroup2.default,
+        { label: this.question, 'for': 'id_captcha',
+          labelClass: kwargs.labelClass || "col-sm-4",
+          controlClass: kwargs.controlClass || "col-sm-8",
+          validation: kwargs.form.state.errors.captcha,
+          helpText: this.helpText || null },
+        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',
+          'aria-describedby': 'id_captcha_status',
+          disabled: kwargs.form.state.isLoading,
+          onChange: kwargs.form.bindInput('captcha'),
+          value: kwargs.form.state.captcha })
+      );
+    }
+    /* jshint ignore:end */
+
+  }]);
+
+  return QACaptcha;
+}(BaseCaptcha);
+
+var ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {
+  _inherits(ReCaptchaComponent, _React$Component);
+
+  function ReCaptchaComponent() {
+    _classCallCheck(this, ReCaptchaComponent);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));
+  }
+
+  _createClass(ReCaptchaComponent, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this4 = this;
+
+      grecaptcha.render('recaptcha', {
+        'sitekey': this.props.siteKey,
+        'callback': function callback(response) {
+          // fire fakey event to binding
+          _this4.props.binding({
+            target: {
+              value: response
+            }
+          });
+        }
+      });
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement('div', { id: 'recaptcha' });
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return ReCaptchaComponent;
+}(_react2.default.Component);
+
+var ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {
+  _inherits(ReCaptcha, _BaseCaptcha3);
+
+  function ReCaptcha() {
+    _classCallCheck(this, ReCaptcha);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));
+  }
+
+  _createClass(ReCaptcha, [{
+    key: 'load',
+    value: function load() {
+      this._include.include('https://www.google.com/recaptcha/api.js', true);
+
+      return new Promise(function (resolve) {
+        var wait = function wait() {
+          if (typeof grecaptcha === "undefined") {
+            window.setTimeout(function () {
+              wait();
+            }, 200);
+          } else {
+            resolve();
+          }
+        };
+        wait();
+      });
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return [];
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'component',
+    value: function component(kwargs) {
+      return _react2.default.createElement(
+        _formGroup2.default,
+        { label: gettext("Captcha"), 'for': 'id_captcha',
+          labelClass: kwargs.labelClass || "col-sm-4",
+          controlClass: kwargs.controlClass || "col-sm-8",
+          validation: kwargs.form.state.errors.captcha,
+          helpText: gettext("Please solve the quick test.") },
+        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,
+          binding: kwargs.form.bindInput('captcha') })
+      );
+    }
+    /* jshint ignore:end */
+
+  }]);
+
+  return ReCaptcha;
+}(BaseCaptcha);
+
+var Captcha = exports.Captcha = function () {
+  function Captcha() {
+    _classCallCheck(this, Captcha);
+  }
+
+  _createClass(Captcha, [{
+    key: 'init',
+    value: function init(context, ajax, include, snackbar) {
+      switch (context.get('SETTINGS').captcha_type) {
+        case 'no':
+          this._captcha = new NoCaptcha();
+          break;
+
+        case 'qa':
+          this._captcha = new QACaptcha();
+          break;
+
+        case 're':
+          this._captcha = new ReCaptcha();
+          break;
+      }
+
+      this._captcha.init(context, ajax, include, snackbar);
+    }
+
+    // accessors for underlying strategy
+
+  }, {
+    key: 'load',
+    value: function load() {
+      return this._captcha.load();
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return this._captcha.validator();
+    }
+  }, {
+    key: 'component',
+    value: function component(kwargs) {
+      return this._captcha.component(kwargs);
+    }
+  }]);
+
+  return Captcha;
+}();
+
+exports.default = new Captcha();
+
+},{"../components/form-group":61,"react":"react"}],118:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Include = exports.Include = function () {
+  function Include() {
+    _classCallCheck(this, Include);
+  }
+
+  _createClass(Include, [{
+    key: 'init',
+    value: function init(staticUrl) {
+      this._staticUrl = staticUrl;
+      this._included = [];
+    }
+  }, {
+    key: 'include',
+    value: function include(script) {
+      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
+
+      if (this._included.indexOf(script) === -1) {
+        this._included.push(script);
+        this._include(script, remote);
+      }
+    }
+  }, {
+    key: '_include',
+    value: function _include(script, remote) {
+      $.ajax({
+        url: (!remote ? this._staticUrl : '') + script,
+        cache: true,
+        dataType: 'script'
+      });
+    }
+  }]);
+
+  return Include;
+}();
+
+exports.default = new Include();
+
+},{}],119:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var storage = window.localStorage;
+
+var LocalStorage = exports.LocalStorage = function () {
+  function LocalStorage() {
+    _classCallCheck(this, LocalStorage);
+  }
+
+  _createClass(LocalStorage, [{
+    key: 'init',
+    value: function init(prefix) {
+      var _this = this;
+
+      this._prefix = prefix;
+      this._watchers = [];
+
+      window.addEventListener('storage', function (e) {
+        var newValueJson = JSON.parse(e.newValue);
+        _this._watchers.forEach(function (watcher) {
+          if (watcher.key === e.key && e.oldValue !== e.newValue) {
+            watcher.callback(newValueJson);
+          }
+        });
+      });
+    }
+  }, {
+    key: 'set',
+    value: function set(key, value) {
+      storage.setItem(this._prefix + key, JSON.stringify(value));
+    }
+  }, {
+    key: 'get',
+    value: function get(key) {
+      var itemString = storage.getItem(this._prefix + key);
+      if (itemString) {
+        return JSON.parse(itemString);
+      } else {
+        return null;
+      }
+    }
+  }, {
+    key: 'watch',
+    value: function watch(key, callback) {
+      this._watchers.push({
+        key: this._prefix + key,
+        callback: callback
+      });
+    }
+  }]);
+
+  return LocalStorage;
+}();
+
+exports.default = new LocalStorage();
+
+},{}],120:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.MobileNavbarDropdown = undefined;
+
+var _mountComponent = require('../utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {
+  function MobileNavbarDropdown() {
+    _classCallCheck(this, MobileNavbarDropdown);
+  }
+
+  _createClass(MobileNavbarDropdown, [{
+    key: 'init',
+    value: function init(element) {
+      this._element = element;
+      this._component = null;
+    }
+  }, {
+    key: 'show',
+    value: function show(component) {
+      if (this._component === component) {
+        this.hide();
+      } else {
+        this._component = component;
+        (0, _mountComponent2.default)(component, this._element.id);
+        $(this._element).addClass('open');
+      }
+    }
+  }, {
+    key: 'showConnected',
+    value: function showConnected(name, component) {
+      if (this._component === name) {
+        this.hide();
+      } else {
+        this._component = name;
+        (0, _mountComponent2.default)(component, this._element.id, true);
+        $(this._element).addClass('open');
+      }
+    }
+  }, {
+    key: 'hide',
+    value: function hide() {
+      $(this._element).removeClass('open');
+      this._component = null;
+    }
+  }]);
+
+  return MobileNavbarDropdown;
+}();
+
+exports.default = new MobileNavbarDropdown();
+
+},{"../utils/mount-component":130}],121:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Modal = undefined;
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _mountComponent = require('../utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Modal = exports.Modal = function () {
+  function Modal() {
+    _classCallCheck(this, Modal);
+  }
+
+  _createClass(Modal, [{
+    key: 'init',
+    value: function init(element) {
+      var _this = this;
+
+      this._element = element;
+
+      this._modal = $(element).modal({ show: false });
+
+      this._modal.on('hidden.bs.modal', function () {
+        _reactDom2.default.unmountComponentAtNode(_this._element);
+      });
+    }
+  }, {
+    key: 'show',
+    value: function show(component) {
+      (0, _mountComponent2.default)(component, this._element.id);
+      this._modal.modal('show');
+    }
+  }, {
+    key: 'hide',
+    value: function hide() {
+      this._modal.modal('hide');
+    }
+  }]);
+
+  return Modal;
+}();
+
+exports.default = new Modal();
+
+},{"../utils/mount-component":130,"react-dom":"react-dom"}],122:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var PageTitle = exports.PageTitle = function () {
+  function PageTitle() {
+    _classCallCheck(this, PageTitle);
+  }
+
+  _createClass(PageTitle, [{
+    key: 'init',
+    value: function init(forumName) {
+      this._forumName = forumName;
+    }
+  }, {
+    key: 'set',
+    value: function set(title) {
+      if (typeof title === 'string') {
+        title = { title: title };
+      }
+
+      var finalTitle = title.title;
+
+      if (title.page) {
+        var pageLabel = interpolate(gettext('page: %(page)s'), {
+          page: title.page
+        }, true);
+
+        finalTitle += ' (' + pageLabel + ')';
+      }
+
+      if (title.parent) {
+        finalTitle += ' | ' + title.parent;
+      }
+
+      document.title = finalTitle + ' | ' + this._forumName;
+    }
+  }]);
+
+  return PageTitle;
+}();
+
+exports.default = new PageTitle();
+
+},{}],123:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Polls = exports.Polls = function () {
+  function Polls() {
+    _classCallCheck(this, Polls);
+  }
+
+  _createClass(Polls, [{
+    key: "init",
+    value: function init(ajax, snackbar) {
+      this._ajax = ajax;
+      this._snackbar = snackbar;
+
+      this._polls = {};
+    }
+  }, {
+    key: "start",
+    value: function start(kwargs) {
+      var _this = this;
+
+      var poolServer = function poolServer() {
+        _this._polls[kwargs.poll] = kwargs;
+
+        _this._ajax.get(kwargs.url, kwargs.data || null).then(function (data) {
+          kwargs.update(data);
+
+          _this._polls[kwargs.poll].timeout = window.setTimeout(poolServer, kwargs.frequency);
+        }, function (rejection) {
+          if (kwargs.error) {
+            kwargs.error(rejection);
+          } else {
+            _this._snackbar.apiError(rejection);
+          }
+        });
+      };
+
+      poolServer();
+    }
+  }, {
+    key: "stop",
+    value: function stop(pollId) {
+      if (this._polls[pollId]) {
+        window.clearTimeout(this._polls[pollId].timeout);
+      }
+    }
+  }]);
+
+  return Polls;
+}();
+
+exports.default = new Polls();
+
+},{}],124:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Snackbar = undefined;
+
+var _snackbar = require('../reducers/snackbar');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var HIDE_ANIMATION_LENGTH = 300;
+var MESSAGE_SHOW_LENGTH = 5000;
+
+var Snackbar = exports.Snackbar = function () {
+  function Snackbar() {
+    _classCallCheck(this, Snackbar);
+  }
+
+  _createClass(Snackbar, [{
+    key: 'init',
+    value: function init(store) {
+      this._store = store;
+      this._timeout = null;
+    }
+  }, {
+    key: 'alert',
+    value: function alert(message, type) {
+      var _this = this;
+
+      if (this._timeout) {
+        window.clearTimeout(this._timeout);
+        this._store.dispatch((0, _snackbar.hideSnackbar)());
+
+        this._timeout = window.setTimeout(function () {
+          _this._timeout = null;
+          _this.alert(message, type);
+        }, HIDE_ANIMATION_LENGTH);
+      } else {
+        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));
+        this._timeout = window.setTimeout(function () {
+          _this._store.dispatch((0, _snackbar.hideSnackbar)());
+          _this._timeout = null;
+        }, MESSAGE_SHOW_LENGTH);
+      }
+    }
+
+    // shorthands for message types
+
+  }, {
+    key: 'info',
+    value: function info(message) {
+      this.alert(message, 'info');
+    }
+  }, {
+    key: 'success',
+    value: function success(message) {
+      this.alert(message, 'success');
+    }
+  }, {
+    key: 'warning',
+    value: function warning(message) {
+      this.alert(message, 'warning');
+    }
+  }, {
+    key: 'error',
+    value: function error(message) {
+      this.alert(message, 'error');
+    }
+
+    // shorthand for api errors
+
+  }, {
+    key: 'apiError',
+    value: function apiError(rejection) {
+      var message = gettext("Unknown error has occured.");
+
+      if (rejection.status === 0) {
+        message = rejection.detail;
+      }
+
+      if (rejection.status === 400 && rejection.detail) {
+        message = rejection.detail;
+      }
+
+      if (rejection.status === 403) {
+        message = rejection.detail;
+        if (message === "Permission denied") {
+          message = gettext("You don't have permission to perform this action.");
+        }
+      }
+
+      if (rejection.status === 404) {
+        message = gettext("Action link is invalid.");
+      }
+
+      this.error(message);
+    }
+  }]);
+
+  return Snackbar;
+}();
+
+exports.default = new Snackbar();
+
+},{"../reducers/snackbar":111}],125:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.StoreWrapper = undefined;
+
+var _redux = require('redux');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var StoreWrapper = exports.StoreWrapper = function () {
+  function StoreWrapper() {
+    _classCallCheck(this, StoreWrapper);
+
+    this._store = null;
+    this._reducers = {};
+    this._initialState = {};
+  }
+
+  _createClass(StoreWrapper, [{
+    key: 'addReducer',
+    value: function addReducer(name, reducer, initialState) {
+      this._reducers[name] = reducer;
+      this._initialState[name] = initialState;
+    }
+  }, {
+    key: 'init',
+    value: function init() {
+      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);
+    }
+  }, {
+    key: 'getStore',
+    value: function getStore() {
+      return this._store;
+    }
+
+    // Store API
+
+  }, {
+    key: 'getState',
+    value: function getState() {
+      return this._store.getState();
+    }
+  }, {
+    key: 'dispatch',
+    value: function dispatch(action) {
+      return this._store.dispatch(action);
+    }
+  }]);
+
+  return StoreWrapper;
+}();
+
+exports.default = new StoreWrapper();
+
+},{"redux":"redux"}],126:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/* global zxcvbn */
+
+var Zxcvbn = exports.Zxcvbn = function () {
+  function Zxcvbn() {
+    _classCallCheck(this, Zxcvbn);
+  }
+
+  _createClass(Zxcvbn, [{
+    key: "init",
+    value: function init(include) {
+      this._include = include;
+    }
+  }, {
+    key: "scorePassword",
+    value: function scorePassword(password, inputs) {
+      // 0-4 score, the more the stronger password
+      return zxcvbn(password, inputs).score;
+    }
+  }, {
+    key: "load",
+    value: function load() {
+      if (typeof zxcvbn === "undefined") {
+        this._include.include('misago/js/zxcvbn.js');
+        return this._loadingPromise();
+      } else {
+        return this._loadedPromise();
+      }
+    }
+  }, {
+    key: "_loadingPromise",
+    value: function _loadingPromise() {
+      return new Promise(function (resolve) {
+        var wait = function wait() {
+          if (typeof zxcvbn === "undefined") {
+            window.setTimeout(function () {
+              wait();
+            }, 200);
+          } else {
+            resolve();
+          }
+        };
+        wait();
+      });
+    }
+  }, {
+    key: "_loadedPromise",
+    value: function _loadedPromise() {
+      // we have already loaded zxcvbn.js, resolve away!
+      return new Promise(function (resolve) {
+        resolve();
+      });
+    }
+  }]);
+
+  return Zxcvbn;
+}();
+
+exports.default = new Zxcvbn();
+
+},{}],127:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (ban, changeState) {
+  _reactDom2.default.render(
+  /* jshint ignore:start */
+  _react2.default.createElement(
+    _reactRedux.Provider,
+    { store: _store2.default.getStore() },
+    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,
+      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })
+  ),
+  /* jshint ignore:end */
+  document.getElementById('page-mount'));
+
+  if (typeof changeState === 'undefined' || changeState) {
+    var forumName = _index2.default.get('SETTINGS').forum_name;
+    document.title = gettext("You are banned") + ' | ' + forumName;
+    window.history.pushState({}, "", _index2.default.get('BANNED_URL'));
+  }
+};
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _reactRedux = require('react-redux');
+
+var _bannedPage = require('../components/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _store = require('../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// jshint ignore:line
+
+/* jshint ignore:start */
+// jshint ignore:line
+// jshint ignore:line
+var select = function select(state) {
+  return state.tick;
+}; // jshint ignore:line
+// jshint ignore:line
+
+var RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);
+/* jshint ignore:end */
+
+},{"../components/banned-page":54,"../index":108,"../services/store":125,"moment":"moment","react":"react","react-dom":"react-dom","react-redux":"react-redux"}],128:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (list, rowWidth) {
+  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
+
+  var rows = [];
+  var row = [];
+
+  list.forEach(function (element) {
+    row.push(element);
+    if (row.length === rowWidth) {
+      rows.push(row);
+      row = [];
+    }
+  });
+
+  // pad row to required length?
+  if (padding !== false && row.length > 0 && row.length < rowWidth) {
+    for (var i = row.length; i < rowWidth; i++) {
+      row.push(padding);
+    }
+  }
+
+  if (row.length) {
+    rows.push(row);
+  }
+
+  return rows;
+};
+
+},{}],129:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (bytes) {
+  if (bytes > 1000 * 1000 * 1000) {
+    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';
+  } else if (bytes > 1000 * 1000) {
+    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';
+  } else if (bytes > 1000) {
+    return Math.round(bytes * 100 / 1000) / 100 + ' KB';
+  } else {
+    return Math.round(bytes * 100) / 100 + ' B';
+  }
+};
+
+},{}],130:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (Component, rootElementId) {
+  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];
+
+  var rootElement = document.getElementById(rootElementId);
+
+  if (rootElement) {
+    if (connected) {
+      _reactDom2.default.render(
+      /* jshint ignore:start */
+      _react2.default.createElement(
+        _reactRedux.Provider,
+        { store: _store2.default.getStore() },
+        _react2.default.createElement(Component, null)
+      ),
+      /* jshint ignore:end */
+      rootElement);
+    } else {
+      _reactDom2.default.render(
+      /* jshint ignore:start */
+      _react2.default.createElement(Component, null),
+      /* jshint ignore:end */
+      rootElement);
+    }
+  }
+};
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _reactRedux = require('react-redux');
+
+var _store = require('../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+},{"../services/store":125,"react":"react","react-dom":"react-dom","react-redux":"react-redux"}],131:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var OrderedList = function () {
+  function OrderedList(items) {
+    _classCallCheck(this, OrderedList);
+
+    this.isOrdered = false;
+    this._items = items || [];
+  }
+
+  _createClass(OrderedList, [{
+    key: "add",
+    value: function add(key, item, order) {
+      this._items.push({
+        key: key,
+        item: item,
+
+        after: order ? order.after || null : null,
+        before: order ? order.before || null : null
+      });
+    }
+  }, {
+    key: "get",
+    value: function get(key, value) {
+      for (var i = 0; i < this._items.length; i++) {
+        if (this._items[i].key === key) {
+          return this._items[i].item;
+        }
+      }
+
+      return value;
+    }
+  }, {
+    key: "has",
+    value: function has(key) {
+      return this.get(key) !== undefined;
+    }
+  }, {
+    key: "values",
+    value: function values() {
+      var values = [];
+      for (var i = 0; i < this._items.length; i++) {
+        values.push(this._items[i].item);
+      }
+      return values;
+    }
+  }, {
+    key: "order",
+    value: function order(values_only) {
+      if (!this.isOrdered) {
+        this._items = this._order(this._items);
+        this.isOrdered = true;
+      }
+
+      if (values_only || typeof values_only === 'undefined') {
+        return this.values();
+      } else {
+        return this._items;
+      }
+    }
+  }, {
+    key: "orderedValues",
+    value: function orderedValues() {
+      return this.order(true);
+    }
+  }, {
+    key: "_order",
+    value: function _order(unordered) {
+      // Index of unordered items
+      var index = [];
+      unordered.forEach(function (item) {
+        index.push(item.key);
+      });
+
+      // Ordered items
+      var ordered = [];
+      var ordering = [];
+
+      // First pass: register items that
+      // don't specify their order
+      unordered.forEach(function (item) {
+        if (!item.after && !item.before) {
+          ordered.push(item);
+          ordering.push(item.key);
+        }
+      });
+
+      // Second pass: register items that
+      // specify their before to "_end"
+      unordered.forEach(function (item) {
+        if (item.before === "_end") {
+          ordered.push(item);
+          ordering.push(item.key);
+        }
+      });
+
+      // Third pass: keep iterating items
+      // until we hit iterations limit or finish
+      // ordering list
+      function insertItem(item) {
+        var insertAt = -1;
+        if (ordering.indexOf(item.key) === -1) {
+          if (item.after) {
+            insertAt = ordering.indexOf(item.after);
+            if (insertAt !== -1) {
+              insertAt += 1;
+            }
+          } else if (item.before) {
+            insertAt = ordering.indexOf(item.before);
+          }
+
+          if (insertAt !== -1) {
+            ordered.splice(insertAt, 0, item);
+            ordering.splice(insertAt, 0, item.key);
+          }
+        }
+      }
+
+      var iterations = 200;
+      while (iterations > 0 && index.length !== ordering.length) {
+        iterations -= 1;
+        unordered.forEach(insertItem);
+      }
+
+      return ordered;
+    }
+  }]);
+
+  return OrderedList;
+}();
+
+exports.default = OrderedList;
+
+},{}],132:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.int = int;
+exports.range = range;
+function int(min, max) {
+  return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+
+function range(min, max) {
+  var array = new Array(int(min, max));
+  for (var i = 0; i < array.length; i++) {
+    array[i] = i;
+  }
+
+  return array;
+}
+
+},{}],133:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function () {
+  window.scrollTo(0, 0);
+};
+
+},{}],134:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (options) {
+  var routes = {
+    component: options.component,
+    childRoutes: [{
+      path: options.root,
+      onEnter: function onEnter(nextState, replaceState) {
+        replaceState(null, options.paths[0].path);
+      }
+    }].concat(options.paths.map(function (path) {
+      return path;
+    }))
+  };
+
+  _reactDom2.default.render(_react2.default.createElement(
+    _reactRedux.Provider,
+    { store: _store2.default.getStore() },
+    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })
+  ), rootElement);
+};
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _reactRedux = require('react-redux');
+
+var _reactRouter = require('react-router');
+
+var _createBrowserHistory = require('history/lib/createBrowserHistory');
+
+var _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);
+
+var _store = require('../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// jshint ignore:start
+
+var rootElement = document.getElementById('page-mount');
+var history = new _createBrowserHistory2.default();
+
+},{"../services/store":125,"history/lib/createBrowserHistory":42,"react":"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],135:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.required = required;
+exports.email = email;
+exports.minLength = minLength;
+exports.maxLength = maxLength;
+exports.usernameMinLength = usernameMinLength;
+exports.usernameMaxLength = usernameMaxLength;
+exports.usernameContent = usernameContent;
+exports.passwordMinLength = passwordMinLength;
+var EMAIL = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
+var USERNAME = new RegExp('^[0-9a-z]+$', 'i');
+
+function required() {
+  return function (value) {
+    if ($.trim(value).length === 0) {
+      return gettext("This field is required.");
+    }
+  };
+}
+
+function email(message) {
+  return function (value) {
+    if (!EMAIL.test(value)) {
+      return message || gettext("Enter a valid email address.");
+    }
+  };
+}
+
+function minLength(limitValue, message) {
+  return function (value) {
+    var returnMessage = '';
+    var length = $.trim(value).length;
+
+    if (length < limitValue) {
+      if (message) {
+        returnMessage = message(limitValue, length);
+      } else {
+        returnMessage = ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).", "Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).", limitValue);
+      }
+      return interpolate(returnMessage, {
+        limit_value: limitValue,
+        show_value: length
+      }, true);
+    }
+  };
+}
+
+function maxLength(limitValue, message) {
+  return function (value) {
+    var returnMessage = '';
+    var length = $.trim(value).length;
+
+    if (length > limitValue) {
+      if (message) {
+        returnMessage = message(limitValue, length);
+      } else {
+        returnMessage = ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).", "Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).", limitValue);
+      }
+      return interpolate(returnMessage, {
+        limit_value: limitValue,
+        show_value: length
+      }, true);
+    }
+  };
+}
+
+function usernameMinLength(settings) {
+  var message = function message(limitValue) {
+    return ngettext("Username must be at least %(limit_value)s character long.", "Username must be at least %(limit_value)s characters long.", limitValue);
+  };
+  return this.minLength(settings.username_length_min, message);
+}
+
+function usernameMaxLength(settings) {
+  var message = function message(limitValue) {
+    return ngettext("Username cannot be longer than %(limit_value)s character.", "Username cannot be longer than %(limit_value)s characters.", limitValue);
+  };
+  return this.maxLength(settings.username_length_max, message);
+}
+
+function usernameContent() {
+  return function (value) {
+    if (!USERNAME.test($.trim(value))) {
+      return gettext("Username can only contain latin alphabet letters and digits.");
+    }
+  };
+}
+
+function passwordMinLength(settings) {
+  var message = function message(limitValue) {
+    return ngettext("Valid password must be at least %(limit_value)s character long.", "Valid password must be at least %(limit_value)s characters long.", limitValue);
+  };
+  return this.minLength(settings.password_length_min, message);
+}
+
+},{}]},{},[2,3,4,5,16,17,18,19,20,21,22,30,31,32,33,6,7,8,9,10,11,12,13,14,15,23,24,25,26,27,28,29])
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwic3JjL2luZGV4LmpzIiwic3JjL2luaXRpYWxpemVycy9hamF4LmpzIiwic3JjL2luaXRpYWxpemVycy9hdXRoLmpzIiwic3JjL2luaXRpYWxpemVycy9jYXRjaGEuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvYXV0aC1tZXNzYWdlLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL2Jhbm5lZC1wYWdlLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL29wdGlvbnMuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvcHJvZmlsZS5qcyIsInNyYy9pbml0aWFsaXplcnMvY29tcG9uZW50cy9yZXF1ZXN0LWFjdGl2YXRpb24tbGluay5qcyIsInNyYy9pbml0aWFsaXplcnMvY29tcG9uZW50cy9yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0LmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL3Jlc2V0LXBhc3N3b3JkLWZvcm0uanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvc25hY2tiYXIuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvdXNlci1tZW51LmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL3VzZXJzLmpzIiwic3JjL2luaXRpYWxpemVycy9pbmNsdWRlLmpzIiwic3JjL2luaXRpYWxpemVycy9sb2NhbC1zdG9yYWdlLmpzIiwic3JjL2luaXRpYWxpemVycy9tb2JpbGUtbmF2YmFyLWRyb3Bkb3duLmpzIiwic3JjL2luaXRpYWxpemVycy9tb2RhbC5qcyIsInNyYy9pbml0aWFsaXplcnMvbW9tZW50LWxvY2FsZS5qcyIsInNyYy9pbml0aWFsaXplcnMvcGFnZS10aXRsZS5qcyIsInNyYy9pbml0aWFsaXplcnMvcG9sbHMuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3JlZHVjZXJzL2F1dGguanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3JlZHVjZXJzL3Byb2ZpbGUtZGVoeWRyYXRlLmpzIiwic3JjL2luaXRpYWxpemVycy9yZWR1Y2Vycy9wcm9maWxlLmpzIiwic3JjL2luaXRpYWxpemVycy9yZWR1Y2Vycy9zbmFja2Jhci5qcyIsInNyYy9pbml0aWFsaXplcnMvcmVkdWNlcnMvdGljay5qcyIsInNyYy9pbml0aWFsaXplcnMvcmVkdWNlcnMvdXNlcm5hbWUtaGlzdG9yeS5qcyIsInNyYy9pbml0aWFsaXplcnMvcmVkdWNlcnMvdXNlcnMuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3NuYWNrYmFyLmpzIiwic3JjL2luaXRpYWxpemVycy9zdG9yZS5qcyIsInNyYy9pbml0aWFsaXplcnMvdGljay1zdGFydC5qcyIsInNyYy9pbml0aWFsaXplcnMvenhjdmJuLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9pbmRleC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9BY3Rpb25zLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvQXN5bmNVdGlscy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0RPTVN0YXRlU3RvcmFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0RPTVV0aWxzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9jcmVhdGVCcm93c2VySGlzdG9yeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL2NyZWF0ZURPTUhpc3RvcnkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9jcmVhdGVIaXN0b3J5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlTG9jYXRpb24uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9kZXByZWNhdGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9leHRyYWN0UGF0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3BhcnNlUGF0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3J1blRyYW5zaXRpb25Ib29rLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2F1dGgtbWVzc2FnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvYXZhdGFyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9iYW5uZWQtcGFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvYnV0dG9uLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL2Nyb3AuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvZ2FsbGVyeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9pbmRleC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3VwbG9hZC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvZm9ybS1ncm91cC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvZm9ybS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvbGkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2xvYWRlci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvbW9kYWwtbG9hZGVyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9mb3JtLWxvYWRpbmcuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvY2hhbmdlLXVzZXJuYW1lL2Zvcm0tbG9ja2VkLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9mb3JtLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS91c2VybmFtZS1oaXN0b3J5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL2ZvcnVtLW9wdGlvbnMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvbmF2cy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvb3B0aW9ucy9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL3NpZ24taW4tY3JlZGVudGlhbHMvY2hhbmdlLWVtYWlsLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL3NpZ24taW4tY3JlZGVudGlhbHMvY2hhbmdlLXBhc3N3b3JkLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL3NpZ24taW4tY3JlZGVudGlhbHMvcm9vdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Byb2ZpbGUvSGVhZGVyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvdy1idXR0b24uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Byb2ZpbGUvbW9kZXJhdGlvbi9uYXYuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Byb2ZpbGUvbmF2cy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcHJvZmlsZS9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9yZWdpc3Rlci1idXR0b24uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3JlZ2lzdGVyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9yZXF1ZXN0LWFjdGl2YXRpb24tbGluay5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcmVxdWVzdC1wYXNzd29yZC1yZXNldC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcmVzZXQtcGFzc3dvcmQtZm9ybS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvc2VsZWN0LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9zaWduLWluLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9zbmFja2Jhci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlci1tZW51L2d1ZXN0LW5hdi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlci1tZW51L3Jvb3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItbWVudS91c2VyLW5hdi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlci1zdGF0dXMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QtZW1wdHkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QtaXRlbS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvYWN0aXZlLXBvc3RlcnMvbGlzdC1sb2FkaW5nLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy9saXN0LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9uYXZzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9yYW5rL2xpc3QtaXRlbS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvcmFuay9saXN0LWxvYWRpbmcuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL3JhbmsvbGlzdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvcmFuay9wYWdlci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvcmFuay9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy95ZXMtbm8tc3dpdGNoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9yZWR1Y2Vycy9hdXRoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvcmVkdWNlcnMvcHJvZmlsZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3JlZHVjZXJzL3NuYWNrYmFyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvcmVkdWNlcnMvdGljay5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3JlZHVjZXJzL3VzZXJuYW1lLWhpc3RvcnkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9yZWR1Y2Vycy91c2Vycy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL2FqYXguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9hdXRoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvY2FwdGNoYS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL2luY2x1ZGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvbW9iaWxlLW5hdmJhci1kcm9wZG93bi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL21vZGFsLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvcGFnZS10aXRsZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL3BvbGxzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvc25hY2tiYXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9zdG9yZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL3p4Y3Zibi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3V0aWxzL2Jhbm5lZC1wYWdlLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvYmF0Y2guanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9maWxlLXNpemUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9tb3VudC1jb21wb25lbnQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9vcmRlcmVkLWxpc3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9yYW5kb20uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9yZXNldC1zY3JvbGwuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9yb3V0ZWQtY29tcG9uZW50LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvdmFsaWRhdG9ycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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LFdBQU8sUUFBUSxDQUNiLGlFQUFpRSxFQUNqRSxrRUFBa0UsRUFDbEUsVUFBVSxDQUFDLENBQUM7R0FDZixDQUFDO0FBQ0YsU0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUM5RCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsImltcG9ydCBPcmRlcmVkTGlzdCBmcm9tICdtaXNhZ28vdXRpbHMvb3JkZXJlZC1saXN0JztcblxuZXhwb3J0IGNsYXNzIE1pc2FnbyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVycyA9IFtdO1xuICAgIHRoaXMuX2NvbnRleHQgPSB7fTtcbiAgfVxuXG4gIGFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZXJzLnB1c2goe1xuICAgICAga2V5OiBpbml0aWFsaXplci5uYW1lLFxuXG4gICAgICBpdGVtOiBpbml0aWFsaXplci5pbml0aWFsaXplcixcblxuICAgICAgYWZ0ZXI6IGluaXRpYWxpemVyLmFmdGVyLFxuICAgICAgYmVmb3JlOiBpbml0aWFsaXplci5iZWZvcmVcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgdmFyIGluaXRPcmRlciA9IG5ldyBPcmRlcmVkTGlzdCh0aGlzLl9pbml0aWFsaXplcnMpLm9yZGVyZWRWYWx1ZXMoKTtcbiAgICBpbml0T3JkZXIuZm9yRWFjaChpbml0aWFsaXplciA9PiB7XG4gICAgICBpbml0aWFsaXplcih0aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNvbnRleHQgYWNjZXNzb3JzXG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gISF0aGlzLl9jb250ZXh0W2tleV07XG4gIH1cblxuICBnZXQoa2V5LCBmYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29udGV4dFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2sgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHBvcChrZXkpIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5fY29udGV4dFtrZXldO1xuICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gY3JlYXRlICBzaW5nbGV0b25cbnZhciBtaXNhZ28gPSBuZXcgTWlzYWdvKCk7XG5cbi8vIGV4cG9zZSBpdCBnbG9iYWxseVxuZ2xvYmFsLm1pc2FnbyA9IG1pc2FnbztcblxuLy8gYW5kIGV4cG9ydCBpdCBmb3IgdGVzdHMgYW5kIHN0dWZmXG5leHBvcnQgZGVmYXVsdCBtaXNhZ287XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBhamF4LmluaXQobWlzYWdvLmdldCgnQ1NSRl9DT09LSUVfTkFNRScpKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2FqYXgnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGF1dGggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcbmltcG9ydCBzdG9yYWdlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGF1dGguaW5pdChzdG9yZSwgc3RvcmFnZSwgbW9kYWwpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnYXV0aCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pOyIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBjYXB0Y2hhIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9jYXB0Y2hhJztcbmltcG9ydCBpbmNsdWRlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9pbmNsdWRlJztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGNhcHRjaGEuaW5pdChjb250ZXh0LCBhamF4LCBpbmNsdWRlLCBzbmFja2Jhcik7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjYXB0Y2hhJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyXG59KTtcbiIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgQXV0aE1lc3NhZ2UsIHsgc2VsZWN0IH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXV0aC1tZXNzYWdlJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIG1vdW50KGNvbm5lY3Qoc2VsZWN0KShBdXRoTWVzc2FnZSksICdhdXRoLW1lc3NhZ2UtbW91bnQnKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDphdXRoLW1lc3NhZ2UnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0LmhhcygnQkFOX01FU1NBR0UnKSkge1xuICAgIHNob3dCYW5uZWRQYWdlKGNvbnRleHQuZ2V0KCdCQU5fTUVTU0FHRScpLCBmYWxzZSk7XG4gIH1cbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDpiYW5lZC1wYWdlJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgT3B0aW9ucywgeyBwYXRocyB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvcm9vdCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL3JvdXRlZC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0LmhhcygnVVNFUl9PUFRJT05TJykpIHtcbiAgICBtb3VudCh7XG4gICAgICByb290OiBtaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJyksXG4gICAgICBjb21wb25lbnQ6IE9wdGlvbnMsXG4gICAgICBwYXRoczogcGF0aHMoKVxuICAgIH0pO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6b3B0aW9ucycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBQcm9maWxlLCB7IHBhdGhzLCBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL3Jvb3QnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9yb3V0ZWQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ1BST0ZJTEUnKSAmJiBjb250ZXh0LmhhcygnUFJPRklMRV9QQUdFUycpKSB7XG4gICAgbW91bnQoe1xuICAgICAgcm9vdDogbWlzYWdvLmdldCgnUFJPRklMRScpLmFic29sdXRlX3VybCxcbiAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKFByb2ZpbGUpLFxuICAgICAgcGF0aHM6IHBhdGhzKClcbiAgICB9KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnByb2ZpbGUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAncmVkdWNlcjpwcm9maWxlLWRlaHlkcmF0ZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IFJlcXVlc3RBY3RpdmF0aW9uTGluayBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZXF1ZXN0LWFjdGl2YXRpb24tbGluayc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rLW1vdW50JykpIHtcbiAgICBtb3VudChSZXF1ZXN0QWN0aXZhdGlvbkxpbmssICdyZXF1ZXN0LWFjdGl2YXRpb24tbGluay1tb3VudCcsIGZhbHNlKTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnJlcXVlc3QtYWN0aXZhdGlvbi1saW5rJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgUmVxdWVzdFBhc3N3b3JkUmVzZXQgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcmVxdWVzdC1wYXNzd29yZC1yZXNldCc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQtbW91bnQnKSkge1xuICAgIG1vdW50KFJlcXVlc3RQYXNzd29yZFJlc2V0LCAncmVxdWVzdC1wYXNzd29yZC1yZXNldC1tb3VudCcsIGZhbHNlKTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnJlcXVlc3QtcGFzc3dvcmQtcmVzZXQnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBSZXNldFBhc3N3b3JkRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZXNldC1wYXNzd29yZC1mb3JtJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzZXQtcGFzc3dvcmQtZm9ybS1tb3VudCcpKSB7XG4gICAgbW91bnQoUmVzZXRQYXNzd29yZEZvcm0sICdyZXNldC1wYXNzd29yZC1mb3JtLW1vdW50JywgZmFsc2UpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6cmVzZXQtcGFzc3dvcmQtZm9ybScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IFNuYWNrYmFyLCBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9zbmFja2Jhcic7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBtb3VudChjb25uZWN0KHNlbGVjdCkoU25hY2tiYXIpLCAnc25hY2tiYXItbW91bnQnKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDpzbmFja2JhcicsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzbmFja2Jhcidcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IFVzZXJNZW51LCBDb21wYWN0VXNlck1lbnUsIHNlbGVjdCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItbWVudS9yb290JztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIG1vdW50KGNvbm5lY3Qoc2VsZWN0KShVc2VyTWVudSksICd1c2VyLW1lbnUtbW91bnQnKTtcbiAgbW91bnQoY29ubmVjdChzZWxlY3QpKENvbXBhY3RVc2VyTWVudSksICd1c2VyLW1lbnUtY29tcGFjdC1tb3VudCcpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnVzZXItbWVudScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IFVzZXJzLCB7IHBhdGhzIH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMvcm9vdCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL3JvdXRlZC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0LmhhcygnVVNFUlNfTElTVFMnKSkge1xuICAgIG1vdW50KHtcbiAgICAgIHJvb3Q6IG1pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJyksXG4gICAgICBjb21wb25lbnQ6IFVzZXJzLFxuICAgICAgcGF0aHM6IHBhdGhzKClcbiAgICB9KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnVzZXJzJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgaW5jbHVkZSBmcm9tICdtaXNhZ28vc2VydmljZXMvaW5jbHVkZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgaW5jbHVkZS5pbml0KGNvbnRleHQuZ2V0KCdTVEFUSUNfVVJMJykpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnaW5jbHVkZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplclxufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgc3RvcmFnZSBmcm9tICdtaXNhZ28vc2VydmljZXMvbG9jYWwtc3RvcmFnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yYWdlLmluaXQoJ21pc2Fnb18nKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2xvY2FsLXN0b3JhZ2UnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGRyb3Bkb3duIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2JpbGUtbmF2YmFyLWRyb3Bkb3duJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vYmlsZS1uYXZiYXItZHJvcGRvd24tbW91bnQnKTtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBkcm9wZG93bi5pbml0KGVsZW1lbnQpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdkcm9wZG93bicsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtbW91bnQnKTtcbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBtb2RhbC5pbml0KGVsZW1lbnQpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdtb2RhbCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIG1vbWVudC5sb2NhbGUoJCgnaHRtbCcpLmF0dHIoJ2xhbmcnKSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdtb21lbnQnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICB0aXRsZS5pbml0KGNvbnRleHQuZ2V0KCdTRVRUSU5HUycpLmZvcnVtX25hbWUpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncGFnZS10aXRsZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplclxufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBwb2xscyBmcm9tICdtaXNhZ28vc2VydmljZXMvcG9sbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgcG9sbHMuaW5pdChhamF4LCBzbmFja2Jhcik7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdwb2xscycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplclxufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciwgeyBpbml0aWFsU3RhdGUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvYXV0aCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCdhdXRoJywgcmVkdWNlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgJ2lzQXV0aGVudGljYXRlZCc6IGNvbnRleHQuZ2V0KCdpc0F1dGhlbnRpY2F0ZWQnKSxcbiAgICAnaXNBbm9ueW1vdXMnOiAhY29udGV4dC5nZXQoJ2lzQXV0aGVudGljYXRlZCcpLFxuXG4gICAgJ3VzZXInOiBjb250ZXh0LmdldCgndXNlcicpXG4gIH0sIGluaXRpYWxTdGF0ZSkpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncmVkdWNlcjphdXRoJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBiZWZvcmU6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgZGVoeWRyYXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3Byb2ZpbGUnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBpZiAobWlzYWdvLmhhcygnUFJPRklMRScpKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2goZGVoeWRyYXRlKG1pc2Fnby5nZXQoJ1BST0ZJTEUnKSkpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnByb2ZpbGUtZGVoeWRyYXRlJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICdtaXNhZ28vcmVkdWNlcnMvcHJvZmlsZSc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHN0b3JlLmFkZFJlZHVjZXIoJ3Byb2ZpbGUnLCByZWR1Y2VyLCB7fSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnByb2ZpbGUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciwgeyBpbml0aWFsU3RhdGUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvc25hY2tiYXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCdzbmFja2JhcicsIHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnNuYWNrYmFyJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBiZWZvcmU6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHJlZHVjZXIsIHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3RpY2snO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCd0aWNrJywgcmVkdWNlciwgaW5pdGlhbFN0YXRlKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3JlZHVjZXI6dGljaycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCByZWR1Y2VyIGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2VybmFtZS1oaXN0b3J5JztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmUuYWRkUmVkdWNlcigndXNlcm5hbWUtaGlzdG9yeScsIHJlZHVjZXIsIFtdKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3JlZHVjZXI6dXNlcm5hbWUtaGlzdG9yeScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCByZWR1Y2VyIGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHN0b3JlLmFkZFJlZHVjZXIoJ3VzZXJzJywgcmVkdWNlciwgW10pO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncmVkdWNlcjp1c2VycycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzbmFja2Jhci5pbml0KHN0b3JlKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3NuYWNrYmFyJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHN0b3JlLmluaXQoKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3N0b3JlJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBiZWZvcmU6ICdfZW5kJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkb1RpY2sgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdGljayc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuY29uc3QgVElDS19QRVJJT0QgPSA1MCAqIDEwMDA7IC8vZG8gdGhlIHRpY2sgZXZlcnkgNTBzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2goZG9UaWNrKCkpO1xuICB9LCBUSUNLX1BFUklPRCk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICd0aWNrLXN0YXJ0JyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgaW5jbHVkZSBmcm9tICdtaXNhZ28vc2VydmljZXMvaW5jbHVkZSc7XG5pbXBvcnQgenhjdmJuIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy96eGN2Ym4nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgenhjdmJuLmluaXQoaW5jbHVkZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICd6eGN2Ym4nLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwidmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi9saWIva2V5cy5qcycpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9saWIvaXNfYXJndW1lbnRzLmpzJyk7XG5cbnZhciBkZWVwRXF1YWwgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9IGVsc2UgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIERhdGUgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQgfHwgdHlwZW9mIGFjdHVhbCAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgZXhwZWN0ZWQgIT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBhY3R1YWwgPT09IGV4cGVjdGVkIDogYWN0dWFsID09IGV4cGVjdGVkO1xuXG4gIC8vIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2Uge1xuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIHZhciBpLCBrZXk7XG4gIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhKSB8fCBpc1VuZGVmaW5lZE9yTnVsbChiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS5cbiAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAvL35+fkkndmUgbWFuYWdlZCB0byBicmVhayBPYmplY3Qua2V5cyB0aHJvdWdoIHNjcmV3eSBhcmd1bWVudHMgcGFzc2luZy5cbiAgLy8gICBDb252ZXJ0aW5nIHRvIGFycmF5IHNvbHZlcyB0aGUgcHJvYmxlbS5cbiAgaWYgKGlzQXJndW1lbnRzKGEpKSB7XG4gICAgaWYgKCFpc0FyZ3VtZW50cyhiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgb3B0cyk7XG4gIH1cbiAgaWYgKGlzQnVmZmVyKGEpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgICAga2IgPSBvYmplY3RLZXlzKGIpO1xuICB9IGNhdGNoIChlKSB7Ly9oYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9IGtiLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvL35+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYjtcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCBuYXZpZ2F0aW9uIHdhcyBjYXVzZWQgYnkgYSBjYWxsIHRvIGhpc3RvcnkucHVzaC5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIFBVU0ggPSAnUFVTSCc7XG5cbmV4cG9ydHMuUFVTSCA9IFBVU0g7XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IG5hdmlnYXRpb24gd2FzIGNhdXNlZCBieSBhIGNhbGwgdG8gaGlzdG9yeS5yZXBsYWNlLlxuICovXG52YXIgUkVQTEFDRSA9ICdSRVBMQUNFJztcblxuZXhwb3J0cy5SRVBMQUNFID0gUkVQTEFDRTtcbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgbmF2aWdhdGlvbiB3YXMgY2F1c2VkIGJ5IHNvbWUgb3RoZXIgYWN0aW9uIHN1Y2hcbiAqIGFzIHVzaW5nIGEgYnJvd3NlcidzIGJhY2svZm9yd2FyZCBidXR0b25zIGFuZC9vciBtYW51YWxseSBtYW5pcHVsYXRpbmdcbiAqIHRoZSBVUkwgaW4gYSBicm93c2VyJ3MgbG9jYXRpb24gYmFyLiBUaGlzIGlzIHRoZSBkZWZhdWx0LlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93RXZlbnRIYW5kbGVycy9vbnBvcHN0YXRlXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xudmFyIFBPUCA9ICdQT1AnO1xuXG5leHBvcnRzLlBPUCA9IFBPUDtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHtcbiAgUFVTSDogUFVTSCxcbiAgUkVQTEFDRTogUkVQTEFDRSxcbiAgUE9QOiBQT1Bcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmxvb3BBc3luYyA9IGxvb3BBc3luYztcblxuZnVuY3Rpb24gbG9vcEFzeW5jKHR1cm5zLCB3b3JrLCBjYWxsYmFjaykge1xuICB2YXIgY3VycmVudFR1cm4gPSAwO1xuICB2YXIgaXNEb25lID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICBpc0RvbmUgPSB0cnVlO1xuICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGlmIChpc0RvbmUpIHJldHVybjtcblxuICAgIGlmIChjdXJyZW50VHVybiA8IHR1cm5zKSB7XG4gICAgICB3b3JrLmNhbGwodGhpcywgY3VycmVudFR1cm4rKywgbmV4dCwgZG9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBuZXh0KCk7XG59IiwiLyplc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5zYXZlU3RhdGUgPSBzYXZlU3RhdGU7XG5leHBvcnRzLnJlYWRTdGF0ZSA9IHJlYWRTdGF0ZTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIEtleVByZWZpeCA9ICdAQEhpc3RvcnkvJztcbnZhciBRdW90YUV4Y2VlZGVkRXJyb3IgPSAnUXVvdGFFeGNlZWRlZEVycm9yJztcbnZhciBTZWN1cml0eUVycm9yID0gJ1NlY3VyaXR5RXJyb3InO1xuXG5mdW5jdGlvbiBjcmVhdGVLZXkoa2V5KSB7XG4gIHJldHVybiBLZXlQcmVmaXggKyBrZXk7XG59XG5cbmZ1bmN0aW9uIHNhdmVTdGF0ZShrZXksIHN0YXRlKSB7XG4gIHRyeSB7XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oY3JlYXRlS2V5KGtleSksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLm5hbWUgPT09IFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgIC8vIEJsb2NraW5nIGNvb2tpZXMgaW4gQ2hyb21lL0ZpcmVmb3gvU2FmYXJpIHRocm93cyBTZWN1cml0eUVycm9yIG9uIGFueVxuICAgICAgLy8gYXR0ZW1wdCB0byBhY2Nlc3Mgd2luZG93LnNlc3Npb25TdG9yYWdlLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF93YXJuaW5nMlsnZGVmYXVsdCddKGZhbHNlLCAnW2hpc3RvcnldIFVuYWJsZSB0byBzYXZlIHN0YXRlOyBzZXNzaW9uU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncycpIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVycm9yLm5hbWUgPT09IFF1b3RhRXhjZWVkZWRFcnJvciAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTYWZhcmkgXCJwcml2YXRlIG1vZGVcIiB0aHJvd3MgUXVvdGFFeGNlZWRlZEVycm9yLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF93YXJuaW5nMlsnZGVmYXVsdCddKGZhbHNlLCAnW2hpc3RvcnldIFVuYWJsZSB0byBzYXZlIHN0YXRlOyBzZXNzaW9uU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIGluIFNhZmFyaSBwcml2YXRlIG1vZGUnKSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRTdGF0ZShrZXkpIHtcbiAgdmFyIGpzb24gPSB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAganNvbiA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGNyZWF0ZUtleShrZXkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gU2VjdXJpdHlFcnJvcikge1xuICAgICAgLy8gQmxvY2tpbmcgY29va2llcyBpbiBDaHJvbWUvRmlyZWZveC9TYWZhcmkgdGhyb3dzIFNlY3VyaXR5RXJyb3Igb24gYW55XG4gICAgICAvLyBhdHRlbXB0IHRvIGFjY2VzcyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3dhcm5pbmcyWydkZWZhdWx0J10oZmFsc2UsICdbaGlzdG9yeV0gVW5hYmxlIHRvIHJlYWQgc3RhdGU7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUgZHVlIHRvIHNlY3VyaXR5IHNldHRpbmdzJykgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmIChqc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmUgaW52YWxpZCBKU09OLlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYWRkRXZlbnRMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXI7XG5leHBvcnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSByZW1vdmVFdmVudExpc3RlbmVyO1xuZXhwb3J0cy5nZXRIYXNoUGF0aCA9IGdldEhhc2hQYXRoO1xuZXhwb3J0cy5yZXBsYWNlSGFzaFBhdGggPSByZXBsYWNlSGFzaFBhdGg7XG5leHBvcnRzLmdldFdpbmRvd1BhdGggPSBnZXRXaW5kb3dQYXRoO1xuZXhwb3J0cy5nbyA9IGdvO1xuZXhwb3J0cy5nZXRVc2VyQ29uZmlybWF0aW9uID0gZ2V0VXNlckNvbmZpcm1hdGlvbjtcbmV4cG9ydHMuc3VwcG9ydHNIaXN0b3J5ID0gc3VwcG9ydHNIaXN0b3J5O1xuZXhwb3J0cy5zdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaCA9IHN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoO1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50LCBsaXN0ZW5lcikge1xuICBpZiAobm9kZS5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudCwgbGlzdGVuZXIpIHtcbiAgaWYgKG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRldGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhhc2hQYXRoKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzFdIHx8ICcnO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSGFzaFBhdGgocGF0aCkge1xuICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgJyMnICsgcGF0aCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1BhdGgoKSB7XG4gIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2g7XG59XG5cbmZ1bmN0aW9uIGdvKG4pIHtcbiAgaWYgKG4pIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VyQ29uZmlybWF0aW9uKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIEhUTUw1IGhpc3RvcnkgQVBJIGlzIHN1cHBvcnRlZC4gVGFrZW4gZnJvbSBNb2Rlcm5penIuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2hpc3RvcnkuanNcbiAqIGNoYW5nZWQgdG8gYXZvaWQgZmFsc2UgbmVnYXRpdmVzIGZvciBXaW5kb3dzIFBob25lczogaHR0cHM6Ly9naXRodWIuY29tL3JhY2t0L3JlYWN0LXJvdXRlci9pc3N1ZXMvNTg2XG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KCkge1xuICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICBpZiAoKHVhLmluZGV4T2YoJ0FuZHJvaWQgMi4nKSAhPT0gLTEgfHwgdWEuaW5kZXhPZignQW5kcm9pZCA0LjAnKSAhPT0gLTEpICYmIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiYgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xICYmIHVhLmluZGV4T2YoJ1dpbmRvd3MgUGhvbmUnKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gRklYTUU6IFdvcmsgYXJvdW5kIG91ciBicm93c2VyIGhpc3Rvcnkgbm90IHdvcmtpbmcgY29ycmVjdGx5IG9uIENocm9tZVxuICAvLyBpT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWNrdC9yZWFjdC1yb3V0ZXIvaXNzdWVzLzI1NjVcbiAgaWYgKHVhLmluZGV4T2YoJ0NyaU9TJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGZhbHNlIGlmIHVzaW5nIGdvKG4pIHdpdGggaGFzaCBoaXN0b3J5IGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2goKSB7XG4gIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIHJldHVybiB1YS5pbmRleE9mKCdGaXJlZm94JykgPT09IC0xO1xufSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuZXhwb3J0cy5jYW5Vc2VET00gPSBjYW5Vc2VET007IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbnZhciBfaW52YXJpYW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ludmFyaWFudCk7XG5cbnZhciBfQWN0aW9ucyA9IHJlcXVpcmUoJy4vQWN0aW9ucycpO1xuXG52YXIgX0V4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgX0RPTVV0aWxzID0gcmVxdWlyZSgnLi9ET01VdGlscycpO1xuXG52YXIgX0RPTVN0YXRlU3RvcmFnZSA9IHJlcXVpcmUoJy4vRE9NU3RhdGVTdG9yYWdlJyk7XG5cbnZhciBfY3JlYXRlRE9NSGlzdG9yeSA9IHJlcXVpcmUoJy4vY3JlYXRlRE9NSGlzdG9yeScpO1xuXG52YXIgX2NyZWF0ZURPTUhpc3RvcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlRE9NSGlzdG9yeSk7XG5cbnZhciBfcGFyc2VQYXRoID0gcmVxdWlyZSgnLi9wYXJzZVBhdGgnKTtcblxudmFyIF9wYXJzZVBhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFyc2VQYXRoKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgaGlzdG9yeSBvYmplY3QgdGhhdCB1c2VzIEhUTUw1J3MgaGlzdG9yeSBBUElcbiAqIChwdXNoU3RhdGUsIHJlcGxhY2VTdGF0ZSwgYW5kIHRoZSBwb3BzdGF0ZSBldmVudCkgdG8gbWFuYWdlIGhpc3RvcnkuXG4gKiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2Qgb2YgbWFuYWdpbmcgaGlzdG9yeSBpbiBicm93c2VycyBiZWNhdXNlXG4gKiBpdCBwcm92aWRlcyB0aGUgY2xlYW5lc3QgVVJMcy5cbiAqXG4gKiBOb3RlOiBJbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBIVE1MNSBoaXN0b3J5IEFQSSBmdWxsXG4gKiBwYWdlIHJlbG9hZHMgd2lsbCBiZSB1c2VkIHRvIHByZXNlcnZlIFVSTHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gICFfRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF9pbnZhcmlhbnQyWydkZWZhdWx0J10oZmFsc2UsICdCcm93c2VyIGhpc3RvcnkgbmVlZHMgYSBET00nKSA6IF9pbnZhcmlhbnQyWydkZWZhdWx0J10oZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gIHZhciBmb3JjZVJlZnJlc2ggPSBvcHRpb25zLmZvcmNlUmVmcmVzaDtcblxuICB2YXIgaXNTdXBwb3J0ZWQgPSBfRE9NVXRpbHMuc3VwcG9ydHNIaXN0b3J5KCk7XG4gIHZhciB1c2VSZWZyZXNoID0gIWlzU3VwcG9ydGVkIHx8IGZvcmNlUmVmcmVzaDtcblxuICBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oaGlzdG9yeVN0YXRlKSB7XG4gICAgaGlzdG9yeVN0YXRlID0gaGlzdG9yeVN0YXRlIHx8IHdpbmRvdy5oaXN0b3J5LnN0YXRlIHx8IHt9O1xuXG4gICAgdmFyIHBhdGggPSBfRE9NVXRpbHMuZ2V0V2luZG93UGF0aCgpO1xuICAgIHZhciBfaGlzdG9yeVN0YXRlID0gaGlzdG9yeVN0YXRlO1xuICAgIHZhciBrZXkgPSBfaGlzdG9yeVN0YXRlLmtleTtcblxuICAgIHZhciBzdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBzdGF0ZSA9IF9ET01TdGF0ZVN0b3JhZ2UucmVhZFN0YXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgIGtleSA9IGhpc3RvcnkuY3JlYXRlS2V5KCk7XG5cbiAgICAgIGlmIChpc1N1cHBvcnRlZCkgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKF9leHRlbmRzKHt9LCBoaXN0b3J5U3RhdGUsIHsga2V5OiBrZXkgfSksIG51bGwsIHBhdGgpO1xuICAgIH1cblxuICAgIHZhciBsb2NhdGlvbiA9IF9wYXJzZVBhdGgyWydkZWZhdWx0J10ocGF0aCk7XG5cbiAgICByZXR1cm4gaGlzdG9yeS5jcmVhdGVMb2NhdGlvbihfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHsgc3RhdGU6IHN0YXRlIH0pLCB1bmRlZmluZWQsIGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFBvcFN0YXRlTGlzdGVuZXIoX3JlZikge1xuICAgIHZhciB0cmFuc2l0aW9uVG8gPSBfcmVmLnRyYW5zaXRpb25UbztcblxuICAgIGZ1bmN0aW9uIHBvcFN0YXRlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIElnbm9yZSBleHRyYW5lb3VzIHBvcHN0YXRlIGV2ZW50cyBpbiBXZWJLaXQuXG5cbiAgICAgIHRyYW5zaXRpb25UbyhnZXRDdXJyZW50TG9jYXRpb24oZXZlbnQuc3RhdGUpKTtcbiAgICB9XG5cbiAgICBfRE9NVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdwb3BzdGF0ZScsIHBvcFN0YXRlTGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF9ET01VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ3BvcHN0YXRlJywgcG9wU3RhdGVMaXN0ZW5lcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaFRyYW5zaXRpb24obG9jYXRpb24pIHtcbiAgICB2YXIgYmFzZW5hbWUgPSBsb2NhdGlvbi5iYXNlbmFtZTtcbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoO1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgc3RhdGUgPSBsb2NhdGlvbi5zdGF0ZTtcbiAgICB2YXIgYWN0aW9uID0gbG9jYXRpb24uYWN0aW9uO1xuICAgIHZhciBrZXkgPSBsb2NhdGlvbi5rZXk7XG5cbiAgICBpZiAoYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHJldHVybjsgLy8gTm90aGluZyB0byBkby5cblxuICAgIF9ET01TdGF0ZVN0b3JhZ2Uuc2F2ZVN0YXRlKGtleSwgc3RhdGUpO1xuXG4gICAgdmFyIHBhdGggPSAoYmFzZW5hbWUgfHwgJycpICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xuICAgIHZhciBoaXN0b3J5U3RhdGUgPSB7XG4gICAgICBrZXk6IGtleVxuICAgIH07XG5cbiAgICBpZiAoYWN0aW9uID09PSBfQWN0aW9ucy5QVVNIKSB7XG4gICAgICBpZiAodXNlUmVmcmVzaCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gUHJldmVudCBsb2NhdGlvbiB1cGRhdGUuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsIG51bGwsIHBhdGgpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJFUExBQ0VcbiAgICAgIGlmICh1c2VSZWZyZXNoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhdGgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFByZXZlbnQgbG9jYXRpb24gdXBkYXRlLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeVN0YXRlLCBudWxsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBoaXN0b3J5ID0gX2NyZWF0ZURPTUhpc3RvcnkyWydkZWZhdWx0J10oX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICBmaW5pc2hUcmFuc2l0aW9uOiBmaW5pc2hUcmFuc2l0aW9uLFxuICAgIHNhdmVTdGF0ZTogX0RPTVN0YXRlU3RvcmFnZS5zYXZlU3RhdGVcbiAgfSkpO1xuXG4gIHZhciBsaXN0ZW5lckNvdW50ID0gMCxcbiAgICAgIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGxpc3RlbkJlZm9yZShsaXN0ZW5lcikge1xuICAgIGlmICgrK2xpc3RlbmVyQ291bnQgPT09IDEpIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gc3RhcnRQb3BTdGF0ZUxpc3RlbmVyKGhpc3RvcnkpO1xuXG4gICAgdmFyIHVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW5CZWZvcmUobGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVubGlzdGVuKCk7XG5cbiAgICAgIGlmICgtLWxpc3RlbmVyQ291bnQgPT09IDApIHN0b3BQb3BTdGF0ZUxpc3RlbmVyKCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgIGlmICgrK2xpc3RlbmVyQ291bnQgPT09IDEpIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gc3RhcnRQb3BTdGF0ZUxpc3RlbmVyKGhpc3RvcnkpO1xuXG4gICAgdmFyIHVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW4obGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVubGlzdGVuKCk7XG5cbiAgICAgIGlmICgtLWxpc3RlbmVyQ291bnQgPT09IDApIHN0b3BQb3BTdGF0ZUxpc3RlbmVyKCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2l0aW9uSG9vayhob29rKSB7XG4gICAgaWYgKCsrbGlzdGVuZXJDb3VudCA9PT0gMSkgc3RvcFBvcFN0YXRlTGlzdGVuZXIgPSBzdGFydFBvcFN0YXRlTGlzdGVuZXIoaGlzdG9yeSk7XG5cbiAgICBoaXN0b3J5LnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vayk7XG4gIH1cblxuICAvLyBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJUcmFuc2l0aW9uSG9vayhob29rKSB7XG4gICAgaGlzdG9yeS51bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vayk7XG5cbiAgICBpZiAoLS1saXN0ZW5lckNvdW50ID09PSAwKSBzdG9wUG9wU3RhdGVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBoaXN0b3J5LCB7XG4gICAgbGlzdGVuQmVmb3JlOiBsaXN0ZW5CZWZvcmUsXG4gICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgcmVnaXN0ZXJUcmFuc2l0aW9uSG9vazogcmVnaXN0ZXJUcmFuc2l0aW9uSG9vayxcbiAgICB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2s6IHVucmVnaXN0ZXJUcmFuc2l0aW9uSG9va1xuICB9KTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gY3JlYXRlQnJvd3Nlckhpc3Rvcnk7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxudmFyIF9FeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIF9ET01VdGlscyA9IHJlcXVpcmUoJy4vRE9NVXRpbHMnKTtcblxudmFyIF9jcmVhdGVIaXN0b3J5ID0gcmVxdWlyZSgnLi9jcmVhdGVIaXN0b3J5Jyk7XG5cbnZhciBfY3JlYXRlSGlzdG9yeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVIaXN0b3J5KTtcblxuZnVuY3Rpb24gY3JlYXRlRE9NSGlzdG9yeShvcHRpb25zKSB7XG4gIHZhciBoaXN0b3J5ID0gX2NyZWF0ZUhpc3RvcnkyWydkZWZhdWx0J10oX2V4dGVuZHMoe1xuICAgIGdldFVzZXJDb25maXJtYXRpb246IF9ET01VdGlscy5nZXRVc2VyQ29uZmlybWF0aW9uXG4gIH0sIG9wdGlvbnMsIHtcbiAgICBnbzogX0RPTVV0aWxzLmdvXG4gIH0pKTtcblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICAhX0V4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfaW52YXJpYW50MlsnZGVmYXVsdCddKGZhbHNlLCAnRE9NIGhpc3RvcnkgbmVlZHMgYSBET00nKSA6IF9pbnZhcmlhbnQyWydkZWZhdWx0J10oZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIGhpc3RvcnkubGlzdGVuKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgaGlzdG9yeSwge1xuICAgIGxpc3RlbjogbGlzdGVuXG4gIH0pO1xufVxuXG5leHBvcnRzWydkZWZhdWx0J10gPSBjcmVhdGVET01IaXN0b3J5O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLy9pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJ1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfZGVlcEVxdWFsID0gcmVxdWlyZSgnZGVlcC1lcXVhbCcpO1xuXG52YXIgX2RlZXBFcXVhbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWVwRXF1YWwpO1xuXG52YXIgX0FzeW5jVXRpbHMgPSByZXF1aXJlKCcuL0FzeW5jVXRpbHMnKTtcblxudmFyIF9BY3Rpb25zID0gcmVxdWlyZSgnLi9BY3Rpb25zJyk7XG5cbnZhciBfY3JlYXRlTG9jYXRpb24yID0gcmVxdWlyZSgnLi9jcmVhdGVMb2NhdGlvbicpO1xuXG52YXIgX2NyZWF0ZUxvY2F0aW9uMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUxvY2F0aW9uMik7XG5cbnZhciBfcnVuVHJhbnNpdGlvbkhvb2sgPSByZXF1aXJlKCcuL3J1blRyYW5zaXRpb25Ib29rJyk7XG5cbnZhciBfcnVuVHJhbnNpdGlvbkhvb2syID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVuVHJhbnNpdGlvbkhvb2spO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoJy4vcGFyc2VQYXRoJyk7XG5cbnZhciBfcGFyc2VQYXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhcnNlUGF0aCk7XG5cbnZhciBfZGVwcmVjYXRlID0gcmVxdWlyZSgnLi9kZXByZWNhdGUnKTtcblxudmFyIF9kZXByZWNhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVwcmVjYXRlKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tS2V5KGxlbmd0aCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uc0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmXG4gIC8vYS5hY3Rpb24gPT09IGIuYWN0aW9uICYmIC8vIERpZmZlcmVudCBhY3Rpb24gIT09IGxvY2F0aW9uIGNoYW5nZS5cbiAgYS5rZXkgPT09IGIua2V5ICYmIF9kZWVwRXF1YWwyWydkZWZhdWx0J10oYS5zdGF0ZSwgYi5zdGF0ZSk7XG59XG5cbnZhciBEZWZhdWx0S2V5TGVuZ3RoID0gNjtcblxuZnVuY3Rpb24gY3JlYXRlSGlzdG9yeSgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcbiAgdmFyIGdldEN1cnJlbnRMb2NhdGlvbiA9IG9wdGlvbnMuZ2V0Q3VycmVudExvY2F0aW9uO1xuICB2YXIgZmluaXNoVHJhbnNpdGlvbiA9IG9wdGlvbnMuZmluaXNoVHJhbnNpdGlvbjtcbiAgdmFyIHNhdmVTdGF0ZSA9IG9wdGlvbnMuc2F2ZVN0YXRlO1xuICB2YXIgZ28gPSBvcHRpb25zLmdvO1xuICB2YXIga2V5TGVuZ3RoID0gb3B0aW9ucy5rZXlMZW5ndGg7XG4gIHZhciBnZXRVc2VyQ29uZmlybWF0aW9uID0gb3B0aW9ucy5nZXRVc2VyQ29uZmlybWF0aW9uO1xuXG4gIGlmICh0eXBlb2Yga2V5TGVuZ3RoICE9PSAnbnVtYmVyJykga2V5TGVuZ3RoID0gRGVmYXVsdEtleUxlbmd0aDtcblxuICB2YXIgdHJhbnNpdGlvbkhvb2tzID0gW107XG5cbiAgZnVuY3Rpb24gbGlzdGVuQmVmb3JlKGhvb2spIHtcbiAgICB0cmFuc2l0aW9uSG9va3MucHVzaChob29rKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cmFuc2l0aW9uSG9va3MgPSB0cmFuc2l0aW9uSG9va3MuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBob29rO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBhbGxLZXlzID0gW107XG4gIHZhciBjaGFuZ2VMaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGxvY2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnQoKSB7XG4gICAgaWYgKHBlbmRpbmdMb2NhdGlvbiAmJiBwZW5kaW5nTG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHtcbiAgICAgIHJldHVybiBhbGxLZXlzLmluZGV4T2YocGVuZGluZ0xvY2F0aW9uLmtleSk7XG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIGFsbEtleXMuaW5kZXhPZihsb2NhdGlvbi5rZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTG9jYXRpb24obmV3TG9jYXRpb24pIHtcbiAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnQoKTtcblxuICAgIGxvY2F0aW9uID0gbmV3TG9jYXRpb247XG5cbiAgICBpZiAobG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QVVNIKSB7XG4gICAgICBhbGxLZXlzID0gW10uY29uY2F0KGFsbEtleXMuc2xpY2UoMCwgY3VycmVudCArIDEpLCBbbG9jYXRpb24ua2V5XSk7XG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlJFUExBQ0UpIHtcbiAgICAgIGFsbEtleXNbY3VycmVudF0gPSBsb2NhdGlvbi5rZXk7XG4gICAgfVxuXG4gICAgY2hhbmdlTGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcihsb2NhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICBjaGFuZ2VMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgIGxpc3RlbmVyKGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgYWxsS2V5cyA9IFtfbG9jYXRpb24ua2V5XTtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uKF9sb2NhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZUxpc3RlbmVycyA9IGNoYW5nZUxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGxpc3RlbmVyO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGNhbGxiYWNrKSB7XG4gICAgX0FzeW5jVXRpbHMubG9vcEFzeW5jKHRyYW5zaXRpb25Ib29rcy5sZW5ndGgsIGZ1bmN0aW9uIChpbmRleCwgbmV4dCwgZG9uZSkge1xuICAgICAgX3J1blRyYW5zaXRpb25Ib29rMlsnZGVmYXVsdCddKHRyYW5zaXRpb25Ib29rc1tpbmRleF0sIGxvY2F0aW9uLCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIGRvbmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBpZiAoZ2V0VXNlckNvbmZpcm1hdGlvbiAmJiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbihtZXNzYWdlLCBmdW5jdGlvbiAob2spIHtcbiAgICAgICAgICBjYWxsYmFjayhvayAhPT0gZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG1lc3NhZ2UgIT09IGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBwZW5kaW5nTG9jYXRpb24gPSB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvblRvKG5leHRMb2NhdGlvbikge1xuICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbnNBcmVFcXVhbChsb2NhdGlvbiwgbmV4dExvY2F0aW9uKSkgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvLlxuXG4gICAgcGVuZGluZ0xvY2F0aW9uID0gbmV4dExvY2F0aW9uO1xuXG4gICAgY29uZmlybVRyYW5zaXRpb25UbyhuZXh0TG9jYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKHBlbmRpbmdMb2NhdGlvbiAhPT0gbmV4dExvY2F0aW9uKSByZXR1cm47IC8vIFRyYW5zaXRpb24gd2FzIGludGVycnVwdGVkLlxuXG4gICAgICBpZiAob2spIHtcbiAgICAgICAgLy8gdHJlYXQgUFVTSCB0byBjdXJyZW50IHBhdGggbGlrZSBSRVBMQUNFIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBicm93c2Vyc1xuICAgICAgICBpZiAobmV4dExvY2F0aW9uLmFjdGlvbiA9PT0gX0FjdGlvbnMuUFVTSCkge1xuICAgICAgICAgIHZhciBwcmV2UGF0aCA9IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xuICAgICAgICAgIHZhciBuZXh0UGF0aCA9IGNyZWF0ZVBhdGgobmV4dExvY2F0aW9uKTtcblxuICAgICAgICAgIGlmIChuZXh0UGF0aCA9PT0gcHJldlBhdGgpIG5leHRMb2NhdGlvbi5hY3Rpb24gPSBfQWN0aW9ucy5SRVBMQUNFO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbmlzaFRyYW5zaXRpb24obmV4dExvY2F0aW9uKSAhPT0gZmFsc2UpIHVwZGF0ZUxvY2F0aW9uKG5leHRMb2NhdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGxvY2F0aW9uICYmIG5leHRMb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlBPUCkge1xuICAgICAgICB2YXIgcHJldkluZGV4ID0gYWxsS2V5cy5pbmRleE9mKGxvY2F0aW9uLmtleSk7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBhbGxLZXlzLmluZGV4T2YobmV4dExvY2F0aW9uLmtleSk7XG5cbiAgICAgICAgaWYgKHByZXZJbmRleCAhPT0gLTEgJiYgbmV4dEluZGV4ICE9PSAtMSkgZ28ocHJldkluZGV4IC0gbmV4dEluZGV4KTsgLy8gUmVzdG9yZSB0aGUgVVJMLlxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaChsb2NhdGlvbikge1xuICAgIHRyYW5zaXRpb25UbyhjcmVhdGVMb2NhdGlvbihsb2NhdGlvbiwgX0FjdGlvbnMuUFVTSCwgY3JlYXRlS2V5KCkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2UobG9jYXRpb24pIHtcbiAgICB0cmFuc2l0aW9uVG8oY3JlYXRlTG9jYXRpb24obG9jYXRpb24sIF9BY3Rpb25zLlJFUExBQ0UsIGNyZWF0ZUtleSgpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgZ28oLTEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIGdvKDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICAgIHJldHVybiBjcmVhdGVSYW5kb21LZXkoa2V5TGVuZ3RoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhdGgobG9jYXRpb24pIHtcbiAgICBpZiAobG9jYXRpb24gPT0gbnVsbCB8fCB0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gbG9jYXRpb247XG5cbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoO1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcblxuICAgIHZhciByZXN1bHQgPSBwYXRobmFtZTtcblxuICAgIGlmIChzZWFyY2gpIHJlc3VsdCArPSBzZWFyY2g7XG5cbiAgICBpZiAoaGFzaCkgcmVzdWx0ICs9IGhhc2g7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSHJlZihsb2NhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVQYXRoKGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uLCBhY3Rpb24pIHtcbiAgICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gY3JlYXRlS2V5KCkgOiBhcmd1bWVudHNbMl07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vd2FybmluZyhcbiAgICAgIC8vICBmYWxzZSxcbiAgICAgIC8vICAnVGhlIHN0YXRlICgybmQpIGFyZ3VtZW50IHRvIGhpc3RvcnkuY3JlYXRlTG9jYXRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIGEgJyArXG4gICAgICAvLyAgJ2xvY2F0aW9uIGRlc2NyaXB0b3IgaW5zdGVhZCdcbiAgICAgIC8vKVxuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAnc3RyaW5nJykgbG9jYXRpb24gPSBfcGFyc2VQYXRoMlsnZGVmYXVsdCddKGxvY2F0aW9uKTtcblxuICAgICAgbG9jYXRpb24gPSBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHsgc3RhdGU6IGFjdGlvbiB9KTtcblxuICAgICAgYWN0aW9uID0ga2V5O1xuICAgICAga2V5ID0gYXJndW1lbnRzWzNdIHx8IGNyZWF0ZUtleSgpO1xuICAgIH1cblxuICAgIHJldHVybiBfY3JlYXRlTG9jYXRpb24zWydkZWZhdWx0J10obG9jYXRpb24sIGFjdGlvbiwga2V5KTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uU3RhdGUobG9jYXRpb24sIHN0YXRlKTtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlTG9jYXRpb25TdGF0ZShnZXRDdXJyZW50TG9jYXRpb24oKSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uU3RhdGUobG9jYXRpb24sIHN0YXRlKSB7XG4gICAgbG9jYXRpb24uc3RhdGUgPSBfZXh0ZW5kcyh7fSwgbG9jYXRpb24uc3RhdGUsIHN0YXRlKTtcbiAgICBzYXZlU3RhdGUobG9jYXRpb24ua2V5LCBsb2NhdGlvbi5zdGF0ZSk7XG4gIH1cblxuICAvLyBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vaykge1xuICAgIGlmICh0cmFuc2l0aW9uSG9va3MuaW5kZXhPZihob29rKSA9PT0gLTEpIHRyYW5zaXRpb25Ib29rcy5wdXNoKGhvb2spO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vaykge1xuICAgIHRyYW5zaXRpb25Ib29rcyA9IHRyYW5zaXRpb25Ib29rcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtICE9PSBob29rO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiBwdXNoU3RhdGUoc3RhdGUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSBwYXRoID0gX3BhcnNlUGF0aDJbJ2RlZmF1bHQnXShwYXRoKTtcblxuICAgIHB1c2goX2V4dGVuZHMoeyBzdGF0ZTogc3RhdGUgfSwgcGF0aCkpO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiByZXBsYWNlU3RhdGUoc3RhdGUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSBwYXRoID0gX3BhcnNlUGF0aDJbJ2RlZmF1bHQnXShwYXRoKTtcblxuICAgIHJlcGxhY2UoX2V4dGVuZHMoeyBzdGF0ZTogc3RhdGUgfSwgcGF0aCkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsaXN0ZW5CZWZvcmU6IGxpc3RlbkJlZm9yZSxcbiAgICBsaXN0ZW46IGxpc3RlbixcbiAgICB0cmFuc2l0aW9uVG86IHRyYW5zaXRpb25UbyxcbiAgICBwdXNoOiBwdXNoLFxuICAgIHJlcGxhY2U6IHJlcGxhY2UsXG4gICAgZ286IGdvLFxuICAgIGdvQmFjazogZ29CYWNrLFxuICAgIGdvRm9yd2FyZDogZ29Gb3J3YXJkLFxuICAgIGNyZWF0ZUtleTogY3JlYXRlS2V5LFxuICAgIGNyZWF0ZVBhdGg6IGNyZWF0ZVBhdGgsXG4gICAgY3JlYXRlSHJlZjogY3JlYXRlSHJlZixcbiAgICBjcmVhdGVMb2NhdGlvbjogY3JlYXRlTG9jYXRpb24sXG5cbiAgICBzZXRTdGF0ZTogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShzZXRTdGF0ZSwgJ3NldFN0YXRlIGlzIGRlcHJlY2F0ZWQ7IHVzZSBsb2NhdGlvbi5rZXkgdG8gc2F2ZSBzdGF0ZSBpbnN0ZWFkJyksXG4gICAgcmVnaXN0ZXJUcmFuc2l0aW9uSG9vazogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShyZWdpc3RlclRyYW5zaXRpb25Ib29rLCAncmVnaXN0ZXJUcmFuc2l0aW9uSG9vayBpcyBkZXByZWNhdGVkOyB1c2UgbGlzdGVuQmVmb3JlIGluc3RlYWQnKSxcbiAgICB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2s6IF9kZXByZWNhdGUyWydkZWZhdWx0J10odW5yZWdpc3RlclRyYW5zaXRpb25Ib29rLCAndW5yZWdpc3RlclRyYW5zaXRpb25Ib29rIGlzIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgZnJvbSBsaXN0ZW5CZWZvcmUgaW5zdGVhZCcpLFxuICAgIHB1c2hTdGF0ZTogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShwdXNoU3RhdGUsICdwdXNoU3RhdGUgaXMgZGVwcmVjYXRlZDsgdXNlIHB1c2ggaW5zdGVhZCcpLFxuICAgIHJlcGxhY2VTdGF0ZTogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShyZXBsYWNlU3RhdGUsICdyZXBsYWNlU3RhdGUgaXMgZGVwcmVjYXRlZDsgdXNlIHJlcGxhY2UgaW5zdGVhZCcpXG4gIH07XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGNyZWF0ZUhpc3Rvcnk7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvL2ltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9BY3Rpb25zID0gcmVxdWlyZSgnLi9BY3Rpb25zJyk7XG5cbnZhciBfcGFyc2VQYXRoID0gcmVxdWlyZSgnLi9wYXJzZVBhdGgnKTtcblxudmFyIF9wYXJzZVBhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFyc2VQYXRoKTtcblxuZnVuY3Rpb24gY3JlYXRlTG9jYXRpb24oKSB7XG4gIHZhciBsb2NhdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/ICcvJyA6IGFyZ3VtZW50c1swXTtcbiAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IF9BY3Rpb25zLlBPUCA6IGFyZ3VtZW50c1sxXTtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBhcmd1bWVudHNbMl07XG5cbiAgdmFyIF9mb3VydGhBcmcgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyBudWxsIDogYXJndW1lbnRzWzNdO1xuXG4gIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnKSBsb2NhdGlvbiA9IF9wYXJzZVBhdGgyWydkZWZhdWx0J10obG9jYXRpb24pO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9uID09PSAnb2JqZWN0Jykge1xuICAgIC8vd2FybmluZyhcbiAgICAvLyAgZmFsc2UsXG4gICAgLy8gICdUaGUgc3RhdGUgKDJuZCkgYXJndW1lbnQgdG8gY3JlYXRlTG9jYXRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIGEgJyArXG4gICAgLy8gICdsb2NhdGlvbiBkZXNjcmlwdG9yIGluc3RlYWQnXG4gICAgLy8pXG5cbiAgICBsb2NhdGlvbiA9IF9leHRlbmRzKHt9LCBsb2NhdGlvbiwgeyBzdGF0ZTogYWN0aW9uIH0pO1xuXG4gICAgYWN0aW9uID0ga2V5IHx8IF9BY3Rpb25zLlBPUDtcbiAgICBrZXkgPSBfZm91cnRoQXJnO1xuICB9XG5cbiAgdmFyIHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgfHwgJy8nO1xuICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoIHx8ICcnO1xuICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2ggfHwgJyc7XG4gIHZhciBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlIHx8IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2gsXG4gICAgaGFzaDogaGFzaCxcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAga2V5OiBrZXlcbiAgfTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gY3JlYXRlTG9jYXRpb247XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvL2ltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnXG5cblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZnVuY3Rpb24gZGVwcmVjYXRlKGZuKSB7XG4gIHJldHVybiBmbjtcbiAgLy9yZXR1cm4gZnVuY3Rpb24gKCkge1xuICAvLyAgd2FybmluZyhmYWxzZSwgJ1toaXN0b3J5XSAnICsgbWVzc2FnZSlcbiAgLy8gIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIC8vfVxufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGRlcHJlY2F0ZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5mdW5jdGlvbiBleHRyYWN0UGF0aChzdHJpbmcpIHtcbiAgdmFyIG1hdGNoID0gc3RyaW5nLm1hdGNoKC9eaHR0cHM/OlxcL1xcL1teXFwvXSovKTtcblxuICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIHN0cmluZztcblxuICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGV4dHJhY3RQYXRoO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBfZXh0cmFjdFBhdGggPSByZXF1aXJlKCcuL2V4dHJhY3RQYXRoJyk7XG5cbnZhciBfZXh0cmFjdFBhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXh0cmFjdFBhdGgpO1xuXG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICB2YXIgcGF0aG5hbWUgPSBfZXh0cmFjdFBhdGgyWydkZWZhdWx0J10ocGF0aCk7XG4gIHZhciBzZWFyY2ggPSAnJztcbiAgdmFyIGhhc2ggPSAnJztcblxuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3dhcm5pbmcyWydkZWZhdWx0J10ocGF0aCA9PT0gcGF0aG5hbWUsICdBIHBhdGggbXVzdCBiZSBwYXRobmFtZSArIHNlYXJjaCArIGhhc2ggb25seSwgbm90IGEgZnVsbHkgcXVhbGlmaWVkIFVSTCBsaWtlIFwiJXNcIicsIHBhdGgpIDogdW5kZWZpbmVkO1xuXG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgaGFzaCA9IHBhdGhuYW1lLnN1YnN0cmluZyhoYXNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyaW5nKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgc2VhcmNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCc/Jyk7XG4gIGlmIChzZWFyY2hJbmRleCAhPT0gLTEpIHtcbiAgICBzZWFyY2ggPSBwYXRobmFtZS5zdWJzdHJpbmcoc2VhcmNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyaW5nKDAsIHNlYXJjaEluZGV4KTtcbiAgfVxuXG4gIGlmIChwYXRobmFtZSA9PT0gJycpIHBhdGhuYW1lID0gJy8nO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2hcbiAgfTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gcGFyc2VQYXRoO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG5mdW5jdGlvbiBydW5UcmFuc2l0aW9uSG9vayhob29rLCBsb2NhdGlvbiwgY2FsbGJhY2spIHtcbiAgdmFyIHJlc3VsdCA9IGhvb2sobG9jYXRpb24sIGNhbGxiYWNrKTtcblxuICBpZiAoaG9vay5sZW5ndGggPCAyKSB7XG4gICAgLy8gQXNzdW1lIHRoZSBob29rIHJ1bnMgc3luY2hyb25vdXNseSBhbmQgYXV0b21hdGljYWxseVxuICAgIC8vIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHJldHVybiB2YWx1ZS5cbiAgICBjYWxsYmFjayhyZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfd2FybmluZzJbJ2RlZmF1bHQnXShyZXN1bHQgPT09IHVuZGVmaW5lZCwgJ1lvdSBzaG91bGQgbm90IFwicmV0dXJuXCIgaW4gYSB0cmFuc2l0aW9uIGhvb2sgd2l0aCBhIGNhbGxiYWNrIGFyZ3VtZW50OyBjYWxsIHRoZSBjYWxsYmFjayBpbnN0ZWFkJykgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gcnVuVHJhbnNpdGlvbkhvb2s7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArXG4gICAgICAgICdtZXNzYWdlIGFyZ3VtZW50J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0Lmxlbmd0aCA8IDEwIHx8ICgvXltzXFxXXSokLykudGVzdChmb3JtYXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgd2FybmluZyBmb3JtYXQgc2hvdWxkIGJlIGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyAnICtcbiAgICAgICAgJ3dhcm5pbmcuIFBsZWFzZSwgdXNlIGEgbW9yZSBkZXNjcmlwdGl2ZSBmb3JtYXQgdGhhbjogJyArIGZvcm1hdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgK1xuICAgICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICAgIH0pO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoKHgpIHt9XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlZnJlc2goKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaWduZWRJbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKFxuICAgICAgICBnZXR0ZXh0KFwiWW91IGhhdmUgc2lnbmVkIGluIGFzICUodXNlcm5hbWUpcy4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYmVmb3JlIGNvbnRpbnVpbmcuXCIpLFxuICAgICAgICB7dXNlcm5hbWU6IHRoaXMucHJvcHMuc2lnbmVkSW4udXNlcm5hbWV9LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc2lnbmVkT3V0KSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoXG4gICAgICAgIGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdSBoYXZlIGJlZW4gc2lnbmVkIG91dC4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYmVmb3JlIGNvbnRpbnVpbmcuXCIpLFxuICAgICAgICB7dXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZX0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaWduZWRJbiB8fCB0aGlzLnByb3BzLnNpZ25lZE91dCkge1xuICAgICAgcmV0dXJuIFwiYXV0aC1tZXNzYWdlIHNob3dcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiYXV0aC1tZXNzYWdlXCI7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPnt0aGlzLmdldE1lc3NhZ2UoKX08L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnJlZnJlc2h9PlxuICAgICAgICAgICAge2dldHRleHQoXCJSZWxvYWQgcGFnZVwiKX1cbiAgICAgICAgICA8L2J1dHRvbj4gPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuLXhzIGhpZGRlbi1zbSB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIm9yIHByZXNzIEY1IGtleS5cIil9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgdXNlcjogc3RhdGUuYXV0aC51c2VyLFxuICAgIHNpZ25lZEluOiBzdGF0ZS5hdXRoLnNpZ25lZEluLFxuICAgIHNpZ25lZE91dDogc3RhdGUuYXV0aC5zaWduZWRPdXRcbiAgfTtcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBCQVNFX1VSTCA9ICQoJ2Jhc2UnKS5hdHRyKCdocmVmJykgKyAndXNlci1hdmF0YXIvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRTcmMoKSB7XG4gICAgbGV0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgMTAwOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICBsZXQgdXJsID0gQkFTRV9VUkw7XG5cbiAgICBpZiAodGhpcy5wcm9wcy51c2VyICYmIHRoaXMucHJvcHMudXNlci5pZCkge1xuICAgICAgLy8ganVzdCBhdmF0YXIgaGFzaCwgc2l6ZSBhbmQgdXNlciBpZFxuICAgICAgdXJsICs9IHRoaXMucHJvcHMudXNlci5hdmF0YXJfaGFzaCArICcvJyArIHNpemUgKyAnLycgKyB0aGlzLnByb3BzLnVzZXIuaWQgKyAnLnBuZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGp1c3QgYXBwZW5kIGF2YXRhciBzaXplIHRvIGZpbGUgdG8gcHJvZHVjZSBuby1hdmF0YXIgcGxhY2Vob2xkZXJcbiAgICAgIHVybCArPSBzaXplICsgJy5wbmcnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8aW1nIHNyYz17dGhpcy5nZXRTcmMoKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8ICd1c2VyLWF2YXRhcid9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2dldHRleHQoXCJVc2VyIGF2YXRhclwiKX0vPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFJlYXNvbk1lc3NhZ2UoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnByb3BzLm1lc3NhZ2UuaHRtbCkge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGVhZFwiXG4gICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogdGhpcy5wcm9wcy5tZXNzYWdlLmh0bWx9fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxwIGNsYXNzTmFtZT1cImxlYWRcIj57dGhpcy5wcm9wcy5tZXNzYWdlLnBsYWlufTwvcD47XG4gICAgfVxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRFeHBpcmF0aW9uTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5leHBpcmVzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5leHBpcmVzLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShcbiAgICAgICAgICBnZXR0ZXh0KFwiVGhpcyBiYW4gZXhwaXJlcyAlKGV4cGlyZXNfb24pcy5cIiksXG4gICAgICAgICAgeydleHBpcmVzX29uJzogdGhpcy5wcm9wcy5leHBpcmVzLmZyb21Ob3coKX0sXG4gICAgICAgICAgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgYmFuIGhhcyBleHBpcmVkLlwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJUaGlzIGJhbiBpcyBwZXJtYW5lbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZSBwYWdlLWVycm9yIHBhZ2UtZXJyb3ItYmFubmVkXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtcGFuZWxcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+aGlnaGxpZ2h0X29mZjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgICAge3RoaXMuZ2V0UmVhc29uTWVzc2FnZSgpfVxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibWVzc2FnZS1mb290bm90ZVwiPlxuICAgICAgICAgICAgICB7dGhpcy5nZXRFeHBpcmF0aW9uTWVzc2FnZSgpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSAnYnRuICcgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICBsZXQgZGlzYWJsZWQgPSB0aGlzLnByb3BzLmRpc2FibGVkO1xuXG4gICAgaWYgKHRoaXMucHJvcHMubG9hZGluZykge1xuICAgICAgY2xhc3NOYW1lICs9ICcgYnRuLWxvYWRpbmcnO1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGJ1dHRvbiB0eXBlPXt0aGlzLnByb3BzLm9uQ2xpY2sgPyAnYnV0dG9uJyA6ICdzdWJtaXQnfVxuICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxuICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICB7dGhpcy5wcm9wcy5sb2FkaW5nID8gPExvYWRlciAvPiA6IG51bGx9XG4gICAgPC9idXR0b24+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuXG5CdXR0b24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiYnRuLWRlZmF1bHRcIixcblxuICB0eXBlOiBcInN1Ym1pdFwiLFxuXG4gIGxvYWRpbmc6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG5cbiAgb25DbGljazogbnVsbFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmNvbnN0IEJBU0VfVVJMID0gJCgnYmFzZScpLmF0dHIoJ2hyZWYnKSArICd1c2VyLWF2YXRhcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGdldEF2YXRhclNpemUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3BfdG1wLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuY3JvcF9vcmcuc2l6ZTtcbiAgICB9XG4gIH1cblxuICBnZXRBdmF0YXJTZWNyZXQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3BfdG1wLnNlY3JldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5jcm9wX29yZy5zZWNyZXQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXZhdGFySGFzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy51cGxvYWQgfHwgdGhpcy5wcm9wcy51c2VyLmF2YXRhcl9oYXNoO1xuICB9XG5cbiAgZ2V0SW1hZ2VQYXRoKCkge1xuICAgIHJldHVybiBbXG4gICAgICBCQVNFX1VSTCxcbiAgICAgIHRoaXMuZ2V0QXZhdGFyU2VjcmV0KCkgKyAnOicgKyB0aGlzLmdldEF2YXRhckhhc2goKSxcbiAgICAgIHRoaXMucHJvcHMudXNlci5pZCArICcucG5nJ1xuICAgIF0uam9pbignLycpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgbGV0IGNyb3BpdCA9ICQoJy5jcm9wLWZvcm0nKTtcbiAgICBjcm9waXQud2lkdGgodGhpcy5nZXRBdmF0YXJTaXplKCkpO1xuXG4gICAgY3JvcGl0LmNyb3BpdCh7XG4gICAgICAnd2lkdGgnOiB0aGlzLmdldEF2YXRhclNpemUoKSxcbiAgICAgICdoZWlnaHQnOiB0aGlzLmdldEF2YXRhclNpemUoKSxcbiAgICAgICdpbWFnZVN0YXRlJzoge1xuICAgICAgICAnc3JjJzogdGhpcy5nZXRJbWFnZVBhdGgoKVxuICAgICAgfSxcbiAgICAgIG9uSW1hZ2VMb2FkZWQ6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICAgICAgLy8gY2VudGVyIHVwbG9hZGVkIGltYWdlXG4gICAgICAgICAgbGV0IHpvb21MZXZlbCA9IGNyb3BpdC5jcm9waXQoJ3pvb20nKTtcbiAgICAgICAgICBsZXQgaW1hZ2VTaXplID0gY3JvcGl0LmNyb3BpdCgnaW1hZ2VTaXplJyk7XG5cbiAgICAgICAgICAvLyBpcyBpdCB3aWRlciB0aGFuIHRhbGxlcj9cbiAgICAgICAgICBpZiAoaW1hZ2VTaXplLndpZHRoID4gaW1hZ2VTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgbGV0IGRpc3BsYXllZFdpZHRoID0gKGltYWdlU2l6ZS53aWR0aCAqIHpvb21MZXZlbCk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0WCA9IChkaXNwbGF5ZWRXaWR0aCAtIHRoaXMuZ2V0QXZhdGFyU2l6ZSgpKSAvIC0yO1xuXG4gICAgICAgICAgICBjcm9waXQuY3JvcGl0KCdvZmZzZXQnLCB7XG4gICAgICAgICAgICAgICd4Jzogb2Zmc2V0WCxcbiAgICAgICAgICAgICAgJ3knOiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZS53aWR0aCA8IGltYWdlU2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5ZWRIZWlnaHQgPSAoaW1hZ2VTaXplLmhlaWdodCAqIHpvb21MZXZlbCk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0WSA9IChkaXNwbGF5ZWRIZWlnaHQgLSB0aGlzLmdldEF2YXRhclNpemUoKSkgLyAtMjtcblxuICAgICAgICAgICAgY3JvcGl0LmNyb3BpdCgnb2Zmc2V0Jywge1xuICAgICAgICAgICAgICAneCc6IDAsXG4gICAgICAgICAgICAgICd5Jzogb2Zmc2V0WVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVzZSBwcmVzZXJ2ZWQgY3JvcFxuICAgICAgICAgIGxldCBjcm9wID0gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3Bfb3JnLmNyb3A7XG4gICAgICAgICAgaWYgKGNyb3ApIHtcbiAgICAgICAgICAgIGNyb3BpdC5jcm9waXQoJ3pvb20nLCBjcm9wLnpvb20pO1xuICAgICAgICAgICAgY3JvcGl0LmNyb3BpdCgnb2Zmc2V0Jywge1xuICAgICAgICAgICAgICAneCc6IGNyb3AueCxcbiAgICAgICAgICAgICAgJ3knOiBjcm9wLnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgJCgnLmNyb3AtZm9ybScpLmNyb3BpdCgnZGlzYWJsZScpO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjcm9wQXZhdGFyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2lzTG9hZGluZyc6IHRydWVcbiAgICB9KTtcblxuICAgIGxldCBhdmF0YXJUeXBlID0gdGhpcy5wcm9wcy51cGxvYWQgPyAnY3JvcF90bXAnIDogJ2Nyb3Bfb3JnJztcbiAgICBsZXQgY3JvcGl0ID0gJCgnLmNyb3AtZm9ybScpO1xuXG4gICAgYWpheC5wb3N0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmF2YXRhciwge1xuICAgICAgJ2F2YXRhcic6IGF2YXRhclR5cGUsXG4gICAgICAnY3JvcCc6IHtcbiAgICAgICAgJ29mZnNldCc6IGNyb3BpdC5jcm9waXQoJ29mZnNldCcpLFxuICAgICAgICAnem9vbSc6IGNyb3BpdC5jcm9waXQoJ3pvb20nKVxuICAgICAgfVxuICAgIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25Db21wbGV0ZShkYXRhLmF2YXRhcl9oYXNoLCBkYXRhLm9wdGlvbnMpO1xuICAgICAgc25hY2tiYXIuc3VjY2VzcyhkYXRhLmRldGFpbCk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zaG93RXJyb3IocmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5IG1vZGFsLWF2YXRhci1jcm9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY3JvcC1mb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjcm9waXQtaW1hZ2UtcHJldmlld1wiPjwvZGl2PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzc05hbWU9XCJjcm9waXQtaW1hZ2Utem9vbS1pbnB1dFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLmNyb3BBdmF0YXJ9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudXBsb2FkID8gZ2V0dGV4dChcIlNldCBhdmF0YXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldHRleHQoXCJDcm9wIGltYWdlXCIpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dJbmRleH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAge2dldHRleHQoXCJDYW5jZWxcIil9XG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYmF0Y2ggZnJvbSAnbWlzYWdvL3V0aWxzL2JhdGNoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBHYWxsZXJ5SXRlbSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2VsZWN0ID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2VsZWN0KHRoaXMucHJvcHMuaW1hZ2UpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24gPT09IHRoaXMucHJvcHMuaW1hZ2UpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAnYnRuIGJ0bi1hdmF0YXIgYnRuLWRpc2FibGVkIGF2YXRhci1zZWxlY3RlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2J0biBidG4tYXZhdGFyIGF2YXRhci1zZWxlY3RlZCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJ2J0biBidG4tYXZhdGFyIGJ0bi1kaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1hdmF0YXInO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2VsZWN0fT5cbiAgICAgIDxpbWcgc3JjPXttaXNhZ28uZ2V0KCdNRURJQV9VUkwnKSArIHRoaXMucHJvcHMuaW1hZ2V9IC8+XG4gICAgPC9idXR0b24+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2FsbGVyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFycy1nYWxsZXJ5XCI+XG4gICAgICA8aDM+e3RoaXMucHJvcHMubmFtZX08L2gzPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImF2YXRhcnMtZ2FsbGVyeS1pbWFnZXNcIj5cbiAgICAgICAge2JhdGNoKHRoaXMucHJvcHMuaW1hZ2VzLCA0LCBudWxsKS5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiIGtleT17aX0+XG4gICAgICAgICAgICB7cm93Lm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb2wteHMtM1wiIGtleT17aX0+XG4gICAgICAgICAgICAgICAge2l0ZW0gPyA8R2FsbGVyeUl0ZW0gaW1hZ2U9e2l0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PXt0aGlzLnByb3BzLnNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb249e3RoaXMucHJvcHMuc2VsZWN0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9XCJibGFuay1hdmF0YXJcIiAvPn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdzZWxlY3Rpb24nOiBudWxsLFxuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2VsZWN0ID0gKGltYWdlKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3Rpb246IGltYWdlXG4gICAgfSk7XG4gIH07XG5cbiAgc2F2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgfSk7XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyLCB7XG4gICAgICBhdmF0YXI6ICdnYWxsZXJpZXMnLFxuICAgICAgaW1hZ2U6IHRoaXMuc3RhdGUuc2VsZWN0aW9uXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnaXNMb2FkaW5nJzogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gICAgICB0aGlzLnByb3BzLm9uQ29tcGxldGUocmVzcG9uc2UuYXZhdGFyX2hhc2gsIHJlc3BvbnNlLm9wdGlvbnMpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItZ2FsbGVyeVwiPlxuXG4gICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMuZ2FsbGVyaWVzLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8R2FsbGVyeSBuYW1lPXtpdGVtLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcz17aXRlbS5pbWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbj17dGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PXt0aGlzLnNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfSAvPjtcbiAgICAgICAgfSl9XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5zZWxlY3Rpb24gPyBnZXR0ZXh0KFwiU2F2ZSBjaG9pY2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0dGV4dChcIlNlbGVjdCBhdmF0YXJcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZGVmYXVsdCBidG4tYmxvY2tcIj5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJDYW5jZWxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYWxsQXBpKGF2YXRhclR5cGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgfSk7XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyLCB7XG4gICAgICBhdmF0YXI6IGF2YXRhclR5cGVcbiAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHNuYWNrYmFyLnN1Y2Nlc3MocmVzcG9uc2UuZGV0YWlsKTtcbiAgICAgIHRoaXMucHJvcHMub25Db21wbGV0ZShyZXNwb25zZS5hdmF0YXJfaGFzaCwgcmVzcG9uc2Uub3B0aW9ucyk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zaG93RXJyb3IocmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2V0R3JhdmF0YXIgPSAoKSA9PiB7XG4gICAgdGhpcy5jYWxsQXBpKCdncmF2YXRhcicpO1xuICB9O1xuXG4gIHNldEdlbmVyYXRlZCA9ICgpID0+IHtcbiAgICB0aGlzLmNhbGxBcGkoJ2dlbmVyYXRlZCcpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldEdyYXZhdGFyQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuZ3JhdmF0YXIpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2V0R3JhdmF0YXJ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1hdmF0YXItZ3JhdmF0YXJcIj5cbiAgICAgICAge2dldHRleHQoXCJEb3dubG9hZCBteSBHcmF2YXRhclwiKX1cbiAgICAgIDwvQnV0dG9uPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldENyb3BCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5jcm9wX29yZykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93Q3JvcH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZGVmYXVsdCBidG4tYmxvY2sgYnRuLWF2YXRhci1jcm9wXCI+XG4gICAgICAgIHtnZXR0ZXh0KFwiUmUtY3JvcCB1cGxvYWRlZCBpbWFnZVwiKX1cbiAgICAgIDwvQnV0dG9uPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFVwbG9hZEJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLnVwbG9hZCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93VXBsb2FkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBidG4tYXZhdGFyLXVwbG9hZFwiPlxuICAgICAgICB7Z2V0dGV4dChcIlVwbG9hZCBuZXcgaW1hZ2VcIil9XG4gICAgICA8L0J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRHYWxsZXJ5QnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuZ2FsbGVyaWVzKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dHYWxsZXJ5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBidG4tYXZhdGFyLWdhbGxlcnlcIj5cbiAgICAgICAge2dldHRleHQoXCJQaWNrIGF2YXRhciBmcm9tIGdhbGxlcnlcIil9XG4gICAgICA8L0J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRBdmF0YXJQcmV2aWV3KCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFyLXByZXZpZXcgcHJldmlldy1sb2FkaW5nXCI+XG4gICAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiMjAwXCIgLz5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFyLXByZXZpZXdcIj5cbiAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IHNpemU9XCIyMDBcIiAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHkgbW9kYWwtYXZhdGFyLWluZGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC01XCI+XG5cbiAgICAgICAgICB7dGhpcy5nZXRBdmF0YXJQcmV2aWV3KCl9XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTdcIj5cblxuICAgICAgICAgIHt0aGlzLmdldEdyYXZhdGFyQnV0dG9uKCl9XG5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2V0R2VuZXJhdGVkfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1hdmF0YXItZ2VuZXJhdGVcIj5cbiAgICAgICAgICAgIHtnZXR0ZXh0KFwiR2VuZXJhdGUgbXkgaW5kaXZpZHVhbCBhdmF0YXJcIil9XG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICB7dGhpcy5nZXRDcm9wQnV0dG9uKCl9XG4gICAgICAgICAge3RoaXMuZ2V0VXBsb2FkQnV0dG9uKCl9XG4gICAgICAgICAge3RoaXMuZ2V0R2FsbGVyeUJ1dHRvbigpfVxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhckluZGV4IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBBdmF0YXJDcm9wIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvY3JvcCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhclVwbG9hZCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3VwbG9hZCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhckdhbGxlcnkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9nYWxsZXJ5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL21vZGFsLWxvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgdXBkYXRlQXZhdGFyIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VBdmF0YXJFcnJvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEVycm9yUmVhc29uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlYXNvbikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxwIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiB0aGlzLnByb3BzLnJlYXNvbn19IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgcmVtb3ZlX2NpcmNsZV9vdXRsaW5lXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XG4gICAgICAgIDwvcD5cbiAgICAgICAge3RoaXMuZ2V0RXJyb3JSZWFzb24oKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgYWpheC5nZXQodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyKS50aGVuKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhckluZGV4LFxuICAgICAgICAnb3B0aW9ucyc6IG9wdGlvbnMsXG4gICAgICAgICdlcnJvcic6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHNob3dFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZXJyb3JcbiAgICB9KTtcbiAgfTtcblxuICBzaG93SW5kZXggPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAnY29tcG9uZW50JzogQXZhdGFySW5kZXhcbiAgICB9KTtcbiAgfTtcblxuICBzaG93VXBsb2FkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhclVwbG9hZFxuICAgIH0pO1xuICB9O1xuXG4gIHNob3dDcm9wID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhckNyb3BcbiAgICB9KTtcbiAgfTtcblxuICBzaG93R2FsbGVyeSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdjb21wb25lbnQnOiBBdmF0YXJHYWxsZXJ5XG4gICAgfSk7XG4gIH07XG5cbiAgY29tcGxldGVGbG93ID0gKGF2YXRhckhhc2gsIG9wdGlvbnMpID0+IHtcbiAgICBzdG9yZS5kaXNwYXRjaCh1cGRhdGVBdmF0YXIodGhpcy5wcm9wcy51c2VyLCBhdmF0YXJIYXNoKSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdjb21wb25lbnQnOiBBdmF0YXJJbmRleCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRCb2R5KCkge1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8Q2hhbmdlQXZhdGFyRXJyb3IgbWVzc2FnZT17dGhpcy5zdGF0ZS5lcnJvci5kZXRhaWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uPXt0aGlzLnN0YXRlLmVycm9yLnJlYXNvbn0gLz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8dGhpcy5zdGF0ZS5jb21wb25lbnQgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXt0aGlzLmNvbXBsZXRlRmxvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93RXJyb3I9e3RoaXMuc2hvd0Vycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbmRleD17dGhpcy5zaG93SW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Nyb3A9e3RoaXMuc2hvd0Nyb3B9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZD17dGhpcy5zaG93VXBsb2FkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dHYWxsZXJ5PXt0aGlzLnNob3dHYWxsZXJ5fSAvPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxMb2FkZXIgLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgIGlmICh0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBcIm1vZGFsLWRpYWxvZyBtb2RhbC1tZXNzYWdlIG1vZGFsLWNoYW5nZS1hdmF0YXJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibW9kYWwtZGlhbG9nIG1vZGFsLWNoYW5nZS1hdmF0YXJcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgeW91ciBhdmF0YXJcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge3RoaXMuZ2V0Qm9keSgpfVxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgJ3VzZXInOiBzdGF0ZS5hdXRoLnVzZXJcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyQ3JvcCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL2Nyb3AnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGZpbGVTaXplIGZyb20gJ21pc2Fnby91dGlscy9maWxlLXNpemUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpbWFnZSc6IG51bGwsXG4gICAgICAncHJldmlldyc6IG51bGwsXG4gICAgICAncHJvZ3Jlc3MnOiAwLFxuICAgICAgJ3VwbG9hZGVkJzogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlKGltYWdlKSB7XG4gICAgaWYgKGltYWdlLnNpemUgPiB0aGlzLnByb3BzLm9wdGlvbnMudXBsb2FkLmxpbWl0KSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIlNlbGVjdGVkIGZpbGUgaXMgdG9vIGJpZy4gKCUoZmlsZXNpemUpcylcIiksIHtcbiAgICAgICAgJ2ZpbGVzaXplJzogZmlsZVNpemUoaW1hZ2Uuc2l6ZSlcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGxldCBpbnZhbGlkVHlwZU1zZyA9IGdldHRleHQoXCJTZWxlY3RlZCBmaWxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy51cGxvYWQuYWxsb3dlZF9taW1lX3R5cGVzLmluZGV4T2YoaW1hZ2UudHlwZSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2c7XG4gICAgfVxuXG4gICAgbGV0IGV4dGVuc2lvbkZvdW5kID0gZmFsc2U7XG4gICAgbGV0IGxvd2VyZWRGaWxlbmFtZSA9IGltYWdlLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3BzLm9wdGlvbnMudXBsb2FkLmFsbG93ZWRfZXh0ZW5zaW9ucy5tYXAoZnVuY3Rpb24oZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAobG93ZXJlZEZpbGVuYW1lLnN1YnN0cihleHRlbnNpb24ubGVuZ3RoICogLTEpID09PSBleHRlbnNpb24pIHtcbiAgICAgICAgZXh0ZW5zaW9uRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFleHRlbnNpb25Gb3VuZCkge1xuICAgICAgcmV0dXJuIGludmFsaWRUeXBlTXNnO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgcGlja0ZpbGUgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2YXRhci1oaWRkZW4tdXBsb2FkJykuY2xpY2soKTtcbiAgfTtcblxuICB1cGxvYWRGaWxlID0gKCkgPT4ge1xuICAgIGxldCBpbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdmF0YXItaGlkZGVuLXVwbG9hZCcpLmZpbGVzWzBdO1xuXG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGVGaWxlKGltYWdlKTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcih2YWxpZGF0aW9uRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaW1hZ2UsXG4gICAgICAncHJldmlldyc6IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2UpLFxuICAgICAgJ3Byb2dyZXNzJzogMFxuICAgIH0pO1xuXG4gICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBkYXRhLmFwcGVuZCgnYXZhdGFyJywgJ3VwbG9hZCcpO1xuICAgIGRhdGEuYXBwZW5kKCdpbWFnZScsIGltYWdlKTtcblxuICAgIGFqYXgudXBsb2FkKHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmF2YXRhciwgZGF0YSwgKHByb2dyZXNzKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJvZ3Jlc3NcbiAgICAgIH0pO1xuICAgIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnb3B0aW9ucyc6IGRhdGEub3B0aW9ucyxcbiAgICAgICAgJ3VwbG9hZGVkJzogZGF0YS5kZXRhaWxcbiAgICAgIH0pO1xuICAgICAgc25hY2tiYXIuaW5mbyhnZXR0ZXh0KFwiWW91ciBpbWFnZSBoYXMgYmVlbiB1cGxvYWRlZCBhbmQgeW91IG1heSBub3cgY3JvcCBpdC5cIikpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcbiAgICAgICAgICAnaW1hZ2UnOiBudWxsLFxuICAgICAgICAgICdwcm9ncmVzcyc6IDBcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0VXBsb2FkUmVxdWlyZW1lbnRzKG9wdGlvbnMpIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IG9wdGlvbnMuYWxsb3dlZF9leHRlbnNpb25zLm1hcChmdW5jdGlvbihleHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBleHRlbnNpb24uc3Vic3RyKDEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKGZpbGVzKXMgZmlsZXMgc21hbGxlciB0aGFuICUobGltaXQpc1wiKSwge1xuICAgICAgICAnZmlsZXMnOiBleHRlbnNpb25zLmpvaW4oJywgJyksXG4gICAgICAgICdsaW1pdCc6IGZpbGVTaXplKG9wdGlvbnMubGltaXQpXG4gICAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIGdldFVwbG9hZEJ1dHRvbigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItdXBsb2FkXCI+XG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXBpY2stZmlsZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5waWNrRmlsZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiU2VsZWN0IGZpbGVcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAge3RoaXMuZ2V0VXBsb2FkUmVxdWlyZW1lbnRzKHRoaXMucHJvcHMub3B0aW9ucy51cGxvYWQpfVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRVcGxvYWRQcm9ncmVzc0xhYmVsKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJShwcm9ncmVzcylzICUgY29tcGxldGVcIiksIHtcbiAgICAgICAgJ3Byb2dyZXNzJzogdGhpcy5zdGF0ZS5wcm9ncmVzc1xuICAgICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBnZXRVcGxvYWRQcm9ncmVzcygpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItdXBsb2FkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXBsb2FkLXByb2dyZXNzXCI+XG4gICAgICAgICAgPGltZyBzcmM9e3RoaXMuc3RhdGUucHJldmlld30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZ3Jlc3MtYmFyXCIgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW5vdz1cInt0aGlzLnN0YXRlLnByb2dyZXNzfVwiXG4gICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6IHRoaXMuc3RhdGUucHJvZ3Jlc3MgKyAnJSd9fT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPnt0aGlzLmdldFVwbG9hZFByb2dyZXNzTGFiZWwoKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXJVcGxvYWQoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICBpZD1cImF2YXRhci1oaWRkZW4tdXBsb2FkXCJcbiAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW4tZmlsZS11cGxvYWRcIlxuICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwbG9hZEZpbGV9IC8+XG4gICAgICB7dGhpcy5zdGF0ZS5pbWFnZSA/IHRoaXMuZ2V0VXBsb2FkUHJvZ3Jlc3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdldFVwbG9hZEJ1dHRvbigpfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNiBjb2wtbWQtb2Zmc2V0LTNcIj5cblxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93SW5kZXh9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ISF0aGlzLnN0YXRlLmltYWdlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCI+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIkNhbmNlbFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgcmVuZGVyQ3JvcCgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxBdmF0YXJDcm9wIG9wdGlvbnM9e3RoaXMuc3RhdGUub3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dGhpcy5wcm9wcy51c2VyfVxuICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQ9e3RoaXMuc3RhdGUudXBsb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9e3RoaXMucHJvcHMub25Db21wbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Vycm9yPXt0aGlzLnByb3BzLnNob3dFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgc2hvd0luZGV4PXt0aGlzLnByb3BzLnNob3dJbmRleH0gLz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuICh0aGlzLnN0YXRlLnVwbG9hZGVkID8gdGhpcy5yZW5kZXJDcm9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJlbmRlclVwbG9hZCgpKTtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBpc1ZhbGlkYXRlZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucHJvcHMudmFsaWRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJ2Zvcm0tZ3JvdXAnO1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGVkKCkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1mZWVkYmFjayc7XG4gICAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uID09PSBudWxsKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1zdWNjZXNzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1lcnJvcic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBnZXRGZWVkYmFjaygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJoZWxwLWJsb2NrIGVycm9yc1wiPlxuICAgICAgICB7dGhpcy5wcm9wcy52YWxpZGF0aW9uLm1hcCgoZXJyb3IsIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gPHAga2V5PXt0aGlzLnByb3BzLmZvciArICdGZWVkYmFja0l0ZW0nICsgaX0+e2Vycm9yfTwvcD47XG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmVlZGJhY2tJY29uKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGVkKCkpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFja1wiXG4gICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIga2V5PXt0aGlzLnByb3BzLmZvciArICdGZWVkYmFja0ljb24nfT5cbiAgICAgICAge3RoaXMucHJvcHMudmFsaWRhdGlvbiA/ICdjbGVhcicgOiAnY2hlY2snfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEZlZWRiYWNrRGVzY3JpcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZGF0ZWQoKSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGlkPXt0aGlzLnByb3BzLmZvciArICdfc3RhdHVzJ30gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy52YWxpZGF0aW9uID8gZ2V0dGV4dCgnKGVycm9yKScpIDogZ2V0dGV4dCgnKHN1Y2Nlc3MpJyl9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0SGVscFRleHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaGVscFRleHQpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8cCBjbGFzc05hbWU9XCJoZWxwLWJsb2NrXCI+e3RoaXMucHJvcHMuaGVscFRleHR9PC9wPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIDxsYWJlbCBjbGFzc05hbWU9eydjb250cm9sLWxhYmVsICcgKyAodGhpcy5wcm9wcy5sYWJlbENsYXNzIHx8ICcnKX1cbiAgICAgICAgICAgICBodG1sRm9yPXt0aGlzLnByb3BzLmZvciB8fCAnJ30+XG4gICAgICAgIHt0aGlzLnByb3BzLmxhYmVsICsgJzonfVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNvbnRyb2xDbGFzcyB8fCAnJ30+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICB7dGhpcy5nZXRGZWVkYmFja0ljb24oKX1cbiAgICAgICAge3RoaXMuZ2V0RmVlZGJhY2tEZXNjcmlwdGlvbigpfVxuICAgICAgICB7dGhpcy5nZXRGZWVkYmFjaygpfVxuICAgICAgICB7dGhpcy5nZXRIZWxwVGV4dCgpfVxuICAgICAgICB7dGhpcy5wcm9wcy5leHRyYSB8fCBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlcXVpcmVkIH0gZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuXG5sZXQgdmFsaWRhdGVSZXF1aXJlZCA9IHJlcXVpcmVkKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGUoKSB7XG4gICAgbGV0IGVycm9ycyA9IHt9O1xuICAgIGlmICghdGhpcy5zdGF0ZS52YWxpZGF0b3JzKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0b3JzID0ge1xuICAgICAgcmVxdWlyZWQ6IHRoaXMuc3RhdGUudmFsaWRhdG9ycy5yZXF1aXJlZCB8fCB0aGlzLnN0YXRlLnZhbGlkYXRvcnMsXG4gICAgICBvcHRpb25hbDogdGhpcy5zdGF0ZS52YWxpZGF0b3JzLm9wdGlvbmFsIHx8IHt9XG4gICAgfTtcblxuICAgIGxldCB2YWxpZGF0ZWRGaWVsZHMgPSBbXTtcblxuICAgIC8vIGFkZCByZXF1aXJlZCBmaWVsZHMgdG8gdmFsaWRhdGlvblxuICAgIGZvciAobGV0IG5hbWUgaW4gdmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgaWYgKHZhbGlkYXRvcnMucmVxdWlyZWQuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICB2YWxpZGF0b3JzLnJlcXVpcmVkW25hbWVdKSB7XG4gICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZCBvcHRpb25hbCBmaWVsZHMgdG8gdmFsaWRhdGlvblxuICAgIGZvciAobGV0IG5hbWUgaW4gdmFsaWRhdG9ycy5vcHRpb25hbCkge1xuICAgICAgaWYgKHZhbGlkYXRvcnMub3B0aW9uYWwuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICB2YWxpZGF0b3JzLm9wdGlvbmFsW25hbWVdKSB7XG4gICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGZpZWxkcyB2YWx1ZXNcbiAgICBmb3IgKGxldCBpIGluIHZhbGlkYXRlZEZpZWxkcykge1xuICAgICAgbGV0IG5hbWUgPSB2YWxpZGF0ZWRGaWVsZHNbaV07XG4gICAgICBsZXQgZmllbGRFcnJvcnMgPSB0aGlzLnZhbGlkYXRlRmllbGQobmFtZSwgdGhpcy5zdGF0ZVtuYW1lXSk7XG5cbiAgICAgIGlmIChmaWVsZEVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycykge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBmaWVsZEVycm9ycztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaXNWYWxpZCgpIHtcbiAgICBsZXQgZXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGZvciAobGV0IGZpZWxkIGluIGVycm9ycykge1xuICAgICAgaWYgKGVycm9ycy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgaWYgKGVycm9yc1tmaWVsZF0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlRmllbGQobmFtZSwgdmFsdWUpIHtcbiAgICBsZXQgZXJyb3JzID0gW107XG4gICAgaWYgKCF0aGlzLnN0YXRlLnZhbGlkYXRvcnMpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRvcnMgPSB7XG4gICAgICByZXF1aXJlZDogKHRoaXMuc3RhdGUudmFsaWRhdG9ycy5yZXF1aXJlZCB8fCB0aGlzLnN0YXRlLnZhbGlkYXRvcnMpW25hbWVdLFxuICAgICAgb3B0aW9uYWw6ICh0aGlzLnN0YXRlLnZhbGlkYXRvcnMub3B0aW9uYWwgfHwge30pW25hbWVdXG4gICAgfTtcblxuICAgIGxldCByZXF1aXJlZEVycm9yID0gdmFsaWRhdGVSZXF1aXJlZCh2YWx1ZSkgfHwgZmFsc2U7XG5cbiAgICBpZiAodmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgaWYgKHJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgZXJyb3JzID0gW3JlcXVpcmVkRXJyb3JdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSBpbiB2YWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRvcnMucmVxdWlyZWRbaV0odmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHZhbGlkYXRpb25FcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID8gZXJyb3JzIDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKHJlcXVpcmVkRXJyb3IgPT09IGZhbHNlICYmIHZhbGlkYXRvcnMub3B0aW9uYWwpIHtcbiAgICAgIGZvciAobGV0IGkgaW4gdmFsaWRhdG9ycy5vcHRpb25hbCkge1xuICAgICAgICBsZXQgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdG9ycy5vcHRpb25hbFtpXSh2YWx1ZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0aW9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID8gZXJyb3JzIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIGZhbHNlID09PSBmaWVsZCB3YXNuJ3QgdmFsaWRhdGVkXG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGJpbmRJbnB1dCA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIChldmVudCkgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlID0ge1xuICAgICAgICBbbmFtZV06IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfTtcblxuICAgICAgbGV0IGZvcm1FcnJvcnMgPSB0aGlzLnN0YXRlLmVycm9ycyB8fCB7fTtcbiAgICAgIGZvcm1FcnJvcnNbbmFtZV0gPSB0aGlzLnZhbGlkYXRlRmllbGQobmFtZSwgbmV3U3RhdGVbbmFtZV0pO1xuICAgICAgbmV3U3RhdGUuZXJyb3JzID0gZm9ybUVycm9ycztcblxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFuKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3Moc3VjY2Vzcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIC8vIHdlIGRvbid0IHJlbG9hZCBwYWdlIG9uIHN1Ym1pc3Npb25zXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsZWFuKCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzogdHJ1ZX0pO1xuICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnNlbmQoKTtcblxuICAgICAgaWYgKHByb21pc2UpIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKChzdWNjZXNzKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNMb2FkaW5nOiBmYWxzZX0pO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhzdWNjZXNzKTtcbiAgICAgICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzogZmFsc2V9KTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHJlamVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNMb2FkaW5nOiBmYWxzZX0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnBhdGgpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5pbmRleE9mKHRoaXMucHJvcHMucGF0aCkgPT09IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAnJykgKyAnICcrICh0aGlzLnByb3BzLmFjdGl2ZUNsYXNzTmFtZSB8fCAnYWN0aXZlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAnJztcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgIDwvbGk+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcImxvYWRlclwifT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9hZGVyLXNwaW5uaW5nLXdoZWVsXCI+PC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1sb2FkZXJcIj5cbiAgICAgIDxMb2FkZXIgLz5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgIDxoMyBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPntnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfTwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keSBwYW5lbC1ib2R5LWxvYWRpbmdcIj5cblxuICAgICAgICA8TG9hZGVyIGNsYXNzTmFtZT1cImxvYWRlciBsb2FkZXItc3BhY2VkXCIgLz5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEhlbHBUZXh0KCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMubmV4dF9vbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKFxuICAgICAgICAgIGdldHRleHQoXCJZb3Ugd2lsbCBiZSBhYmxlIHRvIGNoYW5nZSB5b3VyIHVzZXJuYW1lICUobmV4dF9jaGFuZ2Upcy5cIiksXG4gICAgICAgICAgeyduZXh0X2NoYW5nZSc6IHRoaXMucHJvcHMub3B0aW9ucy5uZXh0X29uLmZyb21Ob3coKX0sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIllvdSBoYXZlIHVzZWQgdXAgYXZhaWxhYmxlIG5hbWUgY2hhbmdlcy5cIik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKX08L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHkgcGFuZWwtbWVzc2FnZS1ib2R5XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWljb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICAgIHtnZXR0ZXh0KFwiWW91IGNhbid0IGNoYW5nZSB5b3VyIHVzZXJuYW1lIGF0IHRoZSBtb21lbnQuXCIpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJoZWxwLWJsb2NrXCI+XG4gICAgICAgICAgICB7dGhpcy5nZXRIZWxwVGV4dCgpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdXNlcm5hbWU6ICcnLFxuXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIHVzZXJuYW1lOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZUNvbnRlbnQoKSxcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lTWluTGVuZ3RoKHtcbiAgICAgICAgICAgIHVzZXJuYW1lX2xlbmd0aF9taW46IHByb3BzLm9wdGlvbnMubGVuZ3RoX21pblxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNYXhMZW5ndGgoe1xuICAgICAgICAgICAgdXNlcm5hbWVfbGVuZ3RoX21heDogcHJvcHMub3B0aW9ucy5sZW5ndGhfbWF4XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBnZXRIZWxwVGV4dCgpIHtcbiAgICBsZXQgcGhyYXNlcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5jaGFuZ2VzX2xlZnQgPiAwKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIllvdSBjYW4gY2hhbmdlIHlvdXIgdXNlcm5hbWUgJShjaGFuZ2VzX2xlZnQpcyBtb3JlIHRpbWUuXCIsXG4gICAgICAgIFwiWW91IGNhbiBjaGFuZ2UgeW91ciB1c2VybmFtZSAlKGNoYW5nZXNfbGVmdClzIG1vcmUgdGltZXMuXCIsXG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5jaGFuZ2VzX2xlZnQpO1xuXG4gICAgICBwaHJhc2VzLnB1c2goaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAnY2hhbmdlc19sZWZ0JzogdGhpcy5wcm9wcy5vcHRpb25zLmNoYW5nZXNfbGVmdFxuICAgICAgfSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnVzZXIuYWNsLm5hbWVfY2hhbmdlc19leHBpcmUgPiAwKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIlVzZWQgY2hhbmdlcyByZWRlZW0gYWZ0ZXIgJShuYW1lX2NoYW5nZXNfZXhwaXJlKXMgZGF5LlwiLFxuICAgICAgICBcIlVzZWQgY2hhbmdlcyByZWRlZW0gYWZ0ZXIgJShuYW1lX2NoYW5nZXNfZXhwaXJlKXMgZGF5cy5cIixcbiAgICAgICAgdGhpcy5wcm9wcy51c2VyLmFjbC5uYW1lX2NoYW5nZXNfZXhwaXJlKTtcblxuICAgICAgcGhyYXNlcy5wdXNoKGludGVycG9sYXRlKG1lc3NhZ2UsIHtcbiAgICAgICAgJ25hbWVfY2hhbmdlc19leHBpcmUnOiB0aGlzLnByb3BzLnVzZXIuYWNsLm5hbWVfY2hhbmdlc19leHBpcmVcbiAgICAgIH0sIHRydWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGhyYXNlcy5sZW5ndGggPyBwaHJhc2VzLmpvaW4oJyAnKSA6IG51bGw7XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBsZXQgZXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmIChlcnJvcnMudXNlcm5hbWUpIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGVycm9ycy51c2VybmFtZVswXSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBpZiAodGhpcy5zdGF0ZS51c2VybmFtZS50cmltKCkgPT09IHRoaXMucHJvcHMudXNlci51c2VybmFtZSkge1xuICAgICAgc25hY2tiYXIuaW5mbyhnZXR0ZXh0KFwiWW91ciBuZXcgdXNlcm5hbWUgaXMgc2FtZSBhcyBjdXJyZW50IG9uZS5cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwudXNlcm5hbWUsIHtcbiAgICAgICd1c2VybmFtZSc6IHRoaXMuc3RhdGUudXNlcm5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3Moc3VjY2Vzcykge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ3VzZXJuYW1lJzogJydcbiAgICB9KTtcblxuICAgIHRoaXMucHJvcHMuY29tcGxldGUoc3VjY2Vzcy51c2VybmFtZSwgc3VjY2Vzcy5zbHVnLCBzdWNjZXNzLm9wdGlvbnMpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxmb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwiZm9ybS1ob3Jpem9udGFsXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiTmV3IHVzZXJuYW1lXCIpfSBmb3I9XCJpZF91c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgICBoZWxwVGV4dD17dGhpcy5nZXRIZWxwVGV4dCgpfT5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaWRfdXNlcm5hbWVcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3VzZXJuYW1lJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXNlcm5hbWV9IC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9ybUxvYWRpbmcgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9jaGFuZ2UtdXNlcm5hbWUvZm9ybS1sb2FkaW5nJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybUxvY2tlZCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9mb3JtLWxvY2tlZCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9jaGFuZ2UtdXNlcm5hbWUvZm9ybSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFVzZXJuYW1lSGlzdG9yeSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS91c2VybmFtZS1oaXN0b3J5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkZWh5ZHJhdGUsIGFkZE5hbWVDaGFuZ2UgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcm5hbWUtaGlzdG9yeSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgdXBkYXRlVXNlcm5hbWUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogZmFsc2UsXG4gICAgICBvcHRpb25zOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKSxcbiAgICAgIHBhcmVudDogZ2V0dGV4dChcIkNoYW5nZSB5b3VyIG9wdGlvbnNcIilcbiAgICB9KTtcblxuICAgIFByb21pc2UuYWxsKFtcbiAgICAgIGFqYXguZ2V0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLnVzZXJuYW1lKSxcbiAgICAgIGFqYXguZ2V0KG1pc2Fnby5nZXQoJ1VTRVJOQU1FX0NIQU5HRVNfQVBJJyksIHt1c2VyOiB0aGlzLnByb3BzLnVzZXIuaWR9KVxuICAgIF0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGNoYW5nZXNfbGVmdDogZGF0YVswXS5jaGFuZ2VzX2xlZnQsXG4gICAgICAgICAgbGVuZ3RoX21pbjogZGF0YVswXS5sZW5ndGhfbWluLFxuICAgICAgICAgIGxlbmd0aF9tYXg6IGRhdGFbMF0ubGVuZ3RoX21heCxcbiAgICAgICAgICBuZXh0X29uOiBkYXRhWzBdLm5leHRfb24gPyBtb21lbnQoZGF0YVswXS5uZXh0X29uKSA6IG51bGwsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YVsxXS5yZXN1bHRzKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIG9uQ29tcGxldGUgPSAodXNlcm5hbWUsIHNsdWcsIG9wdGlvbnMpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcblxuICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgYWRkTmFtZUNoYW5nZSh7IHVzZXJuYW1lLCBzbHVnIH0sIHRoaXMucHJvcHMudXNlciwgdGhpcy5wcm9wcy51c2VyKSk7XG4gICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICB1cGRhdGVVc2VybmFtZSh0aGlzLnByb3BzLnVzZXIsIHVzZXJuYW1lLCBzbHVnKSk7XG5cbiAgICBzbmFja2Jhci5zdWNjZXNzKGdldHRleHQoXCJZb3VyIHVzZXJuYW1lIGhhcyBiZWVuIGNoYW5nZWQgc3VjY2Vzc2Z1bGx5LlwiKSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0Q2hhbmdlRm9ybSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUub3B0aW9ucy5jaGFuZ2VzX2xlZnQgPiAwKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgcmV0dXJuIDxGb3JtIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3RoaXMuc3RhdGUub3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlPXt0aGlzLm9uQ29tcGxldGV9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPEZvcm1Mb2NrZWQgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfSAvPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxGb3JtTG9hZGluZyAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIHt0aGlzLmdldENoYW5nZUZvcm0oKX1cbiAgICAgIDxVc2VybmFtZUhpc3RvcnkgaXNMb2FkZWQ9e3RoaXMuc3RhdGUuaXNMb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXM9e3RoaXMucHJvcHNbJ3VzZXJuYW1lLWhpc3RvcnknXX0gLz5cbiAgICA8L2Rpdj5cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgKiBhcyByYW5kb20gZnJvbSAnbWlzYWdvL3V0aWxzL3JhbmRvbSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlclVzZXJBdmF0YXIoaXRlbSkge1xuICAgIGlmIChpdGVtLmNoYW5nZWRfYnkpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8YSBocmVmPXtpdGVtLmNoYW5nZWRfYnkuYWJzb2x1dGVfdXJsfSBjbGFzc05hbWU9XCJ1c2VyLWF2YXRhclwiPlxuICAgICAgICA8QXZhdGFyIHVzZXI9e2l0ZW0uY2hhbmdlZF9ieX0gc2l6ZT1cIjEwMFwiIC8+XG4gICAgICA8L2E+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItYXZhdGFyXCI+XG4gICAgICAgIDxBdmF0YXIgc2l6ZT1cIjEwMFwiIC8+XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXJVc2VybmFtZShpdGVtKSB7XG4gICAgaWYgKGl0ZW0uY2hhbmdlZF9ieSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e2l0ZW0uY2hhbmdlZF9ieS5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAge2l0ZW0uY2hhbmdlZF9ieS51c2VybmFtZX1cbiAgICAgIDwvYT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICB7aXRlbS5jaGFuZ2VkX2J5X3VzZXJuYW1lfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgcmVuZGVySGlzdG9yeSgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtaGlzdG9yeSB1aS1yZWFkeVwiPlxuICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAge3RoaXMucHJvcHMuY2hhbmdlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbVwiIGtleT17aXRlbS5pZH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1hdmF0YXJcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyVXNlckF2YXRhcihpdGVtKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtYXV0aG9yXCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlclVzZXJuYW1lKGl0ZW0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZVwiPlxuICAgICAgICAgICAgICB7aXRlbS5vbGRfdXNlcm5hbWV9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgICBhcnJvd19mb3J3YXJkXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAge2l0ZW0ubmV3X3VzZXJuYW1lfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1kYXRlXCI+XG4gICAgICAgICAgICAgIDxhYmJyIHRpdGxlPXtpdGVtLmNoYW5nZWRfb24uZm9ybWF0KCdMTEwnKX0+XG4gICAgICAgICAgICAgICAge2l0ZW0uY2hhbmdlZF9vbi5mcm9tTm93KCl9XG4gICAgICAgICAgICAgIDwvYWJicj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+O1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXJFbXB0eUhpc3RvcnkoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWhpc3RvcnkgdWktcmVhZHlcIj5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgIDxsaSBjbGFzc05hbWU9XCJsaXN0LWdyb3VwLWl0ZW0gZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiTm8gbmFtZSBjaGFuZ2VzIGhhdmUgYmVlbiByZWNvcmRlZCBmb3IgeW91ciBhY2NvdW50LlwiKX1cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXJIaXN0b3J5UHJldmlldygpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtaGlzdG9yeSB1aS1wcmV2aWV3XCI+XG4gICAgICA8dWwgY2xhc3NOYW1lPVwibGlzdC1ncm91cFwiPlxuICAgICAgICB7cmFuZG9tLnJhbmdlKDMsIDUpLm1hcCgoaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtXCIga2V5PXtpfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtY2hhbmdlLWF2YXRhclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLWF2YXRhclwiPlxuICAgICAgICAgICAgICAgIDxBdmF0YXIgc2l6ZT1cIjEwMFwiIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtYXV0aG9yXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoMzAsIDEwMCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtY2hhbmdlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoMzAsIDUwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICAgIGFycm93X2ZvcndhcmRcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDMwLCA1MCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtY2hhbmdlLWRhdGVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCg1MCwgMTAwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+O1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNMb2FkZWQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckhpc3RvcnkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVtcHR5SGlzdG9yeSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJIaXN0b3J5UHJldmlldygpO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtLWdyb3VwJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgU2VsZWN0IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3NlbGVjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFllc05vU3dpdGNoIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3llcy1uby1zd2l0Y2gnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IHBhdGNoVXNlciB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9hdXRoJztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG5cbiAgICAgICdpc19oaWRpbmdfcHJlc2VuY2UnOiBwcm9wcy51c2VyLmlzX2hpZGluZ19wcmVzZW5jZSxcbiAgICAgICdsaW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190byc6IHByb3BzLnVzZXIubGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8sXG4gICAgICAnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyc6IHByb3BzLnVzZXIuc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyxcbiAgICAgICdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJzogcHJvcHMudXNlci5zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzLFxuXG4gICAgICAnZXJyb3JzJzoge31cbiAgICB9O1xuXG4gICAgdGhpcy5wcml2YXRlVGhyZWFkSW52aXRlc0Nob2ljZXMgPSBbXG4gICAgICB7XG4gICAgICAgICd2YWx1ZSc6IDAsXG4gICAgICAgICdpY29uJzogJ2hlbHBfb3V0bGluZScsXG4gICAgICAgICdsYWJlbCc6IGdldHRleHQoJ0V2ZXJ5Ym9keScpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndmFsdWUnOiAxLFxuICAgICAgICAnaWNvbic6ICdkb25lX2FsbCcsXG4gICAgICAgICdsYWJlbCc6IGdldHRleHQoJ1VzZXJzIEkgZm9sbG93JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd2YWx1ZSc6IDIsXG4gICAgICAgICdpY29uJzogJ2hpZ2hsaWdodF9vZmYnLFxuICAgICAgICAnbGFiZWwnOiBnZXR0ZXh0KCdOb2JvZHknKVxuICAgICAgfVxuICAgIF07XG5cbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hvaWNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgJ3ZhbHVlJzogMCxcbiAgICAgICAgJ2ljb24nOiAnYm9va21hcmtfYm9yZGVyJyxcbiAgICAgICAgJ2xhYmVsJzogZ2V0dGV4dCgnTm8nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3ZhbHVlJzogMSxcbiAgICAgICAgJ2ljb24nOiAnYm9va21hcmsnLFxuICAgICAgICAnbGFiZWwnOiBnZXR0ZXh0KCdCb29rbWFyaycpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndmFsdWUnOiAyLFxuICAgICAgICAnaWNvbic6ICdtYWlsJyxcbiAgICAgICAgJ2xhYmVsJzogZ2V0dGV4dCgnQm9va21hcmsgd2l0aCBlLW1haWwgbm90aWZpY2F0aW9uJylcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLm9wdGlvbnMsIHtcbiAgICAgICdpc19oaWRpbmdfcHJlc2VuY2UnOiB0aGlzLnN0YXRlLmlzX2hpZGluZ19wcmVzZW5jZSxcbiAgICAgICdsaW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190byc6IHRoaXMuc3RhdGUubGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8sXG4gICAgICAnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyc6IHRoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyxcbiAgICAgICdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJzogdGhpcy5zdGF0ZS5zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKHBhdGNoVXNlcih7XG4gICAgICAnaXNfaGlkaW5nX3ByZXNlbmNlJzogdGhpcy5zdGF0ZS5pc19oaWRpbmdfcHJlc2VuY2UsXG4gICAgICAnbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8nOiB0aGlzLnN0YXRlLmxpbWl0c19wcml2YXRlX3RocmVhZF9pbnZpdGVzX3RvLFxuICAgICAgJ3N1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMnOiB0aGlzLnN0YXRlLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMsXG4gICAgICAnc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkcyc6IHRoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc1xuICAgIH0pKTtcbiAgICBzbmFja2Jhci5zdWNjZXNzKGdldHRleHQoXCJZb3VyIGZvcnVtIG9wdGlvbnMgaGF2ZSBiZWVuIGNoYW5nZWQuXCIpKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJQbGVhc2UgcmVsb2FkIHBhZ2UgYW5kIHRyeSBhZ2Fpbi5cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIkZvcnVtIG9wdGlvbnNcIiksXG4gICAgICBwYXJlbnQ6IGdldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cImZvcm0taG9yaXpvbnRhbFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgZm9ydW0gb3B0aW9uc1wiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntnZXR0ZXh0KFwiUHJpdmFjeSBzZXR0aW5nc1wiKX08L2xlZ2VuZD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIkhpZGUgbXkgcHJlc2VuY2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXtnZXR0ZXh0KFwiSWYgeW91IGhpZGUgeW91ciBwcmVzZW5jZSwgb25seSBtZW1iZXJzIHdpdGggcGVybWlzc2lvbiB0byBzZWUgaGlkZGVuIHVzZXJzIHdpbGwgc2VlIHdoZW4geW91IGFyZSBvbmxpbmUuXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9pc19oaWRpbmdfcHJlc2VuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgICA8WWVzTm9Td2l0Y2ggaWQ9XCJpZF9pc19oaWRpbmdfcHJlc2VuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk9uPVwidmlzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uT2ZmPVwidmlzaWJpbGl0eV9vZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPbj17Z2V0dGV4dChcIlNob3cgbXkgcHJlc2VuY2UgdG8gb3RoZXIgdXNlcnNcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbE9mZj17Z2V0dGV4dChcIkhpZGUgbXkgcHJlc2VuY2UgZnJvbSBvdGhlciB1c2Vyc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnaXNfaGlkaW5nX3ByZXNlbmNlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pc19oaWRpbmdfcHJlc2VuY2V9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlByaXZhdGUgdGhyZWFkIGludml0YXRpb25zXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgIDxTZWxlY3QgaWQ9XCJpZF9saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8nKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b31cbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXt0aGlzLnByaXZhdGVUaHJlYWRJbnZpdGVzQ2hvaWNlc30gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntnZXR0ZXh0KFwiQXV0b21hdGljIHN1YnNjcmlwdGlvbnNcIil9PC9sZWdlbmQ+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJUaHJlYWRzIEkgc3RhcnRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImlkX3N1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgICA8U2VsZWN0IGlkPVwiaWRfc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcycpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHN9XG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz17dGhpcy5zdWJzY3JpYmVUb0Nob2ljZXN9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlRocmVhZHMgSSByZXBseSB0b1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiaWRfc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgIDxTZWxlY3QgaWQ9XCJpZF9zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc31cbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXt0aGlzLnN1YnNjcmliZVRvQ2hvaWNlc30gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIlNhdmUgY2hhbmdlc1wiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMaSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9saSc7IC8vanNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7IC8vanNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBTaWRlTmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsaXN0LWdyb3VwIG5hdi1zaWRlXCI+XG4gICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiA8TGluayB0bz17dGhpcy5wcm9wcy5iYXNlVXJsICsgb3B0aW9uLmNvbXBvbmVudCArICcvJ31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzc05hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24uY29tcG9uZW50fT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICB7b3B0aW9uLmljb259XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9MaW5rPjtcbiAgICAgIH0pfVxuICAgIDwvZGl2PjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0TmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiPlxuICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gPExpIHBhdGg9e3RoaXMucHJvcHMuYmFzZVVybCArIG9wdGlvbi5jb21wb25lbnQgKyAnLyd9XG4gICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24uY29tcG9uZW50fT5cbiAgICAgICAgICA8TGluayB0bz17dGhpcy5wcm9wcy5iYXNlVXJsICsgb3B0aW9uLmNvbXBvbmVudCArICcvJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmhpZGVOYXZ9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICB7b3B0aW9uLmljb259XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L0xpPjtcbiAgICAgIH0pfVxuICAgIDwvdWw+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFNpZGVOYXYsIENvbXBhY3ROYXYgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL25hdnMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBDaGFuZ2VGb3J1bU9wdGlvbnMgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9mb3J1bS1vcHRpb25zJztcbmltcG9ydCBDaGFuZ2VVc2VybmFtZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9yb290JztcbmltcG9ydCBDaGFuZ2VTaWduSW5DcmVkZW50aWFscyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL3NpZ24taW4tY3JlZGVudGlhbHMvcm9vdCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgdG9nZ2xlTmF2ID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyb3Bkb3duOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgaGlkZU5hdiA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRyb3Bkb3duOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldFRvZ2dsZU5hdkNsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgcmV0dXJuICdidG4gYnRuLWRlZmF1bHQgYnRuLWljb24gb3Blbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1pY29uJztcbiAgICB9XG4gIH1cblxuICBnZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICByZXR1cm4gJ2NvbXBhY3QtbmF2IG9wZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2NvbXBhY3QtbmF2JztcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS1vcHRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG5cbiAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwicHVsbC1sZWZ0XCI+e2dldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpfTwvaDE+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4tYWxpZ25lZCBidG4taWNvbiBidG4tZHJvcGRvd24tdG9nZ2xlIGhpZGRlbi1tZCBoaWRkZW4tbGdcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e3RoaXMuc3RhdGUuZHJvcGRvd24gPyAndHJ1ZScgOiAnZmFsc2UnfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgbWVudVxuICAgICAgICAgICAgPC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCl9PlxuXG4gICAgICAgIDxDb21wYWN0TmF2IG9wdGlvbnM9e21pc2Fnby5nZXQoJ1VTRVJfT1BUSU9OUycpfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJyl9XG4gICAgICAgICAgICAgICAgICAgIGhpZGVOYXY9e3RoaXMuaGlkZU5hdn0gLz5cblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMyBoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG5cbiAgICAgICAgICAgIDxTaWRlTmF2IG9wdGlvbnM9e21pc2Fnby5nZXQoJ1VTRVJfT1BUSU9OUycpfVxuICAgICAgICAgICAgICAgICAgICAgYmFzZVVybD17bWlzYWdvLmdldCgnVVNFUkNQX1VSTCcpfSAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtOVwiPlxuXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChzdG9yZSkge1xuICByZXR1cm4ge1xuICAgICd0aWNrJzogc3RvcmUudGljay50aWNrLFxuICAgICd1c2VyJzogc3RvcmUuYXV0aC51c2VyLFxuICAgICd1c2VybmFtZS1oaXN0b3J5Jzogc3RvcmVbJ3VzZXJuYW1lLWhpc3RvcnknXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aHMoKSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcGF0aDogbWlzYWdvLmdldCgnVVNFUkNQX1VSTCcpICsgJ2ZvcnVtLW9wdGlvbnMvJyxcbiAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKENoYW5nZUZvcnVtT3B0aW9ucylcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJDUF9VUkwnKSArICdjaGFuZ2UtdXNlcm5hbWUvJyxcbiAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKENoYW5nZVVzZXJuYW1lKVxuICAgIH0sXG4gICAge1xuICAgICAgcGF0aDogbWlzYWdvLmdldCgnVVNFUkNQX1VSTCcpICsgJ3NpZ24taW4tY3JlZGVudGlhbHMvJyxcbiAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKENoYW5nZVNpZ25JbkNyZWRlbnRpYWxzKVxuICAgIH1cbiAgXTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtLWdyb3VwJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBuZXdfZW1haWw6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIG5ld19lbWFpbDogW1xuICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwoKVxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogW11cbiAgICAgIH0sXG5cbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgbGV0IGVycm9ycyA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICBsZXQgbGVuZ3RocyA9IFtcbiAgICAgIHRoaXMuc3RhdGUubmV3X2VtYWlsLnRyaW0oKS5sZW5ndGgsXG4gICAgICB0aGlzLnN0YXRlLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGhcbiAgICBdO1xuXG4gICAgaWYgKGxlbmd0aHMuaW5kZXhPZigwKSAhPT0gLTEpIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJGaWxsIG91dCBhbGwgZmllbGRzLlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5uZXdfZW1haWwpIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGVycm9ycy5uZXdfZW1haWxbMF0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmNoYW5nZV9lbWFpbCwge1xuICAgICAgbmV3X2VtYWlsOiB0aGlzLnN0YXRlLm5ld19lbWFpbCxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnN0YXRlLnBhc3N3b3JkLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhyZXNwb25zZSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbmV3X2VtYWlsOiAnJyxcbiAgICAgIHBhc3N3b3JkOiAnJ1xuICAgIH0pO1xuXG4gICAgc25hY2tiYXIuc3VjY2VzcyhyZXNwb25zZS5kZXRhaWwpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgaWYgKHJlamVjdGlvbi5uZXdfZW1haWwpIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLm5ld19lbWFpbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24ucGFzc3dvcmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxmb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwiZm9ybS1ob3Jpem9udGFsXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInR5cGVcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgc3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fSAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgZS1tYWlsIGFkZHJlc3NcIil9PC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keVwiPlxuXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIk5ldyBlLW1haWxcIil9IGZvcj1cImlkX25ld19lbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF9uZXdfZW1haWxcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ25ld19lbWFpbCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLm5ld19lbWFpbH0gLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgIDxociAvPlxuXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIllvdXIgY3VycmVudCBwYXNzd29yZFwiKX0gZm9yPVwiaWRfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX3Bhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBhc3N3b3JkfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWZvb3RlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1zbS04IGNvbC1zbS1vZmZzZXQtNFwiPlxuXG4gICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnlcIiBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAgICAgICAge2dldHRleHQoXCJDaGFuZ2UgZS1tYWlsXCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0tZ3JvdXAnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG5ld19wYXNzd29yZDogJycsXG4gICAgICByZXBlYXRfcGFzc3dvcmQ6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIG5ld19wYXNzd29yZDogW1xuICAgICAgICAgIHZhbGlkYXRvcnMucGFzc3dvcmRNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSlcbiAgICAgICAgXSxcbiAgICAgICAgcmVwZWF0X3Bhc3N3b3JkOiBbXSxcbiAgICAgICAgcGFzc3dvcmQ6IFtdXG4gICAgICB9LFxuXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGxldCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgbGV0IGxlbmd0aHMgPSBbXG4gICAgICB0aGlzLnN0YXRlLm5ld19wYXNzd29yZC50cmltKCkubGVuZ3RoLFxuICAgICAgdGhpcy5zdGF0ZS5yZXBlYXRfcGFzc3dvcmQudHJpbSgpLmxlbmd0aCxcbiAgICAgIHRoaXMuc3RhdGUucGFzc3dvcmQudHJpbSgpLmxlbmd0aFxuICAgIF07XG5cbiAgICBpZiAobGVuZ3Rocy5pbmRleE9mKDApICE9PSAtMSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZpbGwgb3V0IGFsbCBmaWVsZHMuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLm5ld19wYXNzd29yZCkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZXJyb3JzLm5ld19wYXNzd29yZFswXSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUubmV3X3Bhc3N3b3JkLnRyaW0oKSAhPT0gdGhpcy5zdGF0ZS5yZXBlYXRfcGFzc3dvcmQudHJpbSgpKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiTmV3IHBhc3N3b3JkcyBhcmUgZGlmZmVyZW50LlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuY2hhbmdlX3Bhc3N3b3JkLCB7XG4gICAgICBuZXdfcGFzc3dvcmQ6IHRoaXMuc3RhdGUubmV3X3Bhc3N3b3JkLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMuc3RhdGUucGFzc3dvcmRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIG5ld19wYXNzd29yZDogJycsXG4gICAgICByZXBlYXRfcGFzc3dvcmQ6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnXG4gICAgfSk7XG5cbiAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBpZiAocmVqZWN0aW9uLm5ld19wYXNzd29yZCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24ubmV3X3Bhc3N3b3JkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKHJlamVjdGlvbi5wYXNzd29yZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidHlwZVwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSBwYXNzd29yZFwiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiTmV3IHBhc3N3b3JkXCIpfSBmb3I9XCJpZF9uZXdfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX25ld19wYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbmV3X3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubmV3X3Bhc3N3b3JkfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlJlcGVhdCBwYXNzd29yZFwiKX0gZm9yPVwiaWRfcmVwZWF0X3Bhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCJpZF9yZXBlYXRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3JlcGVhdF9wYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnJlcGVhdF9wYXNzd29yZH0gLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgIDxociAvPlxuXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIllvdXIgY3VycmVudCBwYXNzd29yZFwiKX0gZm9yPVwiaWRfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX3Bhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBhc3N3b3JkfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWZvb3RlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1zbS04IGNvbC1zbS1vZmZzZXQtNFwiPlxuXG4gICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnlcIiBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAgICAgICAge2dldHRleHQoXCJDaGFuZ2UgcGFzc3dvcmRcIil9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ2hhbmdlRW1haWwgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9zaWduLWluLWNyZWRlbnRpYWxzL2NoYW5nZS1lbWFpbCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IENoYW5nZVBhc3N3b3JkIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvc2lnbi1pbi1jcmVkZW50aWFscy9jaGFuZ2UtcGFzc3dvcmQnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgdGl0bGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BhZ2UtdGl0bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIkNoYW5nZSBlbWFpbCBvciBwYXNzd29yZFwiKSxcbiAgICAgIHBhcmVudDogZ2V0dGV4dChcIkNoYW5nZSB5b3VyIG9wdGlvbnNcIilcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXY+XG4gICAgICA8Q2hhbmdlRW1haWwgdXNlcj17dGhpcy5wcm9wcy51c2VyfSAvPlxuICAgICAgPENoYW5nZVBhc3N3b3JkIHVzZXI9e3RoaXMucHJvcHMudXNlcn0gLz5cblxuICAgICAgPHAgY2xhc3NOYW1lPVwibWVzc2FnZS1saW5lXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGEgaHJlZj17bWlzYWdvLmdldCgnRk9SR09UVEVOX1BBU1NXT1JEX1VSTCcpfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBmb3Jnb3R0ZW4gcGFzc3dvcmRcIil9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB6eGN2Ym4gZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3p4Y3Zibic7XG5cbmV4cG9ydCBjb25zdCBTVFlMRVMgPSBbXG4gICdwcm9ncmVzcy1iYXItZGFuZ2VyJyxcbiAgJ3Byb2dyZXNzLWJhci13YXJuaW5nJyxcbiAgJ3Byb2dyZXNzLWJhci13YXJuaW5nJyxcbiAgJ3Byb2dyZXNzLWJhci1wcmltYXJ5JyxcbiAgJ3Byb2dyZXNzLWJhci1zdWNjZXNzJ1xuXTtcblxuZXhwb3J0IGNvbnN0IExBQkVMUyA9IFtcbiAgZ2V0dGV4dChcIkVudGVyZWQgcGFzc3dvcmQgaXMgdmVyeSB3ZWFrLlwiKSxcbiAgZ2V0dGV4dChcIkVudGVyZWQgcGFzc3dvcmQgaXMgd2Vhay5cIiksXG4gIGdldHRleHQoXCJFbnRlcmVkIHBhc3N3b3JkIGlzIGF2ZXJhZ2UuXCIpLFxuICBnZXR0ZXh0KFwiRW50ZXJlZCBwYXNzd29yZCBpcyBzdHJvbmcuXCIpLFxuICBnZXR0ZXh0KFwiRW50ZXJlZCBwYXNzd29yZCBpcyB2ZXJ5IHN0cm9uZy5cIilcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLl9zY29yZSA9IDA7XG4gICAgdGhpcy5fcGFzc3dvcmQgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0cyA9IFtdO1xuICB9XG5cbiAgZ2V0U2NvcmUocGFzc3dvcmQsIGlucHV0cykge1xuICAgIGxldCBjYWNoZVN0YWxlID0gZmFsc2U7XG5cbiAgICBpZiAocGFzc3dvcmQudHJpbSgpICE9PSB0aGlzLl9wYXNzd29yZCkge1xuICAgICAgY2FjaGVTdGFsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0cy5sZW5ndGggIT09IHRoaXMuX2lucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNhY2hlU3RhbGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dHMubWFwKCh2YWx1ZSwgaSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUudHJpbSgpICE9PSB0aGlzLl9pbnB1dHNbaV0pIHtcbiAgICAgICAgICBjYWNoZVN0YWxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlU3RhbGUpIHtcbiAgICAgIHRoaXMuX3Njb3JlID0genhjdmJuLnNjb3JlUGFzc3dvcmQocGFzc3dvcmQsIGlucHV0cyk7XG4gICAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkLnRyaW0oKTtcbiAgICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zY29yZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgbGV0IHNjb3JlID0gdGhpcy5nZXRTY29yZSh0aGlzLnByb3BzLnBhc3N3b3JkLCB0aGlzLnByb3BzLmlucHV0cyk7XG5cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJoZWxwLWJsb2NrIHBhc3N3b3JkLXN0cmVuZ3RoXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInByb2dyZXNzLWJhciBcIiArIFNUWUxFU1tzY29yZV19XG4gICAgICAgICAgICAgc3R5bGU9e3t3aWR0aDogKDIwICsgKDIwICogc2NvcmUpKSArICclJ319XG4gICAgICAgICAgICAgcm9sZT1cInByb2dyZXNzLWJhclwiXG4gICAgICAgICAgICAgYXJpYS12YWx1ZW5vdz17c2NvcmV9XG4gICAgICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICAgICAgIGFyaWEtdmFsdWVtYXg9XCI0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICAgICAge0xBQkVMU1tzY29yZV19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbWFsbFwiPlxuICAgICAgICB7TEFCRUxTW3Njb3JlXX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvbGxvd0J1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvdy1idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBNb2RlcmF0aW9uTmF2IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Byb2ZpbGUvbW9kZXJhdGlvbi9uYXYnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBTdGF0dXMsIHsgU3RhdHVzSWNvbiwgU3RhdHVzTGFiZWwgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2VyLXN0YXR1cyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFVzZXJTdGF0dXMoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwidXNlci1zdGF0dXMtZGlzcGxheVwiPlxuICAgICAgPFN0YXR1cyB1c2VyPXt0aGlzLnByb3BzLnByb2ZpbGV9IHN0YXR1cz17dGhpcy5wcm9wcy5wcm9maWxlLnN0YXR1c30+XG4gICAgICAgIDxTdGF0dXNJY29uIHVzZXI9e3RoaXMucHJvcHMucHJvZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzPXt0aGlzLnByb3BzLnByb2ZpbGUuc3RhdHVzfSAvPlxuICAgICAgICA8U3RhdHVzTGFiZWwgdXNlcj17dGhpcy5wcm9wcy5wcm9maWxlfVxuICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPXt0aGlzLnByb3BzLnByb2ZpbGUuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3RhdHVzLWxhYmVsXCIgLz5cbiAgICAgIDwvU3RhdHVzPlxuICAgIDwvbGk+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRVc2VyUmFuaygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLnJhbmsuaXNfdGFiKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItcmFua1wiPlxuICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnByb2ZpbGUucmFuay5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcm9maWxlLnJhbmsubmFtZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItcmFua1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+e3RoaXMucHJvcHMucHJvZmlsZS5yYW5rLm5hbWV9PC9zcGFuPlxuICAgICAgPC9saT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLnRpdGxlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItdGl0bGVcIj5cbiAgICAgICAge3RoaXMucHJvcHMucHJvZmlsZS50aXRsZX1cbiAgICAgIDwvbGk+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5yYW5rLnRpdGxlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItdGl0bGVcIj5cbiAgICAgICAge3RoaXMucHJvcHMucHJvZmlsZS5yYW5rLnRpdGxlfVxuICAgICAgPC9saT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRKb2luZWRPbigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgbGV0IHRpdGxlID0gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIkpvaW5lZCBvbiAlKGpvaW5lZF9vbilzXCIpLCB7XG4gICAgICAnam9pbmVkX29uJzogdGhpcy5wcm9wcy5wcm9maWxlLmpvaW5lZF9vbi5mb3JtYXQoJ0xMLCBMVCcpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICBsZXQgYWdlID0gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIkpvaW5lZCAlKGpvaW5lZF9vbilzXCIpLCB7XG4gICAgICAnam9pbmVkX29uJzogdGhpcy5wcm9wcy5wcm9maWxlLmpvaW5lZF9vbi5mcm9tTm93KClcbiAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwidXNlci1qb2luZWQtb25cIj5cbiAgICAgIDxhYmJyIHRpdGxlPXt0aXRsZX0+XG4gICAgICAgIHthZ2V9XG4gICAgICA8L2FiYnI+XG4gICAgPC9saT47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIGdldEVtYWlsKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuZW1haWwpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwidXNlci1lbWFpbFwiPlxuICAgICAgICA8YSBocmVmPXsnbWFpbHRvOicgKyB0aGlzLnByb3BzLnByb2ZpbGUuZW1haWx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcm9maWxlLmVtYWlsfVxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEZvbGxvd0J1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmFjbC5jYW5fZm9sbG93KSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPEZvbGxvd0J1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLWFsaWduZWQgaGlkZGVuLXhzIGhpZGRlbi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlPXt0aGlzLnByb3BzLnByb2ZpbGV9IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0TW9kZXJhdGlvbkJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmFjbC5jYW5fbW9kZXJhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMucHJvcHMucHJvZmlsZS5hY2wpO1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYnRuLWdyb3VwIGJ0bi1hbGlnbmVkIGhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW1vZGVyYXRlIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIHRvbmFsaXR5XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiTW9kZXJhdGlvblwiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxNb2RlcmF0aW9uTmF2IHByb2ZpbGU9e3RoaXMucHJvcHMucHJvZmlsZX0gLz5cbiAgICAgIDwvZGl2PjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuPGRpdiBjbGFzc05hbWU9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTkgY29sLW1kLW9mZnNldC0zXCI+XG5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnByb2ZpbGV9IHNpemU9XCIxMDBcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLW5hbWVcIj57dGhpcy5wcm9wcy5wcm9maWxlLnVzZXJuYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDE+XG5cbiAgICAgICAgICAgIHt0aGlzLmdldEZvbGxvd0J1dHRvbigpfVxuICAgICAgICAgICAge3RoaXMuZ2V0TW9kZXJhdGlvbkJ1dHRvbigpfVxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4tYWxpZ25lZCBidG4taWNvbiBidG4tZHJvcGRvd24tdG9nZ2xlIGhpZGRlbi1tZCBoaWRkZW4tbGdcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy50b2dnbGVOYXZ9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17dGhpcy5wcm9wcy5kcm9wZG93biA/ICd0cnVlJyA6ICdmYWxzZSd9PlxuICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgbWVudVxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlci1zdGF0c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC05IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWlubGluZVwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLmdldFVzZXJTdGF0dXMoKX1cbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRVc2VyUmFuaygpfVxuICAgICAgICAgICAgICAgIHt0aGlzLmdldFVzZXJUaXRsZSgpfVxuICAgICAgICAgICAgICAgIHt0aGlzLmdldEpvaW5lZE9uKCl9XG4gICAgICAgICAgICAgICAge3RoaXMuZ2V0RW1haWwoKX1cbiAgICAgICAgICAgICAgPC91bD5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IHBhdGNoUHJvZmlsZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9wcm9maWxlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuaXNfZm9sbG93ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSArICcgYnRuLWRlZmF1bHQgYnRuLWZvbGxvd2luZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSArICcgYnRuLWRlZmF1bHQgYnRuLWZvbGxvdyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmlzX2ZvbGxvd2VkKSB7XG4gICAgICByZXR1cm4gJ2Zhdm9yaXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYXZvcml0ZV9ib3JkZXInO1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuaXNfZm9sbG93ZWQpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KCdGb2xsb3dpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldHRleHQoJ0ZvbGxvdycpO1xuICAgIH1cbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgYWN0aW9uID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmlzX2ZvbGxvd2VkKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChwYXRjaFByb2ZpbGUoe1xuICAgICAgICBpc19mb2xsb3dlZDogZmFsc2UsXG4gICAgICAgIGZvbGxvd2VyczogdGhpcy5wcm9wcy5wcm9maWxlLmZvbGxvd2VycyAtIDFcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcmUuZGlzcGF0Y2gocGF0Y2hQcm9maWxlKHtcbiAgICAgICAgaXNfZm9sbG93ZWQ6IHRydWUsXG4gICAgICAgIGZvbGxvd2VyczogdGhpcy5wcm9wcy5wcm9maWxlLmZvbGxvd2VycyArIDFcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy5wcm9maWxlLmFwaV91cmwuZm9sbG93KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHN0b3JlLmRpc3BhdGNoKHBhdGNoUHJvZmlsZShkYXRhKSk7XG4gICAgfSwgZnVuY3Rpb24ocmVqZWN0aW9uKSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxCdXR0b24gY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmFjdGlvbn0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgIHt0aGlzLmdldEljb24oKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHt0aGlzLmdldExhYmVsKCl9XG4gICAgPC9CdXR0b24+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIiByb2xlPVwibWVudVwiPlxuICAgICAgPGxpPlxuICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1saW5rXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgZXhwbG9yZVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICBNb2RlcmF0ZSBzb21laG93XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4tbGlua1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIGV4cGxvcmVcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgTW9kZXJhdGUgZWxzZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD47XG4gICAgLy8ganNoaW50IGlnbm9yZTplbmRcbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTGkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbGknOyAvL2pzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvbGxvd0J1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvdy1idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGNsYXNzIFNpZGVOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRNZXRhKG1ldGEpIHtcbiAgICBpZiAobWV0YSkge1xuICAgICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImJhZGdlXCI+e3RoaXMucHJvcHMucHJvZmlsZVttZXRhLmF0dHJdfTwvc3Bhbj47XG4gICAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAgbmF2LXNpZGVcIj5cbiAgICAgIHt0aGlzLnByb3BzLnBhZ2VzLm1hcCgocGFnZSkgPT4ge1xuICAgICAgICByZXR1cm4gPExpbmsgdG89e3RoaXMucHJvcHMuYmFzZVVybCArIHBhZ2UuY29tcG9uZW50ICsgJy8nfVxuICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNsYXNzTmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICBrZXk9e3BhZ2UuY29tcG9uZW50fT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICB7cGFnZS5pY29ufVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7cGFnZS5uYW1lfVxuICAgICAgICAgIHt0aGlzLmdldE1ldGEocGFnZS5tZXRhKX1cbiAgICAgICAgPC9MaW5rPjtcbiAgICAgIH0pfVxuICAgIDwvZGl2PjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0TmF2IGV4dGVuZHMgU2lkZU5hdiB7XG4gIHNob3dTcGVjaWFsT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wcm9maWxlLmFjbC5jYW5fZm9sbG93IHx8IHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX21vZGVyYXRlO1xuICB9XG5cbiAgZ2V0Rm9sbG93QnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuYWNsLmNhbl9mb2xsb3cpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8Rm9sbG93QnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZT17dGhpcy5wcm9wcy5wcm9maWxlfSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldE1vZGVyYXRpb25CdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX2ZvbGxvdykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy50b2dnbGVNb2RlcmF0aW9ufT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgIHRvbmFsaXR5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge2dldHRleHQoXCJNb2RlcmF0aW9uXCIpfVxuICAgICAgPC9idXR0b24+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3BlY2lhbE9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuc2hvd1NwZWNpYWxPcHRpb25zKCkpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwiZHJvcGRvd24tZm9vdGVyXCI+XG4gICAgICAgIHt0aGlzLmdldEZvbGxvd0J1dHRvbigpfVxuICAgICAgICB7dGhpcy5nZXRNb2RlcmF0aW9uQnV0dG9uKCl9XG4gICAgICA8L2xpPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgIHt0aGlzLmdldFNwZWNpYWxPcHRpb25zKCl9XG4gICAgICB7dGhpcy5zaG93U3BlY2lhbE9wdGlvbnMoKSA/IDxsaSBjbGFzc05hbWU9XCJkaXZpZGVyXCIgLz4gOiBudWxsfVxuICAgICAge3RoaXMucHJvcHMucGFnZXMubWFwKChwYWdlKSA9PiB7XG4gICAgICAgIHJldHVybiA8TGkgcGF0aD17dGhpcy5wcm9wcy5iYXNlVXJsICsgcGFnZS5jb21wb25lbnQgKyAnLyd9XG4gICAgICAgICAgICAgICAgICAga2V5PXtwYWdlLmNvbXBvbmVudH0+XG4gICAgICAgICAgPExpbmsgdG89e3RoaXMucHJvcHMuYmFzZVVybCArIHBhZ2UuY29tcG9uZW50ICsgJy8nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuaGlkZU5hdn0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIHtwYWdlLmljb259XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7cGFnZS5uYW1lfVxuICAgICAgICAgICAge3RoaXMuZ2V0TWV0YShwYWdlLm1ldGEpfVxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9MaT47XG4gICAgICB9KX1cbiAgICA8L3VsPjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEhlYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL0hlYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IE1vZGVyYXRpb25OYXYgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcHJvZmlsZS9tb2RlcmF0aW9uL25hdic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgU2lkZU5hdiwgQ29tcGFjdE5hdiB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Byb2ZpbGUvbmF2cyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgZGVoeWRyYXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3Byb2ZpbGUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBwb2xscyBmcm9tICdtaXNhZ28vc2VydmljZXMvcG9sbHMnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyb3Bkb3duOiBmYWxzZVxuICAgIH07XG5cbiAgICB0aGlzLnN0YXJ0UG9sbGluZyhwcm9wcy5wcm9maWxlLmFwaV91cmwucm9vdCk7XG4gIH1cblxuICBzdGFydFBvbGxpbmcoYXBpKSB7XG4gICAgcG9sbHMuc3RhcnQoe1xuICAgICAgcG9sbDogJ3VzZXItcHJvZmlsZScsXG4gICAgICB1cmw6IGFwaSxcbiAgICAgIGZyZXF1ZW5jeTogOTAgKiAxMDAwLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB1cGRhdGUgPSAoZGF0YSkgPT4ge1xuICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShkYXRhKSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB0b2dnbGVOYXYgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJvcGRvd24gPT09ICdwYWdlcycpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcm9wZG93bjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246ICdwYWdlcydcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB0b2dnbGVNb2RlcmF0aW9uID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duID09PSAnbW9kZXJhdGlvbicpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcm9wZG93bjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnc2hvdyBtb2RlcmF0aW9uIScpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyb3Bkb3duOiAnbW9kZXJhdGlvbidcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBoaWRlTmF2ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0VG9nZ2xlTmF2Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICByZXR1cm4gJ2J0biBidG4tZGVmYXVsdCBidG4taWNvbiBvcGVuJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdidG4gYnRuLWRlZmF1bHQgYnRuLWljb24nO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbXBhY3ROYXZDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJvcGRvd24pIHtcbiAgICAgIHJldHVybiAnY29tcGFjdC1uYXYgb3Blbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnY29tcGFjdC1uYXYnO1xuICAgIH1cbiAgfVxuXG4gIGdldE5hdkRyb3Bkb3duKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duID09PSAncGFnZXMnKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPENvbXBhY3ROYXYgcGFnZXM9e21pc2Fnby5nZXQoJ1BST0ZJTEVfUEFHRVMnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdQUk9GSUxFJykuYWJzb2x1dGVfdXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGU9e3RoaXMucHJvcHMucHJvZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVNb2RlcmF0aW9uPXt0aGlzLnRvZ2dsZU1vZGVyYXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgaGlkZU5hdj17dGhpcy5oaWRlTmF2fSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duID09PSAnbW9kZXJhdGlvbicpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8TW9kZXJhdGlvbk5hdiBwcm9maWxlPXt0aGlzLnByb3BzLnByb2ZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlTmF2PXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlTmF2PXt0aGlzLmhpZGVOYXZ9IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGNvbnN0IGJhc2VDbGFzcyA9ICdwYWdlIHBhZ2UtdXNlci1wcm9maWxlJztcbiAgICBpZiAoZmFsc2UgJiYgdGhpcy5wcm9wcy5wcm9maWxlLnJhbmsuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBwYWdlLXVzZXItcHJvZmlsZS0nICsgdGhpcy5wcm9wcy5wcm9maWxlLnJhbmsuY3NzX2NsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZUNsYXNzO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cblxuICAgICAgPEhlYWRlciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgIHByb2ZpbGU9e3RoaXMucHJvcHMucHJvZmlsZX1cbiAgICAgICAgICAgICAgdG9nZ2xlTmF2PXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgdG9nZ2xlTW9kZXJhdGlvbj17dGhpcy50b2dnbGVNb2RlcmF0aW9ufSAvPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCl9PlxuICAgICAgICB7dGhpcy5nZXROYXZEcm9wZG93bigpfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMyBoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZmlsZS1zaWRlLWF2YXRhclwiPlxuICAgICAgICAgICAgICA8QXZhdGFyIHVzZXI9e3RoaXMucHJvcHMucHJvZmlsZX0gc2l6ZT1cIjQwMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPFNpZGVOYXYgcGFnZXM9e21pc2Fnby5nZXQoJ1BST0ZJTEVfUEFHRVMnKX1cbiAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e21pc2Fnby5nZXQoJ1BST0ZJTEUnKS5hYnNvbHV0ZV91cmx9XG4gICAgICAgICAgICAgICAgICAgICBwcm9maWxlPXt0aGlzLnByb3BzLnByb2ZpbGV9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC05XCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgJ3RpY2snOiBzdG9yZS50aWNrLnRpY2ssXG4gICAgJ3VzZXInOiBzdG9yZS5hdXRoLnVzZXIsXG4gICAgJ3VzZXJzJzogc3RvcmUudXNlcnMsXG4gICAgJ3Byb2ZpbGUnOiBzdG9yZS5wcm9maWxlLFxuICAgICd1c2VybmFtZS1oaXN0b3J5Jzogc3RvcmVbJ3VzZXJuYW1lLWhpc3RvcnknXVxuICB9O1xufVxuXG5jbGFzcyBQbGFjZWhvbGRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICA8cD57XCJIZWxsbywgSSdtIHBsYWNlaG9sZGVyIGZvciBcIiArIHRoaXMucHJvcHMucm91dGUubmFtZX08L3A+XG4gICAgPC9kaXY+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn1cblxuY29uc3QgQ09NUE9ORU5UUyA9IHtcbiAgJ3Bvc3RzJzogUGxhY2Vob2xkZXIsXG4gICd0aHJlYWRzJzogUGxhY2Vob2xkZXIsXG4gICdmb2xsb3dlcnMnOiBQbGFjZWhvbGRlcixcbiAgJ2ZvbGxvd3MnOiBQbGFjZWhvbGRlcixcbiAgJ3VzZXJuYW1lLWhpc3RvcnknOiBQbGFjZWhvbGRlcixcbiAgJ2Jhbi1kZXRhaWxzJzogUGxhY2Vob2xkZXJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRocygpIHtcbiAgbGV0IHBhdGhzID0gW107XG5cbiAgbWlzYWdvLmdldCgnUFJPRklMRV9QQUdFUycpLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgIHBhdGhzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwge1xuICAgICAgcGF0aDogbWlzYWdvLmdldCgnUFJPRklMRScpLmFic29sdXRlX3VybCArIGl0ZW0uY29tcG9uZW50ICsgJy8nLFxuICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoQ09NUE9ORU5UU1tpdGVtLmNvbXBvbmVudF0pLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhdGhzO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2FkZXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbG9hZGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVnaXN0ZXJNb2RhbCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZWdpc3Rlci5qcyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGNhcHRjaGEgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2NhcHRjaGEnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB6eGN2Ym4gZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3p4Y3Zibic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcbiAgICAgICdpc0xvYWRlZCc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2hvd1JlZ2lzdGVyTW9kYWwgPSAoKSA9PiB7XG4gICAgaWYgKG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykuYWNjb3VudF9hY3RpdmF0aW9uID09PSAnY2xvc2VkJykge1xuICAgICAgc25hY2tiYXIuaW5mbyhnZXR0ZXh0KFwiTmV3IHJlZ2lzdHJhdGlvbnMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZC5cIikpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgbW9kYWwuc2hvdyhSZWdpc3Rlck1vZGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICBjYXB0Y2hhLmxvYWQoKSxcbiAgICAgICAgenhjdmJuLmxvYWQoKVxuICAgICAgXSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuICAgICAgICAgICAgJ2lzTG9hZGVkJzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vZGFsLnNob3coUmVnaXN0ZXJNb2RhbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSArICh0aGlzLnN0YXRlLmlzTG9hZGluZyA/ICcgYnRuLWxvYWRpbmcnIDogJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5zaG93UmVnaXN0ZXJNb2RhbH1cbiAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9eydidG4gJyArIHRoaXMuZ2V0Q2xhc3NOYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkZWR9PlxuICAgICAge2dldHRleHQoXCJSZWdpc3RlclwiKX1cbiAgICAgIHt0aGlzLnN0YXRlLmlzTG9hZGluZyA/IDxMb2FkZXIgLz4gOiBudWxsIH1cbiAgICA8L2J1dHRvbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFBhc3N3b3JkU3RyZW5ndGggZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBhdXRoIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hdXRoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgY2FwdGNoYSBmcm9tICdtaXNhZ28vc2VydmljZXMvY2FwdGNoYSc7XG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0IHNob3dCYW5uZWRQYWdlIGZyb20gJ21pc2Fnby91dGlscy9iYW5uZWQtcGFnZSc7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyRm9ybSBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG5cbiAgICAgICd1c2VybmFtZSc6ICcnLFxuICAgICAgJ2VtYWlsJzogJycsXG4gICAgICAncGFzc3dvcmQnOiAnJyxcbiAgICAgICdjYXB0Y2hhJzogJycsXG5cbiAgICAgICd2YWxpZGF0b3JzJzoge1xuICAgICAgICAndXNlcm5hbWUnOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZUNvbnRlbnQoKSxcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lTWluTGVuZ3RoKG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykpLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNYXhMZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSlcbiAgICAgICAgXSxcbiAgICAgICAgJ2VtYWlsJzogW1xuICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwoKVxuICAgICAgICBdLFxuICAgICAgICAncGFzc3dvcmQnOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5wYXNzd29yZE1pbkxlbmd0aChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpKVxuICAgICAgICBdLFxuICAgICAgICAnY2FwdGNoYSc6IGNhcHRjaGEudmFsaWRhdG9yKClcbiAgICAgIH0sXG5cbiAgICAgICdlcnJvcnMnOiB7fVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRm9ybSBjb250YWlucyBlcnJvcnMuXCIpKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnZXJyb3JzJzogdGhpcy52YWxpZGF0ZSgpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QobWlzYWdvLmdldCgnVVNFUlNfQVBJJyksIHtcbiAgICAgICd1c2VybmFtZSc6IHRoaXMuc3RhdGUudXNlcm5hbWUsXG4gICAgICAnZW1haWwnOiB0aGlzLnN0YXRlLmVtYWlsLFxuICAgICAgJ3Bhc3N3b3JkJzogdGhpcy5zdGF0ZS5wYXNzd29yZCxcbiAgICAgICdjYXB0Y2hhJzogdGhpcy5zdGF0ZS5jYXB0Y2hhXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKGFwaVJlc3BvbnNlKSB7XG4gICAgdGhpcy5wcm9wcy5jYWxsYmFjayhhcGlSZXNwb25zZSk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgJ2Vycm9ycyc6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuc3RhdGUuZXJyb3JzLCByZWplY3Rpb24pXG4gICAgICB9KTtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJGb3JtIGNvbnRhaW5zIGVycm9ycy5cIikpO1xuICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAzICYmIHJlamVjdGlvbi5iYW4pIHtcbiAgICAgIHNob3dCYW5uZWRQYWdlKHJlamVjdGlvbi5iYW4pO1xuICAgICAgbW9kYWwuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGdldExlZ2FsRm9vdE5vdGUoKSB7XG4gICAgaWYgKG1pc2Fnby5nZXQoJ1RFUk1TX09GX1NFUlZJQ0VfVVJMJykpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8YSBocmVmPXttaXNhZ28uZ2V0KCdURVJNU19PRl9TRVJWSUNFX1VSTCcpfVxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICB7Z2V0dGV4dChcIkJ5IHJlZ2lzdGVyaW5nIHlvdSBhZ3JlZSB0byBzaXRlJ3MgdGVybXMgYW5kIGNvbmRpdGlvbnMuXCIpfVxuICAgICAgPC9hPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZGlhbG9nIG1vZGFsLXJlZ2lzdGVyXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2dldHRleHQoXCJDbG9zZVwiKX0+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiPntnZXR0ZXh0KFwiUmVnaXN0ZXJcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwiZm9ybS1ob3Jpem9udGFsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0eXBlXCIgc3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fSAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCI+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJVc2VybmFtZVwiKX0gZm9yPVwiaWRfdXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb249e3RoaXMuc3RhdGUuZXJyb3JzLnVzZXJuYW1lfT5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF91c2VybmFtZVwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiaWRfdXNlcm5hbWVfc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgndXNlcm5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnVzZXJuYW1lfSAvPlxuICAgICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJFLW1haWxcIil9IGZvcj1cImlkX2VtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIlxuICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uPXt0aGlzLnN0YXRlLmVycm9ycy5lbWFpbH0+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaWRfZW1haWxcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImlkX2VtYWlsX3N0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ2VtYWlsJyl9XG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lbWFpbH0gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiUGFzc3dvcmRcIil9IGZvcj1cImlkX3Bhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIlxuICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uPXt0aGlzLnN0YXRlLmVycm9ycy5wYXNzd29yZH1cbiAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9ezxQYXNzd29yZFN0cmVuZ3RoIHBhc3N3b3JkPXt0aGlzLnN0YXRlLnBhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzPXtbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZW1haWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF19IC8+fSA+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX3Bhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpZF9wYXNzd29yZF9zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAge2NhcHRjaGEuY29tcG9uZW50KHtcbiAgICAgICAgICAgICAgZm9ybTogdGhpcyxcbiAgICAgICAgICAgICAgbGFiZWxDbGFzczogXCJjb2wtc20tNFwiLFxuICAgICAgICAgICAgICBjb250cm9sQ2xhc3M6IFwiY29sLXNtLThcIlxuICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAge3RoaXMuZ2V0TGVnYWxGb290Tm90ZSgpfVxuICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJSZWdpc3RlciBhY2NvdW50XCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RlckNvbXBsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0TGVhZCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5hY3RpdmF0aW9uID09PSAndXNlcicpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiJSh1c2VybmFtZSlzLCB5b3VyIGFjY291bnQgaGFzIGJlZW4gY3JlYXRlZCBidXQgeW91IG5lZWQgdG8gYWN0aXZhdGUgaXQgYmVmb3JlIHlvdSB3aWxsIGJlIGFibGUgdG8gc2lnbiBpbi5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICdhZG1pbicpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiJSh1c2VybmFtZSlzLCB5b3VyIGFjY291bnQgaGFzIGJlZW4gY3JlYXRlZCBidXQgYm9hcmQgYWRtaW5pc3RyYXRvciB3aWxsIGhhdmUgdG8gYWN0aXZhdGUgaXQgYmVmb3JlIHlvdSB3aWxsIGJlIGFibGUgdG8gc2lnbiBpbi5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3Vic2NyaXB0KCkge1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICd1c2VyJykge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJXZSBoYXZlIHNlbnQgYW4gZS1tYWlsIHRvICUoZW1haWwpcyB3aXRoIGxpbmsgdGhhdCB5b3UgaGF2ZSB0byBjbGljayB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5hY3RpdmF0aW9uID09PSAnYWRtaW4nKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIldlIHdpbGwgc2VuZCBhbiBlLW1haWwgdG8gJShlbWFpbClzIHdoZW4gdGhpcyB0YWtlcyBwbGFjZS5cIik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbWVzc2FnZSBtb2RhbC1yZWdpc3RlclwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2dldHRleHQoXCJDbG9zZVwiKX0+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiPntnZXR0ZXh0KFwiUmVnaXN0cmF0aW9uIGNvbXBsZXRlXCIpfTwvaDQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgICAgICB7aW50ZXJwb2xhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRMZWFkKCksXG4gICAgICAgICAgICAgICAgeyd1c2VybmFtZSc6IHRoaXMucHJvcHMudXNlcm5hbWV9LCB0cnVlKX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7aW50ZXJwb2xhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHQoKSxcbiAgICAgICAgICAgICAgICB7J2VtYWlsJzogdGhpcy5wcm9wcy5lbWFpbH0sIHRydWUpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2NvbXBsZXRlJzogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wbGV0ZVJlZ2lzdHJhdGlvbiA9IChhcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChhcGlSZXNwb25zZS5hY3RpdmF0aW9uID09PSAnYWN0aXZlJykge1xuICAgICAgbW9kYWwuaGlkZSgpO1xuICAgICAgYXV0aC5zaWduSW4oYXBpUmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgJ2NvbXBsZXRlJzogYXBpUmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnN0YXRlLmNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gPFJlZ2lzdGVyQ29tcGxldGUgYWN0aXZhdGlvbj17dGhpcy5zdGF0ZS5jb21wbGV0ZS5hY3RpdmF0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPXt0aGlzLnN0YXRlLmNvbXBsZXRlLnVzZXJuYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsPXt0aGlzLnN0YXRlLmNvbXBsZXRlLmVtYWlsfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxSZWdpc3RlckZvcm0gY2FsbGJhY2s9e3RoaXMuY29tcGxldGVSZWdpc3RyYXRpb259Lz47XG4gICAgfVxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdExpbmtGb3JtIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcblxuICAgICAgJ2VtYWlsJzogJycsXG5cbiAgICAgICd2YWxpZGF0b3JzJzoge1xuICAgICAgICAnZW1haWwnOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5lbWFpbCgpXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdChtaXNhZ28uZ2V0KCdTRU5EX0FDVElWQVRJT05fQVBJJyksIHtcbiAgICAgICdlbWFpbCc6IHRoaXMuc3RhdGUuZW1haWxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoYXBpUmVzcG9uc2UpIHtcbiAgICB0aGlzLnByb3BzLmNhbGxiYWNrKGFwaVJlc3BvbnNlKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChbJ2FscmVhZHlfYWN0aXZlJywgJ2luYWN0aXZlX2FkbWluJ10uaW5kZXhPZihyZWplY3Rpb24uY29kZSkgPiAtMSkge1xuICAgICAgc25hY2tiYXIuaW5mbyhyZWplY3Rpb24uZGV0YWlsKTtcbiAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMyAmJiByZWplY3Rpb24uYmFuKSB7XG4gICAgICBzaG93QmFubmVkUGFnZShyZWplY3Rpb24uYmFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIndlbGwgd2VsbC1mb3JtIHdlbGwtZm9ybS1yZXF1ZXN0LWFjdGl2YXRpb24tbGlua1wiPlxuICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cm9sLWlucHV0XCI+XG5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJZb3VyIGUtbWFpbCBhZGRyZXNzXCIpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ2VtYWlsJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZW1haWx9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIlNlbmQgbGlua1wiKX1cbiAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlua1NlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRNZXNzYWdlKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiQWN0aXZhdGlvbiBsaW5rIHdhcyBzZW50IHRvICUoZW1haWwpc1wiKSwge1xuICAgICAgZW1haWw6IHRoaXMucHJvcHMudXNlci5lbWFpbFxuICAgIH0sIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxsIHdlbGwtZm9ybSB3ZWxsLWZvcm0tcmVxdWVzdC1hY3RpdmF0aW9uLWxpbmsgd2VsbC1kb25lXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImRvbmUtbWVzc2FnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIGNoZWNrXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHt0aGlzLmdldE1lc3NhZ2UoKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmNhbGxiYWNrfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIlJlcXVlc3QgYW5vdGhlciBsaW5rXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY29tcGxldGU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgY29tcGxldGUgPSAoYXBpUmVzcG9uc2UpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbXBsZXRlOiBhcGlSZXNwb25zZVxuICAgIH0pO1xuICB9O1xuXG4gIHJlc2V0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29tcGxldGU6IGZhbHNlXG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBpZiAodGhpcy5zdGF0ZS5jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuIDxMaW5rU2VudCB1c2VyPXt0aGlzLnN0YXRlLmNvbXBsZXRlfSBjYWxsYmFjaz17dGhpcy5yZXNldH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8UmVxdWVzdExpbmtGb3JtIGNhbGxiYWNrPXt0aGlzLmNvbXBsZXRlfSAvPjtcbiAgICB9O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgc2hvd0Jhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL3V0aWxzL2Jhbm5lZC1wYWdlJztcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RSZXNldEZvcm0gZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuXG4gICAgICAnZW1haWwnOiAnJyxcblxuICAgICAgJ3ZhbGlkYXRvcnMnOiB7XG4gICAgICAgICdlbWFpbCc6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLmVtYWlsKClcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KG1pc2Fnby5nZXQoJ1NFTkRfUEFTU1dPUkRfUkVTRVRfQVBJJyksIHtcbiAgICAgICdlbWFpbCc6IHRoaXMuc3RhdGUuZW1haWxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoYXBpUmVzcG9uc2UpIHtcbiAgICB0aGlzLnByb3BzLmNhbGxiYWNrKGFwaVJlc3BvbnNlKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChbJ2luYWN0aXZlX3VzZXInLCAnaW5hY3RpdmVfYWRtaW4nXS5pbmRleE9mKHJlamVjdGlvbi5jb2RlKSA+IC0xKSB7XG4gICAgICB0aGlzLnByb3BzLnNob3dJbmFjdGl2ZVBhZ2UocmVqZWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMyAmJiByZWplY3Rpb24uYmFuKSB7XG4gICAgICBzaG93QmFubmVkUGFnZShyZWplY3Rpb24uYmFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIndlbGwgd2VsbC1mb3JtIHdlbGwtZm9ybS1yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0XCI+XG4gICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRyb2wtaW5wdXRcIj5cblxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0dGV4dChcIllvdXIgZS1tYWlsIGFkZHJlc3NcIil9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnZW1haWwnKX1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lbWFpbH0gLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiU2VuZCBsaW5rXCIpfVxuICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaW5rU2VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCJSZXNldCBwYXNzd29yZCBsaW5rIHdhcyBzZW50IHRvICUoZW1haWwpc1wiKSwge1xuICAgICAgZW1haWw6IHRoaXMucHJvcHMudXNlci5lbWFpbFxuICAgIH0sIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxsIHdlbGwtZm9ybSB3ZWxsLWZvcm0tcmVxdWVzdC1wYXNzd29yZC1yZXNldCB3ZWxsLWRvbmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9uZS1tZXNzYWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge3RoaXMuZ2V0TWVzc2FnZSgpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuY2FsbGJhY2t9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiUmVxdWVzdCBhbm90aGVyIGxpbmtcIil9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjY291bnRJbmFjdGl2ZVBhZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRBY3RpdmF0ZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5hY3RpdmF0aW9uID09PSAnaW5hY3RpdmVfdXNlcicpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8cD5cbiAgICAgICAgPGEgaHJlZj17bWlzYWdvLmdldCgnUkVRVUVTVF9BQ1RJVkFUSU9OX1VSTCcpfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIkFjdGl2YXRlIHlvdXIgYWNjb3VudC5cIil9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvcD47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS1tZXNzYWdlIHBhZ2UtbWVzc2FnZS1pbmZvIHBhZ2UtZm9yZ290dGVuLXBhc3N3b3JkLWluYWN0aXZlXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtcGFuZWxcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJZb3VyIGFjY291bnQgaXMgaW5hY3RpdmUuXCIpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7dGhpcy5nZXRBY3RpdmF0ZUJ1dHRvbigpfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjb21wbGV0ZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wbGV0ZSA9IChhcGlSZXNwb25zZSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29tcGxldGU6IGFwaVJlc3BvbnNlXG4gICAgfSk7XG4gIH07XG5cbiAgcmVzZXQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb21wbGV0ZTogZmFsc2VcbiAgICB9KTtcbiAgfTtcblxuICBzaG93SW5hY3RpdmVQYWdlKGFwaVJlc3BvbnNlKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgPEFjY291bnRJbmFjdGl2ZVBhZ2UgYWN0aXZhdGlvbj17YXBpUmVzcG9uc2UuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e2FwaVJlc3BvbnNlLmRldGFpbH0gLz4sXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1tb3VudCcpXG4gICAgKTtcbiAgfVxuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgaWYgKHRoaXMuc3RhdGUuY29tcGxldGUpIHtcbiAgICAgIHJldHVybiA8TGlua1NlbnQgdXNlcj17dGhpcy5zdGF0ZS5jb21wbGV0ZX0gY2FsbGJhY2s9e3RoaXMucmVzZXR9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPFJlcXVlc3RSZXNldEZvcm0gY2FsbGJhY2s9e3RoaXMuY29tcGxldGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0luYWN0aXZlUGFnZT17dGhpcy5zaG93SW5hY3RpdmVQYWdlfSAvPjtcbiAgICB9O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBTaWduSW5Nb2RhbCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9zaWduLWluLmpzJztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBhdXRoIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hdXRoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgc2hvd0Jhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL3V0aWxzL2Jhbm5lZC1wYWdlJztcblxuZXhwb3J0IGNsYXNzIFJlc2V0UGFzc3dvcmRGb3JtIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcblxuICAgICAgJ3Bhc3N3b3JkJzogJycsXG5cbiAgICAgICd2YWxpZGF0b3JzJzoge1xuICAgICAgICAncGFzc3dvcmQnOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5wYXNzd29yZE1pbkxlbmd0aChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpKVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGgpIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IodGhpcy5zdGF0ZS5lcnJvcnMucGFzc3dvcmRbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkVudGVyIG5ldyBwYXNzd29yZC5cIikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdChtaXNhZ28uZ2V0KCdDSEFOR0VfUEFTU1dPUkRfQVBJJyksIHtcbiAgICAgICdwYXNzd29yZCc6IHRoaXMuc3RhdGUucGFzc3dvcmRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoYXBpUmVzcG9uc2UpIHtcbiAgICB0aGlzLnByb3BzLmNhbGxiYWNrKGFwaVJlc3BvbnNlKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMgJiYgcmVqZWN0aW9uLmJhbikge1xuICAgICAgc2hvd0Jhbm5lZFBhZ2UocmVqZWN0aW9uLmJhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxsIHdlbGwtZm9ybSB3ZWxsLWZvcm0tcmVzZXQtcGFzc3dvcmRcIj5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udHJvbC1pbnB1dFwiPlxuXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0dGV4dChcIkVudGVyIG5ldyBwYXNzd29yZFwiKX1cbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBhc3N3b3JkfSAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAge2dldHRleHQoXCJDaGFuZ2UgcGFzc3dvcmRcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkQ2hhbmdlZFBhZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRNZXNzYWdlKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJSh1c2VybmFtZSlzLCB5b3VyIHBhc3N3b3JkIGhhcyBiZWVuIGNoYW5nZWQgc3VjY2Vzc2Z1bGx5LlwiKSwge1xuICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgIH0sIHRydWUpO1xuICB9XG5cbiAgc2hvd1NpZ25JbigpIHtcbiAgICBtb2RhbC5zaG93KFNpZ25Jbk1vZGFsKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZSBwYWdlLW1lc3NhZ2UgcGFnZS1tZXNzYWdlLXN1Y2Nlc3MgcGFnZS1mb3Jnb3R0ZW4tcGFzc3dvcmQtY2hhbmdlZFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLXBhbmVsXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICBjaGVja1xuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICAgICAge3RoaXMuZ2V0TWVzc2FnZSgpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHtnZXR0ZXh0KFwiWW91IHdpbGwgaGF2ZSB0byBzaWduIGluIHVzaW5nIG5ldyBwYXNzd29yZCBiZWZvcmUgY29udGludWluZy5cIil9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25DbGljaz17dGhpcy5zaG93U2lnbklufT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIlNpZ24gaW5cIil9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvbXBsZXRlID0gKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgYXV0aC5zb2Z0U2lnbk91dCgpO1xuXG4gICAgLy8gbnVrZSBcInJlZGlyZWN0X3RvXCIgZmllbGQgc28gd2UgZG9uJ3QgZW5kXG4gICAgLy8gY29taW5nIGJhY2sgdG8gZXJyb3IgcGFnZSBhZnRlciBzaWduIGluXG4gICAgJCgnI2hpZGRlbi1sb2dpbi1mb3JtIGlucHV0W25hbWU9XCJyZWRpcmVjdF90b1wiXScpLnJlbW92ZSgpO1xuXG4gICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgPFBhc3N3b3JkQ2hhbmdlZFBhZ2UgdXNlcj17YXBpUmVzcG9uc2V9IC8+LFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbW91bnQnKVxuICAgICk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPFJlc2V0UGFzc3dvcmRGb3JtIGNhbGxiYWNrPXt0aGlzLmNvbXBsZXRlfSAvPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRDaG9pY2UoKSB7XG4gICAgbGV0IGNob2ljZSA9IG51bGw7XG4gICAgdGhpcy5wcm9wcy5jaG9pY2VzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udmFsdWUgPT09IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgY2hvaWNlID0gaXRlbTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2hvaWNlO1xuICB9XG5cbiAgZ2V0SWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2UoKS5pY29uO1xuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlKCkubGFiZWw7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXAgYnRuLXNlbGVjdC1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1zZWxlY3QgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWQgfHwgbnVsbH1cbiAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5wcm9wc1snYXJpYS1kZXNjcmliZWRieSddIHx8IG51bGx9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkIHx8IGZhbHNlfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgIHt0aGlzLmdldEljb24oKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5nZXRMYWJlbCgpfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaG9pY2VzLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8bGkga2V5PXtpfT5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0bi1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5jaGFuZ2UoaXRlbS52YWx1ZSl9PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAge2l0ZW0uaWNvbn1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7aXRlbS5sYWJlbH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGk+O1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgc2hvd0Jhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL3V0aWxzL2Jhbm5lZC1wYWdlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuICAgICAgJ3Nob3dBY3RpdmF0aW9uJzogZmFsc2UsXG5cbiAgICAgICd1c2VybmFtZSc6ICcnLFxuICAgICAgJ3Bhc3N3b3JkJzogJycsXG5cbiAgICAgICd2YWxpZGF0b3JzJzoge1xuICAgICAgICAndXNlcm5hbWUnOiBbXSxcbiAgICAgICAgJ3Bhc3N3b3JkJzogW11cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZpbGwgb3V0IGJvdGggZmllbGRzLlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdChtaXNhZ28uZ2V0KCdBVVRIX0FQSScpLCB7XG4gICAgICAndXNlcm5hbWUnOiB0aGlzLnN0YXRlLnVzZXJuYW1lLFxuICAgICAgJ3Bhc3N3b3JkJzogdGhpcy5zdGF0ZS5wYXNzd29yZFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcygpIHtcbiAgICBsZXQgZm9ybSA9ICQoJyNoaWRkZW4tbG9naW4tZm9ybScpO1xuXG4gICAgZm9ybS5hcHBlbmQoJzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ1c2VybmFtZVwiIC8+Jyk7XG4gICAgZm9ybS5hcHBlbmQoJzxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwicGFzc3dvcmRcIiAvPicpO1xuXG4gICAgLy8gZmlsbCBvdXQgZm9ybSB3aXRoIHVzZXIgY3JlZGVudGlhbHMgYW5kIHN1Ym1pdCBpdCwgdGhpcyB3aWxsIHRlbGxcbiAgICAvLyBNaXNhZ28gdG8gcmVkaXJlY3QgdXNlciBiYWNrIHRvIHJpZ2h0IHBhZ2UsIGFuZCB3aWxsIHRyaWdnZXIgYnJvd3NlcidzXG4gICAgLy8ga2V5IHJpbmcgZmVhdHVyZVxuICAgIGZvcm0uZmluZCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXScpLnZhbChhamF4LmdldENzcmZUb2tlbigpKTtcbiAgICBmb3JtLmZpbmQoJ2lucHV0W25hbWU9XCJyZWRpcmVjdF90b1wiXScpLnZhbCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIGZvcm0uZmluZCgnaW5wdXRbbmFtZT1cInVzZXJuYW1lXCJdJykudmFsKHRoaXMuc3RhdGUudXNlcm5hbWUpO1xuICAgIGZvcm0uZmluZCgnaW5wdXRbbmFtZT1cInBhc3N3b3JkXCJdJykudmFsKHRoaXMuc3RhdGUucGFzc3dvcmQpO1xuICAgIGZvcm0uc3VibWl0KCk7XG5cbiAgICAvLyBrZWVwIGZvcm0gbG9hZGluZ1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2lzTG9hZGluZyc6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIGlmIChyZWplY3Rpb24uY29kZSA9PT0gJ2luYWN0aXZlX2FkbWluJykge1xuICAgICAgICBzbmFja2Jhci5pbmZvKHJlamVjdGlvbi5kZXRhaWwpO1xuICAgICAgfSBlbHNlIGlmIChyZWplY3Rpb24uY29kZSA9PT0gJ2luYWN0aXZlX3VzZXInKSB7XG4gICAgICAgIHNuYWNrYmFyLmluZm8ocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdzaG93QWN0aXZhdGlvbic6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5jb2RlID09PSAnYmFubmVkJykge1xuICAgICAgICBzaG93QmFubmVkUGFnZShyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgbW9kYWwuaGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMgJiYgcmVqZWN0aW9uLmJhbikge1xuICAgICAgc2hvd0Jhbm5lZFBhZ2UocmVqZWN0aW9uLmJhbik7XG4gICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWN0aXZhdGlvbkJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5zaG93QWN0aXZhdGlvbikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e21pc2Fnby5nZXQoJ1JFUVVFU1RfQUNUSVZBVElPTl9VUkwnKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrXCI+XG4gICAgICAgICB7Z2V0dGV4dChcIkFjdGl2YXRlIGFjY291bnRcIil9XG4gICAgICA8L2E+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc20gbW9kYWwtc2lnbi1pblwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2dldHRleHQoXCJDbG9zZVwiKX0+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJtb2RhbC10aXRsZVwiPntnZXR0ZXh0KFwiU2lnbiBpblwiKX08L2g0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udHJvbC1pbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImlkX3VzZXJuYW1lXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtnZXR0ZXh0KFwiVXNlcm5hbWUgb3IgZS1tYWlsXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3VzZXJuYW1lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnVzZXJuYW1lfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cm9sLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiaWRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtnZXR0ZXh0KFwiUGFzc3dvcmRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgncGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAge3RoaXMuZ2V0QWN0aXZhdGlvbkJ1dHRvbigpfVxuICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAgICAgIHtnZXR0ZXh0KFwiU2lnbiBpblwiKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPGEgaHJlZj17bWlzYWdvLmdldCgnRk9SR09UVEVOX1BBU1NXT1JEX1VSTCcpfVxuICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAgICAge2dldHRleHQoXCJGb3Jnb3QgcGFzc3dvcmQ/XCIpfVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuY29uc3QgVFlQRVNfQ0xBU1NFUyA9IHtcbiAgJ2luZm8nOiAnYWxlcnQtaW5mbycsXG4gICdzdWNjZXNzJzogJ2FsZXJ0LXN1Y2Nlc3MnLFxuICAnd2FybmluZyc6ICdhbGVydC13YXJuaW5nJyxcbiAgJ2Vycm9yJzogJ2FsZXJ0LWRhbmdlcidcbn07XG4vKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG5leHBvcnQgY2xhc3MgU25hY2tiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRTbmFja2JhckNsYXNzKCkge1xuICAgIGxldCBzbmFja2JhckNsYXNzID0gJ2FsZXJ0cy1zbmFja2Jhcic7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNWaXNpYmxlKSB7XG4gICAgICBzbmFja2JhckNsYXNzICs9ICcgaW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2JhckNsYXNzICs9ICcgb3V0JztcbiAgICB9XG4gICAgcmV0dXJuIHNuYWNrYmFyQ2xhc3M7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRTbmFja2JhckNsYXNzKCl9PlxuICAgICAgPHAgY2xhc3NOYW1lPXsnYWxlcnQgJyArIFRZUEVTX0NMQVNTRVNbdGhpcy5wcm9wcy50eXBlXX0+XG4gICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XG4gICAgICA8L3A+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuc25hY2tiYXI7XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdmF0YXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWdpc3RlckJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZWdpc3Rlci1idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBTaWduSW5Nb2RhbCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9zaWduLWluLmpzJztcbmltcG9ydCBkcm9wZG93biBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9iaWxlLW5hdmJhci1kcm9wZG93bic7XG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcblxuZXhwb3J0IGNsYXNzIEd1ZXN0TWVudSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHNob3dTaWduSW5Nb2RhbCgpIHtcbiAgICBtb2RhbC5zaG93KFNpZ25Jbk1vZGFsKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51IHVzZXItZHJvcGRvd24gZHJvcGRvd24tbWVudS1yaWdodFwiXG4gICAgICAgICAgICAgICByb2xlPVwibWVudVwiPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImd1ZXN0LXByZXZpZXdcIj5cbiAgICAgICAgPGg0PntnZXR0ZXh0KFwiWW91IGFyZSBicm93c2luZyBhcyBndWVzdC5cIil9PC9oND5cbiAgICAgICAgPHA+XG4gICAgICAgICAge2dldHRleHQoJ1NpZ24gaW4gb3IgcmVnaXN0ZXIgdG8gc3RhcnQgYW5kIHBhcnRpY2lwYXRlIGluIGRpc2N1c3Npb25zLicpfVxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wteHMtNlwiPlxuXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zaG93U2lnbkluTW9kYWx9PlxuICAgICAgICAgICAgICB7Z2V0dGV4dChcIlNpZ24gaW5cIil9XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXhzLTZcIj5cblxuICAgICAgICAgICAgPFJlZ2lzdGVyQnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAgICB7Z2V0dGV4dChcIlJlZ2lzdGVyXCIpfVxuICAgICAgICAgICAgPC9SZWdpc3RlckJ1dHRvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3Vlc3ROYXYgZXh0ZW5kcyBHdWVzdE1lbnUge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm5hdiBuYXYtZ3Vlc3RcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBuYXZiYXItYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zaG93U2lnbkluTW9kYWx9PlxuICAgICAgICB7Z2V0dGV4dChcIlNpZ24gaW5cIil9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxSZWdpc3RlckJ1dHRvbiBjbGFzc05hbWU9XCJuYXZiYXItYnRuIGJ0bi1wcmltYXJ5XCI+XG4gICAgICAgIHtnZXR0ZXh0KFwiUmVnaXN0ZXJcIil9XG4gICAgICA8L1JlZ2lzdGVyQnV0dG9uPlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0R3Vlc3ROYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzaG93R3Vlc3RNZW51KCkge1xuICAgIGRyb3Bkb3duLnNob3coR3Vlc3RNZW51KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuc2hvd0d1ZXN0TWVudX0+XG4gICAgICA8QXZhdGFyIHNpemU9XCI2NFwiIC8+XG4gICAgPC9idXR0b24+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBHdWVzdE5hdiwgQ29tcGFjdEd1ZXN0TmF2IH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlci1tZW51L2d1ZXN0LW5hdic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgVXNlck5hdiwgQ29tcGFjdFVzZXJOYXZ9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItbWVudS91c2VyLW5hdic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgY2xhc3MgVXNlck1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnByb3BzLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgcmV0dXJuIDxVc2VyTmF2IHVzZXI9e3RoaXMucHJvcHMudXNlcn0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8R3Vlc3ROYXYgLz47XG4gICAgfVxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhY3RVc2VyTWVudSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgaWYgKHRoaXMucHJvcHMuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICByZXR1cm4gPENvbXBhY3RVc2VyTmF2IHVzZXI9e3RoaXMucHJvcHMudXNlcn0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8Q29tcGFjdEd1ZXN0TmF2IC8+O1xuICAgIH1cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Qoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmF1dGg7XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQ2hhbmdlQXZhdGFyTW9kYWwsIHsgc2VsZWN0IH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9yb290JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGRyb3Bkb3duIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2JpbGUtbmF2YmFyLWRyb3Bkb3duJztcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuXG5leHBvcnQgY2xhc3MgVXNlck1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBsb2dvdXQoKSB7XG4gICAgbGV0IGRlY2lzaW9uID0gY29uZmlybShnZXR0ZXh0KFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNpZ24gb3V0P1wiKSk7XG4gICAgaWYgKGRlY2lzaW9uKSB7XG4gICAgICAkKCcjaGlkZGVuLWxvZ291dC1mb3JtJykuc3VibWl0KCk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlQXZhdGFyKCkge1xuICAgIG1vZGFsLnNob3coY29ubmVjdChzZWxlY3QpKENoYW5nZUF2YXRhck1vZGFsKSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudSB1c2VyLWRyb3Bkb3duIGRyb3Bkb3duLW1lbnUtcmlnaHRcIlxuICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIj5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkcm9wZG93bi1oZWFkZXJcIj5cbiAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lfTwvc3Ryb25nPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkaXZpZGVyXCIgLz5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy51c2VyLmFic29sdXRlX3VybH0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPmFjY291bnRfY2lyY2xlPC9zcGFuPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiU2VlIHlvdXIgcHJvZmlsZVwiKX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5cbiAgICAgICAgPGEgaHJlZj17bWlzYWdvLmdldCgnVVNFUkNQX1VSTCcpfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+ZG9uZV9hbGw8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJDaGFuZ2Ugb3B0aW9uc1wiKX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuLWxpbmtcIiBvbkNsaWNrPXt0aGlzLmNoYW5nZUF2YXRhcn0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPnBvcnRyYWl0PC9zcGFuPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIGF2YXRhclwiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImRpdmlkZXJcIiAvPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImRyb3Bkb3duLWZvb3RlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5sb2dvdXR9PlxuICAgICAgICAgICAge2dldHRleHQoXCJMb2cgb3V0XCIpfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICA8L3VsPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyTmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cInVsIG5hdiBuYXZiYXItbmF2IG5hdi11c2VyXCI+XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZHJvcGRvd25cIj5cbiAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy51c2VyLmFic29sdXRlX3VybH0gY2xhc3NOYW1lPVwiZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiNjRcIiAvPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxVc2VyTWVudSB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IC8+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdFVzZXJNZW51KHN0YXRlKSB7XG4gIHJldHVybiB7dXNlcjogc3RhdGUuYXV0aC51c2VyfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhY3RVc2VyTmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc2hvd1VzZXJNZW51KCkge1xuICAgIGRyb3Bkb3duLnNob3dDb25uZWN0ZWQoJ3VzZXItbWVudScsIGNvbm5lY3Qoc2VsZWN0VXNlck1lbnUpKFVzZXJNZW51KSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnNob3dVc2VyTWVudX0+XG4gICAgICA8QXZhdGFyIHVzZXI9e3RoaXMucHJvcHMudXNlcn0gc2l6ZT1cIjY0XCIgLz5cbiAgICA8L2J1dHRvbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRDbGFzcygpIHtcbiAgICBsZXQgc3RhdHVzID0gJyc7XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2Jhbm5lZCkge1xuICAgICAgc3RhdHVzID0gJ2Jhbm5lZCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19oaWRkZW4pIHtcbiAgICAgIHN0YXR1cyA9ICdvZmZsaW5lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29ubGluZV9oaWRkZW4pIHtcbiAgICAgIHN0YXR1cyA9ICdvbmxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb2ZmbGluZV9oaWRkZW4pIHtcbiAgICAgIHN0YXR1cyA9ICdvZmZsaW5lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29ubGluZSkge1xuICAgICAgc3RhdHVzID0gJ29ubGluZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lKSB7XG4gICAgICBzdGF0dXMgPSAnb2ZmbGluZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICd1c2VyLXN0YXR1cyB1c2VyLScgKyBzdGF0dXM7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3MoKX0+XG4gICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICA8L3NwYW4+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0YXR1c0ljb24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRJY29uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19iYW5uZWQpIHtcbiAgICAgIHJldHVybiAncmVtb3ZlX2NpcmNsZV9vdXRsaW5lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2hpZGRlbikge1xuICAgICAgcmV0dXJuICdoZWxwX291dGxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuICdsYWJlbCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuICdsYWJlbF9vdXRsaW5lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29ubGluZSkge1xuICAgICAgcmV0dXJuICdsZW5zJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmUpIHtcbiAgICAgIHJldHVybiAncGFub3JhbWFfZmlzaF9leWUnO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb24gc3RhdHVzLWljb25cIj5cbiAgICAgIHt0aGlzLmdldEljb24oKX1cbiAgICA8L3NwYW4+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxufVxuXG5leHBvcnQgY2xhc3MgU3RhdHVzTGFiZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRIZWxwKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19iYW5uZWQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0YXR1cy5iYW5uZWRfdW50aWwpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgaXMgYmFubmVkIHVudGlsICUoYmFuX2V4cGlyZXMpc1wiKSwge1xuICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWUsXG4gICAgICAgICAgYmFuX2V4cGlyZXM6IHRoaXMucHJvcHMuc3RhdHVzLmJhbm5lZF91bnRpbC5mb3JtYXQoJ0xMLCBMVCcpXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgaXMgYmFubmVkXCIpLCB7XG4gICAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgaXMgaGlkaW5nIHByZXNlbmNlXCIpLCB7XG4gICAgICAgIHVzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWVcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgaXMgb25saW5lIChoaWRkZW4pXCIpLCB7XG4gICAgICAgIHVzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWVcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb2ZmbGluZV9oaWRkZW4pIHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJSh1c2VybmFtZSlzIHdhcyBsYXN0IHNlZW4gJShsYXN0X2NsaWNrKXMgKGhpZGRlbilcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZSxcbiAgICAgICAgbGFzdF9jbGljazogdGhpcy5wcm9wcy5zdGF0dXMubGFzdF9jbGljay5mcm9tTm93KClcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBvbmxpbmVcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyB3YXMgbGFzdCBzZWVuICUobGFzdF9jbGljaylzXCIpLCB7XG4gICAgICAgIHVzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWUsXG4gICAgICAgIGxhc3RfY2xpY2s6IHRoaXMucHJvcHMuc3RhdHVzLmxhc3RfY2xpY2suZnJvbU5vdygpXG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfYmFubmVkKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIkJhbm5lZFwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJIaWRkZW5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIk9ubGluZSAoaGlkZGVuKVwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIk9mZmxpbmUgKGhpZGRlbilcIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmUpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiT25saW5lXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb2ZmbGluZSkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJPZmZsaW5lXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJzdGF0dXMtbGFiZWxcIn1cbiAgICAgICAgICAgICAgICAgdGl0bGU9e3RoaXMuZ2V0SGVscCgpfT5cbiAgICAgIHt0aGlzLmdldExhYmVsKCl9XG4gICAgPC9zcGFuPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRFbXB0eU1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlKFxuICAgICAgZ2V0dGV4dChcIk5vIHVzZXJzIGhhdmUgcG9zdGVkIGFueSBuZXcgbWVzc2FnZXMgZHVyaW5nIGxhc3QgJShkYXlzKXMgZGF5cy5cIiksXG4gICAgICB7J2RheXMnOiB0aGlzLnByb3BzLnRyYWNrZWRQZXJpb2R9LCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYWN0aXZlLXBvc3RlcnMtbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHt0aGlzLmdldEVtcHR5TWVzc2FnZSgpfVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFN0YXR1cywgeyBTdGF0dXNJY29uLCBTdGF0dXNMYWJlbCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItc3RhdHVzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yYW5rLmNzc19jbGFzcykge1xuICAgICAgcmV0dXJuIFwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtcmFuay1cIiArIHRoaXMucHJvcHMucmFuay5jc3NfY2xhc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcImxpc3QtZ3JvdXAtaXRlbVwiO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJTdGF0dXMoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXNlci5zdGF0dXMpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8U3RhdHVzIHVzZXI9e3RoaXMucHJvcHMudXNlcn0gc3RhdHVzPXt0aGlzLnByb3BzLnVzZXIuc3RhdHVzfT5cbiAgICAgICAgPFN0YXR1c0ljb24gdXNlcj17dGhpcy5wcm9wcy51c2VyfVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9IC8+XG4gICAgICAgIDxTdGF0dXNMYWJlbCB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgICAgICAgICBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdGF0dXMtbGFiZWwgaGlkZGVuLXhzIGhpZGRlbi1zbVwiIC8+XG4gICAgICA8L1N0YXR1cz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwidXNlci1zdGF0dXNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWljb24gdWktcHJldmlld1wiPlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbCB1aS1wcmV2aWV3IGhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgZ2V0UmFua05hbWUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucmFuay5pc190YWIpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIGxldCByYW5rVXJsID0gbWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKSArIHRoaXMucHJvcHMucmFuay5zbHVnICsgJy8nO1xuICAgICAgcmV0dXJuIDxMaW5rIHRvPXtyYW5rVXJsfSBjbGFzc05hbWU9XCJpdGVtLXRpdGxlIHJhbmstbmFtZVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy5yYW5rLm5hbWV9XG4gICAgICA8L0xpbms+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cIml0ZW0tdGl0bGUgcmFuay1uYW1lXCI+XG4gICAgICAgIHt0aGlzLnByb3BzLnJhbmsubmFtZX1cbiAgICAgIDwvc3Bhbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VyLnRpdGxlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwidXNlci10aXRsZSBoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG4gICAgICAgIHt0aGlzLnByb3BzLnVzZXIudGl0bGV9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstdXNlci1hdmF0YXJcIj5cbiAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy51c2VyLmFic29sdXRlX3VybH0+XG4gICAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IHNpemU9XCI1MFwiIC8+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstdXNlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItbmFtZVwiPlxuICAgICAgICAgIDxhIGhyZWY9e3RoaXMucHJvcHMudXNlci5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnVzZXIudXNlcm5hbWV9XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZ2V0VXNlclN0YXR1cygpfVxuICAgICAgICB7dGhpcy5nZXRSYW5rTmFtZSgpfVxuICAgICAgICB7dGhpcy5nZXRVc2VyVGl0bGUoKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstcG9zaXRpb25cIj5cbiAgICAgICAgPHN0cm9uZz4je3RoaXMucHJvcHMuY291bnRlcn08L3N0cm9uZz5cbiAgICAgICAgPHNtYWxsPntnZXR0ZXh0KFwiUmFua1wiKX08L3NtYWxsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay1wb3N0cy1jb3VudGVkXCI+XG4gICAgICAgIDxzdHJvbmc+e3RoaXMucHJvcHMudXNlci5tZXRhLnNjb3JlfTwvc3Ryb25nPlxuICAgICAgICA8c21hbGw+e2dldHRleHQoXCJSYW5rZWQgcG9zdHNcIil9PC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstcG9zdHMtdG90YWxcIj5cbiAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy51c2VyLnBvc3RzfTwvc3Ryb25nPlxuICAgICAgICA8c21hbGw+e2dldHRleHQoXCJUb3RhbCBwb3N0c1wiKX08L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9saT47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0ICogYXMgcmFuZG9tIGZyb20gJ21pc2Fnby91dGlscy9yYW5kb20nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImFjdGl2ZS1wb3N0ZXJzLWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWQgdWktcHJldmlldy1wYXJhZ3JhcGhcIj5cbiAgICAgICAgICB7cmFuZG9tLnJhbmdlKDMsIDQpLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxzcGFuIGtleT17aX0gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCg1MCwgMTIwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWN0aXZlLXBvc3RlcnMgdWktcHJldmlld1wiPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgICAgICB7cmFuZG9tLnJhbmdlKDUsIDEwKS5tYXAoKGksIGNvdW50ZXIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2l9IGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay11c2VyLWF2YXRhclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxBdmF0YXIgc2l6ZT1cIjUwXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay11c2VyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgODApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidXNlci1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWljb24gdWktcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbCB1aS1wcmV2aWV3IGhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicmFuay1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoMzAsIDUwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItdGl0bGUgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDMwLCA1MCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstcG9zaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IFwiMzBweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+e2dldHRleHQoXCJSYW5rXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstcG9zdHMtY291bnRlZFwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogXCIzMHB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57Z2V0dGV4dChcIlJhbmtlZCBwb3N0c1wiKX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXBvc3RzLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiBcIjMwcHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPntnZXR0ZXh0KFwiVG90YWwgcG9zdHNcIil9PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT47XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMaXN0SXRlbSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy9saXN0LWl0ZW0nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRMZWFkTWVzc2FnZSgpIHtcbiAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIiUocG9zdGVycylzIG1vc3QgYWN0aXZlIHBvc3RlciBmcm9tIGxhc3QgJShkYXlzKXMgZGF5cy5cIixcbiAgICAgICAgXCIlKHBvc3RlcnMpcyBtb3N0IGFjdGl2ZSBwb3N0ZXJzIGZyb20gbGFzdCAlKGRheXMpcyBkYXlzLlwiLFxuICAgICAgICB0aGlzLnByb3BzLmNvdW50KTtcblxuICAgIHJldHVybiBpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICBwb3N0ZXJzOiB0aGlzLnByb3BzLmNvdW50LFxuICAgICAgZGF5czogdGhpcy5wcm9wcy50cmFja2VkUGVyaW9kXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImFjdGl2ZS1wb3N0ZXJzLWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICB7dGhpcy5nZXRMZWFkTWVzc2FnZSgpfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY3RpdmUtcG9zdGVycyB1aS1yZWFkeVwiPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy51c2Vycy5tYXAoKHVzZXIsIGkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIDxMaXN0SXRlbSB1c2VyPXt1c2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbms9e3VzZXIucmFua31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyPXtpICsgMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3VzZXIuaWR9IC8+O1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTGlzdEVtcHR5IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QtZW1wdHknOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMaXN0TG9hZGluZyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy9saXN0LWxvYWRpbmcnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMaXN0IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IGRlaHlkcmF0ZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7XG5pbXBvcnQgcG9sbHMgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BvbGxzJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGlmIChtaXNhZ28uaGFzKCdVU0VSUycpKSB7XG4gICAgICB0aGlzLmluaXRXaXRoUHJlbG9hZGVkRGF0YShtaXNhZ28ucG9wKCdVU0VSUycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0V2l0aG91dFByZWxvYWRlZERhdGEoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0UG9sbGluZygpO1xuICB9XG5cbiAgaW5pdFdpdGhQcmVsb2FkZWREYXRhKGRhdGEpIHtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNMb2FkZWQ6IHRydWUsXG5cbiAgICAgIHRyYWNrZWRQZXJpb2Q6IGRhdGEudHJhY2tlZF9wZXJpb2QsXG4gICAgICBjb3VudDogZGF0YS5jb3VudFxuICAgIH07XG5cbiAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YS5yZXN1bHRzKSk7XG4gIH1cblxuICBpbml0V2l0aG91dFByZWxvYWRlZERhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBzdGFydFBvbGxpbmcoKSB7XG4gICAgcG9sbHMuc3RhcnQoe1xuICAgICAgcG9sbDogJ2FjdGl2ZS1wb3N0ZXJzJyxcbiAgICAgIHVybDogbWlzYWdvLmdldCgnVVNFUlNfQVBJJyksXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3Q6ICdhY3RpdmUnXG4gICAgICB9LFxuICAgICAgZnJlcXVlbmN5OiA5MCAqIDEwMDAsXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlXG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHVwZGF0ZSA9IChkYXRhKSA9PiB7XG4gICAgc3RvcmUuZGlzcGF0Y2goZGVoeWRyYXRlKGRhdGEucmVzdWx0cykpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0xvYWRlZDogdHJ1ZSxcblxuICAgICAgdHJhY2tlZFBlcmlvZDogZGF0YS50cmFja2VkX3BlcmlvZCxcbiAgICAgIGNvdW50OiBkYXRhLmNvdW50XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnJvdXRlLmV4dHJhLm5hbWUsXG4gICAgICBwYXJlbnQ6IGdldHRleHQoXCJVc2Vyc1wiKVxuICAgIH0pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgcG9sbHMuc3RvcCgnYWN0aXZlLXBvc3RlcnMnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuY291bnQgPiAwKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgcmV0dXJuIDxMaXN0IHVzZXJzPXt0aGlzLnByb3BzLnVzZXJzfVxuICAgICAgICAgICAgICAgICAgICAgdHJhY2tlZFBlcmlvZD17dGhpcy5zdGF0ZS50cmFja2VkUGVyaW9kfVxuICAgICAgICAgICAgICAgICAgICAgY291bnQ9e3RoaXMuc3RhdGUuY291bnR9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPExpc3RFbXB0eSB0cmFja2VkUGVyaW9kPXt0aGlzLnN0YXRlLnRyYWNrZWRQZXJpb2R9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPExpc3RMb2FkaW5nIC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExpIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xpJzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcblxuLy8ganNoaW50IGlnbm9yZTpzdGFydFxubGV0IGxpc3RVcmwgPSBmdW5jdGlvbihiYXNlVXJsLCBsaXN0KSB7XG4gIGxldCB1cmwgPSBiYXNlVXJsO1xuICBpZiAobGlzdC5jb21wb25lbnQgPT09ICdyYW5rJykge1xuICAgIHVybCArPSBsaXN0LnNsdWc7XG4gIH0gZWxzZSB7XG4gICAgdXJsICs9IGxpc3QuY29tcG9uZW50O1xuICB9XG4gIHJldHVybiB1cmwgKyAnLyc7XG59O1xuXG5sZXQgbmF2TGlua3MgPSBmdW5jdGlvbihiYXNlVXJsLCBsaXN0cywgaGlkZU5hdikge1xuICAgIHJldHVybiBsaXN0cy5tYXAoZnVuY3Rpb24obGlzdCkge1xuICAgICAgbGV0IHVybCA9IGxpc3RVcmwoYmFzZVVybCwgbGlzdCk7XG4gICAgICByZXR1cm4gPExpIHBhdGg9e3VybH1cbiAgICAgICAgICAgICAgICAga2V5PXt1cmx9PlxuICAgICAgICA8TGluayB0bz17dXJsfSBvbkNsaWNrPXtoaWRlTmF2fT5cbiAgICAgICAgICB7bGlzdC5uYW1lfVxuICAgICAgICA8L0xpbms+XG4gICAgICA8L0xpPjtcbiAgfSk7XG59O1xuLy8ganNoaW50IGlnbm9yZTplbmRcblxuZXhwb3J0IGNsYXNzIFRhYnNOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwibmF2IG5hdi1waWxsc1wiPlxuICAgICAge25hdkxpbmtzKHRoaXMucHJvcHMuYmFzZVVybCwgdGhpcy5wcm9wcy5saXN0cyl9XG4gICAgPC91bD47XG4gICAgLy8ganNoaW50IGlnbm9yZTplbmRcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFjdE5hdiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgIHtuYXZMaW5rcyh0aGlzLnByb3BzLmJhc2VVcmwsIHRoaXMucHJvcHMubGlzdHMsIHRoaXMucHJvcHMuaGlkZU5hdil9XG4gICAgPC91bD47XG4gICAgLy8ganNoaW50IGlnbm9yZTplbmRcbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFN0YXR1cywgeyBTdGF0dXNJY29uLCBTdGF0dXNMYWJlbCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItc3RhdHVzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnVzZXIucmFuay5jc3NfY2xhc3MpIHtcbiAgICAgIHJldHVybiAndXNlci1jYXJkIHVzZXItY2FyZC0nICsgdGhpcy5wcm9wcy51c2VyLnJhbmsuY3NzX2NsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ3VzZXItY2FyZCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlclN0YXR1cygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VyLnN0YXR1cykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxTdGF0dXMgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9PlxuICAgICAgICA8U3RhdHVzSWNvbiB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy51c2VyLnN0YXR1c30gLz5cbiAgICAgICAgPFN0YXR1c0xhYmVsIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy51c2VyLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbFwiIC8+XG4gICAgICA8L1N0YXR1cz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwidXNlci1zdGF0dXNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWljb24gdWktcHJldmlld1wiPlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbCB1aS1wcmV2aWV3XCI+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VyLnRpdGxlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwidXNlci10aXRsZVwiPnt0aGlzLnByb3BzLnVzZXIudGl0bGV9PC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJKb2luZWRPbigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgbGV0IHRpdGxlID0gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIkpvaW5lZCBvbiAlKGpvaW5lZF9vbilzXCIpLCB7XG4gICAgICAnam9pbmVkX29uJzogdGhpcy5wcm9wcy51c2VyLmpvaW5lZF9vbi5mb3JtYXQoJ0xMLCBMVCcpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICBsZXQgYWdlID0gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIkpvaW5lZCAlKGpvaW5lZF9vbilzXCIpLCB7XG4gICAgICAnam9pbmVkX29uJzogdGhpcy5wcm9wcy51c2VyLmpvaW5lZF9vbi5mcm9tTm93KClcbiAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLWpvaW5lZC1vblwiIHRpdGxlPXt0aXRsZX0+XG4gICAgICB7YWdlfVxuICAgIDwvc3Bhbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1jYXJkLWJnLWltYWdlXCI+XG4gICAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiNDAwXCIgY2xhc3NOYW1lPVwiYmctaW1hZ2VcIiAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1jYXJkLWJnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWRldGFpbHNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWF2YXRhclwiPlxuICAgICAgICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIuYWJzb2x1dGVfdXJsfT5cbiAgICAgICAgICAgICAgICA8QXZhdGFyIHVzZXI9e3RoaXMucHJvcHMudXNlcn0gc2l6ZT1cIjQwMFwiIC8+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwidXNlci1uYW1lXCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9e3RoaXMucHJvcHMudXNlci5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2g0PlxuXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ1c2VyLXN1YnNjcmlwdFwiPlxuICAgICAgICAgICAgICB7dGhpcy5nZXRVc2VyU3RhdHVzKCl9XG4gICAgICAgICAgICAgIHt0aGlzLmdldFVzZXJUaXRsZSgpfVxuICAgICAgICAgICAgICB7dGhpcy5nZXRVc2VySm9pbmVkT24oKX1cbiAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1jYXJkLXN0YXRzXCI+XG5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LXVuc3R5bGVkXCI+XG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXBvc3RzLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy51c2VyLnBvc3RzfTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzbWFsbD57Z2V0dGV4dChcInBvc3RzXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXRocmVhZHMtY291bnRcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt0aGlzLnByb3BzLnVzZXIudGhyZWFkc308L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c21hbGw+e2dldHRleHQoXCJ0aHJlYWRzXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJ1c2VyLWZvbGxvd2Vycy1jb3VudFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3RoaXMucHJvcHMudXNlci5mb2xsb3dlcnN9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPHNtYWxsPntnZXR0ZXh0KFwiZm9sbG93ZXJzXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdmF0YXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCAqIGFzIHJhbmRvbSBmcm9tICdtaXNhZ28vdXRpbHMvcmFuZG9tJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcnMtY2FyZHMtbGlzdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgIHtbMCwgMSwgMiwgM10ubWFwKChpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNFwiIGtleT17aX0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSd1c2VyLWNhcmQgdWktcHJldmlldyc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWNhcmQtYmctaW1hZ2VcIj5cbiAgICAgICAgICAgICAgICAgIDxBdmF0YXIgc2l6ZT1cIjQwMFwiIGNsYXNzTmFtZT1cImJnLWltYWdlXCIgLz5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWNhcmQtYmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWRldGFpbHNcIj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBdmF0YXIgc2l6ZT1cIjQwMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwidXNlci1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoNjAsIDE1MCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9oND5cblxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInVzZXItc3Vic2NyaXB0XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN0YXR1cy1pY29uIHVpLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdGF0dXMtbGFiZWwgdWktcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLWpvaW5lZC1vblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDMwLCA1MCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1jYXJkLXN0YXRzXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPVwibGlzdC11bnN0eWxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cInVzZXItcG9zdHMtY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIj4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+e2dldHRleHQoXCJwb3N0c1wiKX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXRocmVhZHMtY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIj4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+e2dldHRleHQoXCJ0aHJlYWRzXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cInVzZXItZm9sbG93ZXJzLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCI+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPntnZXR0ZXh0KFwiZm9sbG93ZXJzXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj47XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTGlzdEl0ZW0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMvcmFuay9saXN0LWl0ZW0nIC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFBhZ2VyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL3JhbmsvcGFnZXInIC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGJhdGNoIGZyb20gJ21pc2Fnby91dGlscy9iYXRjaCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFBhZ2VyKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VzID4gMSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxQYWdlciB7Li4udGhpcy5wcm9wc30gLz5cbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJzLWNhcmRzLWxpc3QgdWktcmVhZHlcIj5cbiAgICAgICAge2JhdGNoKHRoaXMucHJvcHMudXNlcnMsIDMpLm1hcCgocm93LCByKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicm93XCIga2V5PXtyfT5cbiAgICAgICAgICAgIHtyb3cubWFwKCh1c2VyKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC00XCIga2V5PXt1c2VyLmlkfT5cbiAgICAgICAgICAgICAgICA8TGlzdEl0ZW0gdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9KX1cbiAgICAgIDwvZGl2PlxuICAgICAge3RoaXMuZ2V0UGFnZXIoKX1cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgcmVzZXRTY3JvbGwgZnJvbSAnbWlzYWdvL3V0aWxzL3Jlc2V0LXNjcm9sbCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcmV2aW91cyB8fCB0aGlzLnByb3BzLmZpcnN0KSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICBsZXQgdXJsID0gdGhpcy5wcm9wcy5iYXNlVXJsO1xuICAgICAgaWYgKHRoaXMucHJvcHMucHJldmlvdXMpIHtcbiAgICAgICAgdXJsICs9IHRoaXMucHJvcHMucHJldmlvdXMgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwicHJldmlvdXNcIj5cbiAgICAgICAgPExpbmsgdG89e3VybH0gb25DbGljaz17cmVzZXRTY3JvbGx9PlxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIGFycm93X2JhY2tcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvTGluaz5cbiAgICAgIDwvbGk+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMubmV4dCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgbGV0IHVybCA9IHRoaXMucHJvcHMuYmFzZVVybCArIHRoaXMucHJvcHMubmV4dCArICcvJztcbiAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwibmV4dFwiPlxuICAgICAgICA8TGluayB0bz17dXJsfSBvbkNsaWNrPXtyZXNldFNjcm9sbH0+XG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgYXJyb3dfZm9yd2FyZFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9MaW5rPlxuICAgICAgPC9saT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRQcm9nZXNzQmFyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cInBhZ2VyLXByb2dyZXNzLWJhclwiPlxuICAgICAge3RoaXMucHJvcHMucGFnZV9yYW5nZS5tYXAoKHBhZ2UpID0+IHtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHBhZ2UgPT09IHRoaXMucHJvcHMucGFnZSA/ICdhY3RpdmUnIDogbnVsbDtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMucHJvcHMuYmFzZVVybDtcblxuICAgICAgICBpZiAocGFnZSA+IDEpIHtcbiAgICAgICAgICB1cmwgKz0gcGFnZSArICcvJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiA8bGkga2V5PXtwYWdlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgPExpbmsgdG89e3VybH0gb25DbGljaz17cmVzZXRTY3JvbGx9PlxuICAgICAgICAgICAge3BhZ2V9XG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L2xpPjtcbiAgICAgIH0pfVxuICAgIDwvdWw+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2VyLXVuZGVyY29udGVudFwiPlxuICAgICAgPG5hdj5cbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cInBhZ2VyXCI+XG4gICAgICAgICAge3RoaXMuZ2V0UHJldmlvdXNQYWdlKCl9XG4gICAgICAgICAge3RoaXMuZ2V0TmV4dFBhZ2UoKX1cbiAgICAgICAgPC91bD5cbiAgICAgICAge3RoaXMuZ2V0UHJvZ2Vzc0JhcigpfVxuICAgICAgPC9uYXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExpc3RMb2FkaW5nIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL3JhbmsvbGlzdC1sb2FkaW5nJyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMaXN0IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL3JhbmsvbGlzdCcgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkZWh5ZHJhdGUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnO1xuaW1wb3J0IHBvbGxzIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wb2xscyc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICBpZiAobWlzYWdvLmhhcygnVVNFUlMnKSkge1xuICAgICAgdGhpcy5pbml0V2l0aFByZWxvYWRlZERhdGEobWlzYWdvLnBvcCgnVVNFUlMnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFdpdGhvdXRQcmVsb2FkZWREYXRhKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFBvbGxpbmcocHJvcHMucGFyYW1zLnBhZ2UgfHwgMSk7XG4gIH1cblxuICBpbml0V2l0aFByZWxvYWRlZERhdGEoZGF0YSkge1xuICAgIHRoaXMuc3RhdGUgPSBPYmplY3QuYXNzaWduKGRhdGEsIHtcbiAgICAgIGlzTG9hZGVkOiB0cnVlXG4gICAgfSk7XG4gICAgc3RvcmUuZGlzcGF0Y2goZGVoeWRyYXRlKGRhdGEucmVzdWx0cykpO1xuICB9XG5cbiAgaW5pdFdpdGhvdXRQcmVsb2FkZWREYXRhKCkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgc3RhcnRQb2xsaW5nKHBhZ2UpIHtcbiAgICBwb2xscy5zdGFydCh7XG4gICAgICBwb2xsOiAncmFuay11c2VycycsXG4gICAgICB1cmw6IG1pc2Fnby5nZXQoJ1VTRVJTX0FQSScpLFxuICAgICAgZGF0YToge1xuICAgICAgICByYW5rOiB0aGlzLnByb3BzLnJvdXRlLnJhbmsuc2x1ZyxcbiAgICAgICAgcGFnZTogcGFnZVxuICAgICAgfSxcbiAgICAgIGZyZXF1ZW5jeTogOTAgKiAxMDAwLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB1cGRhdGUgPSAoZGF0YSkgPT4ge1xuICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShkYXRhLnJlc3VsdHMpKTtcblxuICAgIGRhdGEuaXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoZGF0YSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnJvdXRlLnJhbmsubmFtZSxcbiAgICAgIHBhZ2U6IHRoaXMucHJvcHMucGFyYW1zLnBhZ2UgfHwgbnVsbCxcbiAgICAgIHBhcmVudDogZ2V0dGV4dChcIlVzZXJzXCIpXG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBwb2xscy5zdG9wKCdyYW5rLXVzZXJzJyk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGlmICh0aGlzLnByb3BzLnBhcmFtcy5wYWdlICE9PSBuZXh0UHJvcHMucGFyYW1zLnBhZ2UpIHtcbiAgICAgIHRpdGxlLnNldCh7XG4gICAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnJvdXRlLnJhbmsubmFtZSxcbiAgICAgICAgcGFnZTogbmV4dFByb3BzLnBhcmFtcy5wYWdlIHx8IG51bGwsXG4gICAgICAgIHBhcmVudDogZ2V0dGV4dChcIlVzZXJzXCIpXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGVkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHBvbGxzLnN0b3AoJ3JhbmstdXNlcnMnKTtcbiAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKG5leHRQcm9wcy5wYXJhbXMucGFnZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJvdXRlLnJhbmsuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gJ3JhbmstdXNlcnMtbGlzdCByYW5rLXVzZXJzLScgKyB0aGlzLnByb3BzLnJvdXRlLnJhbmsuY3NzX2NsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ3JhbmstdXNlcnMtbGlzdCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmFua0Rlc2NyaXB0aW9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJvdXRlLnJhbmsuZGVzY3JpcHRpb24pIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJhbmstZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWFkXCIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICBfX2h0bWw6IHRoaXMucHJvcHMucm91dGUucmFuay5kZXNjcmlwdGlvbi5odG1sXG4gICAgICAgIH19IC8+XG4gICAgICA8L2Rpdj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRDb21wb25lbnQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNMb2FkZWQpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmNvdW50ID4gMCkge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIGxldCBiYXNlVXJsID0gbWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKSArIHRoaXMucHJvcHMucm91dGUucmFuay5zbHVnICsgJy8nO1xuICAgICAgICByZXR1cm4gPExpc3QgYmFzZVVybD17YmFzZVVybH1cbiAgICAgICAgICAgICAgICAgICAgIHVzZXJzPXt0aGlzLnByb3BzLnVzZXJzfVxuICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMuc3RhdGV9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiVGhlcmUgYXJlIG5vIHVzZXJzIHdpdGggdGhpcyByYW5rIGF0IHRoZSBtb21lbnQuXCIpfVxuICAgICAgICA8L3A+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPExpc3RMb2FkaW5nIC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICB7dGhpcy5nZXRSYW5rRGVzY3JpcHRpb24oKX1cbiAgICAgICAge3RoaXMuZ2V0Q29tcG9uZW50KCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgVGFic05hdiwgQ29tcGFjdE5hdiB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL25hdnMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBBY3RpdmVQb3N0ZXJzIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL3Jvb3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSYW5rIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL3Jhbmsvcm9vdCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgdG9nZ2xlTmF2ID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyb3Bkb3duOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgaGlkZU5hdiA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRyb3Bkb3duOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldFRvZ2dsZU5hdkNsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgcmV0dXJuICdidG4gYnRuLWRlZmF1bHQgYnRuLWljb24gb3Blbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1pY29uJztcbiAgICB9XG4gIH1cblxuICBnZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICByZXR1cm4gJ2NvbXBhY3QtbmF2IG9wZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2NvbXBhY3QtbmF2JztcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS11c2Vycy1saXN0c1wiPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyIHRhYmJlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInB1bGwtbGVmdFwiPntnZXR0ZXh0KFwiVXNlcnNcIil9PC9oMT5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1hbGlnbmVkIGJ0bi1pY29uIGJ0bi1kcm9wZG93bi10b2dnbGUgaGlkZGVuLW1kIGhpZGRlbi1sZ1wiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudG9nZ2xlTmF2fVxuICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17dGhpcy5zdGF0ZS5kcm9wZG93biA/ICd0cnVlJyA6ICdmYWxzZSd9PlxuICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICBtZW51XG4gICAgICAgICAgICA8L2k+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFnZS10YWJzIGhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgICA8VGFic05hdiBsaXN0cz17bWlzYWdvLmdldCgnVVNFUlNfTElTVFMnKX1cbiAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e21pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJyl9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENvbXBhY3ROYXZDbGFzc05hbWUoKX0+XG5cbiAgICAgICAgPENvbXBhY3ROYXYgbGlzdHM9e21pc2Fnby5nZXQoJ1VTRVJTX0xJU1RTJyl9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e21pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJyl9XG4gICAgICAgICAgICAgICAgICAgIGhpZGVOYXY9e3RoaXMuaGlkZU5hdn0gLz5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChzdG9yZSkge1xuICByZXR1cm4ge1xuICAgICd0aWNrJzogc3RvcmUudGljay50aWNrLFxuICAgICd1c2VyJzogc3RvcmUuYXV0aC51c2VyLFxuICAgICd1c2Vycyc6IHN0b3JlLnVzZXJzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRocygpIHtcbiAgbGV0IHBhdGhzID0gW107XG5cbiAgbWlzYWdvLmdldCgnVVNFUlNfTElTVFMnKS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5jb21wb25lbnQgPT09ICdyYW5rJykge1xuICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJykgKyBpdGVtLnNsdWcgKyAnLzpwYWdlLycsXG4gICAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKFJhbmspLFxuICAgICAgICByYW5rOiB7XG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgIHNsdWc6IGl0ZW0uc2x1ZyxcbiAgICAgICAgICBjc3NfY2xhc3M6IGl0ZW0uY3NzX2NsYXNzLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJykgKyBpdGVtLnNsdWcgKyAnLycsXG4gICAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKFJhbmspLFxuICAgICAgICByYW5rOiB7XG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgIHNsdWc6IGl0ZW0uc2x1ZyxcbiAgICAgICAgICBjc3NfY2xhc3M6IGl0ZW0uY3NzX2NsYXNzLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBpdGVtLmRlc2NyaXB0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXRlbS5jb21wb25lbnQgPT09ICdhY3RpdmUtcG9zdGVycycpe1xuICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJykgKyBpdGVtLmNvbXBvbmVudCArICcvJyxcbiAgICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoQWN0aXZlUG9zdGVycyksXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhdGhzO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgIHJldHVybiBcImJ0biBidG4teWVzLW5vIGJ0bi15ZXMtbm8tb25cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiYnRuIGJ0bi15ZXMtbm8gYnRuLXllcy1uby1vZmZcIjtcbiAgICB9XG4gIH1cblxuICBnZXRJY29uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5pY29uT24gfHwgJ2NoZWNrX2JveCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmljb25PZmYgfHwgJ2NoZWNrX2JveF9vdXRsaW5lX2JsYW5rJztcbiAgICB9XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubGFiZWxPbiB8fCBnZXR0ZXh0KFwieWVzXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5sYWJlbE9mZiB8fCBnZXR0ZXh0KFwibm9cIik7XG4gICAgfVxuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB0b2dnbGUgPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh7XG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgdmFsdWU6ICF0aGlzLnByb3BzLnZhbHVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnRvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWQgfHwgbnVsbH1cbiAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10gfHwgbnVsbH1cbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZX0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgIHt0aGlzLmdldEljb24oKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHt0aGlzLmdldExhYmVsKCl9XG4gICAgPC9idXR0b24+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgT3JkZXJlZExpc3QgZnJvbSAnbWlzYWdvL3V0aWxzL29yZGVyZWQtbGlzdCc7XG5cbmV4cG9ydCBjbGFzcyBNaXNhZ28ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplcnMgPSBbXTtcbiAgICB0aGlzLl9jb250ZXh0ID0ge307XG4gIH1cblxuICBhZGRJbml0aWFsaXplcihpbml0aWFsaXplcikge1xuICAgIHRoaXMuX2luaXRpYWxpemVycy5wdXNoKHtcbiAgICAgIGtleTogaW5pdGlhbGl6ZXIubmFtZSxcblxuICAgICAgaXRlbTogaW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZXIsXG5cbiAgICAgIGFmdGVyOiBpbml0aWFsaXplci5hZnRlcixcbiAgICAgIGJlZm9yZTogaW5pdGlhbGl6ZXIuYmVmb3JlXG4gICAgfSk7XG4gIH1cblxuICBpbml0KGNvbnRleHQpIHtcbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcblxuICAgIHZhciBpbml0T3JkZXIgPSBuZXcgT3JkZXJlZExpc3QodGhpcy5faW5pdGlhbGl6ZXJzKS5vcmRlcmVkVmFsdWVzKCk7XG4gICAgaW5pdE9yZGVyLmZvckVhY2goaW5pdGlhbGl6ZXIgPT4ge1xuICAgICAgaW5pdGlhbGl6ZXIodGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb250ZXh0IGFjY2Vzc29yc1xuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuICEhdGhpcy5fY29udGV4dFtrZXldO1xuICB9XG5cbiAgZ2V0KGtleSwgZmFsbGJhY2spIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwb3Aoa2V5KSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX2NvbnRleHRba2V5XTtcbiAgICAgIHRoaXMuX2NvbnRleHRba2V5XSA9IG51bGw7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cbi8vIGNyZWF0ZSAgc2luZ2xldG9uXG52YXIgbWlzYWdvID0gbmV3IE1pc2FnbygpO1xuXG4vLyBleHBvc2UgaXQgZ2xvYmFsbHlcbmdsb2JhbC5taXNhZ28gPSBtaXNhZ287XG5cbi8vIGFuZCBleHBvcnQgaXQgZm9yIHRlc3RzIGFuZCBzdHVmZlxuZXhwb3J0IGRlZmF1bHQgbWlzYWdvO1xuIiwiaW1wb3J0IHsgVVBEQVRFX0FWQVRBUiwgVVBEQVRFX1VTRVJOQU1FIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJztcblxuZXhwb3J0IHZhciBpbml0aWFsU3RhdGUgPSB7XG4gIHNpZ25lZEluOiBmYWxzZSxcbiAgc2lnbmVkT3V0OiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IFBBVENIX1VTRVIgPSAnUEFUQ0hfVVNFUic7XG5leHBvcnQgY29uc3QgU0lHTl9JTiA9ICdTSUdOX0lOJztcbmV4cG9ydCBjb25zdCBTSUdOX09VVCA9ICdTSUdOX09VVCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFVzZXIocGF0Y2gpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBQQVRDSF9VU0VSLFxuICAgIHBhdGNoXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduSW4odXNlcikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNJR05fSU4sXG4gICAgdXNlclxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbk91dChzb2Z0PWZhbHNlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0lHTl9PVVQsXG4gICAgc29mdFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhdXRoKHN0YXRlPWluaXRpYWxTdGF0ZSwgYWN0aW9uPW51bGwpIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgUEFUQ0hfVVNFUjpcbiAgICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpO1xuICAgICAgICBuZXdTdGF0ZS51c2VyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXNlciwgYWN0aW9uLnBhdGNoKTtcbiAgICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuXG4gICAgY2FzZSBTSUdOX0lOOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIHNpZ25lZEluOiBhY3Rpb24udXNlclxuICAgICAgfSk7XG5cbiAgICBjYXNlIFNJR05fT1VUOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgIGlzQW5vbnltb3VzOiB0cnVlLFxuICAgICAgICBzaWduZWRPdXQ6ICFhY3Rpb24uc29mdFxuICAgICAgfSk7XG5cbiAgICBjYXNlIFVQREFURV9BVkFUQVI6XG4gICAgICBpZiAoc3RhdGUuaXNBdXRoZW50aWNhdGVkICYmIHN0YXRlLnVzZXIuaWQgPT09IGFjdGlvbi51c2VySWQpIHtcbiAgICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpO1xuICAgICAgICBuZXdTdGF0ZS51c2VyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXNlciwge1xuICAgICAgICAgICdhdmF0YXJfaGFzaCc6IGFjdGlvbi5hdmF0YXJIYXNoXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBjYXNlIFVQREFURV9VU0VSTkFNRTpcbiAgICAgIGlmIChzdGF0ZS5pc0F1dGhlbnRpY2F0ZWQgJiYgc3RhdGUudXNlci5pZCA9PT0gYWN0aW9uLnVzZXJJZCkge1xuICAgICAgICBsZXQgbmV3U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSk7XG4gICAgICAgIG5ld1N0YXRlLnVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS51c2VyLCB7XG4gICAgICAgICAgdXNlcm5hbWU6IGFjdGlvbi51c2VybmFtZSxcbiAgICAgICAgICBzbHVnOiBhY3Rpb24uc2x1Z1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgVVBEQVRFX0FWQVRBUiwgZGVoeWRyYXRlU3RhdHVzIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJztcblxuZXhwb3J0IGNvbnN0IERFSFlEUkFURV9QUk9GSUxFID0gJ0RFSFlEUkFURV9QUk9GSUxFJztcbmV4cG9ydCBjb25zdCBQQVRDSF9QUk9GSUxFID0gJ1BBVENIX1BST0ZJTEUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVoeWRyYXRlKHByb2ZpbGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBERUhZRFJBVEVfUFJPRklMRSxcbiAgICBwcm9maWxlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFByb2ZpbGUocGF0Y2gpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBQQVRDSF9QUk9GSUxFLFxuICAgIHBhdGNoXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dGgoc3RhdGU9e30sIGFjdGlvbj1udWxsKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIERFSFlEUkFURV9QUk9GSUxFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGFjdGlvbi5wcm9maWxlLCB7XG4gICAgICAgIGpvaW5lZF9vbjogbW9tZW50KGFjdGlvbi5wcm9maWxlLmpvaW5lZF9vbiksXG4gICAgICAgIHN0YXR1czogZGVoeWRyYXRlU3RhdHVzKGFjdGlvbi5wcm9maWxlLnN0YXR1cylcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBQQVRDSF9QUk9GSUxFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBhY3Rpb24ucGF0Y2gpO1xuXG4gICAgY2FzZSBVUERBVEVfQVZBVEFSOlxuICAgICAgaWYgKHN0YXRlLmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICAgICdhdmF0YXJfaGFzaCc6IGFjdGlvbi5hdmF0YXJIYXNoXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiZXhwb3J0IHZhciBpbml0aWFsU3RhdGUgPSB7XG4gIHR5cGU6ICdpbmZvJyxcbiAgbWVzc2FnZTogJycsXG4gIGlzVmlzaWJsZTogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBTSE9XX1NOQUNLQkFSID0gJ1NIT1dfU05BQ0tCQVInO1xuZXhwb3J0IGNvbnN0IEhJREVfU05BQ0tCQVIgPSAnSElERV9TTkFDS0JBUic7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93U25hY2tiYXIobWVzc2FnZSwgdHlwZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNIT1dfU05BQ0tCQVIsXG4gICAgbWVzc2FnZSxcbiAgICBtZXNzYWdlVHlwZTogdHlwZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlkZVNuYWNrYmFyKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEhJREVfU05BQ0tCQVJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc25hY2tiYXIoc3RhdGU9aW5pdGlhbFN0YXRlLCBhY3Rpb249bnVsbCkge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNIT1dfU05BQ0tCQVIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogYWN0aW9uLm1lc3NhZ2VUeXBlLFxuICAgICAgbWVzc2FnZTogYWN0aW9uLm1lc3NhZ2UsXG4gICAgICBpc1Zpc2libGU6IHRydWVcbiAgICB9O1xuICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBISURFX1NOQUNLQkFSKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCB7XG4gICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsImV4cG9ydCB2YXIgaW5pdGlhbFN0YXRlID0ge1xuICB0aWNrOiAwXG59O1xuXG5leHBvcnQgY29uc3QgVElDSyA9ICdUSUNLJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRvVGljaygpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBUSUNLXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRpY2soc3RhdGU9aW5pdGlhbFN0YXRlLCBhY3Rpb249bnVsbCkge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09IFRJQ0spIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgdGljazogc3RhdGUudGljayArIDFcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsImltcG9ydCB7IFVQREFURV9BVkFUQVIsIFVQREFURV9VU0VSTkFNRSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGNvbnN0IEFERF9OQU1FX0NIQU5HRSA9ICdBRERfTkFNRV9DSEFOR0UnO1xuZXhwb3J0IGNvbnN0IERFSFlEUkFURV9ISVNUT1JZID0gJ0RFSFlEUkFURV9ISVNUT1JZJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE5hbWVDaGFuZ2UoY2hhbmdlLCB1c2VyLCBjaGFuZ2VkQnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBRERfTkFNRV9DSEFOR0UsXG4gICAgY2hhbmdlLFxuICAgIHVzZXIsXG4gICAgY2hhbmdlZEJ5XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWh5ZHJhdGUoaXRlbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBERUhZRFJBVEVfSElTVE9SWSxcbiAgICBpdGVtczogaXRlbXNcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlcm5hbWUoc3RhdGU9W10sIGFjdGlvbj1udWxsKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIEFERF9OQU1FX0NIQU5HRTpcbiAgICAgIGxldCBuZXdTdGF0ZSA9IHN0YXRlLnNsaWNlKCk7XG4gICAgICBuZXdTdGF0ZS51bnNoaWZ0KHtcbiAgICAgICAgaWQ6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLCAvLyBqdXN0IHNtYWxsIGhheCBmb3IgZ2V0dGluZyBpZFxuICAgICAgICBjaGFuZ2VkX2J5OiBhY3Rpb24uY2hhbmdlZEJ5LFxuICAgICAgICBjaGFuZ2VkX2J5X3VzZXJuYW1lOiBhY3Rpb24uY2hhbmdlZEJ5LnVzZXJuYW1lLFxuICAgICAgICBjaGFuZ2VkX29uOiBtb21lbnQoKSxcbiAgICAgICAgbmV3X3VzZXJuYW1lOiBhY3Rpb24uY2hhbmdlLnVzZXJuYW1lLFxuICAgICAgICBvbGRfdXNlcm5hbWU6IGFjdGlvbi51c2VyLnVzZXJuYW1lXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcblxuICAgIGNhc2UgREVIWURSQVRFX0hJU1RPUlk6XG4gICAgICByZXR1cm4gYWN0aW9uLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7XG4gICAgICAgICAgY2hhbmdlZF9vbjogbW9tZW50KGl0ZW0uY2hhbmdlZF9vbilcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgVVBEQVRFX0FWQVRBUjpcbiAgICAgIHJldHVybiBzdGF0ZS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XG4gICAgICAgIGlmIChpdGVtLmNoYW5nZWRfYnkgJiYgaXRlbS5jaGFuZ2VkX2J5LmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgICAgaXRlbS5jaGFuZ2VkX2J5ID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbS5jaGFuZ2VkX2J5LCB7XG4gICAgICAgICAgICAnYXZhdGFyX2hhc2gnOiBhY3Rpb24uYXZhdGFySGFzaFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIGNhc2UgVVBEQVRFX1VTRVJOQU1FOlxuICAgICAgcmV0dXJuIHN0YXRlLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW0uY2hhbmdlZF9ieSAmJiBpdGVtLmNoYW5nZWRfYnkuaWQgPT09IGFjdGlvbi51c2VySWQpIHtcbiAgICAgICAgICBpdGVtLmNoYW5nZWRfYnkgPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtLmNoYW5nZWRfYnksIHtcbiAgICAgICAgICAgICd1c2VybmFtZSc6IGFjdGlvbi51c2VybmFtZSxcbiAgICAgICAgICAgICdzbHVnJzogYWN0aW9uLnNsdWdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuZXhwb3J0IGNvbnN0IERFSFlEUkFURV9VU0VSUyA9ICdERUhZRFJBVEVfVVNFUlMnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9BVkFUQVIgPSAnVVBEQVRFX0FWQVRBUic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1VTRVJOQU1FID0gJ1VQREFURV9VU0VSTkFNRSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWh5ZHJhdGUoaXRlbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBERUhZRFJBVEVfVVNFUlMsXG4gICAgaXRlbXNcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlaHlkcmF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgaWYgKHN0YXR1cykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0dXMsIHtcbiAgICAgIGxhc3RfY2xpY2s6IHN0YXR1cy5sYXN0X2NsaWNrID8gbW9tZW50KHN0YXR1cy5sYXN0X2NsaWNrKSA6IG51bGwsXG4gICAgICBiYW5uZWRfdW50aWw6IHN0YXR1cy5iYW5uZWRfdW50aWwgPyBtb21lbnQoc3RhdHVzLmJhbm5lZF91bnRpbCkgOiBudWxsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUF2YXRhcih1c2VyLCBhdmF0YXJIYXNoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogVVBEQVRFX0FWQVRBUixcbiAgICB1c2VySWQ6IHVzZXIuaWQsXG4gICAgYXZhdGFySGFzaFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVXNlcm5hbWUodXNlciwgdXNlcm5hbWUsIHNsdWcpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVUERBVEVfVVNFUk5BTUUsXG4gICAgdXNlcklkOiB1c2VyLmlkLFxuICAgIHVzZXJuYW1lLFxuICAgIHNsdWdcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlcihzdGF0ZT1bXSwgYWN0aW9uPW51bGwpIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgREVIWURSQVRFX1VTRVJTOlxuICAgICAgcmV0dXJuIGFjdGlvbi5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwge1xuICAgICAgICAgIGpvaW5lZF9vbjogbW9tZW50KGl0ZW0uam9pbmVkX29uKSxcbiAgICAgICAgICBzdGF0dXM6IGRlaHlkcmF0ZVN0YXR1cyhpdGVtLnN0YXR1cylcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGNhc2UgVVBEQVRFX0FWQVRBUjpcbiAgICAgIHJldHVybiBzdGF0ZS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XG4gICAgICAgIGlmIChpdGVtLmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgICAgaXRlbS5hdmF0YXJfaGFzaCA9IGFjdGlvbi5hdmF0YXJIYXNoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0iLCJleHBvcnQgY2xhc3MgQWpheCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2Nvb2tpZU5hbWUgPSBudWxsO1xuICAgIHRoaXMuX2NzcmZUb2tlbiA9IG51bGw7XG4gIH1cblxuICBpbml0KGNvb2tpZU5hbWUpIHtcbiAgICB0aGlzLl9jb29raWVOYW1lID0gY29va2llTmFtZTtcbiAgICB0aGlzLl9jc3JmVG9rZW4gPSB0aGlzLmdldENzcmZUb2tlbigpO1xuICB9XG5cbiAgZ2V0Q3NyZlRva2VuKCkge1xuICAgIGlmIChkb2N1bWVudC5jb29raWUuaW5kZXhPZih0aGlzLl9jb29raWVOYW1lKSAhPT0gLTEpIHtcbiAgICAgIGxldCBjb29raWVSZWdleCA9IG5ldyBSZWdFeHAodGhpcy5fY29va2llTmFtZSArICdcXD0oW147XSopJyk7XG4gICAgICBsZXQgY29va2llID0gZG9jdW1lbnQuY29va2llLm1hdGNoKGNvb2tpZVJlZ2V4KVswXTtcbiAgICAgIHJldHVybiBjb29raWUgPyBjb29raWUuc3BsaXQoJz0nKVsxXSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlcXVlc3QobWV0aG9kLCB1cmwsIGRhdGEpIHtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgbGV0IHhociA9IHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtQ1NSRlRva2VuJzogc2VsZi5fY3NyZlRva2VuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YTogKGRhdGEgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IG51bGwpLFxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG5cbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxWEhSKSB7XG4gICAgICAgICAgbGV0IHJlamVjdGlvbiA9IGpxWEhSLnJlc3BvbnNlSlNPTiB8fCB7fTtcblxuICAgICAgICAgIHJlamVjdGlvbi5zdGF0dXMgPSBqcVhIUi5zdGF0dXM7XG5cbiAgICAgICAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0aW9uLmRldGFpbCA9IGdldHRleHQoXCJMb3N0IGNvbm5lY3Rpb24gd2l0aCBhcHBsaWNhdGlvbi5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0aW9uLnN0YXR1c1RleHQgPSBqcVhIUi5zdGF0dXNUZXh0O1xuXG4gICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQuYWpheCh4aHIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0KHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgdXJsICs9ICc/JyArICQucGFyYW0ocGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnR0VUJywgdXJsKTtcbiAgfVxuXG4gIHBvc3QodXJsLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUE9TVCcsIHVybCwgZGF0YSk7XG4gIH1cblxuICBwYXRjaCh1cmwsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQQVRDSCcsIHVybCwgZGF0YSk7XG4gIH1cblxuICBwdXQodXJsLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUFVUJywgdXJsLCBkYXRhKTtcbiAgfVxuXG4gIGRlbGV0ZSh1cmwpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdERUxFVEUnLCB1cmwpO1xuICB9XG5cbiAgdXBsb2FkKHVybCwgZGF0YSwgcHJvZ3Jlc3MpIHtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgbGV0IHhociA9IHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtQ1NSRlRva2VuJzogc2VsZi5fY3NyZlRva2VuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG5cbiAgICAgICAgeGhyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsZXQgeGhyID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsIGZ1bmN0aW9uKGV2dCkge1xuICAgICAgICAgICAgaWYgKGV2dC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgICAgICAgIHByb2dyZXNzKE1hdGgucm91bmQoZXZ0LmxvYWRlZCAvIGV2dC50b3RhbCAqIDEwMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgICByZXR1cm4geGhyO1xuICAgICAgICB9LFxuXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxWEhSKSB7XG4gICAgICAgICAgbGV0IHJlamVjdGlvbiA9IGpxWEhSLnJlc3BvbnNlSlNPTiB8fCB7fTtcblxuICAgICAgICAgIHJlamVjdGlvbi5zdGF0dXMgPSBqcVhIUi5zdGF0dXM7XG5cbiAgICAgICAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0aW9uLmRldGFpbCA9IGdldHRleHQoXCJMb3N0IGNvbm5lY3Rpb24gd2l0aCBhcHBsaWNhdGlvbi5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0aW9uLnN0YXR1c1RleHQgPSBqcVhIUi5zdGF0dXNUZXh0O1xuXG4gICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQuYWpheCh4aHIpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBamF4KCk7XG4iLCJpbXBvcnQgeyBzaWduSW4sIHNpZ25PdXQgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvYXV0aCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgY2xhc3MgQXV0aCB7XG4gIGluaXQoc3RvcmUsIGxvY2FsLCBtb2RhbCkge1xuICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XG4gICAgdGhpcy5fbG9jYWwgPSBsb2NhbDtcbiAgICB0aGlzLl9tb2RhbCA9IG1vZGFsO1xuXG4gICAgLy8gdGVsbCBvdGhlciB0YWJzIHdoYXQgYXV0aCBzdGF0ZSBpcyBiZWNhdXNlIHdlIGFyZSBtb3N0IGN1cnJlbnQgd2l0aCBpdFxuICAgIHRoaXMuc3luY1Nlc3Npb24oKTtcblxuICAgIC8vIGxpc3RlbiBmb3Igb3RoZXIgdGFicyB0byB0ZWxsIHVzIHRoYXQgc3RhdGUgY2hhbmdlZFxuICAgIHRoaXMud2F0Y2hTdGF0ZSgpO1xuICB9XG5cbiAgc3luY1Nlc3Npb24oKSB7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5hdXRoO1xuICAgIGlmIChzdGF0ZS5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMuX2xvY2FsLnNldCgnYXV0aCcsIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgICB1c2VybmFtZTogc3RhdGUudXNlci51c2VybmFtZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsLnNldCgnYXV0aCcsIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2hTdGF0ZSgpIHtcbiAgICB0aGlzLl9sb2NhbC53YXRjaCgnYXV0aCcsIChuZXdTdGF0ZSkgPT4ge1xuICAgICAgaWYgKG5ld1N0YXRlLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChzaWduSW4oe1xuICAgICAgICAgIHVzZXJuYW1lOiBuZXdTdGF0ZS51c2VybmFtZVxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChzaWduT3V0KCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIHNpZ25Jbih1c2VyKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbkluKHVzZXIpKTtcbiAgICB0aGlzLl9sb2NhbC5zZXQoJ2F1dGgnLCB7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICB1c2VybmFtZTogdXNlci51c2VybmFtZVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIHNpZ25PdXQoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbk91dCgpKTtcbiAgICB0aGlzLl9sb2NhbC5zZXQoJ2F1dGgnLCB7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5fbW9kYWwuaGlkZSgpO1xuICB9XG5cbiAgc29mdFNpZ25PdXQoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbk91dCh0cnVlKSk7XG4gICAgdGhpcy5fbG9jYWwuc2V0KCdhdXRoJywge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXV0aCgpOyIsIi8qIGdsb2JhbCBncmVjYXB0Y2hhICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgY2xhc3MgQmFzZUNhcHRjaGEge1xuICBpbml0KGNvbnRleHQsIGFqYXgsIGluY2x1ZGUsIHNuYWNrYmFyKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fYWpheCA9IGFqYXg7XG4gICAgdGhpcy5faW5jbHVkZSA9IGluY2x1ZGU7XG4gICAgdGhpcy5fc25hY2tiYXIgPSBzbmFja2JhcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9DYXB0Y2hhIGV4dGVuZHMgQmFzZUNhcHRjaGEge1xuICBsb2FkKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAvLyBpbW1lZGlhdGVseSByZXNvbHZlIGFzIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gdmFsaWRhdGVcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUUFDYXB0Y2hhIGV4dGVuZHMgQmFzZUNhcHRjaGEge1xuICBsb2FkKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2VsZi5fYWpheC5nZXQoc2VsZi5fY29udGV4dC5nZXQoJ0NBUFRDSEFfQVBJX1VSTCcpKS50aGVuKFxuICAgICAgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBzZWxmLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgICAgICAgc2VsZi5oZWxwVGV4dCA9IGRhdGEuaGVscF90ZXh0O1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZhaWxlZCB0byBsb2FkIENBUFRDSEEuXCIpKTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvbXBvbmVudChrd2FyZ3MpIHtcbiAgICByZXR1cm4gPEZvcm1Hcm91cCBsYWJlbD17dGhpcy5xdWVzdGlvbn0gZm9yPVwiaWRfY2FwdGNoYVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz17a3dhcmdzLmxhYmVsQ2xhc3MgfHwgXCJjb2wtc20tNFwifVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xDbGFzcz17a3dhcmdzLmNvbnRyb2xDbGFzcyB8fCBcImNvbC1zbS04XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbj17a3dhcmdzLmZvcm0uc3RhdGUuZXJyb3JzLmNhcHRjaGF9XG4gICAgICAgICAgICAgICAgICAgICAgaGVscFRleHQ9e3RoaXMuaGVscFRleHQgfHwgbnVsbH0+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX2NhcHRjaGFcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpZF9jYXB0Y2hhX3N0YXR1c1wiXG4gICAgICAgICAgICAgZGlzYWJsZWQ9e2t3YXJncy5mb3JtLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICBvbkNoYW5nZT17a3dhcmdzLmZvcm0uYmluZElucHV0KCdjYXB0Y2hhJyl9XG4gICAgICAgICAgICAgdmFsdWU9e2t3YXJncy5mb3JtLnN0YXRlLmNhcHRjaGF9IC8+XG4gICAgPC9Gb3JtR3JvdXA+O1xuICB9XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG59XG5cblxuZXhwb3J0IGNsYXNzIFJlQ2FwdGNoYUNvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGdyZWNhcHRjaGEucmVuZGVyKCdyZWNhcHRjaGEnLCB7XG4gICAgICAnc2l0ZWtleSc6IHRoaXMucHJvcHMuc2l0ZUtleSxcbiAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAvLyBmaXJlIGZha2V5IGV2ZW50IHRvIGJpbmRpbmdcbiAgICAgICAgdGhpcy5wcm9wcy5iaW5kaW5nKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGlkPVwicmVjYXB0Y2hhXCIgLz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVDYXB0Y2hhIGV4dGVuZHMgQmFzZUNhcHRjaGEge1xuICBsb2FkKCkge1xuICAgIHRoaXMuX2luY2x1ZGUuaW5jbHVkZSgnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzJywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdmFyIHdhaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBncmVjYXB0Y2hhID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3YWl0KCk7XG4gICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB3YWl0KCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0b3IoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wb25lbnQoa3dhcmdzKSB7XG4gICAgcmV0dXJuIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJDYXB0Y2hhXCIpfSBmb3I9XCJpZF9jYXB0Y2hhXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPXtrd2FyZ3MubGFiZWxDbGFzcyB8fCBcImNvbC1zbS00XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbENsYXNzPXtrd2FyZ3MuY29udHJvbENsYXNzIHx8IFwiY29sLXNtLThcIn1cbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uPXtrd2FyZ3MuZm9ybS5zdGF0ZS5lcnJvcnMuY2FwdGNoYX1cbiAgICAgICAgICAgICAgICAgICAgICBoZWxwVGV4dD17Z2V0dGV4dChcIlBsZWFzZSBzb2x2ZSB0aGUgcXVpY2sgdGVzdC5cIil9PlxuICAgICAgPFJlQ2FwdGNoYUNvbXBvbmVudCBzaXRlS2V5PXt0aGlzLl9jb250ZXh0LmdldCgnU0VUVElOR1MnKS5yZWNhcHRjaGFfc2l0ZV9rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmc9e2t3YXJncy5mb3JtLmJpbmRJbnB1dCgnY2FwdGNoYScpfSAvPlxuICAgIDwvRm9ybUdyb3VwPjtcbiAgfVxuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xufVxuXG5leHBvcnQgY2xhc3MgQ2FwdGNoYSB7XG4gIGluaXQoY29udGV4dCwgYWpheCwgaW5jbHVkZSwgc25hY2tiYXIpIHtcbiAgICBzd2l0Y2goY29udGV4dC5nZXQoJ1NFVFRJTkdTJykuY2FwdGNoYV90eXBlKSB7XG4gICAgICBjYXNlICdubyc6XG4gICAgICAgIHRoaXMuX2NhcHRjaGEgPSBuZXcgTm9DYXB0Y2hhKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdxYSc6XG4gICAgICAgIHRoaXMuX2NhcHRjaGEgPSBuZXcgUUFDYXB0Y2hhKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZSc6XG4gICAgICAgIHRoaXMuX2NhcHRjaGEgPSBuZXcgUmVDYXB0Y2hhKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2NhcHRjaGEuaW5pdChjb250ZXh0LCBhamF4LCBpbmNsdWRlLCBzbmFja2Jhcik7XG4gIH1cblxuICAvLyBhY2Nlc3NvcnMgZm9yIHVuZGVybHlpbmcgc3RyYXRlZ3lcblxuICBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLl9jYXB0Y2hhLmxvYWQoKTtcbiAgfVxuXG4gIHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwdGNoYS52YWxpZGF0b3IoKTtcbiAgfVxuXG4gIGNvbXBvbmVudChrd2FyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwdGNoYS5jb21wb25lbnQoa3dhcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ2FwdGNoYSgpOyIsImV4cG9ydCBjbGFzcyBJbmNsdWRlIHtcbiAgaW5pdChzdGF0aWNVcmwpIHtcbiAgICB0aGlzLl9zdGF0aWNVcmwgPSBzdGF0aWNVcmw7XG4gICAgdGhpcy5faW5jbHVkZWQgPSBbXTtcbiAgfVxuXG4gIGluY2x1ZGUoc2NyaXB0LCByZW1vdGU9ZmFsc2UpIHtcbiAgICBpZiAodGhpcy5faW5jbHVkZWQuaW5kZXhPZihzY3JpcHQpID09PSAtMSkge1xuICAgICAgdGhpcy5faW5jbHVkZWQucHVzaChzY3JpcHQpO1xuICAgICAgdGhpcy5faW5jbHVkZShzY3JpcHQsIHJlbW90ZSk7XG4gICAgfVxuICB9XG5cbiAgX2luY2x1ZGUoc2NyaXB0LCByZW1vdGUpIHtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiAoIXJlbW90ZSA/IHRoaXMuX3N0YXRpY1VybCA6ICcnKSArIHNjcmlwdCxcbiAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEluY2x1ZGUoKTsiLCJsZXQgc3RvcmFnZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuICBpbml0KHByZWZpeCkge1xuICAgIHRoaXMuX3ByZWZpeCA9IHByZWZpeDtcbiAgICB0aGlzLl93YXRjaGVycyA9IFtdO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCAoZSkgPT4ge1xuICAgICAgbGV0IG5ld1ZhbHVlSnNvbiA9IEpTT04ucGFyc2UoZS5uZXdWYWx1ZSk7XG4gICAgICB0aGlzLl93YXRjaGVycy5mb3JFYWNoKGZ1bmN0aW9uKHdhdGNoZXIpIHtcbiAgICAgICAgaWYgKHdhdGNoZXIua2V5ID09PSBlLmtleSAmJiBlLm9sZFZhbHVlICE9PSBlLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgd2F0Y2hlci5jYWxsYmFjayhuZXdWYWx1ZUpzb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuX3ByZWZpeCArIGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICBsZXQgaXRlbVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9wcmVmaXggKyBrZXkpO1xuICAgIGlmIChpdGVtU3RyaW5nKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShpdGVtU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2goa2V5LCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3dhdGNoZXJzLnB1c2goe1xuICAgICAga2V5OiB0aGlzLl9wcmVmaXggKyBrZXksXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTG9jYWxTdG9yYWdlKCk7IiwiaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgTW9iaWxlTmF2YmFyRHJvcGRvd24ge1xuICBpbml0KGVsZW1lbnQpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLl9jb21wb25lbnQgPSBudWxsO1xuICB9XG5cbiAgc2hvdyhjb21wb25lbnQpIHtcbiAgICBpZiAodGhpcy5fY29tcG9uZW50ID09PSBjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICBtb3VudChjb21wb25lbnQsIHRoaXMuX2VsZW1lbnQuaWQpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcygnb3BlbicpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dDb25uZWN0ZWQobmFtZSwgY29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudCA9PT0gbmFtZSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudCA9IG5hbWU7XG4gICAgICBtb3VudChjb21wb25lbnQsIHRoaXMuX2VsZW1lbnQuaWQsIHRydWUpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcygnb3BlbicpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgIHRoaXMuX2NvbXBvbmVudCA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1vYmlsZU5hdmJhckRyb3Bkb3duKCk7XG4iLCJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIE1vZGFsIHtcbiAgaW5pdChlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLl9tb2RhbCA9ICQoZWxlbWVudCkubW9kYWwoe3Nob3c6IGZhbHNlfSk7XG5cbiAgICB0aGlzLl9tb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgKCkgPT4ge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLl9lbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3coY29tcG9uZW50KSB7XG4gICAgbW91bnQoY29tcG9uZW50LCB0aGlzLl9lbGVtZW50LmlkKTtcbiAgICB0aGlzLl9tb2RhbC5tb2RhbCgnc2hvdycpO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLl9tb2RhbC5tb2RhbCgnaGlkZScpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNb2RhbCgpO1xuIiwiZXhwb3J0IGNsYXNzIFBhZ2VUaXRsZSB7XG4gIGluaXQoZm9ydW1OYW1lKSB7XG4gICAgdGhpcy5fZm9ydW1OYW1lID0gZm9ydW1OYW1lO1xuICB9XG5cbiAgc2V0KHRpdGxlKSB7XG4gICAgaWYgKHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRpdGxlID0ge3RpdGxlOiB0aXRsZX07XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsVGl0bGUgPSB0aXRsZS50aXRsZTtcblxuICAgIGlmICh0aXRsZS5wYWdlKSB7XG4gICAgICBsZXQgcGFnZUxhYmVsID0gaW50ZXJwb2xhdGUoZ2V0dGV4dCgncGFnZTogJShwYWdlKXMnKSwge1xuICAgICAgICBwYWdlOiB0aXRsZS5wYWdlXG4gICAgICB9LCB0cnVlKTtcblxuICAgICAgZmluYWxUaXRsZSArPSAnICgnICsgcGFnZUxhYmVsICsgJyknO1xuICAgIH1cblxuICAgIGlmICh0aXRsZS5wYXJlbnQpIHtcbiAgICAgIGZpbmFsVGl0bGUgKz0gJyB8ICcgKyB0aXRsZS5wYXJlbnQ7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQudGl0bGUgPSBmaW5hbFRpdGxlICsgJyB8ICcgKyB0aGlzLl9mb3J1bU5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBhZ2VUaXRsZSgpO1xuIiwiZXhwb3J0IGNsYXNzIFBvbGxzIHtcbiAgaW5pdChhamF4LCBzbmFja2Jhcikge1xuICAgIHRoaXMuX2FqYXggPSBhamF4O1xuICAgIHRoaXMuX3NuYWNrYmFyID0gc25hY2tiYXI7XG5cbiAgICB0aGlzLl9wb2xscyA9IHt9O1xuICB9XG5cbiAgc3RhcnQoa3dhcmdzKSB7XG4gICAgbGV0IHBvb2xTZXJ2ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9wb2xsc1trd2FyZ3MucG9sbF0gPSBrd2FyZ3M7XG5cbiAgICAgIHRoaXMuX2FqYXguZ2V0KGt3YXJncy51cmwsIGt3YXJncy5kYXRhIHx8IG51bGwpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAga3dhcmdzLnVwZGF0ZShkYXRhKTtcblxuICAgICAgICB0aGlzLl9wb2xsc1trd2FyZ3MucG9sbF0udGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICAgIHBvb2xTZXJ2ZXIsIGt3YXJncy5mcmVxdWVuY3kpO1xuICAgICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgICBpZiAoa3dhcmdzLmVycm9yKSB7XG4gICAgICAgICAga3dhcmdzLmVycm9yKHJlamVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHBvb2xTZXJ2ZXIoKTtcbiAgfVxuXG4gIHN0b3AocG9sbElkKSB7XG4gICAgaWYgKHRoaXMuX3BvbGxzW3BvbGxJZF0pIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fcG9sbHNbcG9sbElkXS50aW1lb3V0KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBvbGxzKCk7XG4iLCJpbXBvcnQgeyBzaG93U25hY2tiYXIsIGhpZGVTbmFja2JhciB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9zbmFja2Jhcic7XG5cbmNvbnN0IEhJREVfQU5JTUFUSU9OX0xFTkdUSCA9IDMwMDtcbmNvbnN0IE1FU1NBR0VfU0hPV19MRU5HVEggPSA1MDAwO1xuXG5leHBvcnQgY2xhc3MgU25hY2tiYXIge1xuICBpbml0KHN0b3JlKSB7XG4gICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGFsZXJ0KG1lc3NhZ2UsIHR5cGUpIHtcbiAgICBpZiAodGhpcy5fdGltZW91dCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKGhpZGVTbmFja2JhcigpKTtcblxuICAgICAgdGhpcy5fdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWxlcnQobWVzc2FnZSwgdHlwZSk7XG4gICAgICB9LCBISURFX0FOSU1BVElPTl9MRU5HVEgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChzaG93U25hY2tiYXIobWVzc2FnZSwgdHlwZSkpO1xuICAgICAgdGhpcy5fdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goaGlkZVNuYWNrYmFyKCkpO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICAgIH0sIE1FU1NBR0VfU0hPV19MRU5HVEgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNob3J0aGFuZHMgZm9yIG1lc3NhZ2UgdHlwZXNcblxuICBpbmZvKG1lc3NhZ2UpIHtcbiAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsICdpbmZvJyk7XG4gIH1cblxuICBzdWNjZXNzKG1lc3NhZ2UpIHtcbiAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsICdzdWNjZXNzJyk7XG4gIH1cblxuICB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsICd3YXJuaW5nJyk7XG4gIH1cblxuICBlcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5hbGVydChtZXNzYWdlLCAnZXJyb3InKTtcbiAgfVxuXG4gIC8vIHNob3J0aGFuZCBmb3IgYXBpIGVycm9yc1xuXG4gIGFwaUVycm9yKHJlamVjdGlvbikge1xuICAgIGxldCBtZXNzYWdlID0gZ2V0dGV4dChcIlVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQuXCIpO1xuXG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDApIHtcbiAgICAgIG1lc3NhZ2UgPSByZWplY3Rpb24uZGV0YWlsO1xuICAgIH1cblxuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDAgJiYgcmVqZWN0aW9uLmRldGFpbCkge1xuICAgICAgbWVzc2FnZSA9IHJlamVjdGlvbi5kZXRhaWw7XG4gICAgfVxuXG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMykge1xuICAgICAgbWVzc2FnZSA9IHJlamVjdGlvbi5kZXRhaWw7XG4gICAgICBpZiAobWVzc2FnZSA9PT0gXCJQZXJtaXNzaW9uIGRlbmllZFwiKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KFxuICAgICAgICAgIFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICBtZXNzYWdlID0gZ2V0dGV4dChcIkFjdGlvbiBsaW5rIGlzIGludmFsaWQuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFNuYWNrYmFyKCk7XG4iLCJpbXBvcnQgeyBjb21iaW5lUmVkdWNlcnMsIGNyZWF0ZVN0b3JlIH0gZnJvbSAncmVkdXgnO1xuXG5leHBvcnQgY2xhc3MgU3RvcmVXcmFwcGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc3RvcmUgPSBudWxsO1xuICAgIHRoaXMuX3JlZHVjZXJzID0ge307XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0ge307XG4gIH1cblxuICBhZGRSZWR1Y2VyKG5hbWUsIHJlZHVjZXIsIGluaXRpYWxTdGF0ZSkge1xuICAgIHRoaXMuX3JlZHVjZXJzW25hbWVdID0gcmVkdWNlcjtcbiAgICB0aGlzLl9pbml0aWFsU3RhdGVbbmFtZV0gPSBpbml0aWFsU3RhdGU7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuX3N0b3JlID0gY3JlYXRlU3RvcmUoXG4gICAgICBjb21iaW5lUmVkdWNlcnModGhpcy5fcmVkdWNlcnMpLCB0aGlzLl9pbml0aWFsU3RhdGUpO1xuICB9XG5cbiAgZ2V0U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlO1xuICB9XG5cbiAgLy8gU3RvcmUgQVBJXG5cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldFN0YXRlKCk7XG4gIH1cblxuICBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgU3RvcmVXcmFwcGVyKCk7XG4iLCIvKiBnbG9iYWwgenhjdmJuICovXG5leHBvcnQgY2xhc3MgWnhjdmJuIHtcbiAgaW5pdChpbmNsdWRlKSB7XG4gICAgdGhpcy5faW5jbHVkZSA9IGluY2x1ZGU7XG4gIH1cblxuICBzY29yZVBhc3N3b3JkKHBhc3N3b3JkLCBpbnB1dHMpIHtcbiAgICAvLyAwLTQgc2NvcmUsIHRoZSBtb3JlIHRoZSBzdHJvbmdlciBwYXNzd29yZFxuICAgIHJldHVybiB6eGN2Ym4ocGFzc3dvcmQsIGlucHV0cykuc2NvcmU7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIGlmICh0eXBlb2YgenhjdmJuID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9pbmNsdWRlLmluY2x1ZGUoJ21pc2Fnby9qcy96eGN2Ym4uanMnKTtcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fbG9hZGVkUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9sb2FkaW5nUHJvbWlzZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdmFyIHdhaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB6eGN2Ym4gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHdhaXQoKTtcbiAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdhaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9sb2FkZWRQcm9taXNlKCkge1xuICAgIC8vIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgenhjdmJuLmpzLCByZXNvbHZlIGF3YXkhXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgWnhjdmJuKCk7IiwiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBQcm92aWRlciwgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQmFubmVkUGFnZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9iYW5uZWQtcGFnZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5sZXQgc2VsZWN0ID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnRpY2s7XG59O1xuXG5sZXQgUmVkcmF3ZWRCYW5uZWRQYWdlID0gY29ubmVjdChzZWxlY3QpKEJhbm5lZFBhZ2UpO1xuLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYmFuLCBjaGFuZ2VTdGF0ZSkge1xuICBSZWFjdERPTS5yZW5kZXIoXG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIDxQcm92aWRlciBzdG9yZT17c3RvcmUuZ2V0U3RvcmUoKX0+XG4gICAgICA8UmVkcmF3ZWRCYW5uZWRQYWdlIG1lc3NhZ2U9e2Jhbi5tZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzPXtiYW4uZXhwaXJlc19vbiA/IG1vbWVudChiYW4uZXhwaXJlc19vbikgOiBudWxsfSAvPlxuICAgIDwvUHJvdmlkZXI+LFxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbW91bnQnKVxuICApO1xuXG4gIGlmICh0eXBlb2YgY2hhbmdlU3RhdGUgPT09ICd1bmRlZmluZWQnIHx8IGNoYW5nZVN0YXRlKSB7XG4gICAgbGV0IGZvcnVtTmFtZSA9IG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykuZm9ydW1fbmFtZTtcbiAgICBkb2N1bWVudC50aXRsZSA9IGdldHRleHQoXCJZb3UgYXJlIGJhbm5lZFwiKSArICcgfCAnICsgZm9ydW1OYW1lO1xuICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgbWlzYWdvLmdldCgnQkFOTkVEX1VSTCcpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxpc3QsIHJvd1dpZHRoLCBwYWRkaW5nPWZhbHNlKSB7XG4gIGxldCByb3dzID0gW107XG4gIGxldCByb3cgPSBbXTtcblxuICBsaXN0LmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJvdy5wdXNoKGVsZW1lbnQpO1xuICAgIGlmIChyb3cubGVuZ3RoID09PSByb3dXaWR0aCkge1xuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICByb3cgPSBbXTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHBhZCByb3cgdG8gcmVxdWlyZWQgbGVuZ3RoP1xuICBpZiAocGFkZGluZyAhPT0gZmFsc2UgJiYgcm93Lmxlbmd0aCA+IDAgJiYgcm93Lmxlbmd0aCA8IHJvd1dpZHRoKSB7XG4gICAgZm9yIChsZXQgaSA9IHJvdy5sZW5ndGg7IGkgPCByb3dXaWR0aDsgaSArKykge1xuICAgICAgcm93LnB1c2gocGFkZGluZyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJvdy5sZW5ndGgpIHtcbiAgICByb3dzLnB1c2gocm93KTtcbiAgfVxuXG4gIHJldHVybiByb3dzO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIGlmIChieXRlcyA+IDEwMDAgKiAxMDAwICogMTAwMCkge1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChieXRlcyAqIDEwMCAvICgxMDAwICogMTAwMCAqIDEwMDApKSAvIDEwMCkgKyAnIEdCJztcbiAgfSBlbHNlIGlmIChieXRlcyA+IDEwMDAgKiAxMDAwKSB7XG4gICAgcmV0dXJuIChNYXRoLnJvdW5kKGJ5dGVzICogMTAwIC8gKDEwMDAgKiAxMDAwKSkgLyAxMDApICsgJyBNQic7XG4gIH0gZWxzZSBpZiAoYnl0ZXMgPiAxMDAwKSB7XG4gICAgcmV0dXJuIChNYXRoLnJvdW5kKGJ5dGVzICogMTAwIC8gMTAwMCkgLyAxMDApICsgJyBLQic7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChNYXRoLnJvdW5kKGJ5dGVzICogMTAwKSAvIDEwMCkgKyAnIEInO1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oQ29tcG9uZW50LCByb290RWxlbWVudElkLCBjb25uZWN0ZWQ9dHJ1ZSkge1xuICBsZXQgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyb290RWxlbWVudElkKTtcblxuICBpZiAocm9vdEVsZW1lbnQpIHtcbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZS5nZXRTdG9yZSgpfT5cbiAgICAgICAgICA8Q29tcG9uZW50IC8+XG4gICAgICAgIDwvUHJvdmlkZXI+LFxuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgICByb290RWxlbWVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIDxDb21wb25lbnQgLz4sXG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICAgIHJvb3RFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiY2xhc3MgT3JkZXJlZExpc3Qge1xuICAgIGNvbnN0cnVjdG9yKGl0ZW1zKSB7XG4gICAgICB0aGlzLmlzT3JkZXJlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5faXRlbXMgPSBpdGVtcyB8fCBbXTtcbiAgICB9XG5cbiAgICBhZGQoa2V5LCBpdGVtLCBvcmRlcikge1xuICAgICAgdGhpcy5faXRlbXMucHVzaCh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBpdGVtOiBpdGVtLFxuXG4gICAgICAgIGFmdGVyOiBvcmRlciA/IG9yZGVyLmFmdGVyIHx8IG51bGwgOiBudWxsLFxuICAgICAgICBiZWZvcmU6IG9yZGVyID8gb3JkZXIuYmVmb3JlIHx8IG51bGwgOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5faXRlbXNbaV0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNbaV0uaXRlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaGFzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0KGtleSkgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YWx1ZXMoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuX2l0ZW1zW2ldLml0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBvcmRlcih2YWx1ZXNfb25seSkge1xuICAgICAgaWYgKCF0aGlzLmlzT3JkZXJlZCkge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX29yZGVyKHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgdGhpcy5pc09yZGVyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzX29ubHkgfHwgdHlwZW9mIHZhbHVlc19vbmx5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcmRlcmVkVmFsdWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3JkZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgX29yZGVyKHVub3JkZXJlZCkge1xuICAgICAgLy8gSW5kZXggb2YgdW5vcmRlcmVkIGl0ZW1zXG4gICAgICB2YXIgaW5kZXggPSBbXTtcbiAgICAgIHVub3JkZXJlZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGluZGV4LnB1c2goaXRlbS5rZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE9yZGVyZWQgaXRlbXNcbiAgICAgIHZhciBvcmRlcmVkID0gW107XG4gICAgICB2YXIgb3JkZXJpbmcgPSBbXTtcblxuICAgICAgLy8gRmlyc3QgcGFzczogcmVnaXN0ZXIgaXRlbXMgdGhhdFxuICAgICAgLy8gZG9uJ3Qgc3BlY2lmeSB0aGVpciBvcmRlclxuICAgICAgdW5vcmRlcmVkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtLmFmdGVyICYmICFpdGVtLmJlZm9yZSkge1xuICAgICAgICAgIG9yZGVyZWQucHVzaChpdGVtKTtcbiAgICAgICAgICBvcmRlcmluZy5wdXNoKGl0ZW0ua2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNlY29uZCBwYXNzOiByZWdpc3RlciBpdGVtcyB0aGF0XG4gICAgICAvLyBzcGVjaWZ5IHRoZWlyIGJlZm9yZSB0byBcIl9lbmRcIlxuICAgICAgdW5vcmRlcmVkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0uYmVmb3JlID09PSBcIl9lbmRcIikge1xuICAgICAgICAgIG9yZGVyZWQucHVzaChpdGVtKTtcbiAgICAgICAgICBvcmRlcmluZy5wdXNoKGl0ZW0ua2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRoaXJkIHBhc3M6IGtlZXAgaXRlcmF0aW5nIGl0ZW1zXG4gICAgICAvLyB1bnRpbCB3ZSBoaXQgaXRlcmF0aW9ucyBsaW1pdCBvciBmaW5pc2hcbiAgICAgIC8vIG9yZGVyaW5nIGxpc3RcbiAgICAgIGZ1bmN0aW9uIGluc2VydEl0ZW0oaXRlbSkge1xuICAgICAgICB2YXIgaW5zZXJ0QXQgPSAtMTtcbiAgICAgICAgaWYgKG9yZGVyaW5nLmluZGV4T2YoaXRlbS5rZXkpID09PSAtMSkge1xuICAgICAgICAgIGlmIChpdGVtLmFmdGVyKSB7XG4gICAgICAgICAgICBpbnNlcnRBdCA9IG9yZGVyaW5nLmluZGV4T2YoaXRlbS5hZnRlcik7XG4gICAgICAgICAgICBpZiAoaW5zZXJ0QXQgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGluc2VydEF0ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmJlZm9yZSkge1xuICAgICAgICAgICAgaW5zZXJ0QXQgPSBvcmRlcmluZy5pbmRleE9mKGl0ZW0uYmVmb3JlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5zZXJ0QXQgIT09IC0xKSB7XG4gICAgICAgICAgICBvcmRlcmVkLnNwbGljZShpbnNlcnRBdCwgMCwgaXRlbSk7XG4gICAgICAgICAgICBvcmRlcmluZy5zcGxpY2UoaW5zZXJ0QXQsIDAsIGl0ZW0ua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAyMDA7XG4gICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDAgJiYgaW5kZXgubGVuZ3RoICE9PSBvcmRlcmluZy5sZW5ndGgpIHtcbiAgICAgICAgaXRlcmF0aW9ucyAtPSAxO1xuICAgICAgICB1bm9yZGVyZWQuZm9yRWFjaChpbnNlcnRJdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yZGVyZWQ7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQgT3JkZXJlZExpc3Q7XG4iLCJleHBvcnQgZnVuY3Rpb24gaW50KG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSkgKyBtaW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShtaW4sIG1heCkge1xuICBsZXQgYXJyYXkgPSBuZXcgQXJyYXkoaW50KG1pbiwgbWF4KSk7XG4gIGZvcihsZXQgaT0wOyBpPGFycmF5Lmxlbmd0aDsgaSsrKXtcbiAgICBhcnJheVtpXSA9IGk7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbn0iLCIvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgY3JlYXRlSGlzdG9yeSBmcm9tICdoaXN0b3J5L2xpYi9jcmVhdGVCcm93c2VySGlzdG9yeSc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuY29uc3Qgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1tb3VudCcpO1xuY29uc3QgaGlzdG9yeSA9IG5ldyBjcmVhdGVIaXN0b3J5KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgbGV0IHJvdXRlcyA9IHtcbiAgICBjb21wb25lbnQ6IG9wdGlvbnMuY29tcG9uZW50LFxuICAgIGNoaWxkUm91dGVzOiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6IG9wdGlvbnMucm9vdCxcbiAgICAgICAgb25FbnRlcjogZnVuY3Rpb24obmV4dFN0YXRlLCByZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgICByZXBsYWNlU3RhdGUobnVsbCwgb3B0aW9ucy5wYXRoc1swXS5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0uY29uY2F0KG9wdGlvbnMucGF0aHMubWFwKGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0pKVxuICB9O1xuXG4gIFJlYWN0RE9NLnJlbmRlcihcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlLmdldFN0b3JlKCl9PlxuICAgICAgPFJvdXRlciByb3V0ZXM9e3JvdXRlc30gaGlzdG9yeT17aGlzdG9yeX0gLz5cbiAgICA8L1Byb3ZpZGVyPixcbiAgICByb290RWxlbWVudFxuICApO1xufVxuIiwiY29uc3QgRU1BSUwgPSAvXigoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XG5jb25zdCBVU0VSTkFNRSA9IG5ldyBSZWdFeHAoJ15bMC05YS16XSskJywgJ2knKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkKCkge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAoJC50cmltKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cIik7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1haWwobWVzc2FnZSkge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAoIUVNQUlMLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZSB8fCBnZXR0ZXh0KFwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGgobGltaXRWYWx1ZSwgbWVzc2FnZSkge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmV0dXJuTWVzc2FnZSA9ICcnO1xuICAgIHZhciBsZW5ndGggPSAkLnRyaW0odmFsdWUpLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPCBsaW1pdFZhbHVlKSB7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICByZXR1cm5NZXNzYWdlID0gbWVzc2FnZShsaW1pdFZhbHVlLCBsZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuTWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICAgIFwiRW5zdXJlIHRoaXMgdmFsdWUgaGFzIGF0IGxlYXN0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXIgKGl0IGhhcyAlKHNob3dfdmFsdWUpcykuXCIsXG4gICAgICAgICAgXCJFbnN1cmUgdGhpcyB2YWx1ZSBoYXMgYXQgbGVhc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlcnMgKGl0IGhhcyAlKHNob3dfdmFsdWUpcykuXCIsXG4gICAgICAgICAgbGltaXRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUocmV0dXJuTWVzc2FnZSwge1xuICAgICAgICBsaW1pdF92YWx1ZTogbGltaXRWYWx1ZSxcbiAgICAgICAgc2hvd192YWx1ZTogbGVuZ3RoXG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXhMZW5ndGgobGltaXRWYWx1ZSwgbWVzc2FnZSkge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmV0dXJuTWVzc2FnZSA9ICcnO1xuICAgIHZhciBsZW5ndGggPSAkLnRyaW0odmFsdWUpLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPiBsaW1pdFZhbHVlKSB7XG4gICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICByZXR1cm5NZXNzYWdlID0gbWVzc2FnZShsaW1pdFZhbHVlLCBsZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuTWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICAgIFwiRW5zdXJlIHRoaXMgdmFsdWUgaGFzIGF0IG1vc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlciAoaXQgaGFzICUoc2hvd192YWx1ZSlzKS5cIixcbiAgICAgICAgICBcIkVuc3VyZSB0aGlzIHZhbHVlIGhhcyBhdCBtb3N0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXJzIChpdCBoYXMgJShzaG93X3ZhbHVlKXMpLlwiLFxuICAgICAgICAgIGxpbWl0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludGVycG9sYXRlKHJldHVybk1lc3NhZ2UsIHtcbiAgICAgICAgbGltaXRfdmFsdWU6IGxpbWl0VmFsdWUsXG4gICAgICAgIHNob3dfdmFsdWU6IGxlbmd0aFxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlcm5hbWVNaW5MZW5ndGgoc2V0dGluZ3MpIHtcbiAgdmFyIG1lc3NhZ2UgPSBmdW5jdGlvbihsaW1pdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5nZXR0ZXh0KFxuICAgICAgXCJVc2VybmFtZSBtdXN0IGJlIGF0IGxlYXN0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXIgbG9uZy5cIixcbiAgICAgIFwiVXNlcm5hbWUgbXVzdCBiZSBhdCBsZWFzdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVycyBsb25nLlwiLFxuICAgICAgbGltaXRWYWx1ZSk7XG4gIH07XG4gIHJldHVybiB0aGlzLm1pbkxlbmd0aChzZXR0aW5ncy51c2VybmFtZV9sZW5ndGhfbWluLCBtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJuYW1lTWF4TGVuZ3RoKHNldHRpbmdzKSB7XG4gIHZhciBtZXNzYWdlID0gZnVuY3Rpb24obGltaXRWYWx1ZSkge1xuICAgIHJldHVybiBuZ2V0dGV4dChcbiAgICAgIFwiVXNlcm5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXIuXCIsXG4gICAgICBcIlVzZXJuYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVycy5cIixcbiAgICAgIGxpbWl0VmFsdWUpO1xuICB9O1xuICByZXR1cm4gdGhpcy5tYXhMZW5ndGgoc2V0dGluZ3MudXNlcm5hbWVfbGVuZ3RoX21heCwgbWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VybmFtZUNvbnRlbnQoKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICghVVNFUk5BTUUudGVzdCgkLnRyaW0odmFsdWUpKSkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJVc2VybmFtZSBjYW4gb25seSBjb250YWluIGxhdGluIGFscGhhYmV0IGxldHRlcnMgYW5kIGRpZ2l0cy5cIik7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFzc3dvcmRNaW5MZW5ndGgoc2V0dGluZ3MpIHtcbiAgdmFyIG1lc3NhZ2UgPSBmdW5jdGlvbihsaW1pdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5nZXR0ZXh0KFxuICAgICAgXCJWYWxpZCBwYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXIgbG9uZy5cIixcbiAgICAgIFwiVmFsaWQgcGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVycyBsb25nLlwiLFxuICAgICAgbGltaXRWYWx1ZSk7XG4gIH07XG4gIHJldHVybiB0aGlzLm1pbkxlbmd0aChzZXR0aW5ncy5wYXNzd29yZF9sZW5ndGhfbWluLCBtZXNzYWdlKTtcbn0iXX0=

Разница между файлами не показана из-за своего большого размера
+ 39021 - 14
misago/static/misago/js/vendor.js


+ 9 - 10
misago/users/permissions/moderation.py

@@ -60,16 +60,15 @@ def build_acl(acl, roles, key_name):
     }
     new_acl.update(acl)
 
-    return algebra.sum_acls(
-            new_acl, roles=roles, key=key_name,
-            can_rename_users=algebra.greater,
-            can_moderate_avatars=algebra.greater,
-            can_moderate_signatures=algebra.greater,
-            can_ban_users=algebra.greater,
-            max_ban_length=algebra.greater_or_zero,
-            can_lift_bans=algebra.greater,
-            max_lifted_ban_length=algebra.greater_or_zero
-            )
+    return algebra.sum_acls(new_acl, roles=roles, key=key_name,
+        can_rename_users=algebra.greater,
+        can_moderate_avatars=algebra.greater,
+        can_moderate_signatures=algebra.greater,
+        can_ban_users=algebra.greater,
+        max_ban_length=algebra.greater_or_zero,
+        can_lift_bans=algebra.greater,
+        max_lifted_ban_length=algebra.greater_or_zero
+    )
 
 
 """

Некоторые файлы не были показаны из-за большого количества измененных файлов