vendor: 17,344 bytes, lines 1-685
1/*! 2 * jQuery JavaScript Library v3.1.1 3 * https://jquery.com/ 4 * 5 * Includes Sizzle.js 6 * https://sizzlejs.com/ 7 * 8 * Copyright jQuery Foundation and other contributors 9 * Released under the MIT license 10 * https://jquery.org/license 11 * 12 * Date: 2016-09-22T22:30Z 13 */ 14( function( global, factory ) { 15 16 "use strict"; 17 18 if ( typeof module === "object" && typeof module.exports === "object" ) { 19 20 // For CommonJS and CommonJS-like environments where a proper `window` 21 // is present, execute the factory and get jQuery. 22 // For environments that do not have a `window` with a `document` 23 // (such as Node.js), expose a factory as module.exports. 24 // This accentuates the need for the creation of a real `window`. 25 // e.g. var jQuery = require("jquery")(window); 26 // See ticket #14549 for more info. 27 module.exports = global.document ? 28 factory( global, true ) : 29 function( w ) { 30 if ( !w.document ) { 31 throw new Error( "jQuery requires a window with a document" ); 32 } 33 return factory( w ); 34 }; 35 } else { 36 factory( global ); 37 } 38 39// Pass this if window is not defined yet 40} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 41 42// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 43// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 44// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 45// enough that all such attempts are guarded in a try block. 46"use strict"; 47 48var arr = []; 49 50var document = window.document; 51 52var getProto = Object.getPrototypeOf; 53 54var slice = arr.slice; 55 56var concat = arr.concat; 57 58var push = arr.push; 59 60var indexOf = arr.indexOf; 61 62var class2type = {}; 63 64var toString = class2type.toString; 65 66var hasOwn = class2type.hasOwnProperty; 67 68var fnToString = hasOwn.toString; 69 70var ObjectFunctionString = fnToString.call( Object ); 71 72var support = {}; 73 74 75 76 function DOMEval( code, doc ) { 77 doc = doc || document; 78 79 var script = doc.createElement( "script" ); 80 81 script.text = code; 82 doc.head.appendChild( script ).parentNode.removeChild( script ); 83 } 84/* global Symbol */ 85// Defining this global in .eslintrc.json would create a danger of using the global 86// unguarded in another place, it seems safer to define global only for this module 87 88 89 90var 91 version = "3.1.1", 92 93 // Define a local copy of jQuery 94 jQuery = function( selector, context ) { 95 96 // The jQuery object is actually just the init constructor 'enhanced' 97 // Need init if jQuery is called (just allow error to be thrown if not included) 98 return new jQuery.fn.init( selector, context ); 99 }, 100 101 // Support: Android <=4.0 only 102 // Make sure we trim BOM and NBSP 103 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 104 105 // Matches dashed string for camelizing 106 rmsPrefix = /^-ms-/, 107 rdashAlpha = /-([a-z])/g, 108 109 // Used by jQuery.camelCase as callback to replace() 110 fcamelCase = function( all, letter ) { 111 return letter.toUpperCase(); 112 }; 113 114jQuery.fn = jQuery.prototype = { 115 116 // The current version of jQuery being used 117 jquery: version, 118 119 constructor: jQuery, 120 121 // The default length of a jQuery object is 0 122 length: 0, 123 124 toArray: function() { 125 return slice.call( this ); 126 }, 127 128 // Get the Nth element in the matched element set OR 129 // Get the whole matched element set as a clean array 130 get: function( num ) { 131 132 // Return all the elements in a clean array 133 if ( num == null ) { 134 return slice.call( this ); 135 } 136 137 // Return just the one element from the set 138 return num < 0 ? this[ num + this.length ] : this[ num ]; 139 }, 140 141 // Take an array of elements and push it onto the stack 142 // (returning the new matched element set) 143 pushStack: function( elems ) { 144 145 // Build a new jQuery matched element set 146 var ret = jQuery.merge( this.constructor(), elems ); 147 148 // Add the old object onto the stack (as a reference) 149 ret.prevObject = this; 150 151 // Return the newly-formed element set 152 return ret; 153 }, 154 155 // Execute a callback for every element in the matched set. 156 each: function( callback ) { 157 return jQuery.each( this, callback ); 158 }, 159 160 map: function( callback ) { 161 return this.pushStack( jQuery.map( this, function( elem, i ) { 162 return callback.call( elem, i, elem ); 163 } ) ); 164 }, 165 166 slice: function() { 167 return this.pushStack( slice.apply( this, arguments ) ); 168 }, 169 170 first: function() { 171 return this.eq( 0 ); 172 }, 173 174 last: function() { 175 return this.eq( -1 ); 176 }, 177 178 eq: function( i ) { 179 var len = this.length, 180 j = +i + ( i < 0 ? len : 0 ); 181 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 182 }, 183 184 end: function() { 185 return this.prevObject || this.constructor(); 186 }, 187 188 // For internal use only. 189 // Behaves like an Array's method, not like a jQuery method. 190 push: push, 191 sort: arr.sort, 192 splice: arr.splice 193}; 194 195jQuery.extend = jQuery.fn.extend = function() { 196 var options, name, src, copy, copyIsArray, clone, 197 target = arguments[ 0 ] || {}, 198 i = 1, 199 length = arguments.length, 200 deep = false; 201 202 // Handle a deep copy situation 203 if ( typeof target === "boolean" ) { 204 deep = target; 205 206 // Skip the boolean and the target 207 target = arguments[ i ] || {}; 208 i++; 209 } 210 211 // Handle case when target is a string or something (possible in deep copy) 212 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { 213 target = {}; 214 } 215 216 // Extend jQuery itself if only one argument is passed 217 if ( i === length ) { 218 target = this; 219 i--; 220 } 221 222 for ( ; i < length; i++ ) { 223 224 // Only deal with non-null/undefined values 225 if ( ( options = arguments[ i ] ) != null ) { 226 227 // Extend the base object 228 for ( name in options ) { 229 src = target[ name ]; 230 copy = options[ name ]; 231 232 // Prevent never-ending loop 233 if ( target === copy ) { 234 continue; 235 } 236 237 // Recurse if we're merging plain objects or arrays 238 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 239 ( copyIsArray = jQuery.isArray( copy ) ) ) ) { 240 241 if ( copyIsArray ) { 242 copyIsArray = false; 243 clone = src && jQuery.isArray( src ) ? src : []; 244 245 } else { 246 clone = src && jQuery.isPlainObject( src ) ? src : {}; 247 } 248 249 // Never move original objects, clone them 250 target[ name ] = jQuery.extend( deep, clone, copy ); 251 252 // Don't bring in undefined values 253 } else if ( copy !== undefined ) { 254 target[ name ] = copy; 255 } 256 } 257 } 258 } 259 260 // Return the modified object 261 return target; 262}; 263 264jQuery.extend( { 265 266 // Unique for each copy of jQuery on the page 267 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 268 269 // Assume jQuery is ready without the ready module 270 isReady: true, 271 272 error: function( msg ) { 273 throw new Error( msg ); 274 }, 275 276 noop: function() {}, 277 278 isFunction: function( obj ) { 279 return jQuery.type( obj ) === "function"; 280 }, 281 282 isArray: Array.isArray, 283 284 isWindow: function( obj ) { 285 return obj != null && obj === obj.window; 286 }, 287 288 isNumeric: function( obj ) { 289 290 // As of jQuery 3.0, isNumeric is limited to 291 // strings and numbers (primitives or objects) 292 // that can be coerced to finite numbers (gh-2662) 293 var type = jQuery.type( obj ); 294 return ( type === "number" || type === "string" ) && 295 296 // parseFloat NaNs numeric-cast false positives ("") 297 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 298 // subtraction forces infinities to NaN 299 !isNaN( obj - parseFloat( obj ) ); 300 }, 301 302 isPlainObject: function( obj ) { 303 var proto, Ctor; 304 305 // Detect obvious negatives 306 // Use toString instead of jQuery.type to catch host objects 307 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 308 return false; 309 } 310 311 proto = getProto( obj ); 312 313 // Objects with no prototype (e.g., `Object.create( null )`) are plain 314 if ( !proto ) { 315 return true; 316 } 317 318 // Objects with prototype are plain iff they were constructed by a global Object function 319 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 320 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 321 }, 322 323 isEmptyObject: function( obj ) { 324 325 /* eslint-disable no-unused-vars */ 326 // See https://github.com/eslint/eslint/issues/6125 327 var name; 328 329 for ( name in obj ) { 330 return false; 331 } 332 return true; 333 }, 334 335 type: function( obj ) { 336 if ( obj == null ) { 337 return obj + ""; 338 } 339 340 // Support: Android <=2.3 only (functionish RegExp) 341 return typeof obj === "object" || typeof obj === "function" ? 342 class2type[ toString.call( obj ) ] || "object" : 343 typeof obj; 344 }, 345 346 // Evaluates a script in a global context 347 globalEval: function( code ) { 348 DOMEval( code ); 349 }, 350 351 // Convert dashed to camelCase; used by the css and data modules 352 // Support: IE <=9 - 11, Edge 12 - 13 353 // Microsoft forgot to hump their vendor prefix (#9572) 354 camelCase: function( string ) { 355 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 356 }, 357 358 nodeName: function( elem, name ) { 359 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 360 }, 361 362 each: function( obj, callback ) { 363 var length, i = 0; 364 365 if ( isArrayLike( obj ) ) { 366 length = obj.length; 367 for ( ; i < length; i++ ) { 368 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 369 break; 370 } 371 } 372 } else { 373 for ( i in obj ) { 374 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 375 break; 376 } 377 } 378 } 379 380 return obj; 381 }, 382 383 // Support: Android <=4.0 only 384 trim: function( text ) { 385 return text == null ? 386 "" : 387 ( text + "" ).replace( rtrim, "" ); 388 }, 389 390 // results is for internal usage only 391 makeArray: function( arr, results ) { 392 var ret = results || []; 393 394 if ( arr != null ) { 395 if ( isArrayLike( Object( arr ) ) ) { 396 jQuery.merge( ret, 397 typeof arr === "string" ? 398 [ arr ] : arr 399 ); 400 } else { 401 push.call( ret, arr ); 402 } 403 } 404 405 return ret; 406 }, 407 408 inArray: function( elem, arr, i ) { 409 return arr == null ? -1 : indexOf.call( arr, elem, i ); 410 }, 411 412 // Support: Android <=4.0 only, PhantomJS 1 only 413 // push.apply(_, arraylike) throws on ancient WebKit 414 merge: function( first, second ) { 415 var len = +second.length, 416 j = 0, 417 i = first.length; 418 419 for ( ; j < len; j++ ) { 420 first[ i++ ] = second[ j ]; 421 } 422 423 first.length = i; 424 425 return first; 426 }, 427 428 grep: function( elems, callback, invert ) { 429 var callbackInverse, 430 matches = [], 431 i = 0, 432 length = elems.length, 433 callbackExpect = !invert; 434 435 // Go through the array, only saving the items 436 // that pass the validator function 437 for ( ; i < length; i++ ) { 438 callbackInverse = !callback( elems[ i ], i ); 439 if ( callbackInverse !== callbackExpect ) { 440 matches.push( elems[ i ] ); 441 } 442 } 443 444 return matches; 445 }, 446 447 // arg is for internal usage only 448 map: function( elems, callback, arg ) { 449 var length, value, 450 i = 0, 451 ret = []; 452 453 // Go through the array, translating each of the items to their new values 454 if ( isArrayLike( elems ) ) { 455 length = elems.length; 456 for ( ; i < length; i++ ) { 457 value = callback( elems[ i ], i, arg ); 458 459 if ( value != null ) { 460 ret.push( value ); 461 } 462 } 463 464 // Go through every key on the object, 465 } else { 466 for ( i in elems ) { 467 value = callback( elems[ i ], i, arg ); 468 469 if ( value != null ) { 470 ret.push( value ); 471 } 472 } 473 } 474 475 // Flatten any nested arrays 476 return concat.apply( [], ret ); 477 }, 478 479 // A global GUID counter for objects 480 guid: 1, 481 482 // Bind a function to a context, optionally partially applying any 483 // arguments. 484 proxy: function( fn, context ) { 485 var tmp, args, proxy; 486 487 if ( typeof context === "string" ) { 488 tmp = fn[ context ]; 489 context = fn; 490 fn = tmp; 491 } 492 493 // Quick check to determine if target is callable, in the spec 494 // this throws a TypeError, but we will just return undefined. 495 if ( !jQuery.isFunction( fn ) ) { 496 return undefined; 497 } 498 499 // Simulated bind 500 args = slice.call( arguments, 2 ); 501 proxy = function() { 502 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 503 }; 504 505 // Set the guid of unique handler to the same of original handler, so it can be removed 506 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 507 508 return proxy; 509 }, 510 511 now: Date.now, 512 513 // jQuery.support is not used in Core but other projects attach their 514 // properties to it so it needs to exist. 515 support: support 516} ); 517 518if ( typeof Symbol === "function" ) { 519 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 520} 521 522// Populate the class2type map 523jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 524function( i, name ) { 525 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 526} ); 527 528function isArrayLike( obj ) { 529 530 // Support: real iOS 8.2 only (not reproducible in simulator) 531 // `in` check used to prevent JIT error (gh-2145) 532 // hasOwn isn't used here due to false negatives 533 // regarding Nodelist length in IE 534 var length = !!obj && "length" in obj && obj.length, 535 type = jQuery.type( obj ); 536 537 if ( type === "function" || jQuery.isWindow( obj ) ) { 538 return false; 539 } 540 541 return type === "array" || length === 0 || 542 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 543} 544var Sizzle = 545/*! 546 * Sizzle CSS Selector Engine v2.3.3 547 * https://sizzlejs.com/ 548 * 549 * Copyright jQuery Foundation and other contributors 550 * Released under the MIT license 551 * http://jquery.org/license 552 * 553 * Date: 2016-08-08 554 */ 555(function( window ) { 556 557var i, 558 support, 559 Expr, 560 getText, 561 isXML, 562 tokenize, 563 compile, 564 select, 565 outermostContext, 566 sortInput, 567 hasDuplicate, 568 569 // Local document vars 570 setDocument, 571 document, 572 docElem, 573 documentIsHTML, 574 rbuggyQSA, 575 rbuggyMatches, 576 matches, 577 contains, 578 579 // Instance-specific data 580 expando = "sizzle" + 1 * new Date(), 581 preferredDoc = window.document, 582 dirruns = 0, 583 done = 0, 584 classCache = createCache(), 585 tokenCache = createCache(), 586 compilerCache = createCache(), 587 sortOrder = function( a, b ) { 588 if ( a === b ) { 589 hasDuplicate = true; 590 } 591 return 0; 592 }, 593 594 // Instance methods 595 hasOwn = ({}).hasOwnProperty, 596 arr = [], 597 pop = arr.pop, 598 push_native = arr.push, 599 push = arr.push, 600 slice = arr.slice, 601 // Use a stripped-down indexOf as it's faster than native 602 // https://jsperf.com/thor-indexof-vs-for/5 603 indexOf = function( list, elem ) { 604 var i = 0, 605 len = list.length; 606 for ( ; i < len; i++ ) { 607 if ( list[i] === elem ) { 608 return i; 609 } 610 } 611 return -1; 612 }, 613 614 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 615 616 // Regular expressions 617 618 // http://www.w3.org/TR/css3-selectors/#whitespace 619 whitespace = "[\\x20\\t\\r\\n\\f]", 620 621 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 622 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", 623 624 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 625 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 626 // Operator (capture 2) 627 "*([*^$|!~]?=)" + whitespace + 628 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 629 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + 630 "*\\]", 631 632 pseudos = ":(" + identifier + ")(?:\\((" + 633 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 634 // 1. quoted (capture 3; capture 4 or capture 5) 635 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 636 // 2. simple (capture 6) 637 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 638 // 3. anything else (capture 2) 639 ".*" + 640 ")\\)|)", 641 642 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 643 rwhitespace = new RegExp( whitespace + "+", "g" ), 644 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), 645 646 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 647 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), 648 649 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), 650 651 rpseudo = new RegExp( pseudos ), 652 ridentifier = new RegExp( "^" + identifier + "$" ), 653 654 matchExpr = { 655 "ID": new RegExp( "^#(" + identifier + ")" ), 656 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 657 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 658 "ATTR": new RegExp( "^" + attributes ), 659 "PSEUDO": new RegExp( "^" + pseudos ), 660 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + 661 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + 662 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 663 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 664 // For use in libraries implementing .is() 665 // We use this for POS matching in `select` 666 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + 667 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 668 }, 669 670 rinputs = /^(?:input|select|textarea|button)$/i, 671 rheader = /^h\d$/i, 672 673 rnative = /^[^{]+\{\s*\[native \w/, 674 675 // Easily-parseable/retrievable ID or TAG or CLASS selectors 676 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 677 678 rsibling = /[+~]/, 679 680 // CSS escapes 681 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 682 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), 683 funescape = function( _, escaped, escapedWhitespace ) { 684 var high = "0x" + escaped - 0x10000; 685 // NaN means non-codepoint
vendor: 18,941 bytes, lines 686-1334
686 // Support: Firefox<24 687 // Workaround erroneous numeric interpretation of +"0x" 688 return high !== high || escapedWhitespace ? 689 escaped : 690 high < 0 ? 691 // BMP codepoint 692 String.fromCharCode( high + 0x10000 ) : 693 // Supplemental Plane codepoint (surrogate pair) 694 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 695 }, 696 697 // CSS string/identifier serialization 698 // https://drafts.csswg.org/cssom/#common-serializing-idioms 699 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, 700 fcssescape = function( ch, asCodePoint ) { 701 if ( asCodePoint ) { 702 703 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 704 if ( ch === "\0" ) { 705 return "\uFFFD"; 706 } 707 708 // Control characters and (dependent upon position) numbers get escaped as code points 709 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 710 } 711 712 // Other potentially-special ASCII characters get backslash-escaped 713 return "\\" + ch; 714 }, 715 716 // Used for iframes 717 // See setDocument() 718 // Removing the function wrapper causes a "Permission Denied" 719 // error in IE 720 unloadHandler = function() { 721 setDocument(); 722 }, 723 724 disabledAncestor = addCombinator( 725 function( elem ) { 726 return elem.disabled === true && ("form" in elem || "label" in elem); 727 }, 728 { dir: "parentNode", next: "legend" } 729 ); 730 731// Optimize for push.apply( _, NodeList ) 732try { 733 push.apply( 734 (arr = slice.call( preferredDoc.childNodes )), 735 preferredDoc.childNodes 736 ); 737 // Support: Android<4.0 738 // Detect silently failing push.apply 739 arr[ preferredDoc.childNodes.length ].nodeType; 740} catch ( e ) { 741 push = { apply: arr.length ? 742 743 // Leverage slice if possible 744 function( target, els ) { 745 push_native.apply( target, slice.call(els) ); 746 } : 747 748 // Support: IE<9 749 // Otherwise append directly 750 function( target, els ) { 751 var j = target.length, 752 i = 0; 753 // Can't trust NodeList.length 754 while ( (target[j++] = els[i++]) ) {} 755 target.length = j - 1; 756 } 757 }; 758} 759 760function Sizzle( selector, context, results, seed ) { 761 var m, i, elem, nid, match, groups, newSelector, 762 newContext = context && context.ownerDocument, 763 764 // nodeType defaults to 9, since context defaults to document 765 nodeType = context ? context.nodeType : 9; 766 767 results = results || []; 768 769 // Return early from calls with invalid selector or context 770 if ( typeof selector !== "string" || !selector || 771 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 772 773 return results; 774 } 775 776 // Try to shortcut find operations (as opposed to filters) in HTML documents 777 if ( !seed ) { 778 779 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { 780 setDocument( context ); 781 } 782 context = context || document; 783 784 if ( documentIsHTML ) { 785 786 // If the selector is sufficiently simple, try using a "get*By*" DOM method 787 // (excepting DocumentFragment context, where the methods don't exist) 788 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { 789 790 // ID selector 791 if ( (m = match[1]) ) { 792 793 // Document context 794 if ( nodeType === 9 ) { 795 if ( (elem = context.getElementById( m )) ) { 796 797 // Support: IE, Opera, Webkit 798 // TODO: identify versions 799 // getElementById can match elements by name instead of ID 800 if ( elem.id === m ) { 801 results.push( elem ); 802 return results; 803 } 804 } else { 805 return results; 806 } 807 808 // Element context 809 } else { 810 811 // Support: IE, Opera, Webkit 812 // TODO: identify versions 813 // getElementById can match elements by name instead of ID 814 if ( newContext && (elem = newContext.getElementById( m )) && 815 contains( context, elem ) && 816 elem.id === m ) { 817 818 results.push( elem ); 819 return results; 820 } 821 } 822 823 // Type selector 824 } else if ( match[2] ) { 825 push.apply( results, context.getElementsByTagName( selector ) ); 826 return results; 827 828 // Class selector 829 } else if ( (m = match[3]) && support.getElementsByClassName && 830 context.getElementsByClassName ) { 831 832 push.apply( results, context.getElementsByClassName( m ) ); 833 return results; 834 } 835 } 836 837 // Take advantage of querySelectorAll 838 if ( support.qsa && 839 !compilerCache[ selector + " " ] && 840 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { 841 842 if ( nodeType !== 1 ) { 843 newContext = context; 844 newSelector = selector; 845 846 // qSA looks outside Element context, which is not what we want 847 // Thanks to Andrew Dupont for this workaround technique 848 // Support: IE <=8 849 // Exclude object elements 850 } else if ( context.nodeName.toLowerCase() !== "object" ) { 851 852 // Capture the context ID, setting it first if necessary 853 if ( (nid = context.getAttribute( "id" )) ) { 854 nid = nid.replace( rcssescape, fcssescape ); 855 } else { 856 context.setAttribute( "id", (nid = expando) ); 857 } 858 859 // Prefix every selector in the list 860 groups = tokenize( selector ); 861 i = groups.length; 862 while ( i-- ) { 863 groups[i] = "#" + nid + " " + toSelector( groups[i] ); 864 } 865 newSelector = groups.join( "," ); 866 867 // Expand context for sibling selectors 868 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 869 context; 870 } 871 872 if ( newSelector ) { 873 try { 874 push.apply( results, 875 newContext.querySelectorAll( newSelector ) 876 ); 877 return results; 878 } catch ( qsaError ) { 879 } finally { 880 if ( nid === expando ) { 881 context.removeAttribute( "id" ); 882 } 883 } 884 } 885 } 886 } 887 } 888 889 // All others 890 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 891} 892 893/** 894 * Create key-value caches of limited size 895 * @returns {function(string, object)} Returns the Object data after storing it on itself with 896 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 897 * deleting the oldest entry 898 */ 899function createCache() { 900 var keys = []; 901 902 function cache( key, value ) { 903 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 904 if ( keys.push( key + " " ) > Expr.cacheLength ) { 905 // Only keep the most recent entries 906 delete cache[ keys.shift() ]; 907 } 908 return (cache[ key + " " ] = value); 909 } 910 return cache; 911} 912 913/** 914 * Mark a function for special use by Sizzle 915 * @param {Function} fn The function to mark 916 */ 917function markFunction( fn ) { 918 fn[ expando ] = true; 919 return fn; 920} 921 922/** 923 * Support testing using an element 924 * @param {Function} fn Passed the created element and returns a boolean result 925 */ 926function assert( fn ) { 927 var el = document.createElement("fieldset"); 928 929 try { 930 return !!fn( el ); 931 } catch (e) { 932 return false; 933 } finally { 934 // Remove from its parent by default 935 if ( el.parentNode ) { 936 el.parentNode.removeChild( el ); 937 } 938 // release memory in IE 939 el = null; 940 } 941} 942 943/** 944 * Adds the same handler for all of the specified attrs 945 * @param {String} attrs Pipe-separated list of attributes 946 * @param {Function} handler The method that will be applied 947 */ 948function addHandle( attrs, handler ) { 949 var arr = attrs.split("|"), 950 i = arr.length; 951 952 while ( i-- ) { 953 Expr.attrHandle[ arr[i] ] = handler; 954 } 955} 956 957/** 958 * Checks document order of two siblings 959 * @param {Element} a 960 * @param {Element} b 961 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 962 */ 963function siblingCheck( a, b ) { 964 var cur = b && a, 965 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 966 a.sourceIndex - b.sourceIndex; 967 968 // Use IE sourceIndex if available on both nodes 969 if ( diff ) { 970 return diff; 971 } 972 973 // Check if b follows a 974 if ( cur ) { 975 while ( (cur = cur.nextSibling) ) { 976 if ( cur === b ) { 977 return -1; 978 } 979 } 980 } 981 982 return a ? 1 : -1; 983} 984 985/** 986 * Returns a function to use in pseudos for input types 987 * @param {String} type 988 */ 989function createInputPseudo( type ) { 990 return function( elem ) { 991 var name = elem.nodeName.toLowerCase(); 992 return name === "input" && elem.type === type; 993 }; 994} 995 996/** 997 * Returns a function to use in pseudos for buttons 998 * @param {String} type 999 */ 1000function createButtonPseudo( type ) { 1001 return function( elem ) { 1002 var name = elem.nodeName.toLowerCase(); 1003 return (name === "input" || name === "button") && elem.type === type; 1004 }; 1005} 1006 1007/** 1008 * Returns a function to use in pseudos for :enabled/:disabled 1009 * @param {Boolean} disabled true for :disabled; false for :enabled 1010 */ 1011function createDisabledPseudo( disabled ) { 1012 1013 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 1014 return function( elem ) { 1015 1016 // Only certain elements can match :enabled or :disabled 1017 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 1018 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 1019 if ( "form" in elem ) { 1020 1021 // Check for inherited disabledness on relevant non-disabled elements: 1022 // * listed form-associated elements in a disabled fieldset 1023 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 1024 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 1025 // * option elements in a disabled optgroup 1026 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 1027 // All such elements have a "form" property. 1028 if ( elem.parentNode && elem.disabled === false ) { 1029 1030 // Option elements defer to a parent optgroup if present 1031 if ( "label" in elem ) { 1032 if ( "label" in elem.parentNode ) { 1033 return elem.parentNode.disabled === disabled; 1034 } else { 1035 return elem.disabled === disabled; 1036 } 1037 } 1038 1039 // Support: IE 6 - 11 1040 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 1041 return elem.isDisabled === disabled || 1042 1043 // Where there is no isDisabled, check manually 1044 /* jshint -W018 */ 1045 elem.isDisabled !== !disabled && 1046 disabledAncestor( elem ) === disabled; 1047 } 1048 1049 return elem.disabled === disabled; 1050 1051 // Try to winnow out elements that can't be disabled before trusting the disabled property. 1052 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 1053 // even exist on them, let alone have a boolean value. 1054 } else if ( "label" in elem ) { 1055 return elem.disabled === disabled; 1056 } 1057 1058 // Remaining elements are neither :enabled nor :disabled 1059 return false; 1060 }; 1061} 1062 1063/** 1064 * Returns a function to use in pseudos for positionals 1065 * @param {Function} fn 1066 */ 1067function createPositionalPseudo( fn ) { 1068 return markFunction(function( argument ) { 1069 argument = +argument; 1070 return markFunction(function( seed, matches ) { 1071 var j, 1072 matchIndexes = fn( [], seed.length, argument ), 1073 i = matchIndexes.length; 1074 1075 // Match elements found at the specified indexes 1076 while ( i-- ) { 1077 if ( seed[ (j = matchIndexes[i]) ] ) { 1078 seed[j] = !(matches[j] = seed[j]); 1079 } 1080 } 1081 }); 1082 }); 1083} 1084 1085/** 1086 * Checks a node for validity as a Sizzle context 1087 * @param {Element|Object=} context 1088 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1089 */ 1090function testContext( context ) { 1091 return context && typeof context.getElementsByTagName !== "undefined" && context; 1092} 1093 1094// Expose support vars for convenience 1095support = Sizzle.support = {}; 1096 1097/** 1098 * Detects XML nodes 1099 * @param {Element|Object} elem An element or a document 1100 * @returns {Boolean} True iff elem is a non-HTML XML node 1101 */ 1102isXML = Sizzle.isXML = function( elem ) { 1103 // documentElement is verified for cases where it doesn't yet exist 1104 // (such as loading iframes in IE - #4833) 1105 var documentElement = elem && (elem.ownerDocument || elem).documentElement; 1106 return documentElement ? documentElement.nodeName !== "HTML" : false; 1107}; 1108 1109/** 1110 * Sets document-related variables once based on the current document 1111 * @param {Element|Object} [doc] An element or document object to use to set the document 1112 * @returns {Object} Returns the current document 1113 */ 1114setDocument = Sizzle.setDocument = function( node ) { 1115 var hasCompare, subWindow, 1116 doc = node ? node.ownerDocument || node : preferredDoc; 1117 1118 // Return early if doc is invalid or already selected 1119 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { 1120 return document; 1121 } 1122 1123 // Update global variables 1124 document = doc; 1125 docElem = document.documentElement; 1126 documentIsHTML = !isXML( document ); 1127 1128 // Support: IE 9-11, Edge 1129 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 1130 if ( preferredDoc !== document && 1131 (subWindow = document.defaultView) && subWindow.top !== subWindow ) { 1132 1133 // Support: IE 11, Edge 1134 if ( subWindow.addEventListener ) { 1135 subWindow.addEventListener( "unload", unloadHandler, false ); 1136 1137 // Support: IE 9 - 10 only 1138 } else if ( subWindow.attachEvent ) { 1139 subWindow.attachEvent( "onunload", unloadHandler ); 1140 } 1141 } 1142 1143 /* Attributes 1144 ---------------------------------------------------------------------- */ 1145 1146 // Support: IE<8 1147 // Verify that getAttribute really returns attributes and not properties 1148 // (excepting IE8 booleans) 1149 support.attributes = assert(function( el ) { 1150 el.className = "i"; 1151 return !el.getAttribute("className"); 1152 }); 1153 1154 /* getElement(s)By* 1155 ---------------------------------------------------------------------- */ 1156 1157 // Check if getElementsByTagName("*") returns only elements 1158 support.getElementsByTagName = assert(function( el ) { 1159 el.appendChild( document.createComment("") ); 1160 return !el.getElementsByTagName("*").length; 1161 }); 1162 1163 // Support: IE<9 1164 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 1165 1166 // Support: IE<10 1167 // Check if getElementById returns elements by name 1168 // The broken getElementById methods don't pick up programmatically-set names, 1169 // so use a roundabout getElementsByName test 1170 support.getById = assert(function( el ) { 1171 docElem.appendChild( el ).id = expando; 1172 return !document.getElementsByName || !document.getElementsByName( expando ).length; 1173 }); 1174 1175 // ID filter and find 1176 if ( support.getById ) { 1177 Expr.filter["ID"] = function( id ) { 1178 var attrId = id.replace( runescape, funescape ); 1179 return function( elem ) { 1180 return elem.getAttribute("id") === attrId; 1181 }; 1182 }; 1183 Expr.find["ID"] = function( id, context ) { 1184 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1185 var elem = context.getElementById( id ); 1186 return elem ? [ elem ] : []; 1187 } 1188 }; 1189 } else { 1190 Expr.filter["ID"] = function( id ) { 1191 var attrId = id.replace( runescape, funescape ); 1192 return function( elem ) { 1193 var node = typeof elem.getAttributeNode !== "undefined" && 1194 elem.getAttributeNode("id"); 1195 return node && node.value === attrId; 1196 }; 1197 }; 1198 1199 // Support: IE 6 - 7 only 1200 // getElementById is not reliable as a find shortcut 1201 Expr.find["ID"] = function( id, context ) { 1202 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1203 var node, i, elems, 1204 elem = context.getElementById( id ); 1205 1206 if ( elem ) { 1207 1208 // Verify the id attribute 1209 node = elem.getAttributeNode("id"); 1210 if ( node && node.value === id ) { 1211 return [ elem ]; 1212 } 1213 1214 // Fall back on getElementsByName 1215 elems = context.getElementsByName( id ); 1216 i = 0; 1217 while ( (elem = elems[i++]) ) { 1218 node = elem.getAttributeNode("id"); 1219 if ( node && node.value === id ) { 1220 return [ elem ]; 1221 } 1222 } 1223 } 1224 1225 return []; 1226 } 1227 }; 1228 } 1229 1230 // Tag 1231 Expr.find["TAG"] = support.getElementsByTagName ? 1232 function( tag, context ) { 1233 if ( typeof context.getElementsByTagName !== "undefined" ) { 1234 return context.getElementsByTagName( tag ); 1235 1236 // DocumentFragment nodes don't have gEBTN 1237 } else if ( support.qsa ) { 1238 return context.querySelectorAll( tag ); 1239 } 1240 } : 1241 1242 function( tag, context ) { 1243 var elem, 1244 tmp = [], 1245 i = 0, 1246 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 1247 results = context.getElementsByTagName( tag ); 1248 1249 // Filter out possible comments 1250 if ( tag === "*" ) { 1251 while ( (elem = results[i++]) ) { 1252 if ( elem.nodeType === 1 ) { 1253 tmp.push( elem ); 1254 } 1255 } 1256 1257 return tmp; 1258 } 1259 return results; 1260 }; 1261 1262 // Class 1263 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { 1264 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 1265 return context.getElementsByClassName( className ); 1266 } 1267 }; 1268 1269 /* QSA/matchesSelector 1270 ---------------------------------------------------------------------- */ 1271 1272 // QSA and matchesSelector support 1273 1274 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 1275 rbuggyMatches = []; 1276 1277 // qSa(:focus) reports false when true (Chrome 21) 1278 // We allow this because of a bug in IE8/9 that throws an error 1279 // whenever `document.activeElement` is accessed on an iframe 1280 // So, we allow :focus to pass through QSA all the time to avoid the IE error 1281 // See https://bugs.jquery.com/ticket/13378 1282 rbuggyQSA = []; 1283 1284 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { 1285 // Build QSA regex 1286 // Regex strategy adopted from Diego Perini 1287 assert(function( el ) { 1288 // Select is set to empty string on purpose 1289 // This is to test IE's treatment of not explicitly 1290 // setting a boolean content attribute, 1291 // since its presence should be enough 1292 // https://bugs.jquery.com/ticket/12359 1293 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + 1294 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 1295 "<option selected=''></option></select>"; 1296 1297 // Support: IE8, Opera 11-12.16 1298 // Nothing should be selected when empty strings follow ^= or $= or *= 1299 // The test attribute must be unknown in Opera but "safe" for WinRT 1300 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 1301 if ( el.querySelectorAll("[msallowcapture^='']").length ) { 1302 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 1303 } 1304 1305 // Support: IE8 1306 // Boolean attributes and "value" are not treated correctly 1307 if ( !el.querySelectorAll("[selected]").length ) { 1308 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 1309 } 1310 1311 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 1312 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 1313 rbuggyQSA.push("~="); 1314 } 1315 1316 // Webkit/Opera - :checked should return selected option elements 1317 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1318 // IE8 throws error here and will not see later tests 1319 if ( !el.querySelectorAll(":checked").length ) { 1320 rbuggyQSA.push(":checked"); 1321 } 1322 1323 // Support: Safari 8+, iOS 8+ 1324 // https://bugs.webkit.org/show_bug.cgi?id=136851 1325 // In-page `selector#id sibling-combinator selector` fails 1326 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 1327 rbuggyQSA.push(".#.+[+~]"); 1328 } 1329 }); 1330 1331 assert(function( el ) { 1332 el.innerHTML = "<a href='' disabled='disabled'></a>" + 1333 "<select disabled='disabled'><option/></select>"; 1334
vendor: 6,849 bytes, lines 1335-1582
1335 // Support: Windows 8 Native Apps 1336 // The type and name attributes are restricted during .innerHTML assignment 1337 var input = document.createElement("input"); 1338 input.setAttribute( "type", "hidden" ); 1339 el.appendChild( input ).setAttribute( "name", "D" ); 1340 1341 // Support: IE8 1342 // Enforce case-sensitivity of name attribute 1343 if ( el.querySelectorAll("[name=d]").length ) { 1344 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 1345 } 1346 1347 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 1348 // IE8 throws error here and will not see later tests 1349 if ( el.querySelectorAll(":enabled").length !== 2 ) { 1350 rbuggyQSA.push( ":enabled", ":disabled" ); 1351 } 1352 1353 // Support: IE9-11+ 1354 // IE's :disabled selector does not pick up the children of disabled fieldsets 1355 docElem.appendChild( el ).disabled = true; 1356 if ( el.querySelectorAll(":disabled").length !== 2 ) { 1357 rbuggyQSA.push( ":enabled", ":disabled" ); 1358 } 1359 1360 // Opera 10-11 does not throw on post-comma invalid pseudos 1361 el.querySelectorAll("*,:x"); 1362 rbuggyQSA.push(",.*:"); 1363 }); 1364 } 1365 1366 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || 1367 docElem.webkitMatchesSelector || 1368 docElem.mozMatchesSelector || 1369 docElem.oMatchesSelector || 1370 docElem.msMatchesSelector) )) ) { 1371 1372 assert(function( el ) { 1373 // Check to see if it's possible to do matchesSelector 1374 // on a disconnected node (IE 9) 1375 support.disconnectedMatch = matches.call( el, "*" ); 1376 1377 // This should fail with an exception 1378 // Gecko does not error, returns false instead 1379 matches.call( el, "[s!='']:x" ); 1380 rbuggyMatches.push( "!=", pseudos ); 1381 }); 1382 } 1383 1384 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); 1385 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); 1386 1387 /* Contains 1388 ---------------------------------------------------------------------- */ 1389 hasCompare = rnative.test( docElem.compareDocumentPosition ); 1390 1391 // Element contains another 1392 // Purposefully self-exclusive 1393 // As in, an element does not contain itself 1394 contains = hasCompare || rnative.test( docElem.contains ) ? 1395 function( a, b ) { 1396 var adown = a.nodeType === 9 ? a.documentElement : a, 1397 bup = b && b.parentNode; 1398 return a === bup || !!( bup && bup.nodeType === 1 && ( 1399 adown.contains ? 1400 adown.contains( bup ) : 1401 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 1402 )); 1403 } : 1404 function( a, b ) { 1405 if ( b ) { 1406 while ( (b = b.parentNode) ) { 1407 if ( b === a ) { 1408 return true; 1409 } 1410 } 1411 } 1412 return false; 1413 }; 1414 1415 /* Sorting 1416 ---------------------------------------------------------------------- */ 1417 1418 // Document order sorting 1419 sortOrder = hasCompare ? 1420 function( a, b ) { 1421 1422 // Flag for duplicate removal 1423 if ( a === b ) { 1424 hasDuplicate = true; 1425 return 0; 1426 } 1427 1428 // Sort on method existence if only one input has compareDocumentPosition 1429 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1430 if ( compare ) { 1431 return compare; 1432 } 1433 1434 // Calculate position if both inputs belong to the same document 1435 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? 1436 a.compareDocumentPosition( b ) : 1437 1438 // Otherwise we know they are disconnected 1439 1; 1440 1441 // Disconnected nodes 1442 if ( compare & 1 || 1443 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { 1444 1445 // Choose the first element that is related to our preferred document 1446 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { 1447 return -1; 1448 } 1449 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { 1450 return 1; 1451 } 1452 1453 // Maintain original order 1454 return sortInput ? 1455 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 1456 0; 1457 } 1458 1459 return compare & 4 ? -1 : 1; 1460 } : 1461 function( a, b ) { 1462 // Exit early if the nodes are identical 1463 if ( a === b ) { 1464 hasDuplicate = true; 1465 return 0; 1466 } 1467 1468 var cur, 1469 i = 0, 1470 aup = a.parentNode, 1471 bup = b.parentNode, 1472 ap = [ a ], 1473 bp = [ b ]; 1474 1475 // Parentless nodes are either documents or disconnected 1476 if ( !aup || !bup ) { 1477 return a === document ? -1 : 1478 b === document ? 1 : 1479 aup ? -1 : 1480 bup ? 1 : 1481 sortInput ? 1482 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 1483 0; 1484 1485 // If the nodes are siblings, we can do a quick check 1486 } else if ( aup === bup ) { 1487 return siblingCheck( a, b ); 1488 } 1489 1490 // Otherwise we need full lists of their ancestors for comparison 1491 cur = a; 1492 while ( (cur = cur.parentNode) ) { 1493 ap.unshift( cur ); 1494 } 1495 cur = b; 1496 while ( (cur = cur.parentNode) ) { 1497 bp.unshift( cur ); 1498 } 1499 1500 // Walk down the tree looking for a discrepancy 1501 while ( ap[i] === bp[i] ) { 1502 i++; 1503 } 1504 1505 return i ? 1506 // Do a sibling check if the nodes have a common ancestor 1507 siblingCheck( ap[i], bp[i] ) : 1508 1509 // Otherwise nodes in our document sort first 1510 ap[i] === preferredDoc ? -1 : 1511 bp[i] === preferredDoc ? 1 : 1512 0; 1513 }; 1514 1515 return document; 1516}; 1517 1518Sizzle.matches = function( expr, elements ) { 1519 return Sizzle( expr, null, null, elements ); 1520}; 1521 1522Sizzle.matchesSelector = function( elem, expr ) { 1523 // Set document vars if needed 1524 if ( ( elem.ownerDocument || elem ) !== document ) { 1525 setDocument( elem ); 1526 } 1527 1528 // Make sure that attribute selectors are quoted 1529 expr = expr.replace( rattributeQuotes, "='$1']" ); 1530 1531 if ( support.matchesSelector && documentIsHTML && 1532 !compilerCache[ expr + " " ] && 1533 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 1534 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 1535 1536 try { 1537 var ret = matches.call( elem, expr ); 1538 1539 // IE 9's matchesSelector returns false on disconnected nodes 1540 if ( ret || support.disconnectedMatch || 1541 // As well, disconnected nodes are said to be in a document 1542 // fragment in IE 9 1543 elem.document && elem.document.nodeType !== 11 ) { 1544 return ret; 1545 } 1546 } catch (e) {} 1547 } 1548 1549 return Sizzle( expr, document, null, [ elem ] ).length > 0; 1550}; 1551 1552Sizzle.contains = function( context, elem ) { 1553 // Set document vars if needed 1554 if ( ( context.ownerDocument || context ) !== document ) { 1555 setDocument( context ); 1556 } 1557 return contains( context, elem ); 1558}; 1559 1560Sizzle.attr = function( elem, name ) { 1561 // Set document vars if needed 1562 if ( ( elem.ownerDocument || elem ) !== document ) { 1563 setDocument( elem ); 1564 } 1565 1566 var fn = Expr.attrHandle[ name.toLowerCase() ], 1567 // Don't get fooled by Object.prototype properties (jQuery #13807) 1568 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 1569 fn( elem, name, !documentIsHTML ) : 1570 undefined; 1571 1572 return val !== undefined ? 1573 val : 1574 support.attributes || !documentIsHTML ? 1575 elem.getAttribute( name ) : 1576 (val = elem.getAttributeNode(name)) && val.specified ? 1577 val.value : 1578 null; 1579}; 1580 1581Sizzle.escape = function( sel ) { 1582 return (sel + "").replace( rcssescape, fcssescape )
vendor: 13,124 bytes, lines 1582-2033
1582; 1583}; 1584 1585Sizzle.error = function( msg ) { 1586 throw new Error( "Syntax error, unrecognized expression: " + msg ); 1587}; 1588 1589/** 1590 * Document sorting and removing duplicates 1591 * @param {ArrayLike} results 1592 */ 1593Sizzle.uniqueSort = function( results ) { 1594 var elem, 1595 duplicates = [], 1596 j = 0, 1597 i = 0; 1598 1599 // Unless we *know* we can detect duplicates, assume their presence 1600 hasDuplicate = !support.detectDuplicates; 1601 sortInput = !support.sortStable && results.slice( 0 ); 1602 results.sort( sortOrder ); 1603 1604 if ( hasDuplicate ) { 1605 while ( (elem = results[i++]) ) { 1606 if ( elem === results[ i ] ) { 1607 j = duplicates.push( i ); 1608 } 1609 } 1610 while ( j-- ) { 1611 results.splice( duplicates[ j ], 1 ); 1612 } 1613 } 1614 1615 // Clear input after sorting to release objects 1616 // See https://github.com/jquery/sizzle/pull/225 1617 sortInput = null; 1618 1619 return results; 1620}; 1621 1622/** 1623 * Utility function for retrieving the text value of an array of DOM nodes 1624 * @param {Array|Element} elem 1625 */ 1626getText = Sizzle.getText = function( elem ) { 1627 var node, 1628 ret = "", 1629 i = 0, 1630 nodeType = elem.nodeType; 1631 1632 if ( !nodeType ) { 1633 // If no nodeType, this is expected to be an array 1634 while ( (node = elem[i++]) ) { 1635 // Do not traverse comment nodes 1636 ret += getText( node ); 1637 } 1638 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 1639 // Use textContent for elements 1640 // innerText usage removed for consistency of new lines (jQuery #11153) 1641 if ( typeof elem.textContent === "string" ) { 1642 return elem.textContent; 1643 } else { 1644 // Traverse its children 1645 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 1646 ret += getText( elem ); 1647 } 1648 } 1649 } else if ( nodeType === 3 || nodeType === 4 ) { 1650 return elem.nodeValue; 1651 } 1652 // Do not include comment or processing instruction nodes 1653 1654 return ret; 1655}; 1656 1657Expr = Sizzle.selectors = { 1658 1659 // Can be adjusted by the user 1660 cacheLength: 50, 1661 1662 createPseudo: markFunction, 1663 1664 match: matchExpr, 1665 1666 attrHandle: {}, 1667 1668 find: {}, 1669 1670 relative: { 1671 ">": { dir: "parentNode", first: true }, 1672 " ": { dir: "parentNode" }, 1673 "+": { dir: "previousSibling", first: true }, 1674 "~": { dir: "previousSibling" } 1675 }, 1676 1677 preFilter: { 1678 "ATTR": function( match ) { 1679 match[1] = match[1].replace( runescape, funescape ); 1680 1681 // Move the given value to match[3] whether quoted or unquoted 1682 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); 1683 1684 if ( match[2] === "~=" ) { 1685 match[3] = " " + match[3] + " "; 1686 } 1687 1688 return match.slice( 0, 4 ); 1689 }, 1690 1691 "CHILD": function( match ) { 1692 /* matches from matchExpr["CHILD"] 1693 1 type (only|nth|...) 1694 2 what (child|of-type) 1695 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 1696 4 xn-component of xn+y argument ([+-]?\d*n|) 1697 5 sign of xn-component 1698 6 x of xn-component 1699 7 sign of y-component 1700 8 y of y-component 1701 */ 1702 match[1] = match[1].toLowerCase(); 1703 1704 if ( match[1].slice( 0, 3 ) === "nth" ) { 1705 // nth-* requires argument 1706 if ( !match[3] ) { 1707 Sizzle.error( match[0] ); 1708 } 1709 1710 // numeric x and y parameters for Expr.filter.CHILD 1711 // remember that false/true cast respectively to 0/1 1712 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); 1713 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); 1714 1715 // other types prohibit arguments 1716 } else if ( match[3] ) { 1717 Sizzle.error( match[0] ); 1718 } 1719 1720 return match; 1721 }, 1722 1723 "PSEUDO": function( match ) { 1724 var excess, 1725 unquoted = !match[6] && match[2]; 1726 1727 if ( matchExpr["CHILD"].test( match[0] ) ) { 1728 return null; 1729 } 1730 1731 // Accept quoted arguments as-is 1732 if ( match[3] ) { 1733 match[2] = match[4] || match[5] || ""; 1734 1735 // Strip excess characters from unquoted arguments 1736 } else if ( unquoted && rpseudo.test( unquoted ) && 1737 // Get excess from tokenize (recursively) 1738 (excess = tokenize( unquoted, true )) && 1739 // advance to the next closing parenthesis 1740 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { 1741 1742 // excess is a negative index 1743 match[0] = match[0].slice( 0, excess ); 1744 match[2] = unquoted.slice( 0, excess ); 1745 } 1746 1747 // Return only captures needed by the pseudo filter method (type and argument) 1748 return match.slice( 0, 3 ); 1749 } 1750 }, 1751 1752 filter: { 1753 1754 "TAG": function( nodeNameSelector ) { 1755 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 1756 return nodeNameSelector === "*" ? 1757 function() { return true; } : 1758 function( elem ) { 1759 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 1760 }; 1761 }, 1762 1763 "CLASS": function( className ) { 1764 var pattern = classCache[ className + " " ]; 1765 1766 return pattern || 1767 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && 1768 classCache( className, function( elem ) { 1769 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); 1770 }); 1771 }, 1772 1773 "ATTR": function( name, operator, check ) { 1774 return function( elem ) { 1775 var result = Sizzle.attr( elem, name ); 1776 1777 if ( result == null ) { 1778 return operator === "!="; 1779 } 1780 if ( !operator ) { 1781 return true; 1782 } 1783 1784 result += ""; 1785 1786 return operator === "=" ? result === check : 1787 operator === "!=" ? result !== check : 1788 operator === "^=" ? check && result.indexOf( check ) === 0 : 1789 operator === "*=" ? check && result.indexOf( check ) > -1 : 1790 operator === "$=" ? check && result.slice( -check.length ) === check : 1791 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 1792 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 1793 false; 1794 }; 1795 }, 1796 1797 "CHILD": function( type, what, argument, first, last ) { 1798 var simple = type.slice( 0, 3 ) !== "nth", 1799 forward = type.slice( -4 ) !== "last", 1800 ofType = what === "of-type"; 1801 1802 return first === 1 && last === 0 ? 1803 1804 // Shortcut for :nth-*(n) 1805 function( elem ) { 1806 return !!elem.parentNode; 1807 } : 1808 1809 function( elem, context, xml ) { 1810 var cache, uniqueCache, outerCache, node, nodeIndex, start, 1811 dir = simple !== forward ? "nextSibling" : "previousSibling", 1812 parent = elem.parentNode, 1813 name = ofType && elem.nodeName.toLowerCase(), 1814 useCache = !xml && !ofType, 1815 diff = false; 1816 1817 if ( parent ) { 1818 1819 // :(first|last|only)-(child|of-type) 1820 if ( simple ) { 1821 while ( dir ) { 1822 node = elem; 1823 while ( (node = node[ dir ]) ) { 1824 if ( ofType ? 1825 node.nodeName.toLowerCase() === name : 1826 node.nodeType === 1 ) { 1827 1828 return false; 1829 } 1830 } 1831 // Reverse direction for :only-* (if we haven't yet done so) 1832 start = dir = type === "only" && !start && "nextSibling"; 1833 } 1834 return true; 1835 } 1836 1837 start = [ forward ? parent.firstChild : parent.lastChild ]; 1838 1839 // non-xml :nth-child(...) stores cache data on `parent` 1840 if ( forward && useCache ) { 1841 1842 // Seek `elem` from a previously-cached index 1843 1844 // ...in a gzip-friendly way 1845 node = parent; 1846 outerCache = node[ expando ] || (node[ expando ] = {}); 1847 1848 // Support: IE <9 only 1849 // Defend against cloned attroperties (jQuery gh-1709) 1850 uniqueCache = outerCache[ node.uniqueID ] || 1851 (outerCache[ node.uniqueID ] = {}); 1852 1853 cache = uniqueCache[ type ] || []; 1854 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 1855 diff = nodeIndex && cache[ 2 ]; 1856 node = nodeIndex && parent.childNodes[ nodeIndex ]; 1857 1858 while ( (node = ++nodeIndex && node && node[ dir ] || 1859 1860 // Fallback to seeking `elem` from the start 1861 (diff = nodeIndex = 0) || start.pop()) ) { 1862 1863 // When found, cache indexes on `parent` and break 1864 if ( node.nodeType === 1 && ++diff && node === elem ) { 1865 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 1866 break; 1867 } 1868 } 1869 1870 } else { 1871 // Use previously-cached element index if available 1872 if ( useCache ) { 1873 // ...in a gzip-friendly way 1874 node = elem; 1875 outerCache = node[ expando ] || (node[ expando ] = {}); 1876 1877 // Support: IE <9 only 1878 // Defend against cloned attroperties (jQuery gh-1709) 1879 uniqueCache = outerCache[ node.uniqueID ] || 1880 (outerCache[ node.uniqueID ] = {}); 1881 1882 cache = uniqueCache[ type ] || []; 1883 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 1884 diff = nodeIndex; 1885 } 1886 1887 // xml :nth-child(...) 1888 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 1889 if ( diff === false ) { 1890 // Use the same loop as above to seek `elem` from the start 1891 while ( (node = ++nodeIndex && node && node[ dir ] || 1892 (diff = nodeIndex = 0) || start.pop()) ) { 1893 1894 if ( ( ofType ? 1895 node.nodeName.toLowerCase() === name : 1896 node.nodeType === 1 ) && 1897 ++diff ) { 1898 1899 // Cache the index of each encountered element 1900 if ( useCache ) { 1901 outerCache = node[ expando ] || (node[ expando ] = {}); 1902 1903 // Support: IE <9 only 1904 // Defend against cloned attroperties (jQuery gh-1709) 1905 uniqueCache = outerCache[ node.uniqueID ] || 1906 (outerCache[ node.uniqueID ] = {}); 1907 1908 uniqueCache[ type ] = [ dirruns, diff ]; 1909 } 1910 1911 if ( node === elem ) { 1912 break; 1913 } 1914 } 1915 } 1916 } 1917 } 1918 1919 // Incorporate the offset, then check against cycle size 1920 diff -= last; 1921 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 1922 } 1923 }; 1924 }, 1925 1926 "PSEUDO": function( pseudo, argument ) { 1927 // pseudo-class names are case-insensitive 1928 // http://www.w3.org/TR/selectors/#pseudo-classes 1929 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 1930 // Remember that setFilters inherits from pseudos 1931 var args, 1932 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 1933 Sizzle.error( "unsupported pseudo: " + pseudo ); 1934 1935 // The user may use createPseudo to indicate that 1936 // arguments are needed to create the filter function 1937 // just as Sizzle does 1938 if ( fn[ expando ] ) { 1939 return fn( argument ); 1940 } 1941 1942 // But maintain support for old signatures 1943 if ( fn.length > 1 ) { 1944 args = [ pseudo, pseudo, "", argument ]; 1945 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 1946 markFunction(function( seed, matches ) { 1947 var idx, 1948 matched = fn( seed, argument ), 1949 i = matched.length; 1950 while ( i-- ) { 1951 idx = indexOf( seed, matched[i] ); 1952 seed[ idx ] = !( matches[ idx ] = matched[i] ); 1953 } 1954 }) : 1955 function( elem ) { 1956 return fn( elem, 0, args ); 1957 }; 1958 } 1959 1960 return fn; 1961 } 1962 }, 1963 1964 pseudos: { 1965 // Potentially complex pseudos 1966 "not": markFunction(function( selector ) { 1967 // Trim the selector passed to compile 1968 // to avoid treating leading and trailing 1969 // spaces as combinators 1970 var input = [], 1971 results = [], 1972 matcher = compile( selector.replace( rtrim, "$1" ) ); 1973 1974 return matcher[ expando ] ? 1975 markFunction(function( seed, matches, context, xml ) { 1976 var elem, 1977 unmatched = matcher( seed, null, xml, [] ), 1978 i = seed.length; 1979 1980 // Match elements unmatched by `matcher` 1981 while ( i-- ) { 1982 if ( (elem = unmatched[i]) ) { 1983 seed[i] = !(matches[i] = elem); 1984 } 1985 } 1986 }) : 1987 function( elem, context, xml ) { 1988 input[0] = elem; 1989 matcher( input, null, xml, results ); 1990 // Don't keep the element (issue #299) 1991 input[0] = null; 1992 return !results.pop(); 1993 }; 1994 }), 1995 1996 "has": markFunction(function( selector ) { 1997 return function( elem ) { 1998 return Sizzle( selector, elem ).length > 0; 1999 }; 2000 }), 2001 2002 "contains": markFunction(function( text ) { 2003 text = text.replace( runescape, funescape ); 2004 return function( elem ) { 2005 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; 2006 }; 2007 }), 2008 2009 // "Whether an element is represented by a :lang() selector 2010 // is based solely on the element's language value 2011 // being equal to the identifier C, 2012 // or beginning with the identifier C immediately followed by "-". 2013 // The matching of C against the element's language value is performed case-insensitively. 2014 // The identifier C does not have to be a valid language name." 2015 // http://www.w3.org/TR/selectors/#lang-pseudo 2016 "lang": markFunction( function( lang ) { 2017 // lang value must be a valid identifier 2018 if ( !ridentifier.test(lang || "") ) { 2019 Sizzle.error( "unsupported lang: " + lang ); 2020 } 2021 lang = lang.replace( runescape, funescape ).toLowerCase(); 2022 return function( elem ) { 2023 var elemLang; 2024 do { 2025 if ( (elemLang = documentIsHTML ? 2026 elem.lang : 2027 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { 2028 2029 elemLang = elemLang.toLowerCase(); 2030 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 2031 } 2032 } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); 2033 return false;
vendor: 22,514 bytes, lines 2034-2845
2034 }; 2035 }), 2036 2037 // Miscellaneous 2038 "target": function( elem ) { 2039 var hash = window.location && window.location.hash; 2040 return hash && hash.slice( 1 ) === elem.id; 2041 }, 2042 2043 "root": function( elem ) { 2044 return elem === docElem; 2045 }, 2046 2047 "focus": function( elem ) { 2048 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 2049 }, 2050 2051 // Boolean properties 2052 "enabled": createDisabledPseudo( false ), 2053 "disabled": createDisabledPseudo( true ), 2054 2055 "checked": function( elem ) { 2056 // In CSS3, :checked should return both checked and selected elements 2057 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 2058 var nodeName = elem.nodeName.toLowerCase(); 2059 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); 2060 }, 2061 2062 "selected": function( elem ) { 2063 // Accessing this property makes selected-by-default 2064 // options in Safari work properly 2065 if ( elem.parentNode ) { 2066 elem.parentNode.selectedIndex; 2067 } 2068 2069 return elem.selected === true; 2070 }, 2071 2072 // Contents 2073 "empty": function( elem ) { 2074 // http://www.w3.org/TR/selectors/#empty-pseudo 2075 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 2076 // but not by others (comment: 8; processing instruction: 7; etc.) 2077 // nodeType < 6 works because attributes (2) do not appear as children 2078 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 2079 if ( elem.nodeType < 6 ) { 2080 return false; 2081 } 2082 } 2083 return true; 2084 }, 2085 2086 "parent": function( elem ) { 2087 return !Expr.pseudos["empty"]( elem ); 2088 }, 2089 2090 // Element/input types 2091 "header": function( elem ) { 2092 return rheader.test( elem.nodeName ); 2093 }, 2094 2095 "input": function( elem ) { 2096 return rinputs.test( elem.nodeName ); 2097 }, 2098 2099 "button": function( elem ) { 2100 var name = elem.nodeName.toLowerCase(); 2101 return name === "input" && elem.type === "button" || name === "button"; 2102 }, 2103 2104 "text": function( elem ) { 2105 var attr; 2106 return elem.nodeName.toLowerCase() === "input" && 2107 elem.type === "text" && 2108 2109 // Support: IE<8 2110 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 2111 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); 2112 }, 2113 2114 // Position-in-collection 2115 "first": createPositionalPseudo(function() { 2116 return [ 0 ]; 2117 }), 2118 2119 "last": createPositionalPseudo(function( matchIndexes, length ) { 2120 return [ length - 1 ]; 2121 }), 2122 2123 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { 2124 return [ argument < 0 ? argument + length : argument ]; 2125 }), 2126 2127 "even": createPositionalPseudo(function( matchIndexes, length ) { 2128 var i = 0; 2129 for ( ; i < length; i += 2 ) { 2130 matchIndexes.push( i ); 2131 } 2132 return matchIndexes; 2133 }), 2134 2135 "odd": createPositionalPseudo(function( matchIndexes, length ) { 2136 var i = 1; 2137 for ( ; i < length; i += 2 ) { 2138 matchIndexes.push( i ); 2139 } 2140 return matchIndexes; 2141 }), 2142 2143 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2144 var i = argument < 0 ? argument + length : argument; 2145 for ( ; --i >= 0; ) { 2146 matchIndexes.push( i ); 2147 } 2148 return matchIndexes; 2149 }), 2150 2151 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { 2152 var i = argument < 0 ? argument + length : argument; 2153 for ( ; ++i < length; ) { 2154 matchIndexes.push( i ); 2155 } 2156 return matchIndexes; 2157 }) 2158 } 2159}; 2160 2161Expr.pseudos["nth"] = Expr.pseudos["eq"]; 2162 2163// Add button/input type pseudos 2164for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 2165 Expr.pseudos[ i ] = createInputPseudo( i ); 2166} 2167for ( i in { submit: true, reset: true } ) { 2168 Expr.pseudos[ i ] = createButtonPseudo( i ); 2169} 2170 2171// Easy API for creating new setFilters 2172function setFilters() {} 2173setFilters.prototype = Expr.filters = Expr.pseudos; 2174Expr.setFilters = new setFilters(); 2175 2176tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 2177 var matched, match, tokens, type, 2178 soFar, groups, preFilters, 2179 cached = tokenCache[ selector + " " ]; 2180 2181 if ( cached ) { 2182 return parseOnly ? 0 : cached.slice( 0 ); 2183 } 2184 2185 soFar = selector; 2186 groups = []; 2187 preFilters = Expr.preFilter; 2188 2189 while ( soFar ) { 2190 2191 // Comma and first run 2192 if ( !matched || (match = rcomma.exec( soFar )) ) { 2193 if ( match ) { 2194 // Don't consume trailing commas as valid 2195 soFar = soFar.slice( match[0].length ) || soFar; 2196 } 2197 groups.push( (tokens = []) ); 2198 } 2199 2200 matched = false; 2201 2202 // Combinators 2203 if ( (match = rcombinators.exec( soFar )) ) { 2204 matched = match.shift(); 2205 tokens.push({ 2206 value: matched, 2207 // Cast descendant combinators to space 2208 type: match[0].replace( rtrim, " " ) 2209 }); 2210 soFar = soFar.slice( matched.length ); 2211 } 2212 2213 // Filters 2214 for ( type in Expr.filter ) { 2215 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || 2216 (match = preFilters[ type ]( match ))) ) { 2217 matched = match.shift(); 2218 tokens.push({ 2219 value: matched, 2220 type: type, 2221 matches: match 2222 }); 2223 soFar = soFar.slice( matched.length ); 2224 } 2225 } 2226 2227 if ( !matched ) { 2228 break; 2229 } 2230 } 2231 2232 // Return the length of the invalid excess 2233 // if we're just parsing 2234 // Otherwise, throw an error or return tokens 2235 return parseOnly ? 2236 soFar.length : 2237 soFar ? 2238 Sizzle.error( selector ) : 2239 // Cache the tokens 2240 tokenCache( selector, groups ).slice( 0 ); 2241}; 2242 2243function toSelector( tokens ) { 2244 var i = 0, 2245 len = tokens.length, 2246 selector = ""; 2247 for ( ; i < len; i++ ) { 2248 selector += tokens[i].value; 2249 } 2250 return selector; 2251} 2252 2253function addCombinator( matcher, combinator, base ) { 2254 var dir = combinator.dir, 2255 skip = combinator.next, 2256 key = skip || dir, 2257 checkNonElements = base && key === "parentNode", 2258 doneName = done++; 2259 2260 return combinator.first ? 2261 // Check against closest ancestor/preceding element 2262 function( elem, context, xml ) { 2263 while ( (elem = elem[ dir ]) ) { 2264 if ( elem.nodeType === 1 || checkNonElements ) { 2265 return matcher( elem, context, xml ); 2266 } 2267 } 2268 return false; 2269 } : 2270 2271 // Check against all ancestor/preceding elements 2272 function( elem, context, xml ) { 2273 var oldCache, uniqueCache, outerCache, 2274 newCache = [ dirruns, doneName ]; 2275 2276 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2277 if ( xml ) { 2278 while ( (elem = elem[ dir ]) ) { 2279 if ( elem.nodeType === 1 || checkNonElements ) { 2280 if ( matcher( elem, context, xml ) ) { 2281 return true; 2282 } 2283 } 2284 } 2285 } else { 2286 while ( (elem = elem[ dir ]) ) { 2287 if ( elem.nodeType === 1 || checkNonElements ) { 2288 outerCache = elem[ expando ] || (elem[ expando ] = {}); 2289 2290 // Support: IE <9 only 2291 // Defend against cloned attroperties (jQuery gh-1709) 2292 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); 2293 2294 if ( skip && skip === elem.nodeName.toLowerCase() ) { 2295 elem = elem[ dir ] || elem; 2296 } else if ( (oldCache = uniqueCache[ key ]) && 2297 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 2298 2299 // Assign to newCache so results back-propagate to previous elements 2300 return (newCache[ 2 ] = oldCache[ 2 ]); 2301 } else { 2302 // Reuse newcache so results back-propagate to previous elements 2303 uniqueCache[ key ] = newCache; 2304 2305 // A match means we're done; a fail means we have to keep checking 2306 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { 2307 return true; 2308 } 2309 } 2310 } 2311 } 2312 } 2313 return false; 2314 }; 2315} 2316 2317function elementMatcher( matchers ) { 2318 return matchers.length > 1 ? 2319 function( elem, context, xml ) { 2320 var i = matchers.length; 2321 while ( i-- ) { 2322 if ( !matchers[i]( elem, context, xml ) ) { 2323 return false; 2324 } 2325 } 2326 return true; 2327 } : 2328 matchers[0]; 2329} 2330 2331function multipleContexts( selector, contexts, results ) { 2332 var i = 0, 2333 len = contexts.length; 2334 for ( ; i < len; i++ ) { 2335 Sizzle( selector, contexts[i], results ); 2336 } 2337 return results; 2338} 2339 2340function condense( unmatched, map, filter, context, xml ) { 2341 var elem, 2342 newUnmatched = [], 2343 i = 0, 2344 len = unmatched.length, 2345 mapped = map != null; 2346 2347 for ( ; i < len; i++ ) { 2348 if ( (elem = unmatched[i]) ) { 2349 if ( !filter || filter( elem, context, xml ) ) { 2350 newUnmatched.push( elem ); 2351 if ( mapped ) { 2352 map.push( i ); 2353 } 2354 } 2355 } 2356 } 2357 2358 return newUnmatched; 2359} 2360 2361function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 2362 if ( postFilter && !postFilter[ expando ] ) { 2363 postFilter = setMatcher( postFilter ); 2364 } 2365 if ( postFinder && !postFinder[ expando ] ) { 2366 postFinder = setMatcher( postFinder, postSelector ); 2367 } 2368 return markFunction(function( seed, results, context, xml ) { 2369 var temp, i, elem, 2370 preMap = [], 2371 postMap = [], 2372 preexisting = results.length, 2373 2374 // Get initial elements from seed or context 2375 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), 2376 2377 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2378 matcherIn = preFilter && ( seed || !selector ) ? 2379 condense( elems, preMap, preFilter, context, xml ) : 2380 elems, 2381 2382 matcherOut = matcher ? 2383 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 2384 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 2385 2386 // ...intermediate processing is necessary 2387 [] : 2388 2389 // ...otherwise use results directly 2390 results : 2391 matcherIn; 2392 2393 // Find primary matches 2394 if ( matcher ) { 2395 matcher( matcherIn, matcherOut, context, xml ); 2396 } 2397 2398 // Apply postFilter 2399 if ( postFilter ) { 2400 temp = condense( matcherOut, postMap ); 2401 postFilter( temp, [], context, xml ); 2402 2403 // Un-match failing elements by moving them back to matcherIn 2404 i = temp.length; 2405 while ( i-- ) { 2406 if ( (elem = temp[i]) ) { 2407 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); 2408 } 2409 } 2410 } 2411 2412 if ( seed ) { 2413 if ( postFinder || preFilter ) { 2414 if ( postFinder ) { 2415 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2416 temp = []; 2417 i = matcherOut.length; 2418 while ( i-- ) { 2419 if ( (elem = matcherOut[i]) ) { 2420 // Restore matcherIn since elem is not yet a final match 2421 temp.push( (matcherIn[i] = elem) ); 2422 } 2423 } 2424 postFinder( null, (matcherOut = []), temp, xml ); 2425 } 2426 2427 // Move matched elements from seed to results to keep them synchronized 2428 i = matcherOut.length; 2429 while ( i-- ) { 2430 if ( (elem = matcherOut[i]) && 2431 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { 2432 2433 seed[temp] = !(results[temp] = elem); 2434 } 2435 } 2436 } 2437 2438 // Add elements to results, through postFinder if defined 2439 } else { 2440 matcherOut = condense( 2441 matcherOut === results ? 2442 matcherOut.splice( preexisting, matcherOut.length ) : 2443 matcherOut 2444 ); 2445 if ( postFinder ) { 2446 postFinder( null, results, matcherOut, xml ); 2447 } else { 2448 push.apply( results, matcherOut ); 2449 } 2450 } 2451 }); 2452} 2453 2454function matcherFromTokens( tokens ) { 2455 var checkContext, matcher, j, 2456 len = tokens.length, 2457 leadingRelative = Expr.relative[ tokens[0].type ], 2458 implicitRelative = leadingRelative || Expr.relative[" "], 2459 i = leadingRelative ? 1 : 0, 2460 2461 // The foundational matcher ensures that elements are reachable from top-level context(s) 2462 matchContext = addCombinator( function( elem ) { 2463 return elem === checkContext; 2464 }, implicitRelative, true ), 2465 matchAnyContext = addCombinator( function( elem ) { 2466 return indexOf( checkContext, elem ) > -1; 2467 }, implicitRelative, true ), 2468 matchers = [ function( elem, context, xml ) { 2469 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 2470 (checkContext = context).nodeType ? 2471 matchContext( elem, context, xml ) : 2472 matchAnyContext( elem, context, xml ) ); 2473 // Avoid hanging onto element (issue #299) 2474 checkContext = null; 2475 return ret; 2476 } ]; 2477 2478 for ( ; i < len; i++ ) { 2479 if ( (matcher = Expr.relative[ tokens[i].type ]) ) { 2480 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; 2481 } else { 2482 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); 2483 2484 // Return special upon seeing a positional matcher 2485 if ( matcher[ expando ] ) { 2486 // Find the next relative operator (if any) for proper handling 2487 j = ++i; 2488 for ( ; j < len; j++ ) { 2489 if ( Expr.relative[ tokens[j].type ] ) { 2490 break; 2491 } 2492 } 2493 return setMatcher( 2494 i > 1 && elementMatcher( matchers ), 2495 i > 1 && toSelector( 2496 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 2497 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) 2498 ).replace( rtrim, "$1" ), 2499 matcher, 2500 i < j && matcherFromTokens( tokens.slice( i, j ) ), 2501 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), 2502 j < len && toSelector( tokens ) 2503 ); 2504 } 2505 matchers.push( matcher ); 2506 } 2507 } 2508 2509 return elementMatcher( matchers ); 2510} 2511 2512function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 2513 var bySet = setMatchers.length > 0, 2514 byElement = elementMatchers.length > 0, 2515 superMatcher = function( seed, context, xml, results, outermost ) { 2516 var elem, j, matcher, 2517 matchedCount = 0, 2518 i = "0", 2519 unmatched = seed && [], 2520 setMatched = [], 2521 contextBackup = outermostContext, 2522 // We must always have either seed elements or outermost context 2523 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), 2524 // Use integer dirruns iff this is the outermost matcher 2525 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), 2526 len = elems.length; 2527 2528 if ( outermost ) { 2529 outermostContext = context === document || context || outermost; 2530 } 2531 2532 // Add elements passing elementMatchers directly to results 2533 // Support: IE<9, Safari 2534 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 2535 for ( ; i !== len && (elem = elems[i]) != null; i++ ) { 2536 if ( byElement && elem ) { 2537 j = 0; 2538 if ( !context && elem.ownerDocument !== document ) { 2539 setDocument( elem ); 2540 xml = !documentIsHTML; 2541 } 2542 while ( (matcher = elementMatchers[j++]) ) { 2543 if ( matcher( elem, context || document, xml) ) { 2544 results.push( elem ); 2545 break; 2546 } 2547 } 2548 if ( outermost ) { 2549 dirruns = dirrunsUnique; 2550 } 2551 } 2552 2553 // Track unmatched elements for set filters 2554 if ( bySet ) { 2555 // They will have gone through all possible matchers 2556 if ( (elem = !matcher && elem) ) { 2557 matchedCount--; 2558 } 2559 2560 // Lengthen the array for every element, matched or not 2561 if ( seed ) { 2562 unmatched.push( elem ); 2563 } 2564 } 2565 } 2566 2567 // `i` is now the count of elements visited above, and adding it to `matchedCount` 2568 // makes the latter nonnegative. 2569 matchedCount += i; 2570 2571 // Apply set filters to unmatched elements 2572 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 2573 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 2574 // no element matchers and no seed. 2575 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 2576 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 2577 // numerically zero. 2578 if ( bySet && i !== matchedCount ) { 2579 j = 0; 2580 while ( (matcher = setMatchers[j++]) ) { 2581 matcher( unmatched, setMatched, context, xml ); 2582 } 2583 2584 if ( seed ) { 2585 // Reintegrate element matches to eliminate the need for sorting 2586 if ( matchedCount > 0 ) { 2587 while ( i-- ) { 2588 if ( !(unmatched[i] || setMatched[i]) ) { 2589 setMatched[i] = pop.call( results ); 2590 } 2591 } 2592 } 2593 2594 // Discard index placeholder values to get only actual matches 2595 setMatched = condense( setMatched ); 2596 } 2597 2598 // Add matches to results 2599 push.apply( results, setMatched ); 2600 2601 // Seedless set matches succeeding multiple successful matchers stipulate sorting 2602 if ( outermost && !seed && setMatched.length > 0 && 2603 ( matchedCount + setMatchers.length ) > 1 ) { 2604 2605 Sizzle.uniqueSort( results ); 2606 } 2607 } 2608 2609 // Override manipulation of globals by nested matchers 2610 if ( outermost ) { 2611 dirruns = dirrunsUnique; 2612 outermostContext = contextBackup; 2613 } 2614 2615 return unmatched; 2616 }; 2617 2618 return bySet ? 2619 markFunction( superMatcher ) : 2620 superMatcher; 2621} 2622 2623compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 2624 var i, 2625 setMatchers = [], 2626 elementMatchers = [], 2627 cached = compilerCache[ selector + " " ]; 2628 2629 if ( !cached ) { 2630 // Generate a function of recursive functions that can be used to check each element 2631 if ( !match ) { 2632 match = tokenize( selector ); 2633 } 2634 i = match.length; 2635 while ( i-- ) { 2636 cached = matcherFromTokens( match[i] ); 2637 if ( cached[ expando ] ) { 2638 setMatchers.push( cached ); 2639 } else { 2640 elementMatchers.push( cached ); 2641 } 2642 } 2643 2644 // Cache the compiled function 2645 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 2646 2647 // Save selector and tokenization 2648 cached.selector = selector; 2649 } 2650 return cached; 2651}; 2652 2653/** 2654 * A low-level selection function that works with Sizzle's compiled 2655 * selector functions 2656 * @param {String|Function} selector A selector or a pre-compiled 2657 * selector function built with Sizzle.compile 2658 * @param {Element} context 2659 * @param {Array} [results] 2660 * @param {Array} [seed] A set of elements to match against 2661 */ 2662select = Sizzle.select = function( selector, context, results, seed ) { 2663 var i, tokens, token, type, find, 2664 compiled = typeof selector === "function" && selector, 2665 match = !seed && tokenize( (selector = compiled.selector || selector) ); 2666 2667 results = results || []; 2668 2669 // Try to minimize operations if there is only one selector in the list and no seed 2670 // (the latter of which guarantees us context) 2671 if ( match.length === 1 ) { 2672 2673 // Reduce context if the leading compound selector is an ID 2674 tokens = match[0] = match[0].slice( 0 ); 2675 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && 2676 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { 2677 2678 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; 2679 if ( !context ) { 2680 return results; 2681 2682 // Precompiled matchers will still verify ancestry, so step up a level 2683 } else if ( compiled ) { 2684 context = context.parentNode; 2685 } 2686 2687 selector = selector.slice( tokens.shift().value.length ); 2688 } 2689 2690 // Fetch a seed set for right-to-left matching 2691 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; 2692 while ( i-- ) { 2693 token = tokens[i]; 2694 2695 // Abort if we hit a combinator 2696 if ( Expr.relative[ (type = token.type) ] ) { 2697 break; 2698 } 2699 if ( (find = Expr.find[ type ]) ) { 2700 // Search, expanding context for leading sibling combinators 2701 if ( (seed = find( 2702 token.matches[0].replace( runescape, funescape ), 2703 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context 2704 )) ) { 2705 2706 // If seed is empty or no tokens remain, we can return early 2707 tokens.splice( i, 1 ); 2708 selector = seed.length && toSelector( tokens ); 2709 if ( !selector ) { 2710 push.apply( results, seed ); 2711 return results; 2712 } 2713 2714 break; 2715 } 2716 } 2717 } 2718 } 2719 2720 // Compile and execute a filtering function if one is not provided 2721 // Provide `match` to avoid retokenization if we modified the selector above 2722 ( compiled || compile( selector, match ) )( 2723 seed, 2724 context, 2725 !documentIsHTML, 2726 results, 2727 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 2728 ); 2729 return results; 2730}; 2731 2732// One-time assignments 2733 2734// Sort stability 2735support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; 2736 2737// Support: Chrome 14-35+ 2738// Always assume duplicates if they aren't passed to the comparison function 2739support.detectDuplicates = !!hasDuplicate; 2740 2741// Initialize against the default document 2742setDocument(); 2743 2744// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 2745// Detached nodes confoundingly follow *each other* 2746support.sortDetached = assert(function( el ) { 2747 // Should return 1, but returns 4 (following) 2748 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; 2749}); 2750 2751// Support: IE<8 2752// Prevent attribute/property "interpolation" 2753// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 2754if ( !assert(function( el ) { 2755 el.innerHTML = "<a href='#'></a>"; 2756 return el.firstChild.getAttribute("href") === "#" ; 2757}) ) { 2758 addHandle( "type|href|height|width", function( elem, name, isXML ) { 2759 if ( !isXML ) { 2760 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 2761 } 2762 }); 2763} 2764 2765// Support: IE<9 2766// Use defaultValue in place of getAttribute("value") 2767if ( !support.attributes || !assert(function( el ) { 2768 el.innerHTML = "<input/>"; 2769 el.firstChild.setAttribute( "value", "" ); 2770 return el.firstChild.getAttribute( "value" ) === ""; 2771}) ) { 2772 addHandle( "value", function( elem, name, isXML ) { 2773 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 2774 return elem.defaultValue; 2775 } 2776 }); 2777} 2778 2779// Support: IE<9 2780// Use getAttributeNode to fetch booleans when getAttribute lies 2781if ( !assert(function( el ) { 2782 return el.getAttribute("disabled") == null; 2783}) ) { 2784 addHandle( booleans, function( elem, name, isXML ) { 2785 var val; 2786 if ( !isXML ) { 2787 return elem[ name ] === true ? name.toLowerCase() : 2788 (val = elem.getAttributeNode( name )) && val.specified ? 2789 val.value : 2790 null; 2791 } 2792 }); 2793} 2794 2795return Sizzle; 2796 2797})( window ); 2798 2799 2800 2801jQuery.find = Sizzle; 2802jQuery.expr = Sizzle.selectors; 2803 2804// Deprecated 2805jQuery.expr[ ":" ] = jQuery.expr.pseudos; 2806jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 2807jQuery.text = Sizzle.getText; 2808jQuery.isXMLDoc = Sizzle.isXML; 2809jQuery.contains = Sizzle.contains; 2810jQuery.escapeSelector = Sizzle.escape; 2811 2812 2813 2814 2815var dir = function( elem, dir, until ) { 2816 var matched = [], 2817 truncate = until !== undefined; 2818 2819 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 2820 if ( elem.nodeType === 1 ) { 2821 if ( truncate && jQuery( elem ).is( until ) ) { 2822 break; 2823 } 2824 matched.push( elem ); 2825 } 2826 } 2827 return matched; 2828}; 2829 2830 2831var siblings = function( n, elem ) { 2832 var matched = []; 2833 2834 for ( ; n; n = n.nextSibling ) { 2835 if ( n.nodeType === 1 && n !== elem ) { 2836 matched.push( n ); 2837 } 2838 } 2839 2840 return matched; 2841}; 2842 2843 2844var rneedsContext = jQuery.expr.match.needsContext; 2845
2846var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 2847 2848 2849 2850var risSimple = /^.[^:#\[\.,]*$/; 2851 2852// Implement the identical functionality for filter and not 2853function winnow( elements, qualifier, not ) { 2854 if ( jQuery.isFunction( qualifier ) ) { 2855 return jQuery.grep( elements, function( elem, i ) { 2856 return !!qualifier.call( elem, i, elem ) !== not; 2857 } ); 2858 } 2859 2860 // Single element 2861 if ( qualifier.nodeType ) { 2862 return jQuery.grep( elements, function( elem ) { 2863 return ( elem === qualifier ) !== not; 2864 } ); 2865 } 2866 2867 // Arraylike of elements (jQuery, arguments, Array) 2868 if ( typeof qualifier !== "string" ) { 2869 return jQuery.grep( elements, function( elem ) { 2870 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 2871 } ); 2872 } 2873 2874 // Simple selector that can be filtered directly, removing non-Elements 2875 if ( risSimple.test( qualifier ) ) { 2876 return jQuery.filter( qualifier, elements, not ); 2877 } 2878 2879 // Complex selector, compare the two sets, removing non-Elements 2880 qualifier = jQuery.filter( qualifier, elements ); 2881 return jQuery.grep( elements, function( elem ) { 2882 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; 2883 } ); 2884} 2885 2886jQuery.filter = function( expr, elems, not ) { 2887 var elem = elems[ 0 ]; 2888 2889 if ( not ) { 2890 expr = ":not(" + expr + ")"; 2891 } 2892 2893 if ( elems.length === 1 && elem.nodeType === 1 ) { 2894 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 2895 } 2896 2897 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 2898 return elem.nodeType === 1;
vendor: 8,116 bytes, lines 2899-3227
2899 } ) ); 2900}; 2901 2902jQuery.fn.extend( { 2903 find: function( selector ) { 2904 var i, ret, 2905 len = this.length, 2906 self = this; 2907 2908 if ( typeof selector !== "string" ) { 2909 return this.pushStack( jQuery( selector ).filter( function() { 2910 for ( i = 0; i < len; i++ ) { 2911 if ( jQuery.contains( self[ i ], this ) ) { 2912 return true; 2913 } 2914 } 2915 } ) ); 2916 } 2917 2918 ret = this.pushStack( [] ); 2919 2920 for ( i = 0; i < len; i++ ) { 2921 jQuery.find( selector, self[ i ], ret ); 2922 } 2923 2924 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 2925 }, 2926 filter: function( selector ) { 2927 return this.pushStack( winnow( this, selector || [], false ) ); 2928 }, 2929 not: function( selector ) { 2930 return this.pushStack( winnow( this, selector || [], true ) ); 2931 }, 2932 is: function( selector ) { 2933 return !!winnow( 2934 this, 2935 2936 // If this is a positional/relative selector, check membership in the returned set 2937 // so $("p:first").is("p:last") won't return true for a doc with two "p". 2938 typeof selector === "string" && rneedsContext.test( selector ) ? 2939 jQuery( selector ) : 2940 selector || [], 2941 false 2942 ).length; 2943 } 2944} ); 2945 2946 2947// Initialize a jQuery object 2948 2949 2950// A central reference to the root jQuery(document) 2951var rootjQuery, 2952 2953 // A simple way to check for HTML strings 2954 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 2955 // Strict HTML recognition (#11290: must start with <) 2956 // Shortcut simple #id case for speed 2957 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 2958 2959 init = jQuery.fn.init = function( selector, context, root ) { 2960 var match, elem; 2961 2962 // HANDLE: $(""), $(null), $(undefined), $(false) 2963 if ( !selector ) { 2964 return this; 2965 } 2966 2967 // Method init() accepts an alternate rootjQuery 2968 // so migrate can support jQuery.sub (gh-2101) 2969 root = root || rootjQuery; 2970 2971 // Handle HTML strings 2972 if ( typeof selector === "string" ) { 2973 if ( selector[ 0 ] === "<" && 2974 selector[ selector.length - 1 ] === ">" && 2975 selector.length >= 3 ) { 2976 2977 // Assume that strings that start and end with <> are HTML and skip the regex check 2978 match = [ null, selector, null ]; 2979 2980 } else { 2981 match = rquickExpr.exec( selector ); 2982 } 2983 2984 // Match html or make sure no context is specified for #id 2985 if ( match && ( match[ 1 ] || !context ) ) { 2986 2987 // HANDLE: $(html) -> $(array) 2988 if ( match[ 1 ] ) { 2989 context = context instanceof jQuery ? context[ 0 ] : context; 2990 2991 // Option to run scripts is true for back-compat 2992 // Intentionally let the error be thrown if parseHTML is not present 2993 jQuery.merge( this, jQuery.parseHTML( 2994 match[ 1 ], 2995 context && context.nodeType ? context.ownerDocument || context : document, 2996 true 2997 ) ); 2998 2999 // HANDLE: $(html, props) 3000 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 3001 for ( match in context ) { 3002 3003 // Properties of context are called as methods if possible 3004 if ( jQuery.isFunction( this[ match ] ) ) { 3005 this[ match ]( context[ match ] ); 3006 3007 // ...and otherwise set as attributes 3008 } else { 3009 this.attr( match, context[ match ] ); 3010 } 3011 } 3012 } 3013 3014 return this; 3015 3016 // HANDLE: $(#id) 3017 } else { 3018 elem = document.getElementById( match[ 2 ] ); 3019 3020 if ( elem ) { 3021 3022 // Inject the element directly into the jQuery object 3023 this[ 0 ] = elem; 3024 this.length = 1; 3025 } 3026 return this; 3027 } 3028 3029 // HANDLE: $(expr, $(...)) 3030 } else if ( !context || context.jquery ) { 3031 return ( context || root ).find( selector ); 3032 3033 // HANDLE: $(expr, context) 3034 // (which is just equivalent to: $(context).find(expr) 3035 } else { 3036 return this.constructor( context ).find( selector ); 3037 } 3038 3039 // HANDLE: $(DOMElement) 3040 } else if ( selector.nodeType ) { 3041 this[ 0 ] = selector; 3042 this.length = 1; 3043 return this; 3044 3045 // HANDLE: $(function) 3046 // Shortcut for document ready 3047 } else if ( jQuery.isFunction( selector ) ) { 3048 return root.ready !== undefined ? 3049 root.ready( selector ) : 3050 3051 // Execute immediately if ready is not present 3052 selector( jQuery ); 3053 } 3054 3055 return jQuery.makeArray( selector, this ); 3056 }; 3057 3058// Give the init function the jQuery prototype for later instantiation 3059init.prototype = jQuery.fn; 3060 3061// Initialize central reference 3062rootjQuery = jQuery( document ); 3063 3064 3065var rparentsprev = /^(?:parents|prev(?:Until|All))/, 3066 3067 // Methods guaranteed to produce a unique set when starting from a unique set 3068 guaranteedUnique = { 3069 children: true, 3070 contents: true, 3071 next: true, 3072 prev: true 3073 }; 3074 3075jQuery.fn.extend( { 3076 has: function( target ) { 3077 var targets = jQuery( target, this ), 3078 l = targets.length; 3079 3080 return this.filter( function() { 3081 var i = 0; 3082 for ( ; i < l; i++ ) { 3083 if ( jQuery.contains( this, targets[ i ] ) ) { 3084 return true; 3085 } 3086 } 3087 } ); 3088 }, 3089 3090 closest: function( selectors, context ) { 3091 var cur, 3092 i = 0, 3093 l = this.length, 3094 matched = [], 3095 targets = typeof selectors !== "string" && jQuery( selectors ); 3096 3097 // Positional selectors never match, since there's no _selection_ context 3098 if ( !rneedsContext.test( selectors ) ) { 3099 for ( ; i < l; i++ ) { 3100 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 3101 3102 // Always skip document fragments 3103 if ( cur.nodeType < 11 && ( targets ? 3104 targets.index( cur ) > -1 : 3105 3106 // Don't pass non-elements to Sizzle 3107 cur.nodeType === 1 && 3108 jQuery.find.matchesSelector( cur, selectors ) ) ) { 3109 3110 matched.push( cur ); 3111 break; 3112 } 3113 } 3114 } 3115 } 3116 3117 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 3118 }, 3119 3120 // Determine the position of an element within the set 3121 index: function( elem ) { 3122 3123 // No argument, return index in parent 3124 if ( !elem ) { 3125 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 3126 } 3127 3128 // Index in selector 3129 if ( typeof elem === "string" ) { 3130 return indexOf.call( jQuery( elem ), this[ 0 ] ); 3131 } 3132 3133 // Locate the position of the desired element 3134 return indexOf.call( this, 3135 3136 // If it receives a jQuery object, the first element is used 3137 elem.jquery ? elem[ 0 ] : elem 3138 ); 3139 }, 3140 3141 add: function( selector, context ) { 3142 return this.pushStack( 3143 jQuery.uniqueSort( 3144 jQuery.merge( this.get(), jQuery( selector, context ) ) 3145 ) 3146 ); 3147 }, 3148 3149 addBack: function( selector ) { 3150 return this.add( selector == null ? 3151 this.prevObject : this.prevObject.filter( selector ) 3152 ); 3153 } 3154} ); 3155 3156function sibling( cur, dir ) { 3157 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 3158 return cur; 3159} 3160 3161jQuery.each( { 3162 parent: function( elem ) { 3163 var parent = elem.parentNode; 3164 return parent && parent.nodeType !== 11 ? parent : null; 3165 }, 3166 parents: function( elem ) { 3167 return dir( elem, "parentNode" ); 3168 }, 3169 parentsUntil: function( elem, i, until ) { 3170 return dir( elem, "parentNode", until ); 3171 }, 3172 next: function( elem ) { 3173 return sibling( elem, "nextSibling" ); 3174 }, 3175 prev: function( elem ) { 3176 return sibling( elem, "previousSibling" ); 3177 }, 3178 nextAll: function( elem ) { 3179 return dir( elem, "nextSibling" ); 3180 }, 3181 prevAll: function( elem ) { 3182 return dir( elem, "previousSibling" ); 3183 }, 3184 nextUntil: function( elem, i, until ) { 3185 return dir( elem, "nextSibling", until ); 3186 }, 3187 prevUntil: function( elem, i, until ) { 3188 return dir( elem, "previousSibling", until ); 3189 }, 3190 siblings: function( elem ) { 3191 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 3192 }, 3193 children: function( elem ) { 3194 return siblings( elem.firstChild ); 3195 }, 3196 contents: function( elem ) { 3197 return elem.contentDocument || jQuery.merge( [], elem.childNodes ); 3198 } 3199}, function( name, fn ) { 3200 jQuery.fn[ name ] = function( until, selector ) { 3201 var matched = jQuery.map( this, fn, until ); 3202 3203 if ( name.slice( -5 ) !== "Until" ) { 3204 selector = until; 3205 } 3206 3207 if ( selector && typeof selector === "string" ) { 3208 matched = jQuery.filter( selector, matched ); 3209 } 3210 3211 if ( this.length > 1 ) { 3212 3213 // Remove duplicates 3214 if ( !guaranteedUnique[ name ] ) { 3215 jQuery.uniqueSort( matched ); 3216 } 3217 3218 // Reverse order for parents* and prev-derivatives 3219 if ( rparentsprev.test( name ) ) { 3220 matched.reverse(); 3221 } 3222 } 3223 3224 return this.pushStack( matched ); 3225 }; 3226} ); 3227var rnot
vendor: 6,300 bytes, lines 3227-3488
3227htmlwhite = ( /[^\x20\t\r\n\f]+/g ); 3228 3229 3230 3231// Convert String-formatted options into Object-formatted ones 3232function createOptions( options ) { 3233 var object = {}; 3234 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 3235 object[ flag ] = true; 3236 } ); 3237 return object; 3238} 3239 3240/* 3241 * Create a callback list using the following parameters: 3242 * 3243 * options: an optional list of space-separated options that will change how 3244 * the callback list behaves or a more traditional option object 3245 * 3246 * By default a callback list will act like an event callback list and can be 3247 * "fired" multiple times. 3248 * 3249 * Possible options: 3250 * 3251 * once: will ensure the callback list can only be fired once (like a Deferred) 3252 * 3253 * memory: will keep track of previous values and will call any callback added 3254 * after the list has been fired right away with the latest "memorized" 3255 * values (like a Deferred) 3256 * 3257 * unique: will ensure a callback can only be added once (no duplicate in the list) 3258 * 3259 * stopOnFalse: interrupt callings when a callback returns false 3260 * 3261 */ 3262jQuery.Callbacks = function( options ) { 3263 3264 // Convert options from String-formatted to Object-formatted if needed 3265 // (we check in cache first) 3266 options = typeof options === "string" ? 3267 createOptions( options ) : 3268 jQuery.extend( {}, options ); 3269 3270 var // Flag to know if list is currently firing 3271 firing, 3272 3273 // Last fire value for non-forgettable lists 3274 memory, 3275 3276 // Flag to know if list was already fired 3277 fired, 3278 3279 // Flag to prevent firing 3280 locked, 3281 3282 // Actual callback list 3283 list = [], 3284 3285 // Queue of execution data for repeatable lists 3286 queue = [], 3287 3288 // Index of currently firing callback (modified by add/remove as needed) 3289 firingIndex = -1, 3290 3291 // Fire callbacks 3292 fire = function() { 3293 3294 // Enforce single-firing 3295 locked = options.once; 3296 3297 // Execute callbacks for all pending executions, 3298 // respecting firingIndex overrides and runtime changes 3299 fired = firing = true; 3300 for ( ; queue.length; firingIndex = -1 ) { 3301 memory = queue.shift(); 3302 while ( ++firingIndex < list.length ) { 3303 3304 // Run callback and check for early termination 3305 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 3306 options.stopOnFalse ) { 3307 3308 // Jump to end and forget the data so .add doesn't re-fire 3309 firingIndex = list.length; 3310 memory = false; 3311 } 3312 } 3313 } 3314 3315 // Forget the data if we're done with it 3316 if ( !options.memory ) { 3317 memory = false; 3318 } 3319 3320 firing = false; 3321 3322 // Clean up if we're done firing for good 3323 if ( locked ) { 3324 3325 // Keep an empty list if we have data for future add calls 3326 if ( memory ) { 3327 list = []; 3328 3329 // Otherwise, this object is spent 3330 } else { 3331 list = ""; 3332 } 3333 } 3334 }, 3335 3336 // Actual Callbacks object 3337 self = { 3338 3339 // Add a callback or a collection of callbacks to the list 3340 add: function() { 3341 if ( list ) { 3342 3343 // If we have memory from a past run, we should fire after adding 3344 if ( memory && !firing ) { 3345 firingIndex = list.length - 1; 3346 queue.push( memory ); 3347 } 3348 3349 ( function add( args ) { 3350 jQuery.each( args, function( _, arg ) { 3351 if ( jQuery.isFunction( arg ) ) { 3352 if ( !options.unique || !self.has( arg ) ) { 3353 list.push( arg ); 3354 } 3355 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { 3356 3357 // Inspect recursively 3358 add( arg ); 3359 } 3360 } ); 3361 } )( arguments ); 3362 3363 if ( memory && !firing ) { 3364 fire(); 3365 } 3366 } 3367 return this; 3368 }, 3369 3370 // Remove a callback from the list 3371 remove: function() { 3372 jQuery.each( arguments, function( _, arg ) { 3373 var index; 3374 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 3375 list.splice( index, 1 ); 3376 3377 // Handle firing indexes 3378 if ( index <= firingIndex ) { 3379 firingIndex--; 3380 } 3381 } 3382 } ); 3383 return this; 3384 }, 3385 3386 // Check if a given callback is in the list. 3387 // If no argument is given, return whether or not list has callbacks attached. 3388 has: function( fn ) { 3389 return fn ? 3390 jQuery.inArray( fn, list ) > -1 : 3391 list.length > 0; 3392 }, 3393 3394 // Remove all callbacks from the list 3395 empty: function() { 3396 if ( list ) { 3397 list = []; 3398 } 3399 return this; 3400 }, 3401 3402 // Disable .fire and .add 3403 // Abort any current/pending executions 3404 // Clear all callbacks and values 3405 disable: function() { 3406 locked = queue = []; 3407 list = memory = ""; 3408 return this; 3409 }, 3410 disabled: function() { 3411 return !list; 3412 }, 3413 3414 // Disable .fire 3415 // Also disable .add unless we have memory (since it would have no effect) 3416 // Abort any pending executions 3417 lock: function() { 3418 locked = queue = []; 3419 if ( !memory && !firing ) { 3420 list = memory = ""; 3421 } 3422 return this; 3423 }, 3424 locked: function() { 3425 return !!locked; 3426 }, 3427 3428 // Call all callbacks with the given context and arguments 3429 fireWith: function( context, args ) { 3430 if ( !locked ) { 3431 args = args || []; 3432 args = [ context, args.slice ? args.slice() : args ]; 3433 queue.push( args ); 3434 if ( !firing ) { 3435 fire(); 3436 } 3437 } 3438 return this; 3439 }, 3440 3441 // Call all the callbacks with the given arguments 3442 fire: function() { 3443 self.fireWith( this, arguments ); 3444 return this; 3445 }, 3446 3447 // To know if the callbacks have already been called at least once 3448 fired: function() { 3449 return !!fired; 3450 } 3451 }; 3452 3453 return self; 3454}; 3455 3456 3457function Identity( v ) { 3458 return v; 3459} 3460function Thrower( ex ) { 3461 throw ex; 3462} 3463 3464function adoptValue( value, resolve, reject ) { 3465 var method; 3466 3467 try { 3468 3469 // Check for promise aspect first to privilege synchronous behavior 3470 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { 3471 method.call( value ).done( resolve ).fail( reject ); 3472 3473 // Other thenables 3474 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { 3475 method.call( value, resolve, reject ); 3476 3477 // Other non-thenables 3478 } else { 3479 3480 // Support: Android 4.0 only 3481 // Strict mode functions invoked without .call/.apply get global-object context 3482 resolve.call( undefined, value ); 3483 } 3484 3485 // For Promises/A+, convert exceptions into rejections 3486 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 3487 // Deferred#then to conditionally suppress rejection. 3488 } catch (
vendor: 10,289 bytes, lines 3488-3852
3488 value ) { 3489 3490 // Support: Android 4.0 only 3491 // Strict mode functions invoked without .call/.apply get global-object context 3492 reject.call( undefined, value ); 3493 } 3494} 3495 3496jQuery.extend( { 3497 3498 Deferred: function( func ) { 3499 var tuples = [ 3500 3501 // action, add listener, callbacks, 3502 // ... .then handlers, argument index, [final state] 3503 [ "notify", "progress", jQuery.Callbacks( "memory" ), 3504 jQuery.Callbacks( "memory" ), 2 ], 3505 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 3506 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 3507 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 3508 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 3509 ], 3510 state = "pending", 3511 promise = { 3512 state: function() { 3513 return state; 3514 }, 3515 always: function() { 3516 deferred.done( arguments ).fail( arguments ); 3517 return this; 3518 }, 3519 "catch": function( fn ) { 3520 return promise.then( null, fn ); 3521 }, 3522 3523 // Keep pipe for back-compat 3524 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 3525 var fns = arguments; 3526 3527 return jQuery.Deferred( function( newDefer ) { 3528 jQuery.each( tuples, function( i, tuple ) { 3529 3530 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 3531 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 3532 3533 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 3534 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 3535 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 3536 deferred[ tuple[ 1 ] ]( function() { 3537 var returned = fn && fn.apply( this, arguments ); 3538 if ( returned && jQuery.isFunction( returned.promise ) ) { 3539 returned.promise() 3540 .progress( newDefer.notify ) 3541 .done( newDefer.resolve ) 3542 .fail( newDefer.reject ); 3543 } else { 3544 newDefer[ tuple[ 0 ] + "With" ]( 3545 this, 3546 fn ? [ returned ] : arguments 3547 ); 3548 } 3549 } ); 3550 } ); 3551 fns = null; 3552 } ).promise(); 3553 }, 3554 then: function( onFulfilled, onRejected, onProgress ) { 3555 var maxDepth = 0; 3556 function resolve( depth, deferred, handler, special ) { 3557 return function() { 3558 var that = this, 3559 args = arguments, 3560 mightThrow = function() { 3561 var returned, then; 3562 3563 // Support: Promises/A+ section 2.3.3.3.3 3564 // https://promisesaplus.com/#point-59 3565 // Ignore double-resolution attempts 3566 if ( depth < maxDepth ) { 3567 return; 3568 } 3569 3570 returned = handler.apply( that, args ); 3571 3572 // Support: Promises/A+ section 2.3.1 3573 // https://promisesaplus.com/#point-48 3574 if ( returned === deferred.promise() ) { 3575 throw new TypeError( "Thenable self-resolution" ); 3576 } 3577 3578 // Support: Promises/A+ sections 2.3.3.1, 3.5 3579 // https://promisesaplus.com/#point-54 3580 // https://promisesaplus.com/#point-75 3581 // Retrieve `then` only once 3582 then = returned && 3583 3584 // Support: Promises/A+ section 2.3.4 3585 // https://promisesaplus.com/#point-64 3586 // Only check objects and functions for thenability 3587 ( typeof returned === "object" || 3588 typeof returned === "function" ) && 3589 returned.then; 3590 3591 // Handle a returned thenable 3592 if ( jQuery.isFunction( then ) ) { 3593 3594 // Special processors (notify) just wait for resolution 3595 if ( special ) { 3596 then.call( 3597 returned, 3598 resolve( maxDepth, deferred, Identity, special ), 3599 resolve( maxDepth, deferred, Thrower, special ) 3600 ); 3601 3602 // Normal processors (resolve) also hook into progress 3603 } else { 3604 3605 // ...and disregard older resolution values 3606 maxDepth++; 3607 3608 then.call( 3609 returned, 3610 resolve( maxDepth, deferred, Identity, special ), 3611 resolve( maxDepth, deferred, Thrower, special ), 3612 resolve( maxDepth, deferred, Identity, 3613 deferred.notifyWith ) 3614 ); 3615 } 3616 3617 // Handle all other returned values 3618 } else { 3619 3620 // Only substitute handlers pass on context 3621 // and multiple values (non-spec behavior) 3622 if ( handler !== Identity ) { 3623 that = undefined; 3624 args = [ returned ]; 3625 } 3626 3627 // Process the value(s) 3628 // Default process is resolve 3629 ( special || deferred.resolveWith )( that, args ); 3630 } 3631 }, 3632 3633 // Only normal processors (resolve) catch and reject exceptions 3634 process = special ? 3635 mightThrow : 3636 function() { 3637 try { 3638 mightThrow(); 3639 } catch ( e ) { 3640 3641 if ( jQuery.Deferred.exceptionHook ) { 3642 jQuery.Deferred.exceptionHook( e, 3643 process.stackTrace ); 3644 } 3645 3646 // Support: Promises/A+ section 2.3.3.3.4.1 3647 // https://promisesaplus.com/#point-61 3648 // Ignore post-resolution exceptions 3649 if ( depth + 1 >= maxDepth ) { 3650 3651 // Only substitute handlers pass on context 3652 // and multiple values (non-spec behavior) 3653 if ( handler !== Thrower ) { 3654 that = undefined; 3655 args = [ e ]; 3656 } 3657 3658 deferred.rejectWith( that, args ); 3659 } 3660 } 3661 }; 3662 3663 // Support: Promises/A+ section 2.3.3.3.1 3664 // https://promisesaplus.com/#point-57 3665 // Re-resolve promises immediately to dodge false rejection from 3666 // subsequent errors 3667 if ( depth ) { 3668 process(); 3669 } else { 3670 3671 // Call an optional hook to record the stack, in case of exception 3672 // since it's otherwise lost when execution goes async 3673 if ( jQuery.Deferred.getStackHook ) { 3674 process.stackTrace = jQuery.Deferred.getStackHook(); 3675 } 3676 window.setTimeout( process ); 3677 } 3678 }; 3679 } 3680 3681 return jQuery.Deferred( function( newDefer ) { 3682 3683 // progress_handlers.add( ... ) 3684 tuples[ 0 ][ 3 ].add( 3685 resolve( 3686 0, 3687 newDefer, 3688 jQuery.isFunction( onProgress ) ? 3689 onProgress : 3690 Identity, 3691 newDefer.notifyWith 3692 ) 3693 ); 3694 3695 // fulfilled_handlers.add( ... ) 3696 tuples[ 1 ][ 3 ].add( 3697 resolve( 3698 0, 3699 newDefer, 3700 jQuery.isFunction( onFulfilled ) ? 3701 onFulfilled : 3702 Identity 3703 ) 3704 ); 3705 3706 // rejected_handlers.add( ... ) 3707 tuples[ 2 ][ 3 ].add( 3708 resolve( 3709 0, 3710 newDefer, 3711 jQuery.isFunction( onRejected ) ? 3712 onRejected : 3713 Thrower 3714 ) 3715 ); 3716 } ).promise(); 3717 }, 3718 3719 // Get a promise for this deferred 3720 // If obj is provided, the promise aspect is added to the object 3721 promise: function( obj ) { 3722 return obj != null ? jQuery.extend( obj, promise ) : promise; 3723 } 3724 }, 3725 deferred = {}; 3726 3727 // Add list-specific methods 3728 jQuery.each( tuples, function( i, tuple ) { 3729 var list = tuple[ 2 ], 3730 stateString = tuple[ 5 ]; 3731 3732 // promise.progress = list.add 3733 // promise.done = list.add 3734 // promise.fail = list.add 3735 promise[ tuple[ 1 ] ] = list.add; 3736 3737 // Handle state 3738 if ( stateString ) { 3739 list.add( 3740 function() { 3741 3742 // state = "resolved" (i.e., fulfilled) 3743 // state = "rejected" 3744 state = stateString; 3745 }, 3746 3747 // rejected_callbacks.disable 3748 // fulfilled_callbacks.disable 3749 tuples[ 3 - i ][ 2 ].disable, 3750 3751 // progress_callbacks.lock 3752 tuples[ 0 ][ 2 ].lock 3753 ); 3754 } 3755 3756 // progress_handlers.fire 3757 // fulfilled_handlers.fire 3758 // rejected_handlers.fire 3759 list.add( tuple[ 3 ].fire ); 3760 3761 // deferred.notify = function() { deferred.notifyWith(...) } 3762 // deferred.resolve = function() { deferred.resolveWith(...) } 3763 // deferred.reject = function() { deferred.rejectWith(...) } 3764 deferred[ tuple[ 0 ] ] = function() { 3765 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 3766 return this; 3767 }; 3768 3769 // deferred.notifyWith = list.fireWith 3770 // deferred.resolveWith = list.fireWith 3771 // deferred.rejectWith = list.fireWith 3772 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 3773 } ); 3774 3775 // Make the deferred a promise 3776 promise.promise( deferred ); 3777 3778 // Call given func if any 3779 if ( func ) { 3780 func.call( deferred, deferred ); 3781 } 3782 3783 // All done! 3784 return deferred; 3785 }, 3786 3787 // Deferred helper 3788 when: function( singleValue ) { 3789 var 3790 3791 // count of uncompleted subordinates 3792 remaining = arguments.length, 3793 3794 // count of unprocessed arguments 3795 i = remaining, 3796 3797 // subordinate fulfillment data 3798 resolveContexts = Array( i ), 3799 resolveValues = slice.call( arguments ), 3800 3801 // the master Deferred 3802 master = jQuery.Deferred(), 3803 3804 // subordinate callback factory 3805 updateFunc = function( i ) { 3806 return function( value ) { 3807 resolveContexts[ i ] = this; 3808 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 3809 if ( !( --remaining ) ) { 3810 master.resolveWith( resolveContexts, resolveValues ); 3811 } 3812 }; 3813 }; 3814 3815 // Single- and empty arguments are adopted like Promise.resolve 3816 if ( remaining <= 1 ) { 3817 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject ); 3818 3819 // Use .then() to unwrap secondary thenables (cf. gh-3000) 3820 if ( master.state() === "pending" || 3821 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 3822 3823 return master.then(); 3824 } 3825 } 3826 3827 // Multiple arguments are aggregated like Promise.all array elements 3828 while ( i-- ) { 3829 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); 3830 } 3831 3832 return master.promise(); 3833 } 3834} ); 3835 3836 3837// These usually indicate a programmer mistake during development, 3838// warn about them ASAP rather than swallowing them by default. 3839var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 3840 3841jQuery.Deferred.exceptionHook = function( error, stack ) { 3842 3843 // Support: IE 8 - 9 only 3844 // Console exists when dev tools are open, which can happen at any time 3845 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 3846 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 3847 } 3848}; 3849 3850 3851 3852
vendor: 1,236 bytes, lines 3853-3913
3853jQuery.readyException = function( error ) { 3854 window.setTimeout( function() { 3855 throw error; 3856 } ); 3857}; 3858 3859 3860 3861 3862// The deferred used on DOM ready 3863var readyList = jQuery.Deferred(); 3864 3865jQuery.fn.ready = function( fn ) { 3866 3867 readyList 3868 .then( fn ) 3869 3870 // Wrap jQuery.readyException in a function so that the lookup 3871 // happens at the time of error handling instead of callback 3872 // registration. 3873 .catch( function( error ) { 3874 jQuery.readyException( error ); 3875 } ); 3876 3877 return this; 3878}; 3879 3880jQuery.extend( { 3881 3882 // Is the DOM ready to be used? Set to true once it occurs. 3883 isReady: false, 3884 3885 // A counter to track how many items to wait for before 3886 // the ready event fires. See #6781 3887 readyWait: 1, 3888 3889 // Hold (or release) the ready event 3890 holdReady: function( hold ) { 3891 if ( hold ) { 3892 jQuery.readyWait++; 3893 } else { 3894 jQuery.ready( true ); 3895 } 3896 }, 3897 3898 // Handle when the DOM is ready 3899 ready: function( wait ) { 3900 3901 // Abort if there are pending holds or we're already ready 3902 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 3903 return; 3904 } 3905 3906 // Remember that the DOM is ready 3907 jQuery.isReady = true; 3908 3909 // If a normal DOM Ready event fired, decrement, and wait if need be 3910 if ( wait !== true && --jQuery.readyWait > 0 ) { 3911 return; 3912 } 3913
vendor: 4,098 bytes, lines 3914-4095
3914 // If there are functions bound, to execute 3915 readyList.resolveWith( document, [ jQuery ] ); 3916 } 3917} ); 3918 3919jQuery.ready.then = readyList.then; 3920 3921// The ready event handler and self cleanup method 3922function completed() { 3923 document.removeEventListener( "DOMContentLoaded", completed ); 3924 window.removeEventListener( "load", completed ); 3925 jQuery.ready(); 3926} 3927 3928// Catch cases where $(document).ready() is called 3929// after the browser event has already occurred. 3930// Support: IE <=9 - 10 only 3931// Older IE sometimes signals "interactive" too soon 3932if ( document.readyState === "complete" || 3933 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 3934 3935 // Handle it asynchronously to allow scripts the opportunity to delay ready 3936 window.setTimeout( jQuery.ready ); 3937 3938} else { 3939 3940 // Use the handy event callback 3941 document.addEventListener( "DOMContentLoaded", completed ); 3942 3943 // A fallback to window.onload, that will always work 3944 window.addEventListener( "load", completed ); 3945} 3946 3947 3948 3949 3950// Multifunctional method to get and set values of a collection 3951// The value/s can optionally be executed if it's a function 3952var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 3953 var i = 0, 3954 len = elems.length, 3955 bulk = key == null; 3956 3957 // Sets many values 3958 if ( jQuery.type( key ) === "object" ) { 3959 chainable = true; 3960 for ( i in key ) { 3961 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 3962 } 3963 3964 // Sets one value 3965 } else if ( value !== undefined ) { 3966 chainable = true; 3967 3968 if ( !jQuery.isFunction( value ) ) { 3969 raw = true; 3970 } 3971 3972 if ( bulk ) { 3973 3974 // Bulk operations run against the entire set 3975 if ( raw ) { 3976 fn.call( elems, value ); 3977 fn = null; 3978 3979 // ...except when executing function values 3980 } else { 3981 bulk = fn; 3982 fn = function( elem, key, value ) { 3983 return bulk.call( jQuery( elem ), value ); 3984 }; 3985 } 3986 } 3987 3988 if ( fn ) { 3989 for ( ; i < len; i++ ) { 3990 fn( 3991 elems[ i ], key, raw ? 3992 value : 3993 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 3994 ); 3995 } 3996 } 3997 } 3998 3999 if ( chainable ) { 4000 return elems; 4001 } 4002 4003 // Gets 4004 if ( bulk ) { 4005 return fn.call( elems ); 4006 } 4007 4008 return len ? fn( elems[ 0 ], key ) : emptyGet; 4009}; 4010var acceptData = function( owner ) { 4011 4012 // Accepts only: 4013 // - Node 4014 // - Node.ELEMENT_NODE 4015 // - Node.DOCUMENT_NODE 4016 // - Object 4017 // - Any 4018 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 4019}; 4020 4021 4022 4023 4024function Data() { 4025 this.expando = jQuery.expando + Data.uid++; 4026} 4027 4028Data.uid = 1; 4029 4030Data.prototype = { 4031 4032 cache: function( owner ) { 4033 4034 // Check if the owner object already has a cache 4035 var value = owner[ this.expando ]; 4036 4037 // If not, create one 4038 if ( !value ) { 4039 value = {}; 4040 4041 // We can accept data for non-element nodes in modern browsers, 4042 // but we should not, see #8335. 4043 // Always return an empty object. 4044 if ( acceptData( owner ) ) { 4045 4046 // If it is a node unlikely to be stringify-ed or looped over 4047 // use plain assignment 4048 if ( owner.nodeType ) { 4049 owner[ this.expando ] = value; 4050 4051 // Otherwise secure it in a non-enumerable property 4052 // configurable must be true to allow the property to be 4053 // deleted when data is removed 4054 } else { 4055 Object.defineProperty( owner, this.expando, { 4056 value: value, 4057 configurable: true 4058 } ); 4059 } 4060 } 4061 } 4062 4063 return value; 4064 }, 4065 set: function( owner, data, value ) { 4066 var prop, 4067 cache = this.cache( owner ); 4068 4069 // Handle: [ owner, key, value ] args 4070 // Always use camelCase key (gh-2257) 4071 if ( typeof data === "string" ) { 4072 cache[ jQuery.camelCase( data ) ] = value; 4073 4074 // Handle: [ owner, { properties } ] args 4075 } else { 4076 4077 // Copy the properties one-by-one to the cache object 4078 for ( prop in data ) { 4079 cache[ jQuery.camelCase( prop ) ] = data[ prop ]; 4080 } 4081 } 4082 return cache; 4083 }, 4084 get: function( owner, key ) { 4085 return key === undefined ? 4086 this.cache( owner ) : 4087 4088 // Always use camelCase key (gh-2257) 4089 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; 4090 }, 4091 access: function( owner, key, value ) { 4092 4093 // In cases where either: 4094 // 4095 // 1. No key was specified
vendor: 3,472 bytes, lines 4096-4229
4096 // 2. A string key was specified, but no value provided 4097 // 4098 // Take the "read" path and allow the get method to determine 4099 // which value to return, respectively either: 4100 // 4101 // 1. The entire cache object 4102 // 2. The data stored at the key 4103 // 4104 if ( key === undefined || 4105 ( ( key && typeof key === "string" ) && value === undefined ) ) { 4106 4107 return this.get( owner, key ); 4108 } 4109 4110 // When the key is not a string, or both a key and value 4111 // are specified, set or extend (existing objects) with either: 4112 // 4113 // 1. An object of properties 4114 // 2. A key and value 4115 // 4116 this.set( owner, key, value ); 4117 4118 // Since the "set" path can have two possible entry points 4119 // return the expected data based on which path was taken[*] 4120 return value !== undefined ? value : key; 4121 }, 4122 remove: function( owner, key ) { 4123 var i, 4124 cache = owner[ this.expando ]; 4125 4126 if ( cache === undefined ) { 4127 return; 4128 } 4129 4130 if ( key !== undefined ) { 4131 4132 // Support array or space separated string of keys 4133 if ( jQuery.isArray( key ) ) { 4134 4135 // If key is an array of keys... 4136 // We always set camelCase keys, so remove that. 4137 key = key.map( jQuery.camelCase ); 4138 } else { 4139 key = jQuery.camelCase( key ); 4140 4141 // If a key with the spaces exists, use it. 4142 // Otherwise, create an array by matching non-whitespace 4143 key = key in cache ? 4144 [ key ] : 4145 ( key.match( rnothtmlwhite ) || [] ); 4146 } 4147 4148 i = key.length; 4149 4150 while ( i-- ) { 4151 delete cache[ key[ i ] ]; 4152 } 4153 } 4154 4155 // Remove the expando if there's no more data 4156 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 4157 4158 // Support: Chrome <=35 - 45 4159 // Webkit & Blink performance suffers when deleting properties 4160 // from DOM nodes, so set to undefined instead 4161 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 4162 if ( owner.nodeType ) { 4163 owner[ this.expando ] = undefined; 4164 } else { 4165 delete owner[ this.expando ]; 4166 } 4167 } 4168 }, 4169 hasData: function( owner ) { 4170 var cache = owner[ this.expando ]; 4171 return cache !== undefined && !jQuery.isEmptyObject( cache ); 4172 } 4173}; 4174var dataPriv = new Data(); 4175 4176var dataUser = new Data(); 4177 4178 4179 4180// Implementation Summary 4181// 4182// 1. Enforce API surface and semantic compatibility with 1.9.x branch 4183// 2. Improve the module's maintainability by reducing the storage 4184// paths to a single mechanism. 4185// 3. Use the same single mechanism to support "private" and "user" data. 4186// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 4187// 5. Avoid exposing implementation details on user objects (eg. expando properties) 4188// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 4189 4190var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4191 rmultiDash = /[A-Z]/g; 4192 4193function getData( data ) { 4194 if ( data === "true" ) { 4195 return true; 4196 } 4197 4198 if ( data === "false" ) { 4199 return false; 4200 } 4201 4202 if ( data === "null" ) { 4203 return null; 4204 } 4205 4206 // Only convert to a number if it doesn't change the string 4207 if ( data === +data + "" ) { 4208 return +data; 4209 } 4210 4211 if ( rbrace.test( data ) ) { 4212 return JSON.parse( data ); 4213 } 4214 4215 return data; 4216} 4217 4218function dataAttr( elem, key, data ) { 4219 var name; 4220 4221 // If nothing was found internally, try to fetch any 4222 // data from the HTML5 data-* attribute 4223 if ( data === undefined && elem.nodeType === 1 ) { 4224 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 4225 data = elem.getAttribute( name ); 4226 4227 if ( typeof data === "string" ) { 4228 try { 4229 data = getData( data )
vendor: 7,075 bytes, lines 4229-4536
4229; 4230 } catch ( e ) {} 4231 4232 // Make sure we set the data so it isn't changed later 4233 dataUser.set( elem, key, data ); 4234 } else { 4235 data = undefined; 4236 } 4237 } 4238 return data; 4239} 4240 4241jQuery.extend( { 4242 hasData: function( elem ) { 4243 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 4244 }, 4245 4246 data: function( elem, name, data ) { 4247 return dataUser.access( elem, name, data ); 4248 }, 4249 4250 removeData: function( elem, name ) { 4251 dataUser.remove( elem, name ); 4252 }, 4253 4254 // TODO: Now that all calls to _data and _removeData have been replaced 4255 // with direct calls to dataPriv methods, these can be deprecated. 4256 _data: function( elem, name, data ) { 4257 return dataPriv.access( elem, name, data ); 4258 }, 4259 4260 _removeData: function( elem, name ) { 4261 dataPriv.remove( elem, name ); 4262 } 4263} ); 4264 4265jQuery.fn.extend( { 4266 data: function( key, value ) { 4267 var i, name, data, 4268 elem = this[ 0 ], 4269 attrs = elem && elem.attributes; 4270 4271 // Gets all values 4272 if ( key === undefined ) { 4273 if ( this.length ) { 4274 data = dataUser.get( elem ); 4275 4276 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 4277 i = attrs.length; 4278 while ( i-- ) { 4279 4280 // Support: IE 11 only 4281 // The attrs elements can be null (#14894) 4282 if ( attrs[ i ] ) { 4283 name = attrs[ i ].name; 4284 if ( name.indexOf( "data-" ) === 0 ) { 4285 name = jQuery.camelCase( name.slice( 5 ) ); 4286 dataAttr( elem, name, data[ name ] ); 4287 } 4288 } 4289 } 4290 dataPriv.set( elem, "hasDataAttrs", true ); 4291 } 4292 } 4293 4294 return data; 4295 } 4296 4297 // Sets multiple values 4298 if ( typeof key === "object" ) { 4299 return this.each( function() { 4300 dataUser.set( this, key ); 4301 } ); 4302 } 4303 4304 return access( this, function( value ) { 4305 var data; 4306 4307 // The calling jQuery object (element matches) is not empty 4308 // (and therefore has an element appears at this[ 0 ]) and the 4309 // `value` parameter was not undefined. An empty jQuery object 4310 // will result in `undefined` for elem = this[ 0 ] which will 4311 // throw an exception if an attempt to read a data cache is made. 4312 if ( elem && value === undefined ) { 4313 4314 // Attempt to get data from the cache 4315 // The key will always be camelCased in Data 4316 data = dataUser.get( elem, key ); 4317 if ( data !== undefined ) { 4318 return data; 4319 } 4320 4321 // Attempt to "discover" the data in 4322 // HTML5 custom data-* attrs 4323 data = dataAttr( elem, key ); 4324 if ( data !== undefined ) { 4325 return data; 4326 } 4327 4328 // We tried really hard, but the data doesn't exist. 4329 return; 4330 } 4331 4332 // Set the data... 4333 this.each( function() { 4334 4335 // We always store the camelCased key 4336 dataUser.set( this, key, value ); 4337 } ); 4338 }, null, value, arguments.length > 1, null, true ); 4339 }, 4340 4341 removeData: function( key ) { 4342 return this.each( function() { 4343 dataUser.remove( this, key ); 4344 } ); 4345 } 4346} ); 4347 4348 4349jQuery.extend( { 4350 queue: function( elem, type, data ) { 4351 var queue; 4352 4353 if ( elem ) { 4354 type = ( type || "fx" ) + "queue"; 4355 queue = dataPriv.get( elem, type ); 4356 4357 // Speed up dequeue by getting out quickly if this is just a lookup 4358 if ( data ) { 4359 if ( !queue || jQuery.isArray( data ) ) { 4360 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 4361 } else { 4362 queue.push( data ); 4363 } 4364 } 4365 return queue || []; 4366 } 4367 }, 4368 4369 dequeue: function( elem, type ) { 4370 type = type || "fx"; 4371 4372 var queue = jQuery.queue( elem, type ), 4373 startLength = queue.length, 4374 fn = queue.shift(), 4375 hooks = jQuery._queueHooks( elem, type ), 4376 next = function() { 4377 jQuery.dequeue( elem, type ); 4378 }; 4379 4380 // If the fx queue is dequeued, always remove the progress sentinel 4381 if ( fn === "inprogress" ) { 4382 fn = queue.shift(); 4383 startLength--; 4384 } 4385 4386 if ( fn ) { 4387 4388 // Add a progress sentinel to prevent the fx queue from being 4389 // automatically dequeued 4390 if ( type === "fx" ) { 4391 queue.unshift( "inprogress" ); 4392 } 4393 4394 // Clear up the last queue stop function 4395 delete hooks.stop; 4396 fn.call( elem, next, hooks ); 4397 } 4398 4399 if ( !startLength && hooks ) { 4400 hooks.empty.fire(); 4401 } 4402 }, 4403 4404 // Not public - generate a queueHooks object, or return the current one 4405 _queueHooks: function( elem, type ) { 4406 var key = type + "queueHooks"; 4407 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 4408 empty: jQuery.Callbacks( "once memory" ).add( function() { 4409 dataPriv.remove( elem, [ type + "queue", key ] ); 4410 } ) 4411 } ); 4412 } 4413} ); 4414 4415jQuery.fn.extend( { 4416 queue: function( type, data ) { 4417 var setter = 2; 4418 4419 if ( typeof type !== "string" ) { 4420 data = type; 4421 type = "fx"; 4422 setter--; 4423 } 4424 4425 if ( arguments.length < setter ) { 4426 return jQuery.queue( this[ 0 ], type ); 4427 } 4428 4429 return data === undefined ? 4430 this : 4431 this.each( function() { 4432 var queue = jQuery.queue( this, type, data ); 4433 4434 // Ensure a hooks for this queue 4435 jQuery._queueHooks( this, type ); 4436 4437 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 4438 jQuery.dequeue( this, type ); 4439 } 4440 } ); 4441 }, 4442 dequeue: function( type ) { 4443 return this.each( function() { 4444 jQuery.dequeue( this, type ); 4445 } ); 4446 }, 4447 clearQueue: function( type ) { 4448 return this.queue( type || "fx", [] ); 4449 }, 4450 4451 // Get a promise resolved when queues of a certain type 4452 // are emptied (fx is the type by default) 4453 promise: function( type, obj ) { 4454 var tmp, 4455 count = 1, 4456 defer = jQuery.Deferred(), 4457 elements = this, 4458 i = this.length, 4459 resolve = function() { 4460 if ( !( --count ) ) { 4461 defer.resolveWith( elements, [ elements ] ); 4462 } 4463 }; 4464 4465 if ( typeof type !== "string" ) { 4466 obj = type; 4467 type = undefined; 4468 } 4469 type = type || "fx"; 4470 4471 while ( i-- ) { 4472 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 4473 if ( tmp && tmp.empty ) { 4474 count++; 4475 tmp.empty.add( resolve ); 4476 } 4477 } 4478 resolve(); 4479 return defer.promise( obj ); 4480 } 4481} ); 4482var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 4483 4484var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 4485 4486 4487var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 4488 4489var isHiddenWithinTree = function( elem, el ) { 4490 4491 // isHiddenWithinTree might be called from jQuery#filter function; 4492 // in that case, element will be second argument 4493 elem = el || elem; 4494 4495 // Inline style trumps all 4496 return elem.style.display === "none" || 4497 elem.style.display === "" && 4498 4499 // Otherwise, check computed style 4500 // Support: Firefox <=43 - 45 4501 // Disconnected elements can have computed display: none, so first confirm that elem is 4502 // in the document. 4503 jQuery.contains( elem.ownerDocument, elem ) && 4504 4505 jQuery.css( elem, "display" ) === "none"; 4506 }; 4507 4508var swap = function( elem, options, callback, args ) { 4509 var ret, name, 4510 old = {}; 4511 4512 // Remember the old values, and insert the new ones 4513 for ( name in options ) { 4514 old[ name ] = elem.style[ name ]; 4515 elem.style[ name ] = options[ name ]; 4516 } 4517 4518 ret = callback.apply( elem, args || [] ); 4519 4520 // Revert the old values 4521 for ( name in options ) { 4522 elem.style[ name ] = old[ name ]; 4523 } 4524 4525 return ret; 4526}; 4527 4528 4529 4530 4531function adjustCSS( elem, prop, valueParts, tween ) { 4532 var adjusted, 4533 scale = 1, 4534 maxIterations = 20, 4535 currentValue = tween ? 4536 function() {
vendor: 1,837 bytes, lines 4536-4602
4536 4537 return tween.cur(); 4538 } : 4539 function() { 4540 return jQuery.css( elem, prop, "" ); 4541 }, 4542 initial = currentValue(), 4543 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 4544 4545 // Starting value computation is required for potential unit mismatches 4546 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 4547 rcssNum.exec( jQuery.css( elem, prop ) ); 4548 4549 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 4550 4551 // Trust units reported by jQuery.css 4552 unit = unit || initialInUnit[ 3 ]; 4553 4554 // Make sure we update the tween properties later on 4555 valueParts = valueParts || []; 4556 4557 // Iteratively approximate from a nonzero starting point 4558 initialInUnit = +initial || 1; 4559 4560 do { 4561 4562 // If previous iteration zeroed out, double until we get *something*. 4563 // Use string for doubling so we don't accidentally see scale as unchanged below 4564 scale = scale || ".5"; 4565 4566 // Adjust and apply 4567 initialInUnit = initialInUnit / scale; 4568 jQuery.style( elem, prop, initialInUnit + unit ); 4569 4570 // Update scale, tolerating zero or NaN from tween.cur() 4571 // Break the loop if scale is unchanged or perfect, or if we've just had enough. 4572 } while ( 4573 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations 4574 ); 4575 } 4576 4577 if ( valueParts ) { 4578 initialInUnit = +initialInUnit || +initial || 0; 4579 4580 // Apply relative offset (+=/-=) if specified 4581 adjusted = valueParts[ 1 ] ? 4582 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 4583 +valueParts[ 2 ]; 4584 if ( tween ) { 4585 tween.unit = unit; 4586 tween.start = initialInUnit; 4587 tween.end = adjusted; 4588 } 4589 } 4590 return adjusted; 4591} 4592 4593 4594var defaultDisplayMap = {}; 4595 4596function getDefaultDisplay( elem ) { 4597 var temp, 4598 doc = elem.ownerDocument, 4599 nodeName = elem.nodeName, 4600 display = defaultDisplayMap[ nodeName ]; 4601 4602 if ( display ) {
vendor: 4,008 bytes, lines 4603-4774
4603 return display; 4604 } 4605 4606 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 4607 display = jQuery.css( temp, "display" ); 4608 4609 temp.parentNode.removeChild( temp ); 4610 4611 if ( display === "none" ) { 4612 display = "block"; 4613 } 4614 defaultDisplayMap[ nodeName ] = display; 4615 4616 return display; 4617} 4618 4619function showHide( elements, show ) { 4620 var display, elem, 4621 values = [], 4622 index = 0, 4623 length = elements.length; 4624 4625 // Determine new display value for elements that need to change 4626 for ( ; index < length; index++ ) { 4627 elem = elements[ index ]; 4628 if ( !elem.style ) { 4629 continue; 4630 } 4631 4632 display = elem.style.display; 4633 if ( show ) { 4634 4635 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 4636 // check is required in this first loop unless we have a nonempty display value (either 4637 // inline or about-to-be-restored) 4638 if ( display === "none" ) { 4639 values[ index ] = dataPriv.get( elem, "display" ) || null; 4640 if ( !values[ index ] ) { 4641 elem.style.display = ""; 4642 } 4643 } 4644 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 4645 values[ index ] = getDefaultDisplay( elem ); 4646 } 4647 } else { 4648 if ( display !== "none" ) { 4649 values[ index ] = "none"; 4650 4651 // Remember what we're overwriting 4652 dataPriv.set( elem, "display", display ); 4653 } 4654 } 4655 } 4656 4657 // Set the display of the elements in a second loop to avoid constant reflow 4658 for ( index = 0; index < length; index++ ) { 4659 if ( values[ index ] != null ) { 4660 elements[ index ].style.display = values[ index ]; 4661 } 4662 } 4663 4664 return elements; 4665} 4666 4667jQuery.fn.extend( { 4668 show: function() { 4669 return showHide( this, true ); 4670 }, 4671 hide: function() { 4672 return showHide( this ); 4673 }, 4674 toggle: function( state ) { 4675 if ( typeof state === "boolean" ) { 4676 return state ? this.show() : this.hide(); 4677 } 4678 4679 return this.each( function() { 4680 if ( isHiddenWithinTree( this ) ) { 4681 jQuery( this ).show(); 4682 } else { 4683 jQuery( this ).hide(); 4684 } 4685 } ); 4686 } 4687} ); 4688var rcheckableType = ( /^(?:checkbox|radio)$/i ); 4689 4690var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); 4691 4692var rscriptType = ( /^$|\/(?:java|ecma)script/i ); 4693 4694 4695 4696// We have to close these tags to support XHTML (#13200) 4697var wrapMap = { 4698 4699 // Support: IE <=9 only 4700 option: [ 1, "<select multiple='multiple'>", "</select>" ], 4701 4702 // XHTML parsers do not magically insert elements in the 4703 // same way that tag soup parsers do. So we cannot shorten 4704 // this by omitting <tbody> or other required elements. 4705 thead: [ 1, "<table>", "</table>" ], 4706 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 4707 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 4708 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 4709 4710 _default: [ 0, "", "" ] 4711}; 4712 4713// Support: IE <=9 only 4714wrapMap.optgroup = wrapMap.option; 4715 4716wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 4717wrapMap.th = wrapMap.td; 4718 4719 4720function getAll( context, tag ) { 4721 4722 // Support: IE <=9 - 11 only 4723 // Use typeof to avoid zero-argument method invocation on host objects (#15151) 4724 var ret; 4725 4726 if ( typeof context.getElementsByTagName !== "undefined" ) { 4727 ret = context.getElementsByTagName( tag || "*" ); 4728 4729 } else if ( typeof context.querySelectorAll !== "undefined" ) { 4730 ret = context.querySelectorAll( tag || "*" ); 4731 4732 } else { 4733 ret = []; 4734 } 4735 4736 if ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) { 4737 return jQuery.merge( [ context ], ret ); 4738 } 4739 4740 return ret; 4741} 4742 4743 4744// Mark scripts as having already been evaluated 4745function setGlobalEval( elems, refElements ) { 4746 var i = 0, 4747 l = elems.length; 4748 4749 for ( ; i < l; i++ ) { 4750 dataPriv.set( 4751 elems[ i ], 4752 "globalEval", 4753 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 4754 ); 4755 } 4756} 4757 4758 4759var rhtml = /<|&#?\w+;/; 4760 4761function buildFragment( elems, context, scripts, selection, ignored ) { 4762 var elem, tmp, tag, wrap, contains, j, 4763 fragment = context.createDocumentFragment(), 4764 nodes = [], 4765 i = 0, 4766 l = elems.length; 4767 4768 for ( ; i < l; i++ ) { 4769 elem = elems[ i ]; 4770 4771 if ( elem || elem === 0 ) { 4772 4773 // Add nodes directly 4774 if ( jQuery.t
vendor: 14,415 bytes, lines 4774-5284
4774ype( elem ) === "object" ) { 4775 4776 // Support: Android <=4.0 only, PhantomJS 1 only 4777 // push.apply(_, arraylike) throws on ancient WebKit 4778 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 4779 4780 // Convert non-html into a text node 4781 } else if ( !rhtml.test( elem ) ) { 4782 nodes.push( context.createTextNode( elem ) ); 4783 4784 // Convert html into DOM nodes 4785 } else { 4786 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 4787 4788 // Deserialize a standard representation 4789 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 4790 wrap = wrapMap[ tag ] || wrapMap._default; 4791 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 4792 4793 // Descend through wrappers to the right content 4794 j = wrap[ 0 ]; 4795 while ( j-- ) { 4796 tmp = tmp.lastChild; 4797 } 4798 4799 // Support: Android <=4.0 only, PhantomJS 1 only 4800 // push.apply(_, arraylike) throws on ancient WebKit 4801 jQuery.merge( nodes, tmp.childNodes ); 4802 4803 // Remember the top-level container 4804 tmp = fragment.firstChild; 4805 4806 // Ensure the created nodes are orphaned (#12392) 4807 tmp.textContent = ""; 4808 } 4809 } 4810 } 4811 4812 // Remove wrapper from fragment 4813 fragment.textContent = ""; 4814 4815 i = 0; 4816 while ( ( elem = nodes[ i++ ] ) ) { 4817 4818 // Skip elements already in the context collection (trac-4087) 4819 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 4820 if ( ignored ) { 4821 ignored.push( elem ); 4822 } 4823 continue; 4824 } 4825 4826 contains = jQuery.contains( elem.ownerDocument, elem ); 4827 4828 // Append to fragment 4829 tmp = getAll( fragment.appendChild( elem ), "script" ); 4830 4831 // Preserve script evaluation history 4832 if ( contains ) { 4833 setGlobalEval( tmp ); 4834 } 4835 4836 // Capture executables 4837 if ( scripts ) { 4838 j = 0; 4839 while ( ( elem = tmp[ j++ ] ) ) { 4840 if ( rscriptType.test( elem.type || "" ) ) { 4841 scripts.push( elem ); 4842 } 4843 } 4844 } 4845 } 4846 4847 return fragment; 4848} 4849 4850 4851( function() { 4852 var fragment = document.createDocumentFragment(), 4853 div = fragment.appendChild( document.createElement( "div" ) ), 4854 input = document.createElement( "input" ); 4855 4856 // Support: Android 4.0 - 4.3 only 4857 // Check state lost if the name is set (#11217) 4858 // Support: Windows Web Apps (WWA) 4859 // `name` and `type` must use .setAttribute for WWA (#14901) 4860 input.setAttribute( "type", "radio" ); 4861 input.setAttribute( "checked", "checked" ); 4862 input.setAttribute( "name", "t" ); 4863 4864 div.appendChild( input ); 4865 4866 // Support: Android <=4.1 only 4867 // Older WebKit doesn't clone checked state correctly in fragments 4868 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 4869 4870 // Support: IE <=11 only 4871 // Make sure textarea (and checkbox) defaultValue is properly cloned 4872 div.innerHTML = "<textarea>x</textarea>"; 4873 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 4874} )(); 4875var documentElement = document.documentElement; 4876 4877 4878 4879var 4880 rkeyEvent = /^key/, 4881 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 4882 rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 4883 4884function returnTrue() { 4885 return true; 4886} 4887 4888function returnFalse() { 4889 return false; 4890} 4891 4892// Support: IE <=9 only 4893// See #13393 for more info 4894function safeActiveElement() { 4895 try { 4896 return document.activeElement; 4897 } catch ( err ) { } 4898} 4899 4900function on( elem, types, selector, data, fn, one ) { 4901 var origFn, type; 4902 4903 // Types can be a map of types/handlers 4904 if ( typeof types === "object" ) { 4905 4906 // ( types-Object, selector, data ) 4907 if ( typeof selector !== "string" ) { 4908 4909 // ( types-Object, data ) 4910 data = data || selector; 4911 selector = undefined; 4912 } 4913 for ( type in types ) { 4914 on( elem, type, selector, data, types[ type ], one ); 4915 } 4916 return elem; 4917 } 4918 4919 if ( data == null && fn == null ) { 4920 4921 // ( types, fn ) 4922 fn = selector; 4923 data = selector = undefined; 4924 } else if ( fn == null ) { 4925 if ( typeof selector === "string" ) { 4926 4927 // ( types, selector, fn ) 4928 fn = data; 4929 data = undefined; 4930 } else { 4931 4932 // ( types, data, fn ) 4933 fn = data; 4934 data = selector; 4935 selector = undefined; 4936 } 4937 } 4938 if ( fn === false ) { 4939 fn = returnFalse; 4940 } else if ( !fn ) { 4941 return elem; 4942 } 4943 4944 if ( one === 1 ) { 4945 origFn = fn; 4946 fn = function( event ) { 4947 4948 // Can use an empty set, since event contains the info 4949 jQuery().off( event ); 4950 return origFn.apply( this, arguments ); 4951 }; 4952 4953 // Use same guid so caller can remove using origFn 4954 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 4955 } 4956 return elem.each( function() { 4957 jQuery.event.add( this, types, fn, data, selector ); 4958 } ); 4959} 4960 4961/* 4962 * Helper functions for managing events -- not part of the public interface. 4963 * Props to Dean Edwards' addEvent library for many of the ideas. 4964 */ 4965jQuery.event = { 4966 4967 global: {}, 4968 4969 add: function( elem, types, handler, data, selector ) { 4970 4971 var handleObjIn, eventHandle, tmp, 4972 events, t, handleObj, 4973 special, handlers, type, namespaces, origType, 4974 elemData = dataPriv.get( elem ); 4975 4976 // Don't attach events to noData or text/comment nodes (but allow plain objects) 4977 if ( !elemData ) { 4978 return; 4979 } 4980 4981 // Caller can pass in an object of custom data in lieu of the handler 4982 if ( handler.handler ) { 4983 handleObjIn = handler; 4984 handler = handleObjIn.handler; 4985 selector = handleObjIn.selector; 4986 } 4987 4988 // Ensure that invalid selectors throw exceptions at attach time 4989 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 4990 if ( selector ) { 4991 jQuery.find.matchesSelector( documentElement, selector ); 4992 } 4993 4994 // Make sure that the handler has a unique ID, used to find/remove it later 4995 if ( !handler.guid ) { 4996 handler.guid = jQuery.guid++; 4997 } 4998 4999 // Init the element's event structure and main handler, if this is the first 5000 if ( !( events = elemData.events ) ) { 5001 events = elemData.events = {}; 5002 } 5003 if ( !( eventHandle = elemData.handle ) ) { 5004 eventHandle = elemData.handle = function( e ) { 5005 5006 // Discard the second event of a jQuery.event.trigger() and 5007 // when an event is called after a page has unloaded 5008 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 5009 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 5010 }; 5011 } 5012 5013 // Handle multiple events separated by a space 5014 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5015 t = types.length; 5016 while ( t-- ) { 5017 tmp = rtypenamespace.exec( types[ t ] ) || []; 5018 type = origType = tmp[ 1 ]; 5019 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5020 5021 // There *must* be a type, no attaching namespace-only handlers 5022 if ( !type ) { 5023 continue; 5024 } 5025 5026 // If event changes its type, use the special event handlers for the changed type 5027 special = jQuery.event.special[ type ] || {}; 5028 5029 // If selector defined, determine special event api type, otherwise given type 5030 type = ( selector ? special.delegateType : special.bindType ) || type; 5031 5032 // Update special based on newly reset type 5033 special = jQuery.event.special[ type ] || {}; 5034 5035 // handleObj is passed to all event handlers 5036 handleObj = jQuery.extend( { 5037 type: type, 5038 origType: origType, 5039 data: data, 5040 handler: handler, 5041 guid: handler.guid, 5042 selector: selector, 5043 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 5044 namespace: namespaces.join( "." ) 5045 }, handleObjIn ); 5046 5047 // Init the event handler queue if we're the first 5048 if ( !( handlers = events[ type ] ) ) { 5049 handlers = events[ type ] = []; 5050 handlers.delegateCount = 0; 5051 5052 // Only use addEventListener if the special events handler returns false 5053 if ( !special.setup || 5054 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 5055 5056 if ( elem.addEventListener ) { 5057 elem.addEventListener( type, eventHandle ); 5058 } 5059 } 5060 } 5061 5062 if ( special.add ) { 5063 special.add.call( elem, handleObj ); 5064 5065 if ( !handleObj.handler.guid ) { 5066 handleObj.handler.guid = handler.guid; 5067 } 5068 } 5069 5070 // Add to the element's handler list, delegates in front 5071 if ( selector ) { 5072 handlers.splice( handlers.delegateCount++, 0, handleObj ); 5073 } else { 5074 handlers.push( handleObj ); 5075 } 5076 5077 // Keep track of which events have ever been used, for event optimization 5078 jQuery.event.global[ type ] = true; 5079 } 5080 5081 }, 5082 5083 // Detach an event or set of events from an element 5084 remove: function( elem, types, handler, selector, mappedTypes ) { 5085 5086 var j, origCount, tmp, 5087 events, t, handleObj, 5088 special, handlers, type, namespaces, origType, 5089 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 5090 5091 if ( !elemData || !( events = elemData.events ) ) { 5092 return; 5093 } 5094 5095 // Once for each type.namespace in types; type may be omitted 5096 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5097 t = types.length; 5098 while ( t-- ) { 5099 tmp = rtypenamespace.exec( types[ t ] ) || []; 5100 type = origType = tmp[ 1 ]; 5101 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5102 5103 // Unbind all events (on this namespace, if provided) for the element 5104 if ( !type ) { 5105 for ( type in events ) { 5106 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 5107 } 5108 continue; 5109 } 5110 5111 special = jQuery.event.special[ type ] || {}; 5112 type = ( selector ? special.delegateType : special.bindType ) || type; 5113 handlers = events[ type ] || []; 5114 tmp = tmp[ 2 ] && 5115 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 5116 5117 // Remove matching events 5118 origCount = j = handlers.length; 5119 while ( j-- ) { 5120 handleObj = handlers[ j ]; 5121 5122 if ( ( mappedTypes || origType === handleObj.origType ) && 5123 ( !handler || handler.guid === handleObj.guid ) && 5124 ( !tmp || tmp.test( handleObj.namespace ) ) && 5125 ( !selector || selector === handleObj.selector || 5126 selector === "**" && handleObj.selector ) ) { 5127 handlers.splice( j, 1 ); 5128 5129 if ( handleObj.selector ) { 5130 handlers.delegateCount--; 5131 } 5132 if ( special.remove ) { 5133 special.remove.call( elem, handleObj ); 5134 } 5135 } 5136 } 5137 5138 // Remove generic event handler if we removed something and no more handlers exist 5139 // (avoids potential for endless recursion during removal of special event handlers) 5140 if ( origCount && !handlers.length ) { 5141 if ( !special.teardown || 5142 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 5143 5144 jQuery.removeEvent( elem, type, elemData.handle ); 5145 } 5146 5147 delete events[ type ]; 5148 } 5149 } 5150 5151 // Remove data and the expando if it's no longer used 5152 if ( jQuery.isEmptyObject( events ) ) { 5153 dataPriv.remove( elem, "handle events" ); 5154 } 5155 }, 5156 5157 dispatch: function( nativeEvent ) { 5158 5159 // Make a writable jQuery.Event from the native event object 5160 var event = jQuery.event.fix( nativeEvent ); 5161 5162 var i, j, ret, matched, handleObj, handlerQueue, 5163 args = new Array( arguments.length ), 5164 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], 5165 special = jQuery.event.special[ event.type ] || {}; 5166 5167 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5168 args[ 0 ] = event; 5169 5170 for ( i = 1; i < arguments.length; i++ ) { 5171 args[ i ] = arguments[ i ]; 5172 } 5173 5174 event.delegateTarget = this; 5175 5176 // Call the preDispatch hook for the mapped type, and let it bail if desired 5177 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 5178 return; 5179 } 5180 5181 // Determine handlers 5182 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 5183 5184 // Run delegates first; they may want to stop propagation beneath us 5185 i = 0; 5186 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 5187 event.currentTarget = matched.elem; 5188 5189 j = 0; 5190 while ( ( handleObj = matched.handlers[ j++ ] ) && 5191 !event.isImmediatePropagationStopped() ) { 5192 5193 // Triggered event must either 1) have no namespace, or 2) have namespace(s) 5194 // a subset or equal to those in the bound event (both can have no namespace). 5195 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { 5196 5197 event.handleObj = handleObj; 5198 event.data = handleObj.data; 5199 5200 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 5201 handleObj.handler ).apply( matched.elem, args ); 5202 5203 if ( ret !== undefined ) { 5204 if ( ( event.result = ret ) === false ) { 5205 event.preventDefault(); 5206 event.stopPropagation(); 5207 } 5208 } 5209 } 5210 } 5211 } 5212 5213 // Call the postDispatch hook for the mapped type 5214 if ( special.postDispatch ) { 5215 special.postDispatch.call( this, event ); 5216 } 5217 5218 return event.result; 5219 }, 5220 5221 handlers: function( event, handlers ) { 5222 var i, handleObj, sel, matchedHandlers, matchedSelectors, 5223 handlerQueue = [], 5224 delegateCount = handlers.delegateCount, 5225 cur = event.target; 5226 5227 // Find delegate handlers 5228 if ( delegateCount && 5229 5230 // Support: IE <=9 5231 // Black-hole SVG <use> instance trees (trac-13180) 5232 cur.nodeType && 5233 5234 // Support: Firefox <=42 5235 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 5236 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 5237 // Support: IE 11 only 5238 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 5239 !( event.type === "click" && event.button >= 1 ) ) { 5240 5241 for ( ; cur !== this; cur = cur.parentNode || this ) { 5242 5243 // Don't check non-elements (#13208) 5244 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 5245 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 5246 matchedHandlers = []; 5247 matchedSelectors = {}; 5248 for ( i = 0; i < delegateCount; i++ ) { 5249 handleObj = handlers[ i ]; 5250 5251 // Don't conflict with Object.prototype properties (#13203) 5252 sel = handleObj.selector + " "; 5253 5254 if ( matchedSelectors[ sel ] === undefined ) { 5255 matchedSelectors[ sel ] = handleObj.needsContext ? 5256 jQuery( sel, this ).index( cur ) > -1 : 5257 jQuery.find( sel, this, null, [ cur ] ).length; 5258 } 5259 if ( matchedSelectors[ sel ] ) { 5260 matchedHandlers.push( handleObj ); 5261 } 5262 } 5263 if ( matchedHandlers.length ) { 5264 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 5265 } 5266 } 5267 } 5268 } 5269 5270 // Add the remaining (directly-bound) handlers 5271 cur = this; 5272 if ( delegateCount < handlers.length ) { 5273 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 5274 } 5275 5276 return handlerQueue; 5277 }, 5278 5279 addProp: function( name, hook ) { 5280 Object.defineProperty( jQuery.Event.prototype, name, { 5281 enumerable: true, 5282 configurable: true, 5283 5284 get:
vendor: 2,487 bytes, lines 5284-5392
5284jQuery.isFunction( hook ) ? 5285 function() { 5286 if ( this.originalEvent ) { 5287 return hook( this.originalEvent ); 5288 } 5289 } : 5290 function() { 5291 if ( this.originalEvent ) { 5292 return this.originalEvent[ name ]; 5293 } 5294 }, 5295 5296 set: function( value ) { 5297 Object.defineProperty( this, name, { 5298 enumerable: true, 5299 configurable: true, 5300 writable: true, 5301 value: value 5302 } ); 5303 } 5304 } ); 5305 }, 5306 5307 fix: function( originalEvent ) { 5308 return originalEvent[ jQuery.expando ] ? 5309 originalEvent : 5310 new jQuery.Event( originalEvent ); 5311 }, 5312 5313 special: { 5314 load: { 5315 5316 // Prevent triggered image.load events from bubbling to window.load 5317 noBubble: true 5318 }, 5319 focus: { 5320 5321 // Fire native event if possible so blur/focus sequence is correct 5322 trigger: function() { 5323 if ( this !== safeActiveElement() && this.focus ) { 5324 this.focus(); 5325 return false; 5326 } 5327 }, 5328 delegateType: "focusin" 5329 }, 5330 blur: { 5331 trigger: function() { 5332 if ( this === safeActiveElement() && this.blur ) { 5333 this.blur(); 5334 return false; 5335 } 5336 }, 5337 delegateType: "focusout" 5338 }, 5339 click: { 5340 5341 // For checkbox, fire native event so checked state will be right 5342 trigger: function() { 5343 if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { 5344 this.click(); 5345 return false; 5346 } 5347 }, 5348 5349 // For cross-browser consistency, don't fire native .click() on links 5350 _default: function( event ) { 5351 return jQuery.nodeName( event.target, "a" ); 5352 } 5353 }, 5354 5355 beforeunload: { 5356 postDispatch: function( event ) { 5357 5358 // Support: Firefox 20+ 5359 // Firefox doesn't alert if the returnValue field is not set. 5360 if ( event.result !== undefined && event.originalEvent ) { 5361 event.originalEvent.returnValue = event.result; 5362 } 5363 } 5364 } 5365 } 5366}; 5367 5368jQuery.removeEvent = function( elem, type, handle ) { 5369 5370 // This "if" is needed for plain objects 5371 if ( elem.removeEventListener ) { 5372 elem.removeEventListener( type, handle ); 5373 } 5374}; 5375 5376jQuery.Event = function( src, props ) { 5377 5378 // Allow instantiation without the 'new' keyword 5379 if ( !( this instanceof jQuery.Event ) ) { 5380 return new jQuery.Event( src, props ); 5381 } 5382 5383 // Event object 5384 if ( src && src.type ) { 5385 this.originalEvent = src; 5386 this.type = src.type; 5387 5388 // Events bubbling up the document may have been marked as prevented 5389 // by a handler lower down the tree; reflect the correct value. 5390 this.isDefaultPrevented = src.defaultPrevented || 5391 src.defaultPrevented === undefined && 5392
vendor: 5,276 bytes, lines 5393-5616
5393 // Support: Android <=2.3 only 5394 src.returnValue === false ? 5395 returnTrue : 5396 returnFalse; 5397 5398 // Create target properties 5399 // Support: Safari <=6 - 7 only 5400 // Target should not be a text node (#504, #13143) 5401 this.target = ( src.target && src.target.nodeType === 3 ) ? 5402 src.target.parentNode : 5403 src.target; 5404 5405 this.currentTarget = src.currentTarget; 5406 this.relatedTarget = src.relatedTarget; 5407 5408 // Event type 5409 } else { 5410 this.type = src; 5411 } 5412 5413 // Put explicitly provided properties onto the event object 5414 if ( props ) { 5415 jQuery.extend( this, props ); 5416 } 5417 5418 // Create a timestamp if incoming event doesn't have one 5419 this.timeStamp = src && src.timeStamp || jQuery.now(); 5420 5421 // Mark it as fixed 5422 this[ jQuery.expando ] = true; 5423}; 5424 5425// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 5426// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 5427jQuery.Event.prototype = { 5428 constructor: jQuery.Event, 5429 isDefaultPrevented: returnFalse, 5430 isPropagationStopped: returnFalse, 5431 isImmediatePropagationStopped: returnFalse, 5432 isSimulated: false, 5433 5434 preventDefault: function() { 5435 var e = this.originalEvent; 5436 5437 this.isDefaultPrevented = returnTrue; 5438 5439 if ( e && !this.isSimulated ) { 5440 e.preventDefault(); 5441 } 5442 }, 5443 stopPropagation: function() { 5444 var e = this.originalEvent; 5445 5446 this.isPropagationStopped = returnTrue; 5447 5448 if ( e && !this.isSimulated ) { 5449 e.stopPropagation(); 5450 } 5451 }, 5452 stopImmediatePropagation: function() { 5453 var e = this.originalEvent; 5454 5455 this.isImmediatePropagationStopped = returnTrue; 5456 5457 if ( e && !this.isSimulated ) { 5458 e.stopImmediatePropagation(); 5459 } 5460 5461 this.stopPropagation(); 5462 } 5463}; 5464 5465// Includes all common event props including KeyEvent and MouseEvent specific props 5466jQuery.each( { 5467 altKey: true, 5468 bubbles: true, 5469 cancelable: true, 5470 changedTouches: true, 5471 ctrlKey: true, 5472 detail: true, 5473 eventPhase: true, 5474 metaKey: true, 5475 pageX: true, 5476 pageY: true, 5477 shiftKey: true, 5478 view: true, 5479 "char": true, 5480 charCode: true, 5481 key: true, 5482 keyCode: true, 5483 button: true, 5484 buttons: true, 5485 clientX: true, 5486 clientY: true, 5487 offsetX: true, 5488 offsetY: true, 5489 pointerId: true, 5490 pointerType: true, 5491 screenX: true, 5492 screenY: true, 5493 targetTouches: true, 5494 toElement: true, 5495 touches: true, 5496 5497 which: function( event ) { 5498 var button = event.button; 5499 5500 // Add which for key events 5501 if ( event.which == null && rkeyEvent.test( event.type ) ) { 5502 return event.charCode != null ? event.charCode : event.keyCode; 5503 } 5504 5505 // Add which for click: 1 === left; 2 === middle; 3 === right 5506 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { 5507 if ( button & 1 ) { 5508 return 1; 5509 } 5510 5511 if ( button & 2 ) { 5512 return 3; 5513 } 5514 5515 if ( button & 4 ) { 5516 return 2; 5517 } 5518 5519 return 0; 5520 } 5521 5522 return event.which; 5523 } 5524}, jQuery.event.addProp ); 5525 5526// Create mouseenter/leave events using mouseover/out and event-time checks 5527// so that event delegation works in jQuery. 5528// Do the same for pointerenter/pointerleave and pointerover/pointerout 5529// 5530// Support: Safari 7 only 5531// Safari sends mouseenter too often; see: 5532// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 5533// for the description of the bug (it existed in older Chrome versions as well). 5534jQuery.each( { 5535 mouseenter: "mouseover", 5536 mouseleave: "mouseout", 5537 pointerenter: "pointerover", 5538 pointerleave: "pointerout" 5539}, function( orig, fix ) { 5540 jQuery.event.special[ orig ] = { 5541 delegateType: fix, 5542 bindType: fix, 5543 5544 handle: function( event ) { 5545 var ret, 5546 target = this, 5547 related = event.relatedTarget, 5548 handleObj = event.handleObj; 5549 5550 // For mouseenter/leave call the handler if related is outside the target. 5551 // NB: No relatedTarget if the mouse left/entered the browser window 5552 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 5553 event.type = handleObj.origType; 5554 ret = handleObj.handler.apply( this, arguments ); 5555 event.type = fix; 5556 } 5557 return ret; 5558 } 5559 }; 5560} ); 5561 5562jQuery.fn.extend( { 5563 5564 on: function( types, selector, data, fn ) { 5565 return on( this, types, selector, data, fn ); 5566 }, 5567 one: function( types, selector, data, fn ) { 5568 return on( this, types, selector, data, fn, 1 ); 5569 }, 5570 off: function( types, selector, fn ) { 5571 var handleObj, type; 5572 if ( types && types.preventDefault && types.handleObj ) { 5573 5574 // ( event ) dispatched jQuery.Event 5575 handleObj = types.handleObj; 5576 jQuery( types.delegateTarget ).off( 5577 handleObj.namespace ? 5578 handleObj.origType + "." + handleObj.namespace : 5579 handleObj.origType, 5580 handleObj.selector, 5581 handleObj.handler 5582 ); 5583 return this; 5584 } 5585 if ( typeof types === "object" ) { 5586 5587 // ( types-object [, selector] ) 5588 for ( type in types ) { 5589 this.off( type, selector, types[ type ] ); 5590 } 5591 return this; 5592 } 5593 if ( selector === false || typeof selector === "function" ) { 5594 5595 // ( types [, fn] ) 5596 fn = selector; 5597 selector = undefined; 5598 } 5599 if ( fn === false ) { 5600 fn = returnFalse; 5601 } 5602 return this.each( function() { 5603 jQuery.event.remove( this, types, fn, selector ); 5604 } ); 5605 } 5606} ); 5607 5608 5609var 5610 5611 /* eslint-disable max-len */ 5612 5613 // See https://github.com/eslint/eslint/issues/3229 5614 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, 5615 5616 /* eslint-enable */
vendor: 7,144 bytes, lines 5616-5880
5616 5617 5618 // Support: IE <=10 - 11, Edge 12 - 13 5619 // In IE/Edge using regex groups here causes severe slowdowns. 5620 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 5621 rnoInnerhtml = /<script|<style|<link/i, 5622 5623 // checked="checked" or checked 5624 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5625 rscriptTypeMasked = /^true\/(.*)/, 5626 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; 5627 5628function manipulationTarget( elem, content ) { 5629 if ( jQuery.nodeName( elem, "table" ) && 5630 jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 5631 5632 return elem.getElementsByTagName( "tbody" )[ 0 ] || elem; 5633 } 5634 5635 return elem; 5636} 5637 5638// Replace/restore the type attribute of script elements for safe DOM manipulation 5639function disableScript( elem ) { 5640 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 5641 return elem; 5642} 5643function restoreScript( elem ) { 5644 var match = rscriptTypeMasked.exec( elem.type ); 5645 5646 if ( match ) { 5647 elem.type = match[ 1 ]; 5648 } else { 5649 elem.removeAttribute( "type" ); 5650 } 5651 5652 return elem; 5653} 5654 5655function cloneCopyEvent( src, dest ) { 5656 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; 5657 5658 if ( dest.nodeType !== 1 ) { 5659 return; 5660 } 5661 5662 // 1. Copy private data: events, handlers, etc. 5663 if ( dataPriv.hasData( src ) ) { 5664 pdataOld = dataPriv.access( src ); 5665 pdataCur = dataPriv.set( dest, pdataOld ); 5666 events = pdataOld.events; 5667 5668 if ( events ) { 5669 delete pdataCur.handle; 5670 pdataCur.events = {}; 5671 5672 for ( type in events ) { 5673 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 5674 jQuery.event.add( dest, type, events[ type ][ i ] ); 5675 } 5676 } 5677 } 5678 } 5679 5680 // 2. Copy user data 5681 if ( dataUser.hasData( src ) ) { 5682 udataOld = dataUser.access( src ); 5683 udataCur = jQuery.extend( {}, udataOld ); 5684 5685 dataUser.set( dest, udataCur ); 5686 } 5687} 5688 5689// Fix IE bugs, see support tests 5690function fixInput( src, dest ) { 5691 var nodeName = dest.nodeName.toLowerCase(); 5692 5693 // Fails to persist the checked state of a cloned checkbox or radio button. 5694 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 5695 dest.checked = src.checked; 5696 5697 // Fails to return the selected option to the default selected state when cloning options 5698 } else if ( nodeName === "input" || nodeName === "textarea" ) { 5699 dest.defaultValue = src.defaultValue; 5700 } 5701} 5702 5703function domManip( collection, args, callback, ignored ) { 5704 5705 // Flatten any nested arrays 5706 args = concat.apply( [], args ); 5707 5708 var fragment, first, scripts, hasScripts, node, doc, 5709 i = 0, 5710 l = collection.length, 5711 iNoClone = l - 1, 5712 value = args[ 0 ], 5713 isFunction = jQuery.isFunction( value ); 5714 5715 // We can't cloneNode fragments that contain checked, in WebKit 5716 if ( isFunction || 5717 ( l > 1 && typeof value === "string" && 5718 !support.checkClone && rchecked.test( value ) ) ) { 5719 return collection.each( function( index ) { 5720 var self = collection.eq( index ); 5721 if ( isFunction ) { 5722 args[ 0 ] = value.call( this, index, self.html() ); 5723 } 5724 domManip( self, args, callback, ignored ); 5725 } ); 5726 } 5727 5728 if ( l ) { 5729 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 5730 first = fragment.firstChild; 5731 5732 if ( fragment.childNodes.length === 1 ) { 5733 fragment = first; 5734 } 5735 5736 // Require either new content or an interest in ignored elements to invoke the callback 5737 if ( first || ignored ) { 5738 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 5739 hasScripts = scripts.length; 5740 5741 // Use the original fragment for the last item 5742 // instead of the first because it can end up 5743 // being emptied incorrectly in certain situations (#8070). 5744 for ( ; i < l; i++ ) { 5745 node = fragment; 5746 5747 if ( i !== iNoClone ) { 5748 node = jQuery.clone( node, true, true ); 5749 5750 // Keep references to cloned scripts for later restoration 5751 if ( hasScripts ) { 5752 5753 // Support: Android <=4.0 only, PhantomJS 1 only 5754 // push.apply(_, arraylike) throws on ancient WebKit 5755 jQuery.merge( scripts, getAll( node, "script" ) ); 5756 } 5757 } 5758 5759 callback.call( collection[ i ], node, i ); 5760 } 5761 5762 if ( hasScripts ) { 5763 doc = scripts[ scripts.length - 1 ].ownerDocument; 5764 5765 // Reenable scripts 5766 jQuery.map( scripts, restoreScript ); 5767 5768 // Evaluate executable scripts on first document insertion 5769 for ( i = 0; i < hasScripts; i++ ) { 5770 node = scripts[ i ]; 5771 if ( rscriptType.test( node.type || "" ) && 5772 !dataPriv.access( node, "globalEval" ) && 5773 jQuery.contains( doc, node ) ) { 5774 5775 if ( node.src ) { 5776 5777 // Optional AJAX dependency, but won't run scripts if not present 5778 if ( jQuery._evalUrl ) { 5779 jQuery._evalUrl( node.src ); 5780 } 5781 } else { 5782 DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); 5783 } 5784 } 5785 } 5786 } 5787 } 5788 } 5789 5790 return collection; 5791} 5792 5793function remove( elem, selector, keepData ) { 5794 var node, 5795 nodes = selector ? jQuery.filter( selector, elem ) : elem, 5796 i = 0; 5797 5798 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 5799 if ( !keepData && node.nodeType === 1 ) { 5800 jQuery.cleanData( getAll( node ) ); 5801 } 5802 5803 if ( node.parentNode ) { 5804 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { 5805 setGlobalEval( getAll( node, "script" ) ); 5806 } 5807 node.parentNode.removeChild( node ); 5808 } 5809 } 5810 5811 return elem; 5812} 5813 5814jQuery.extend( { 5815 htmlPrefilter: function( html ) { 5816 return html.replace( rxhtmlTag, "<$1></$2>" ); 5817 }, 5818 5819 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 5820 var i, l, srcElements, destElements, 5821 clone = elem.cloneNode( true ), 5822 inPage = jQuery.contains( elem.ownerDocument, elem ); 5823 5824 // Fix IE cloning issues 5825 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 5826 !jQuery.isXMLDoc( elem ) ) { 5827 5828 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 5829 destElements = getAll( clone ); 5830 srcElements = getAll( elem ); 5831 5832 for ( i = 0, l = srcElements.length; i < l; i++ ) { 5833 fixInput( srcElements[ i ], destElements[ i ] ); 5834 } 5835 } 5836 5837 // Copy the events from the original to the clone 5838 if ( dataAndEvents ) { 5839 if ( deepDataAndEvents ) { 5840 srcElements = srcElements || getAll( elem ); 5841 destElements = destElements || getAll( clone ); 5842 5843 for ( i = 0, l = srcElements.length; i < l; i++ ) { 5844 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 5845 } 5846 } else { 5847 cloneCopyEvent( elem, clone ); 5848 } 5849 } 5850 5851 // Preserve script evaluation history 5852 destElements = getAll( clone, "script" ); 5853 if ( destElements.length > 0 ) { 5854 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 5855 } 5856 5857 // Return the cloned set 5858 return clone; 5859 }, 5860 5861 cleanData: function( elems ) { 5862 var data, elem, type, 5863 special = jQuery.event.special, 5864 i = 0; 5865 5866 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 5867 if ( acceptData( elem ) ) { 5868 if ( ( data = elem[ dataPriv.expando ] ) ) { 5869 if ( data.events ) { 5870 for ( type in data.events ) { 5871 if ( special[ type ] ) { 5872 jQuery.event.remove( elem, type ); 5873 5874 // This is a shortcut to avoid jQuery.event.remove's overhead 5875 } else { 5876 jQuery.removeEvent( elem, type, data.handle ); 5877 } 5878 } 5879 } 5880
vendor: 1,119 bytes, lines 5881-5925
5881 // Support: Chrome <=35 - 45+ 5882 // Assign undefined instead of using delete, see Data#remove 5883 elem[ dataPriv.expando ] = undefined; 5884 } 5885 if ( elem[ dataUser.expando ] ) { 5886 5887 // Support: Chrome <=35 - 45+ 5888 // Assign undefined instead of using delete, see Data#remove 5889 elem[ dataUser.expando ] = undefined; 5890 } 5891 } 5892 } 5893 } 5894} ); 5895 5896jQuery.fn.extend( { 5897 detach: function( selector ) { 5898 return remove( this, selector, true ); 5899 }, 5900 5901 remove: function( selector ) { 5902 return remove( this, selector ); 5903 }, 5904 5905 text: function( value ) { 5906 return access( this, function( value ) { 5907 return value === undefined ? 5908 jQuery.text( this ) : 5909 this.empty().each( function() { 5910 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 5911 this.textContent = value; 5912 } 5913 } ); 5914 }, null, value, arguments.length ); 5915 }, 5916 5917 append: function() { 5918 return domManip( this, arguments, function( elem ) { 5919 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 5920 var target = manipulationTarget( this, elem ); 5921 target.appendChild( elem ); 5922 } 5923 } ); 5924 }, 5925
vendor: 9,102 bytes, lines 5926-6275
5926 prepend: function() { 5927 return domManip( this, arguments, function( elem ) { 5928 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 5929 var target = manipulationTarget( this, elem ); 5930 target.insertBefore( elem, target.firstChild ); 5931 } 5932 } ); 5933 }, 5934 5935 before: function() { 5936 return domManip( this, arguments, function( elem ) { 5937 if ( this.parentNode ) { 5938 this.parentNode.insertBefore( elem, this ); 5939 } 5940 } ); 5941 }, 5942 5943 after: function() { 5944 return domManip( this, arguments, function( elem ) { 5945 if ( this.parentNode ) { 5946 this.parentNode.insertBefore( elem, this.nextSibling ); 5947 } 5948 } ); 5949 }, 5950 5951 empty: function() { 5952 var elem, 5953 i = 0; 5954 5955 for ( ; ( elem = this[ i ] ) != null; i++ ) { 5956 if ( elem.nodeType === 1 ) { 5957 5958 // Prevent memory leaks 5959 jQuery.cleanData( getAll( elem, false ) ); 5960 5961 // Remove any remaining nodes 5962 elem.textContent = ""; 5963 } 5964 } 5965 5966 return this; 5967 }, 5968 5969 clone: function( dataAndEvents, deepDataAndEvents ) { 5970 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 5971 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 5972 5973 return this.map( function() { 5974 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 5975 } ); 5976 }, 5977 5978 html: function( value ) { 5979 return access( this, function( value ) { 5980 var elem = this[ 0 ] || {}, 5981 i = 0, 5982 l = this.length; 5983 5984 if ( value === undefined && elem.nodeType === 1 ) { 5985 return elem.innerHTML; 5986 } 5987 5988 // See if we can take a shortcut and just use innerHTML 5989 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 5990 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 5991 5992 value = jQuery.htmlPrefilter( value ); 5993 5994 try { 5995 for ( ; i < l; i++ ) { 5996 elem = this[ i ] || {}; 5997 5998 // Remove element nodes and prevent memory leaks 5999 if ( elem.nodeType === 1 ) { 6000 jQuery.cleanData( getAll( elem, false ) ); 6001 elem.innerHTML = value; 6002 } 6003 } 6004 6005 elem = 0; 6006 6007 // If using innerHTML throws an exception, use the fallback method 6008 } catch ( e ) {} 6009 } 6010 6011 if ( elem ) { 6012 this.empty().append( value ); 6013 } 6014 }, null, value, arguments.length ); 6015 }, 6016 6017 replaceWith: function() { 6018 var ignored = []; 6019 6020 // Make the changes, replacing each non-ignored context element with the new content 6021 return domManip( this, arguments, function( elem ) { 6022 var parent = this.parentNode; 6023 6024 if ( jQuery.inArray( this, ignored ) < 0 ) { 6025 jQuery.cleanData( getAll( this ) ); 6026 if ( parent ) { 6027 parent.replaceChild( elem, this ); 6028 } 6029 } 6030 6031 // Force callback invocation 6032 }, ignored ); 6033 } 6034} ); 6035 6036jQuery.each( { 6037 appendTo: "append", 6038 prependTo: "prepend", 6039 insertBefore: "before", 6040 insertAfter: "after", 6041 replaceAll: "replaceWith" 6042}, function( name, original ) { 6043 jQuery.fn[ name ] = function( selector ) { 6044 var elems, 6045 ret = [], 6046 insert = jQuery( selector ), 6047 last = insert.length - 1, 6048 i = 0; 6049 6050 for ( ; i <= last; i++ ) { 6051 elems = i === last ? this : this.clone( true ); 6052 jQuery( insert[ i ] )[ original ]( elems ); 6053 6054 // Support: Android <=4.0 only, PhantomJS 1 only 6055 // .get() because push.apply(_, arraylike) throws on ancient WebKit 6056 push.apply( ret, elems.get() ); 6057 } 6058 6059 return this.pushStack( ret ); 6060 }; 6061} ); 6062var rmargin = ( /^margin/ ); 6063 6064var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 6065 6066var getStyles = function( elem ) { 6067 6068 // Support: IE <=11 only, Firefox <=30 (#15098, #14150) 6069 // IE throws on elements created in popups 6070 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6071 var view = elem.ownerDocument.defaultView; 6072 6073 if ( !view || !view.opener ) { 6074 view = window; 6075 } 6076 6077 return view.getComputedStyle( elem ); 6078 }; 6079 6080 6081 6082( function() { 6083 6084 // Executing both pixelPosition & boxSizingReliable tests require only one layout 6085 // so they're executed at the same time to save the second computation. 6086 function computeStyleTests() { 6087 6088 // This is a singleton, we need to execute it only once 6089 if ( !div ) { 6090 return; 6091 } 6092 6093 div.style.cssText = 6094 "box-sizing:border-box;" + 6095 "position:relative;display:block;" + 6096 "margin:auto;border:1px;padding:1px;" + 6097 "top:1%;width:50%"; 6098 div.innerHTML = ""; 6099 documentElement.appendChild( container ); 6100 6101 var divStyle = window.getComputedStyle( div ); 6102 pixelPositionVal = divStyle.top !== "1%"; 6103 6104 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 6105 reliableMarginLeftVal = divStyle.marginLeft === "2px"; 6106 boxSizingReliableVal = divStyle.width === "4px"; 6107 6108 // Support: Android 4.0 - 4.3 only 6109 // Some styles come back with percentage values, even though they shouldn't 6110 div.style.marginRight = "50%"; 6111 pixelMarginRightVal = divStyle.marginRight === "4px"; 6112 6113 documentElement.removeChild( container ); 6114 6115 // Nullify the div so it wouldn't be stored in the memory and 6116 // it will also be a sign that checks already performed 6117 div = null; 6118 } 6119 6120 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, 6121 container = document.createElement( "div" ), 6122 div = document.createElement( "div" ); 6123 6124 // Finish early in limited (non-browser) environments 6125 if ( !div.style ) { 6126 return; 6127 } 6128 6129 // Support: IE <=9 - 11 only 6130 // Style of cloned element affects source element cloned (#8908) 6131 div.style.backgroundClip = "content-box"; 6132 div.cloneNode( true ).style.backgroundClip = ""; 6133 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 6134 6135 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + 6136 "padding:0;margin-top:1px;position:absolute"; 6137 container.appendChild( div ); 6138 6139 jQuery.extend( support, { 6140 pixelPosition: function() { 6141 computeStyleTests(); 6142 return pixelPositionVal; 6143 }, 6144 boxSizingReliable: function() { 6145 computeStyleTests(); 6146 return boxSizingReliableVal; 6147 }, 6148 pixelMarginRight: function() { 6149 computeStyleTests(); 6150 return pixelMarginRightVal; 6151 }, 6152 reliableMarginLeft: function() { 6153 computeStyleTests(); 6154 return reliableMarginLeftVal; 6155 } 6156 } ); 6157} )(); 6158 6159 6160function curCSS( elem, name, computed ) { 6161 var width, minWidth, maxWidth, ret, 6162 style = elem.style; 6163 6164 computed = computed || getStyles( elem ); 6165 6166 // Support: IE <=9 only 6167 // getPropertyValue is only needed for .css('filter') (#12537) 6168 if ( computed ) { 6169 ret = computed.getPropertyValue( name ) || computed[ name ]; 6170 6171 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { 6172 ret = jQuery.style( elem, name ); 6173 } 6174 6175 // A tribute to the "awesome hack by Dean Edwards" 6176 // Android Browser returns percentage for some values, 6177 // but width seems to be reliably pixels. 6178 // This is against the CSSOM draft spec: 6179 // https://drafts.csswg.org/cssom/#resolved-values 6180 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { 6181 6182 // Remember the original values 6183 width = style.width; 6184 minWidth = style.minWidth; 6185 maxWidth = style.maxWidth; 6186 6187 // Put in the new values to get a computed value out 6188 style.minWidth = style.maxWidth = style.width = ret; 6189 ret = computed.width; 6190 6191 // Revert the changed values 6192 style.width = width; 6193 style.minWidth = minWidth; 6194 style.maxWidth = maxWidth; 6195 } 6196 } 6197 6198 return ret !== undefined ? 6199 6200 // Support: IE <=9 - 11 only 6201 // IE returns zIndex value as an integer. 6202 ret + "" : 6203 ret; 6204} 6205 6206 6207function addGetHookIf( conditionFn, hookFn ) { 6208 6209 // Define the hook, we'll check on the first run if it's really needed. 6210 return { 6211 get: function() { 6212 if ( conditionFn() ) { 6213 6214 // Hook not needed (or it's not possible to use it due 6215 // to missing dependency), remove it. 6216 delete this.get; 6217 return; 6218 } 6219 6220 // Hook needed; redefine it so that the support test is not executed again. 6221 return ( this.get = hookFn ).apply( this, arguments ); 6222 } 6223 }; 6224} 6225 6226 6227var 6228 6229 // Swappable if display is none or starts with table 6230 // except "table", "table-cell", or "table-caption" 6231 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 6232 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 6233 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 6234 cssNormalTransform = { 6235 letterSpacing: "0", 6236 fontWeight: "400" 6237 }, 6238 6239 cssPrefixes = [ "Webkit", "Moz", "ms" ], 6240 emptyStyle = document.createElement( "div" ).style; 6241 6242// Return a css property mapped to a potentially vendor prefixed property 6243function vendorPropName( name ) { 6244 6245 // Shortcut for names that are not vendor prefixed 6246 if ( name in emptyStyle ) { 6247 return name; 6248 } 6249 6250 // Check for vendor prefixed names 6251 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 6252 i = cssPrefixes.length; 6253 6254 while ( i-- ) { 6255 name = cssPrefixes[ i ] + capName; 6256 if ( name in emptyStyle ) { 6257 return name; 6258 } 6259 } 6260} 6261 6262function setPositiveNumber( elem, value, subtract ) { 6263 6264 // Any relative (+/-) values have already been 6265 // normalized at this point 6266 var matches = rcssNum.exec( value ); 6267 return matches ? 6268 6269 // Guard against undefined "subtract", e.g., when used as in cssHooks 6270 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 6271 value; 6272} 6273 6274function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { 6275 var i
vendor: 9,745 bytes, lines 6275-6632
6275, 6276 val = 0; 6277 6278 // If we already have the right measurement, avoid augmentation 6279 if ( extra === ( isBorderBox ? "border" : "content" ) ) { 6280 i = 4; 6281 6282 // Otherwise initialize for horizontal or vertical properties 6283 } else { 6284 i = name === "width" ? 1 : 0; 6285 } 6286 6287 for ( ; i < 4; i += 2 ) { 6288 6289 // Both box models exclude margin, so add it if we want it 6290 if ( extra === "margin" ) { 6291 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); 6292 } 6293 6294 if ( isBorderBox ) { 6295 6296 // border-box includes padding, so remove it if we want content 6297 if ( extra === "content" ) { 6298 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6299 } 6300 6301 // At this point, extra isn't border nor margin, so remove border 6302 if ( extra !== "margin" ) { 6303 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6304 } 6305 } else { 6306 6307 // At this point, extra isn't content, so add padding 6308 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6309 6310 // At this point, extra isn't content nor padding, so add border 6311 if ( extra !== "padding" ) { 6312 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6313 } 6314 } 6315 } 6316 6317 return val; 6318} 6319 6320function getWidthOrHeight( elem, name, extra ) { 6321 6322 // Start with offset property, which is equivalent to the border-box value 6323 var val, 6324 valueIsBorderBox = true, 6325 styles = getStyles( elem ), 6326 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 6327 6328 // Support: IE <=11 only 6329 // Running getBoundingClientRect on a disconnected node 6330 // in IE throws an error. 6331 if ( elem.getClientRects().length ) { 6332 val = elem.getBoundingClientRect()[ name ]; 6333 } 6334 6335 // Some non-html elements return undefined for offsetWidth, so check for null/undefined 6336 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 6337 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 6338 if ( val <= 0 || val == null ) { 6339 6340 // Fall back to computed then uncomputed css if necessary 6341 val = curCSS( elem, name, styles ); 6342 if ( val < 0 || val == null ) { 6343 val = elem.style[ name ]; 6344 } 6345 6346 // Computed unit is not pixels. Stop here and return. 6347 if ( rnumnonpx.test( val ) ) { 6348 return val; 6349 } 6350 6351 // Check for style in case a browser which returns unreliable values 6352 // for getComputedStyle silently falls back to the reliable elem.style 6353 valueIsBorderBox = isBorderBox && 6354 ( support.boxSizingReliable() || val === elem.style[ name ] ); 6355 6356 // Normalize "", auto, and prepare for extra 6357 val = parseFloat( val ) || 0; 6358 } 6359 6360 // Use the active box-sizing model to add/subtract irrelevant styles 6361 return ( val + 6362 augmentWidthOrHeight( 6363 elem, 6364 name, 6365 extra || ( isBorderBox ? "border" : "content" ), 6366 valueIsBorderBox, 6367 styles 6368 ) 6369 ) + "px"; 6370} 6371 6372jQuery.extend( { 6373 6374 // Add in style property hooks for overriding the default 6375 // behavior of getting and setting a style property 6376 cssHooks: { 6377 opacity: { 6378 get: function( elem, computed ) { 6379 if ( computed ) { 6380 6381 // We should always get a number back from opacity 6382 var ret = curCSS( elem, "opacity" ); 6383 return ret === "" ? "1" : ret; 6384 } 6385 } 6386 } 6387 }, 6388 6389 // Don't automatically add "px" to these possibly-unitless properties 6390 cssNumber: { 6391 "animationIterationCount": true, 6392 "columnCount": true, 6393 "fillOpacity": true, 6394 "flexGrow": true, 6395 "flexShrink": true, 6396 "fontWeight": true, 6397 "lineHeight": true, 6398 "opacity": true, 6399 "order": true, 6400 "orphans": true, 6401 "widows": true, 6402 "zIndex": true, 6403 "zoom": true 6404 }, 6405 6406 // Add in properties whose names you wish to fix before 6407 // setting or getting the value 6408 cssProps: { 6409 "float": "cssFloat" 6410 }, 6411 6412 // Get and set the style property on a DOM Node 6413 style: function( elem, name, value, extra ) { 6414 6415 // Don't set styles on text and comment nodes 6416 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 6417 return; 6418 } 6419 6420 // Make sure that we're working with the right name 6421 var ret, type, hooks, 6422 origName = jQuery.camelCase( name ), 6423 style = elem.style; 6424 6425 name = jQuery.cssProps[ origName ] || 6426 ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); 6427 6428 // Gets hook for the prefixed version, then unprefixed version 6429 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6430 6431 // Check if we're setting a value 6432 if ( value !== undefined ) { 6433 type = typeof value; 6434 6435 // Convert "+=" or "-=" to relative numbers (#7345) 6436 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 6437 value = adjustCSS( elem, name, ret ); 6438 6439 // Fixes bug #9237 6440 type = "number"; 6441 } 6442 6443 // Make sure that null and NaN values aren't set (#7116) 6444 if ( value == null || value !== value ) { 6445 return; 6446 } 6447 6448 // If a number was passed in, add the unit (except for certain CSS properties) 6449 if ( type === "number" ) { 6450 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 6451 } 6452 6453 // background-* props affect original clone's values 6454 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 6455 style[ name ] = "inherit"; 6456 } 6457 6458 // If a hook was provided, use that value, otherwise just set the specified value 6459 if ( !hooks || !( "set" in hooks ) || 6460 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 6461 6462 style[ name ] = value; 6463 } 6464 6465 } else { 6466 6467 // If a hook was provided get the non-computed value from there 6468 if ( hooks && "get" in hooks && 6469 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 6470 6471 return ret; 6472 } 6473 6474 // Otherwise just get the value from the style object 6475 return style[ name ]; 6476 } 6477 }, 6478 6479 css: function( elem, name, extra, styles ) { 6480 var val, num, hooks, 6481 origName = jQuery.camelCase( name ); 6482 6483 // Make sure that we're working with the right name 6484 name = jQuery.cssProps[ origName ] || 6485 ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName ); 6486 6487 // Try prefixed name followed by the unprefixed name 6488 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6489 6490 // If a hook was provided get the computed value from there 6491 if ( hooks && "get" in hooks ) { 6492 val = hooks.get( elem, true, extra ); 6493 } 6494 6495 // Otherwise, if a way to get the computed value exists, use that 6496 if ( val === undefined ) { 6497 val = curCSS( elem, name, styles ); 6498 } 6499 6500 // Convert "normal" to computed value 6501 if ( val === "normal" && name in cssNormalTransform ) { 6502 val = cssNormalTransform[ name ]; 6503 } 6504 6505 // Make numeric if forced or a qualifier was provided and val looks numeric 6506 if ( extra === "" || extra ) { 6507 num = parseFloat( val ); 6508 return extra === true || isFinite( num ) ? num || 0 : val; 6509 } 6510 return val; 6511 } 6512} ); 6513 6514jQuery.each( [ "height", "width" ], function( i, name ) { 6515 jQuery.cssHooks[ name ] = { 6516 get: function( elem, computed, extra ) { 6517 if ( computed ) { 6518 6519 // Certain elements can have dimension info if we invisibly show them 6520 // but it must have a current display style that would benefit 6521 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 6522 6523 // Support: Safari 8+ 6524 // Table columns in Safari have non-zero offsetWidth & zero 6525 // getBoundingClientRect().width unless display is changed. 6526 // Support: IE <=11 only 6527 // Running getBoundingClientRect on a disconnected node 6528 // in IE throws an error. 6529 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 6530 swap( elem, cssShow, function() { 6531 return getWidthOrHeight( elem, name, extra ); 6532 } ) : 6533 getWidthOrHeight( elem, name, extra ); 6534 } 6535 }, 6536 6537 set: function( elem, value, extra ) { 6538 var matches, 6539 styles = extra && getStyles( elem ), 6540 subtract = extra && augmentWidthOrHeight( 6541 elem, 6542 name, 6543 extra, 6544 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 6545 styles 6546 ); 6547 6548 // Convert to pixels if value adjustment is needed 6549 if ( subtract && ( matches = rcssNum.exec( value ) ) && 6550 ( matches[ 3 ] || "px" ) !== "px" ) { 6551 6552 elem.style[ name ] = value; 6553 value = jQuery.css( elem, name ); 6554 } 6555 6556 return setPositiveNumber( elem, value, subtract ); 6557 } 6558 }; 6559} ); 6560 6561jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 6562 function( elem, computed ) { 6563 if ( computed ) { 6564 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 6565 elem.getBoundingClientRect().left - 6566 swap( elem, { marginLeft: 0 }, function() { 6567 return elem.getBoundingClientRect().left; 6568 } ) 6569 ) + "px"; 6570 } 6571 } 6572); 6573 6574// These hooks are used by animate to expand properties 6575jQuery.each( { 6576 margin: "", 6577 padding: "", 6578 border: "Width" 6579}, function( prefix, suffix ) { 6580 jQuery.cssHooks[ prefix + suffix ] = { 6581 expand: function( value ) { 6582 var i = 0, 6583 expanded = {}, 6584 6585 // Assumes a single number if not a string 6586 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 6587 6588 for ( ; i < 4; i++ ) { 6589 expanded[ prefix + cssExpand[ i ] + suffix ] = 6590 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 6591 } 6592 6593 return expanded; 6594 } 6595 }; 6596 6597 if ( !rmargin.test( prefix ) ) { 6598 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 6599 } 6600} ); 6601 6602jQuery.fn.extend( { 6603 css: function( name, value ) { 6604 return access( this, function( elem, name, value ) { 6605 var styles, len, 6606 map = {}, 6607 i = 0; 6608 6609 if ( jQuery.isArray( name ) ) { 6610 styles = getStyles( elem ); 6611 len = name.length; 6612 6613 for ( ; i < len; i++ ) { 6614 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 6615 } 6616 6617 return map; 6618 } 6619 6620 return value !== undefined ? 6621 jQuery.style( elem, name, value ) : 6622 jQuery.css( elem, name ); 6623 }, name, value, arguments.length > 1 ); 6624 } 6625} ); 6626 6627 6628function Tween( elem, options, prop, end, easing ) { 6629 return new Tween.prototype.init( elem, options, prop, end, easing ); 6630} 6631jQuery.Tween = Tween; 6632
vendor: 6,060 bytes, lines 6633-6866
6633Tween.prototype = { 6634 constructor: Tween, 6635 init: function( elem, options, prop, end, easing, unit ) { 6636 this.elem = elem; 6637 this.prop = prop; 6638 this.easing = easing || jQuery.easing._default; 6639 this.options = options; 6640 this.start = this.now = this.cur(); 6641 this.end = end; 6642 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 6643 }, 6644 cur: function() { 6645 var hooks = Tween.propHooks[ this.prop ]; 6646 6647 return hooks && hooks.get ? 6648 hooks.get( this ) : 6649 Tween.propHooks._default.get( this ); 6650 }, 6651 run: function( percent ) { 6652 var eased, 6653 hooks = Tween.propHooks[ this.prop ]; 6654 6655 if ( this.options.duration ) { 6656 this.pos = eased = jQuery.easing[ this.easing ]( 6657 percent, this.options.duration * percent, 0, 1, this.options.duration 6658 ); 6659 } else { 6660 this.pos = eased = percent; 6661 } 6662 this.now = ( this.end - this.start ) * eased + this.start; 6663 6664 if ( this.options.step ) { 6665 this.options.step.call( this.elem, this.now, this ); 6666 } 6667 6668 if ( hooks && hooks.set ) { 6669 hooks.set( this ); 6670 } else { 6671 Tween.propHooks._default.set( this ); 6672 } 6673 return this; 6674 } 6675}; 6676 6677Tween.prototype.init.prototype = Tween.prototype; 6678 6679Tween.propHooks = { 6680 _default: { 6681 get: function( tween ) { 6682 var result; 6683 6684 // Use a property on the element directly when it is not a DOM element, 6685 // or when there is no matching style property that exists. 6686 if ( tween.elem.nodeType !== 1 || 6687 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 6688 return tween.elem[ tween.prop ]; 6689 } 6690 6691 // Passing an empty string as a 3rd parameter to .css will automatically 6692 // attempt a parseFloat and fallback to a string if the parse fails. 6693 // Simple values such as "10px" are parsed to Float; 6694 // complex values such as "rotate(1rad)" are returned as-is. 6695 result = jQuery.css( tween.elem, tween.prop, "" ); 6696 6697 // Empty strings, null, undefined and "auto" are converted to 0. 6698 return !result || result === "auto" ? 0 : result; 6699 }, 6700 set: function( tween ) { 6701 6702 // Use step hook for back compat. 6703 // Use cssHook if its there. 6704 // Use .style if available and use plain properties where available. 6705 if ( jQuery.fx.step[ tween.prop ] ) { 6706 jQuery.fx.step[ tween.prop ]( tween ); 6707 } else if ( tween.elem.nodeType === 1 && 6708 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || 6709 jQuery.cssHooks[ tween.prop ] ) ) { 6710 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 6711 } else { 6712 tween.elem[ tween.prop ] = tween.now; 6713 } 6714 } 6715 } 6716}; 6717 6718// Support: IE <=9 only 6719// Panic based approach to setting things on disconnected nodes 6720Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 6721 set: function( tween ) { 6722 if ( tween.elem.nodeType && tween.elem.parentNode ) { 6723 tween.elem[ tween.prop ] = tween.now; 6724 } 6725 } 6726}; 6727 6728jQuery.easing = { 6729 linear: function( p ) { 6730 return p; 6731 }, 6732 swing: function( p ) { 6733 return 0.5 - Math.cos( p * Math.PI ) / 2; 6734 }, 6735 _default: "swing" 6736}; 6737 6738jQuery.fx = Tween.prototype.init; 6739 6740// Back compat <1.8 extension point 6741jQuery.fx.step = {}; 6742 6743 6744 6745 6746var 6747 fxNow, timerId, 6748 rfxtypes = /^(?:toggle|show|hide)$/, 6749 rrun = /queueHooks$/; 6750 6751function raf() { 6752 if ( timerId ) { 6753 window.requestAnimationFrame( raf ); 6754 jQuery.fx.tick(); 6755 } 6756} 6757 6758// Animations created synchronously will run synchronously 6759function createFxNow() { 6760 window.setTimeout( function() { 6761 fxNow = undefined; 6762 } ); 6763 return ( fxNow = jQuery.now() ); 6764} 6765 6766// Generate parameters to create a standard animation 6767function genFx( type, includeWidth ) { 6768 var which, 6769 i = 0, 6770 attrs = { height: type }; 6771 6772 // If we include width, step value is 1 to do all cssExpand values, 6773 // otherwise step value is 2 to skip over Left and Right 6774 includeWidth = includeWidth ? 1 : 0; 6775 for ( ; i < 4; i += 2 - includeWidth ) { 6776 which = cssExpand[ i ]; 6777 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 6778 } 6779 6780 if ( includeWidth ) { 6781 attrs.opacity = attrs.width = type; 6782 } 6783 6784 return attrs; 6785} 6786 6787function createTween( value, prop, animation ) { 6788 var tween, 6789 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 6790 index = 0, 6791 length = collection.length; 6792 for ( ; index < length; index++ ) { 6793 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 6794 6795 // We're done with this property 6796 return tween; 6797 } 6798 } 6799} 6800 6801function defaultPrefilter( elem, props, opts ) { 6802 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 6803 isBox = "width" in props || "height" in props, 6804 anim = this, 6805 orig = {}, 6806 style = elem.style, 6807 hidden = elem.nodeType && isHiddenWithinTree( elem ), 6808 dataShow = dataPriv.get( elem, "fxshow" ); 6809 6810 // Queue-skipping animations hijack the fx hooks 6811 if ( !opts.queue ) { 6812 hooks = jQuery._queueHooks( elem, "fx" ); 6813 if ( hooks.unqueued == null ) { 6814 hooks.unqueued = 0; 6815 oldfire = hooks.empty.fire; 6816 hooks.empty.fire = function() { 6817 if ( !hooks.unqueued ) { 6818 oldfire(); 6819 } 6820 }; 6821 } 6822 hooks.unqueued++; 6823 6824 anim.always( function() { 6825 6826 // Ensure the complete handler is called before this completes 6827 anim.always( function() { 6828 hooks.unqueued--; 6829 if ( !jQuery.queue( elem, "fx" ).length ) { 6830 hooks.empty.fire(); 6831 } 6832 } ); 6833 } ); 6834 } 6835 6836 // Detect show/hide animations 6837 for ( prop in props ) { 6838 value = props[ prop ]; 6839 if ( rfxtypes.test( value ) ) { 6840 delete props[ prop ]; 6841 toggle = toggle || value === "toggle"; 6842 if ( value === ( hidden ? "hide" : "show" ) ) { 6843 6844 // Pretend to be hidden if this is a "show" and 6845 // there is still data from a stopped show/hide 6846 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 6847 hidden = true; 6848 6849 // Ignore all other no-op show/hide data 6850 } else { 6851 continue; 6852 } 6853 } 6854 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 6855 } 6856 } 6857 6858 // Bail out if this is a no-op like .hide().hide() 6859 propTween = !jQuery.isEmptyObject( props ); 6860 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 6861 return; 6862 } 6863 6864 // Restrict "overflow" and "display" styles during box animations 6865 if ( isBox && elem.nodeType === 1 ) { 6866
vendor: 4,174 bytes, lines 6867-7025
6867 // Support: IE <=9 - 11, Edge 12 - 13 6868 // Record all 3 overflow attributes because IE does not infer the shorthand 6869 // from identically-valued overflowX and overflowY 6870 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 6871 6872 // Identify a display type, preferring old show/hide data over the CSS cascade 6873 restoreDisplay = dataShow && dataShow.display; 6874 if ( restoreDisplay == null ) { 6875 restoreDisplay = dataPriv.get( elem, "display" ); 6876 } 6877 display = jQuery.css( elem, "display" ); 6878 if ( display === "none" ) { 6879 if ( restoreDisplay ) { 6880 display = restoreDisplay; 6881 } else { 6882 6883 // Get nonempty value(s) by temporarily forcing visibility 6884 showHide( [ elem ], true ); 6885 restoreDisplay = elem.style.display || restoreDisplay; 6886 display = jQuery.css( elem, "display" ); 6887 showHide( [ elem ] ); 6888 } 6889 } 6890 6891 // Animate inline elements as inline-block 6892 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 6893 if ( jQuery.css( elem, "float" ) === "none" ) { 6894 6895 // Restore the original display value at the end of pure show/hide animations 6896 if ( !propTween ) { 6897 anim.done( function() { 6898 style.display = restoreDisplay; 6899 } ); 6900 if ( restoreDisplay == null ) { 6901 display = style.display; 6902 restoreDisplay = display === "none" ? "" : display; 6903 } 6904 } 6905 style.display = "inline-block"; 6906 } 6907 } 6908 } 6909 6910 if ( opts.overflow ) { 6911 style.overflow = "hidden"; 6912 anim.always( function() { 6913 style.overflow = opts.overflow[ 0 ]; 6914 style.overflowX = opts.overflow[ 1 ]; 6915 style.overflowY = opts.overflow[ 2 ]; 6916 } ); 6917 } 6918 6919 // Implement show/hide animations 6920 propTween = false; 6921 for ( prop in orig ) { 6922 6923 // General show/hide setup for this element animation 6924 if ( !propTween ) { 6925 if ( dataShow ) { 6926 if ( "hidden" in dataShow ) { 6927 hidden = dataShow.hidden; 6928 } 6929 } else { 6930 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 6931 } 6932 6933 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 6934 if ( toggle ) { 6935 dataShow.hidden = !hidden; 6936 } 6937 6938 // Show elements before animating them 6939 if ( hidden ) { 6940 showHide( [ elem ], true ); 6941 } 6942 6943 /* eslint-disable no-loop-func */ 6944 6945 anim.done( function() { 6946 6947 /* eslint-enable no-loop-func */ 6948 6949 // The final step of a "hide" animation is actually hiding the element 6950 if ( !hidden ) { 6951 showHide( [ elem ] ); 6952 } 6953 dataPriv.remove( elem, "fxshow" ); 6954 for ( prop in orig ) { 6955 jQuery.style( elem, prop, orig[ prop ] ); 6956 } 6957 } ); 6958 } 6959 6960 // Per-property setup 6961 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 6962 if ( !( prop in dataShow ) ) { 6963 dataShow[ prop ] = propTween.start; 6964 if ( hidden ) { 6965 propTween.end = propTween.start; 6966 propTween.start = 0; 6967 } 6968 } 6969 } 6970} 6971 6972function propFilter( props, specialEasing ) { 6973 var index, name, easing, value, hooks; 6974 6975 // camelCase, specialEasing and expand cssHook pass 6976 for ( index in props ) { 6977 name = jQuery.camelCase( index ); 6978 easing = specialEasing[ name ]; 6979 value = props[ index ]; 6980 if ( jQuery.isArray( value ) ) { 6981 easing = value[ 1 ]; 6982 value = props[ index ] = value[ 0 ]; 6983 } 6984 6985 if ( index !== name ) { 6986 props[ name ] = value; 6987 delete props[ index ]; 6988 } 6989 6990 hooks = jQuery.cssHooks[ name ]; 6991 if ( hooks && "expand" in hooks ) { 6992 value = hooks.expand( value ); 6993 delete props[ name ]; 6994 6995 // Not quite $.extend, this won't overwrite existing keys. 6996 // Reusing 'index' because we have the correct "name" 6997 for ( index in value ) { 6998 if ( !( index in props ) ) { 6999 props[ index ] = value[ index ]; 7000 specialEasing[ index ] = easing; 7001 } 7002 } 7003 } else { 7004 specialEasing[ name ] = easing; 7005 } 7006 } 7007} 7008 7009function Animation( elem, properties, options ) { 7010 var result, 7011 stopped, 7012 index = 0, 7013 length = Animation.prefilters.length, 7014 deferred = jQuery.Deferred().always( function() { 7015 7016 // Don't match elem in the :animated selector 7017 delete tick.elem; 7018 } ), 7019 tick = function() { 7020 if ( stopped ) { 7021 return false; 7022 } 7023 var currentTime = fxNow || createFxNow(), 7024 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 7025
vendor: 6,479 bytes, lines 7026-7275
7026 // Support: Android 2.3 only 7027 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 7028 temp = remaining / animation.duration || 0, 7029 percent = 1 - temp, 7030 index = 0, 7031 length = animation.tweens.length; 7032 7033 for ( ; index < length; index++ ) { 7034 animation.tweens[ index ].run( percent ); 7035 } 7036 7037 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 7038 7039 if ( percent < 1 && length ) { 7040 return remaining; 7041 } else { 7042 deferred.resolveWith( elem, [ animation ] ); 7043 return false; 7044 } 7045 }, 7046 animation = deferred.promise( { 7047 elem: elem, 7048 props: jQuery.extend( {}, properties ), 7049 opts: jQuery.extend( true, { 7050 specialEasing: {}, 7051 easing: jQuery.easing._default 7052 }, options ), 7053 originalProperties: properties, 7054 originalOptions: options, 7055 startTime: fxNow || createFxNow(), 7056 duration: options.duration, 7057 tweens: [], 7058 createTween: function( prop, end ) { 7059 var tween = jQuery.Tween( elem, animation.opts, prop, end, 7060 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 7061 animation.tweens.push( tween ); 7062 return tween; 7063 }, 7064 stop: function( gotoEnd ) { 7065 var index = 0, 7066 7067 // If we are going to the end, we want to run all the tweens 7068 // otherwise we skip this part 7069 length = gotoEnd ? animation.tweens.length : 0; 7070 if ( stopped ) { 7071 return this; 7072 } 7073 stopped = true; 7074 for ( ; index < length; index++ ) { 7075 animation.tweens[ index ].run( 1 ); 7076 } 7077 7078 // Resolve when we played the last frame; otherwise, reject 7079 if ( gotoEnd ) { 7080 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7081 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 7082 } else { 7083 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 7084 } 7085 return this; 7086 } 7087 } ), 7088 props = animation.props; 7089 7090 propFilter( props, animation.opts.specialEasing ); 7091 7092 for ( ; index < length; index++ ) { 7093 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 7094 if ( result ) { 7095 if ( jQuery.isFunction( result.stop ) ) { 7096 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 7097 jQuery.proxy( result.stop, result ); 7098 } 7099 return result; 7100 } 7101 } 7102 7103 jQuery.map( props, createTween, animation ); 7104 7105 if ( jQuery.isFunction( animation.opts.start ) ) { 7106 animation.opts.start.call( elem, animation ); 7107 } 7108 7109 jQuery.fx.timer( 7110 jQuery.extend( tick, { 7111 elem: elem, 7112 anim: animation, 7113 queue: animation.opts.queue 7114 } ) 7115 ); 7116 7117 // attach callbacks from options 7118 return animation.progress( animation.opts.progress ) 7119 .done( animation.opts.done, animation.opts.complete ) 7120 .fail( animation.opts.fail ) 7121 .always( animation.opts.always ); 7122} 7123 7124jQuery.Animation = jQuery.extend( Animation, { 7125 7126 tweeners: { 7127 "*": [ function( prop, value ) { 7128 var tween = this.createTween( prop, value ); 7129 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 7130 return tween; 7131 } ] 7132 }, 7133 7134 tweener: function( props, callback ) { 7135 if ( jQuery.isFunction( props ) ) { 7136 callback = props; 7137 props = [ "*" ]; 7138 } else { 7139 props = props.match( rnothtmlwhite ); 7140 } 7141 7142 var prop, 7143 index = 0, 7144 length = props.length; 7145 7146 for ( ; index < length; index++ ) { 7147 prop = props[ index ]; 7148 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 7149 Animation.tweeners[ prop ].unshift( callback ); 7150 } 7151 }, 7152 7153 prefilters: [ defaultPrefilter ], 7154 7155 prefilter: function( callback, prepend ) { 7156 if ( prepend ) { 7157 Animation.prefilters.unshift( callback ); 7158 } else { 7159 Animation.prefilters.push( callback ); 7160 } 7161 } 7162} ); 7163 7164jQuery.speed = function( speed, easing, fn ) { 7165 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 7166 complete: fn || !fn && easing || 7167 jQuery.isFunction( speed ) && speed, 7168 duration: speed, 7169 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing 7170 }; 7171 7172 // Go to the end state if fx are off or if document is hidden 7173 if ( jQuery.fx.off || document.hidden ) { 7174 opt.duration = 0; 7175 7176 } else { 7177 if ( typeof opt.duration !== "number" ) { 7178 if ( opt.duration in jQuery.fx.speeds ) { 7179 opt.duration = jQuery.fx.speeds[ opt.duration ]; 7180 7181 } else { 7182 opt.duration = jQuery.fx.speeds._default; 7183 } 7184 } 7185 } 7186 7187 // Normalize opt.queue - true/undefined/null -> "fx" 7188 if ( opt.queue == null || opt.queue === true ) { 7189 opt.queue = "fx"; 7190 } 7191 7192 // Queueing 7193 opt.old = opt.complete; 7194 7195 opt.complete = function() { 7196 if ( jQuery.isFunction( opt.old ) ) { 7197 opt.old.call( this ); 7198 } 7199 7200 if ( opt.queue ) { 7201 jQuery.dequeue( this, opt.queue ); 7202 } 7203 }; 7204 7205 return opt; 7206}; 7207 7208jQuery.fn.extend( { 7209 fadeTo: function( speed, to, easing, callback ) { 7210 7211 // Show any hidden elements after setting opacity to 0 7212 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 7213 7214 // Animate to the value specified 7215 .end().animate( { opacity: to }, speed, easing, callback ); 7216 }, 7217 animate: function( prop, speed, easing, callback ) { 7218 var empty = jQuery.isEmptyObject( prop ), 7219 optall = jQuery.speed( speed, easing, callback ), 7220 doAnimation = function() { 7221 7222 // Operate on a copy of prop so per-property easing won't be lost 7223 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 7224 7225 // Empty animations, or finishing resolves immediately 7226 if ( empty || dataPriv.get( this, "finish" ) ) { 7227 anim.stop( true ); 7228 } 7229 }; 7230 doAnimation.finish = doAnimation; 7231 7232 return empty || optall.queue === false ? 7233 this.each( doAnimation ) : 7234 this.queue( optall.queue, doAnimation ); 7235 }, 7236 stop: function( type, clearQueue, gotoEnd ) { 7237 var stopQueue = function( hooks ) { 7238 var stop = hooks.stop; 7239 delete hooks.stop; 7240 stop( gotoEnd ); 7241 }; 7242 7243 if ( typeof type !== "string" ) { 7244 gotoEnd = clearQueue; 7245 clearQueue = type; 7246 type = undefined; 7247 } 7248 if ( clearQueue && type !== false ) { 7249 this.queue( type || "fx", [] ); 7250 } 7251 7252 return this.each( function() { 7253 var dequeue = true, 7254 index = type != null && type + "queueHooks", 7255 timers = jQuery.timers, 7256 data = dataPriv.get( this ); 7257 7258 if ( index ) { 7259 if ( data[ index ] && data[ index ].stop ) { 7260 stopQueue( data[ index ] ); 7261 } 7262 } else { 7263 for ( index in data ) { 7264 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 7265 stopQueue( data[ index ] ); 7266 } 7267 } 7268 } 7269 7270 for ( index = timers.length; index--; ) { 7271 if ( timers[ index ].elem === this && 7272 ( type == null || timers[ index ].queue === type ) ) { 7273 7274 timers[ index ].anim.stop( gotoEnd ); 7275 dequeue = false;
vendor: 3,274 bytes, lines 7276-7415
7276 timers.splice( index, 1 ); 7277 } 7278 } 7279 7280 // Start the next in the queue if the last step wasn't forced. 7281 // Timers currently will call their complete callbacks, which 7282 // will dequeue but only if they were gotoEnd. 7283 if ( dequeue || !gotoEnd ) { 7284 jQuery.dequeue( this, type ); 7285 } 7286 } ); 7287 }, 7288 finish: function( type ) { 7289 if ( type !== false ) { 7290 type = type || "fx"; 7291 } 7292 return this.each( function() { 7293 var index, 7294 data = dataPriv.get( this ), 7295 queue = data[ type + "queue" ], 7296 hooks = data[ type + "queueHooks" ], 7297 timers = jQuery.timers, 7298 length = queue ? queue.length : 0; 7299 7300 // Enable finishing flag on private data 7301 data.finish = true; 7302 7303 // Empty the queue first 7304 jQuery.queue( this, type, [] ); 7305 7306 if ( hooks && hooks.stop ) { 7307 hooks.stop.call( this, true ); 7308 } 7309 7310 // Look for any active animations, and finish them 7311 for ( index = timers.length; index--; ) { 7312 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 7313 timers[ index ].anim.stop( true ); 7314 timers.splice( index, 1 ); 7315 } 7316 } 7317 7318 // Look for any animations in the old queue and finish them 7319 for ( index = 0; index < length; index++ ) { 7320 if ( queue[ index ] && queue[ index ].finish ) { 7321 queue[ index ].finish.call( this ); 7322 } 7323 } 7324 7325 // Turn off finishing flag 7326 delete data.finish; 7327 } ); 7328 } 7329} ); 7330 7331jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { 7332 var cssFn = jQuery.fn[ name ]; 7333 jQuery.fn[ name ] = function( speed, easing, callback ) { 7334 return speed == null || typeof speed === "boolean" ? 7335 cssFn.apply( this, arguments ) : 7336 this.animate( genFx( name, true ), speed, easing, callback ); 7337 }; 7338} ); 7339 7340// Generate shortcuts for custom animations 7341jQuery.each( { 7342 slideDown: genFx( "show" ), 7343 slideUp: genFx( "hide" ), 7344 slideToggle: genFx( "toggle" ), 7345 fadeIn: { opacity: "show" }, 7346 fadeOut: { opacity: "hide" }, 7347 fadeToggle: { opacity: "toggle" } 7348}, function( name, props ) { 7349 jQuery.fn[ name ] = function( speed, easing, callback ) { 7350 return this.animate( props, speed, easing, callback ); 7351 }; 7352} ); 7353 7354jQuery.timers = []; 7355jQuery.fx.tick = function() { 7356 var timer, 7357 i = 0, 7358 timers = jQuery.timers; 7359 7360 fxNow = jQuery.now(); 7361 7362 for ( ; i < timers.length; i++ ) { 7363 timer = timers[ i ]; 7364 7365 // Checks the timer has not already been removed 7366 if ( !timer() && timers[ i ] === timer ) { 7367 timers.splice( i--, 1 ); 7368 } 7369 } 7370 7371 if ( !timers.length ) { 7372 jQuery.fx.stop(); 7373 } 7374 fxNow = undefined; 7375}; 7376 7377jQuery.fx.timer = function( timer ) { 7378 jQuery.timers.push( timer ); 7379 if ( timer() ) { 7380 jQuery.fx.start(); 7381 } else { 7382 jQuery.timers.pop(); 7383 } 7384}; 7385 7386jQuery.fx.interval = 13; 7387jQuery.fx.start = function() { 7388 if ( !timerId ) { 7389 timerId = window.requestAnimationFrame ? 7390 window.requestAnimationFrame( raf ) : 7391 window.setInterval( jQuery.fx.tick, jQuery.fx.interval ); 7392 } 7393}; 7394 7395jQuery.fx.stop = function() { 7396 if ( window.cancelAnimationFrame ) { 7397 window.cancelAnimationFrame( timerId ); 7398 } else { 7399 window.clearInterval( timerId ); 7400 } 7401 7402 timerId = null; 7403}; 7404 7405jQuery.fx.speeds = { 7406 slow: 600, 7407 fast: 200, 7408 7409 // Default speed 7410 _default: 400 7411}; 7412 7413 7414// Based off of the plugin by Clint Helfers, with permission. 7415// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
vendor: 11,255 bytes, lines 7416-7888
7416jQuery.fn.delay = function( time, type ) { 7417 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 7418 type = type || "fx"; 7419 7420 return this.queue( type, function( next, hooks ) { 7421 var timeout = window.setTimeout( next, time ); 7422 hooks.stop = function() { 7423 window.clearTimeout( timeout ); 7424 }; 7425 } ); 7426}; 7427 7428 7429( function() { 7430 var input = document.createElement( "input" ), 7431 select = document.createElement( "select" ), 7432 opt = select.appendChild( document.createElement( "option" ) ); 7433 7434 input.type = "checkbox"; 7435 7436 // Support: Android <=4.3 only 7437 // Default value for a checkbox should be "on" 7438 support.checkOn = input.value !== ""; 7439 7440 // Support: IE <=11 only 7441 // Must access selectedIndex to make default options select 7442 support.optSelected = opt.selected; 7443 7444 // Support: IE <=11 only 7445 // An input loses its value after becoming a radio 7446 input = document.createElement( "input" ); 7447 input.value = "t"; 7448 input.type = "radio"; 7449 support.radioValue = input.value === "t"; 7450} )(); 7451 7452 7453var boolHook, 7454 attrHandle = jQuery.expr.attrHandle; 7455 7456jQuery.fn.extend( { 7457 attr: function( name, value ) { 7458 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 7459 }, 7460 7461 removeAttr: function( name ) { 7462 return this.each( function() { 7463 jQuery.removeAttr( this, name ); 7464 } ); 7465 } 7466} ); 7467 7468jQuery.extend( { 7469 attr: function( elem, name, value ) { 7470 var ret, hooks, 7471 nType = elem.nodeType; 7472 7473 // Don't get/set attributes on text, comment and attribute nodes 7474 if ( nType === 3 || nType === 8 || nType === 2 ) { 7475 return; 7476 } 7477 7478 // Fallback to prop when attributes are not supported 7479 if ( typeof elem.getAttribute === "undefined" ) { 7480 return jQuery.prop( elem, name, value ); 7481 } 7482 7483 // Attribute hooks are determined by the lowercase version 7484 // Grab necessary hook if one is defined 7485 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7486 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 7487 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 7488 } 7489 7490 if ( value !== undefined ) { 7491 if ( value === null ) { 7492 jQuery.removeAttr( elem, name ); 7493 return; 7494 } 7495 7496 if ( hooks && "set" in hooks && 7497 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7498 return ret; 7499 } 7500 7501 elem.setAttribute( name, value + "" ); 7502 return value; 7503 } 7504 7505 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7506 return ret; 7507 } 7508 7509 ret = jQuery.find.attr( elem, name ); 7510 7511 // Non-existent attributes return null, we normalize to undefined 7512 return ret == null ? undefined : ret; 7513 }, 7514 7515 attrHooks: { 7516 type: { 7517 set: function( elem, value ) { 7518 if ( !support.radioValue && value === "radio" && 7519 jQuery.nodeName( elem, "input" ) ) { 7520 var val = elem.value; 7521 elem.setAttribute( "type", value ); 7522 if ( val ) { 7523 elem.value = val; 7524 } 7525 return value; 7526 } 7527 } 7528 } 7529 }, 7530 7531 removeAttr: function( elem, value ) { 7532 var name, 7533 i = 0, 7534 7535 // Attribute names can contain non-HTML whitespace characters 7536 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 7537 attrNames = value && value.match( rnothtmlwhite ); 7538 7539 if ( attrNames && elem.nodeType === 1 ) { 7540 while ( ( name = attrNames[ i++ ] ) ) { 7541 elem.removeAttribute( name ); 7542 } 7543 } 7544 } 7545} ); 7546 7547// Hooks for boolean attributes 7548boolHook = { 7549 set: function( elem, value, name ) { 7550 if ( value === false ) { 7551 7552 // Remove boolean attributes when set to false 7553 jQuery.removeAttr( elem, name ); 7554 } else { 7555 elem.setAttribute( name, name ); 7556 } 7557 return name; 7558 } 7559}; 7560 7561jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { 7562 var getter = attrHandle[ name ] || jQuery.find.attr; 7563 7564 attrHandle[ name ] = function( elem, name, isXML ) { 7565 var ret, handle, 7566 lowercaseName = name.toLowerCase(); 7567 7568 if ( !isXML ) { 7569 7570 // Avoid an infinite loop by temporarily removing this function from the getter 7571 handle = attrHandle[ lowercaseName ]; 7572 attrHandle[ lowercaseName ] = ret; 7573 ret = getter( elem, name, isXML ) != null ? 7574 lowercaseName : 7575 null; 7576 attrHandle[ lowercaseName ] = handle; 7577 } 7578 return ret; 7579 }; 7580} ); 7581 7582 7583 7584 7585var rfocusable = /^(?:input|select|textarea|button)$/i, 7586 rclickable = /^(?:a|area)$/i; 7587 7588jQuery.fn.extend( { 7589 prop: function( name, value ) { 7590 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 7591 }, 7592 7593 removeProp: function( name ) { 7594 return this.each( function() { 7595 delete this[ jQuery.propFix[ name ] || name ]; 7596 } ); 7597 } 7598} ); 7599 7600jQuery.extend( { 7601 prop: function( elem, name, value ) { 7602 var ret, hooks, 7603 nType = elem.nodeType; 7604 7605 // Don't get/set properties on text, comment and attribute nodes 7606 if ( nType === 3 || nType === 8 || nType === 2 ) { 7607 return; 7608 } 7609 7610 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7611 7612 // Fix name and attach hooks 7613 name = jQuery.propFix[ name ] || name; 7614 hooks = jQuery.propHooks[ name ]; 7615 } 7616 7617 if ( value !== undefined ) { 7618 if ( hooks && "set" in hooks && 7619 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7620 return ret; 7621 } 7622 7623 return ( elem[ name ] = value ); 7624 } 7625 7626 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7627 return ret; 7628 } 7629 7630 return elem[ name ]; 7631 }, 7632 7633 propHooks: { 7634 tabIndex: { 7635 get: function( elem ) { 7636 7637 // Support: IE <=9 - 11 only 7638 // elem.tabIndex doesn't always return the 7639 // correct value when it hasn't been explicitly set 7640 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 7641 // Use proper attribute retrieval(#12072) 7642 var tabindex = jQuery.find.attr( elem, "tabindex" ); 7643 7644 if ( tabindex ) { 7645 return parseInt( tabindex, 10 ); 7646 } 7647 7648 if ( 7649 rfocusable.test( elem.nodeName ) || 7650 rclickable.test( elem.nodeName ) && 7651 elem.href 7652 ) { 7653 return 0; 7654 } 7655 7656 return -1; 7657 } 7658 } 7659 }, 7660 7661 propFix: { 7662 "for": "htmlFor", 7663 "class": "className" 7664 } 7665} ); 7666 7667// Support: IE <=11 only 7668// Accessing the selectedIndex property 7669// forces the browser to respect setting selected 7670// on the option 7671// The getter ensures a default option is selected 7672// when in an optgroup 7673// eslint rule "no-unused-expressions" is disabled for this code 7674// since it considers such accessions noop 7675if ( !support.optSelected ) { 7676 jQuery.propHooks.selected = { 7677 get: function( elem ) { 7678 7679 /* eslint no-unused-expressions: "off" */ 7680 7681 var parent = elem.parentNode; 7682 if ( parent && parent.parentNode ) { 7683 parent.parentNode.selectedIndex; 7684 } 7685 return null; 7686 }, 7687 set: function( elem ) { 7688 7689 /* eslint no-unused-expressions: "off" */ 7690 7691 var parent = elem.parentNode; 7692 if ( parent ) { 7693 parent.selectedIndex; 7694 7695 if ( parent.parentNode ) { 7696 parent.parentNode.selectedIndex; 7697 } 7698 } 7699 } 7700 }; 7701} 7702 7703jQuery.each( [ 7704 "tabIndex", 7705 "readOnly", 7706 "maxLength", 7707 "cellSpacing", 7708 "cellPadding", 7709 "rowSpan", 7710 "colSpan", 7711 "useMap", 7712 "frameBorder", 7713 "contentEditable" 7714], function() { 7715 jQuery.propFix[ this.toLowerCase() ] = this; 7716} ); 7717 7718 7719 7720 7721 // Strip and collapse whitespace according to HTML spec 7722 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace 7723 function stripAndCollapse( value ) { 7724 var tokens = value.match( rnothtmlwhite ) || []; 7725 return tokens.join( " " ); 7726 } 7727 7728 7729function getClass( elem ) { 7730 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 7731} 7732 7733jQuery.fn.extend( { 7734 addClass: function( value ) { 7735 var classes, elem, cur, curValue, clazz, j, finalValue, 7736 i = 0; 7737 7738 if ( jQuery.isFunction( value ) ) { 7739 return this.each( function( j ) { 7740 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 7741 } ); 7742 } 7743 7744 if ( typeof value === "string" && value ) { 7745 classes = value.match( rnothtmlwhite ) || []; 7746 7747 while ( ( elem = this[ i++ ] ) ) { 7748 curValue = getClass( elem ); 7749 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 7750 7751 if ( cur ) { 7752 j = 0; 7753 while ( ( clazz = classes[ j++ ] ) ) { 7754 if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 7755 cur += clazz + " "; 7756 } 7757 } 7758 7759 // Only assign if different to avoid unneeded rendering. 7760 finalValue = stripAndCollapse( cur ); 7761 if ( curValue !== finalValue ) { 7762 elem.setAttribute( "class", finalValue ); 7763 } 7764 } 7765 } 7766 } 7767 7768 return this; 7769 }, 7770 7771 removeClass: function( value ) { 7772 var classes, elem, cur, curValue, clazz, j, finalValue, 7773 i = 0; 7774 7775 if ( jQuery.isFunction( value ) ) { 7776 return this.each( function( j ) { 7777 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 7778 } ); 7779 } 7780 7781 if ( !arguments.length ) { 7782 return this.attr( "class", "" ); 7783 } 7784 7785 if ( typeof value === "string" && value ) { 7786 classes = value.match( rnothtmlwhite ) || []; 7787 7788 while ( ( elem = this[ i++ ] ) ) { 7789 curValue = getClass( elem ); 7790 7791 // This expression is here for better compressibility (see addClass) 7792 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 7793 7794 if ( cur ) { 7795 j = 0; 7796 while ( ( clazz = classes[ j++ ] ) ) { 7797 7798 // Remove *all* instances 7799 while ( cur.indexOf( " " + clazz + " " ) > -1 ) { 7800 cur = cur.replace( " " + clazz + " ", " " ); 7801 } 7802 } 7803 7804 // Only assign if different to avoid unneeded rendering. 7805 finalValue = stripAndCollapse( cur ); 7806 if ( curValue !== finalValue ) { 7807 elem.setAttribute( "class", finalValue ); 7808 } 7809 } 7810 } 7811 } 7812 7813 return this; 7814 }, 7815 7816 toggleClass: function( value, stateVal ) { 7817 var type = typeof value; 7818 7819 if ( typeof stateVal === "boolean" && type === "string" ) { 7820 return stateVal ? this.addClass( value ) : this.removeClass( value ); 7821 } 7822 7823 if ( jQuery.isFunction( value ) ) { 7824 return this.each( function( i ) { 7825 jQuery( this ).toggleClass( 7826 value.call( this, i, getClass( this ), stateVal ), 7827 stateVal 7828 ); 7829 } ); 7830 } 7831 7832 return this.each( function() { 7833 var className, i, self, classNames; 7834 7835 if ( type === "string" ) { 7836 7837 // Toggle individual class names 7838 i = 0; 7839 self = jQuery( this ); 7840 classNames = value.match( rnothtmlwhite ) || []; 7841 7842 while ( ( className = classNames[ i++ ] ) ) { 7843 7844 // Check each className given, space separated list 7845 if ( self.hasClass( className ) ) { 7846 self.removeClass( className ); 7847 } else { 7848 self.addClass( className ); 7849 } 7850 } 7851 7852 // Toggle whole class name 7853 } else if ( value === undefined || type === "boolean" ) { 7854 className = getClass( this ); 7855 if ( className ) { 7856 7857 // Store className if set 7858 dataPriv.set( this, "__className__", className ); 7859 } 7860 7861 // If the element has a class name or if we're passed `false`, 7862 // then remove the whole classname (if there was one, the above saved it). 7863 // Otherwise bring back whatever was previously saved (if anything), 7864 // falling back to the empty string if nothing was stored. 7865 if ( this.setAttribute ) { 7866 this.setAttribute( "class", 7867 className || value === false ? 7868 "" : 7869 dataPriv.get( this, "__className__" ) || "" 7870 ); 7871 } 7872 } 7873 } ); 7874 }, 7875 7876 hasClass: function( selector ) { 7877 var className, elem, 7878 i = 0; 7879 7880 className = " " + selector + " "; 7881 while ( ( elem = this[ i++ ] ) ) { 7882 if ( elem.nodeType === 1 && 7883 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 7884 return true; 7885 } 7886 } 7887 7888 return false;
vendor: 1,378 bytes, lines 7889-7958
7889 } 7890} ); 7891 7892 7893 7894 7895var rreturn = /\r/g; 7896 7897jQuery.fn.extend( { 7898 val: function( value ) { 7899 var hooks, ret, isFunction, 7900 elem = this[ 0 ]; 7901 7902 if ( !arguments.length ) { 7903 if ( elem ) { 7904 hooks = jQuery.valHooks[ elem.type ] || 7905 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 7906 7907 if ( hooks && 7908 "get" in hooks && 7909 ( ret = hooks.get( elem, "value" ) ) !== undefined 7910 ) { 7911 return ret; 7912 } 7913 7914 ret = elem.value; 7915 7916 // Handle most common string cases 7917 if ( typeof ret === "string" ) { 7918 return ret.replace( rreturn, "" ); 7919 } 7920 7921 // Handle cases where value is null/undef or number 7922 return ret == null ? "" : ret; 7923 } 7924 7925 return; 7926 } 7927 7928 isFunction = jQuery.isFunction( value ); 7929 7930 return this.each( function( i ) { 7931 var val; 7932 7933 if ( this.nodeType !== 1 ) { 7934 return; 7935 } 7936 7937 if ( isFunction ) { 7938 val = value.call( this, i, jQuery( this ).val() ); 7939 } else { 7940 val = value; 7941 } 7942 7943 // Treat null/undefined as ""; convert numbers to string 7944 if ( val == null ) { 7945 val = ""; 7946 7947 } else if ( typeof val === "number" ) { 7948 val += ""; 7949 7950 } else if ( jQuery.isArray( val ) ) { 7951 val = jQuery.map( val, function( value ) { 7952 return value == null ? "" : value + ""; 7953 } ); 7954 } 7955 7956 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 7957 7958 // If set returns undefined, fall back to normal setting
vendor: 8,168 bytes, lines 7959-8277
7959 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 7960 this.value = val; 7961 } 7962 } ); 7963 } 7964} ); 7965 7966jQuery.extend( { 7967 valHooks: { 7968 option: { 7969 get: function( elem ) { 7970 7971 var val = jQuery.find.attr( elem, "value" ); 7972 return val != null ? 7973 val : 7974 7975 // Support: IE <=10 - 11 only 7976 // option.text throws exceptions (#14686, #14858) 7977 // Strip and collapse whitespace 7978 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 7979 stripAndCollapse( jQuery.text( elem ) ); 7980 } 7981 }, 7982 select: { 7983 get: function( elem ) { 7984 var value, option, i, 7985 options = elem.options, 7986 index = elem.selectedIndex, 7987 one = elem.type === "select-one", 7988 values = one ? null : [], 7989 max = one ? index + 1 : options.length; 7990 7991 if ( index < 0 ) { 7992 i = max; 7993 7994 } else { 7995 i = one ? index : 0; 7996 } 7997 7998 // Loop through all the selected options 7999 for ( ; i < max; i++ ) { 8000 option = options[ i ]; 8001 8002 // Support: IE <=9 only 8003 // IE8-9 doesn't update selected after form reset (#2551) 8004 if ( ( option.selected || i === index ) && 8005 8006 // Don't return options that are disabled or in a disabled optgroup 8007 !option.disabled && 8008 ( !option.parentNode.disabled || 8009 !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { 8010 8011 // Get the specific value for the option 8012 value = jQuery( option ).val(); 8013 8014 // We don't need an array for one selects 8015 if ( one ) { 8016 return value; 8017 } 8018 8019 // Multi-Selects return an array 8020 values.push( value ); 8021 } 8022 } 8023 8024 return values; 8025 }, 8026 8027 set: function( elem, value ) { 8028 var optionSet, option, 8029 options = elem.options, 8030 values = jQuery.makeArray( value ), 8031 i = options.length; 8032 8033 while ( i-- ) { 8034 option = options[ i ]; 8035 8036 /* eslint-disable no-cond-assign */ 8037 8038 if ( option.selected = 8039 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 8040 ) { 8041 optionSet = true; 8042 } 8043 8044 /* eslint-enable no-cond-assign */ 8045 } 8046 8047 // Force browsers to behave consistently when non-matching value is set 8048 if ( !optionSet ) { 8049 elem.selectedIndex = -1; 8050 } 8051 return values; 8052 } 8053 } 8054 } 8055} ); 8056 8057// Radios and checkboxes getter/setter 8058jQuery.each( [ "radio", "checkbox" ], function() { 8059 jQuery.valHooks[ this ] = { 8060 set: function( elem, value ) { 8061 if ( jQuery.isArray( value ) ) { 8062 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 8063 } 8064 } 8065 }; 8066 if ( !support.checkOn ) { 8067 jQuery.valHooks[ this ].get = function( elem ) { 8068 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 8069 }; 8070 } 8071} ); 8072 8073 8074 8075 8076// Return jQuery for attributes-only inclusion 8077 8078 8079var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; 8080 8081jQuery.extend( jQuery.event, { 8082 8083 trigger: function( event, data, elem, onlyHandlers ) { 8084 8085 var i, cur, tmp, bubbleType, ontype, handle, special, 8086 eventPath = [ elem || document ], 8087 type = hasOwn.call( event, "type" ) ? event.type : event, 8088 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 8089 8090 cur = tmp = elem = elem || document; 8091 8092 // Don't do events on text and comment nodes 8093 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 8094 return; 8095 } 8096 8097 // focus/blur morphs to focusin/out; ensure we're not firing them right now 8098 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 8099 return; 8100 } 8101 8102 if ( type.indexOf( "." ) > -1 ) { 8103 8104 // Namespaced trigger; create a regexp to match event type in handle() 8105 namespaces = type.split( "." ); 8106 type = namespaces.shift(); 8107 namespaces.sort(); 8108 } 8109 ontype = type.indexOf( ":" ) < 0 && "on" + type; 8110 8111 // Caller can pass in a jQuery.Event object, Object, or just an event type string 8112 event = event[ jQuery.expando ] ? 8113 event : 8114 new jQuery.Event( type, typeof event === "object" && event ); 8115 8116 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 8117 event.isTrigger = onlyHandlers ? 2 : 3; 8118 event.namespace = namespaces.join( "." ); 8119 event.rnamespace = event.namespace ? 8120 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 8121 null; 8122 8123 // Clean up the event in case it is being reused 8124 event.result = undefined; 8125 if ( !event.target ) { 8126 event.target = elem; 8127 } 8128 8129 // Clone any incoming data and prepend the event, creating the handler arg list 8130 data = data == null ? 8131 [ event ] : 8132 jQuery.makeArray( data, [ event ] ); 8133 8134 // Allow special events to draw outside the lines 8135 special = jQuery.event.special[ type ] || {}; 8136 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 8137 return; 8138 } 8139 8140 // Determine event propagation path in advance, per W3C events spec (#9951) 8141 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 8142 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { 8143 8144 bubbleType = special.delegateType || type; 8145 if ( !rfocusMorph.test( bubbleType + type ) ) { 8146 cur = cur.parentNode; 8147 } 8148 for ( ; cur; cur = cur.parentNode ) { 8149 eventPath.push( cur ); 8150 tmp = cur; 8151 } 8152 8153 // Only add window if we got to document (e.g., not plain obj or detached DOM) 8154 if ( tmp === ( elem.ownerDocument || document ) ) { 8155 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 8156 } 8157 } 8158 8159 // Fire handlers on the event path 8160 i = 0; 8161 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 8162 8163 event.type = i > 1 ? 8164 bubbleType : 8165 special.bindType || type; 8166 8167 // jQuery handler 8168 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && 8169 dataPriv.get( cur, "handle" ); 8170 if ( handle ) { 8171 handle.apply( cur, data ); 8172 } 8173 8174 // Native handler 8175 handle = ontype && cur[ ontype ]; 8176 if ( handle && handle.apply && acceptData( cur ) ) { 8177 event.result = handle.apply( cur, data ); 8178 if ( event.result === false ) { 8179 event.preventDefault(); 8180 } 8181 } 8182 } 8183 event.type = type; 8184 8185 // If nobody prevented the default action, do it now 8186 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 8187 8188 if ( ( !special._default || 8189 special._default.apply( eventPath.pop(), data ) === false ) && 8190 acceptData( elem ) ) { 8191 8192 // Call a native DOM method on the target with the same name as the event. 8193 // Don't do default actions on window, that's where global variables be (#6170) 8194 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { 8195 8196 // Don't re-trigger an onFOO event when we call its FOO() method 8197 tmp = elem[ ontype ]; 8198 8199 if ( tmp ) { 8200 elem[ ontype ] = null; 8201 } 8202 8203 // Prevent re-triggering of the same event, since we already bubbled it above 8204 jQuery.event.triggered = type; 8205 elem[ type ](); 8206 jQuery.event.triggered = undefined; 8207 8208 if ( tmp ) { 8209 elem[ ontype ] = tmp; 8210 } 8211 } 8212 } 8213 } 8214 8215 return event.result; 8216 }, 8217 8218 // Piggyback on a donor event to simulate a different one 8219 // Used only for `focus(in | out)` events 8220 simulate: function( type, elem, event ) { 8221 var e = jQuery.extend( 8222 new jQuery.Event(), 8223 event, 8224 { 8225 type: type, 8226 isSimulated: true 8227 } 8228 ); 8229 8230 jQuery.event.trigger( e, null, elem ); 8231 } 8232 8233} ); 8234 8235jQuery.fn.extend( { 8236 8237 trigger: function( type, data ) { 8238 return this.each( function() { 8239 jQuery.event.trigger( type, data, this ); 8240 } ); 8241 }, 8242 triggerHandler: function( type, data ) { 8243 var elem = this[ 0 ]; 8244 if ( elem ) { 8245 return jQuery.event.trigger( type, data, elem, true ); 8246 } 8247 } 8248} ); 8249 8250 8251jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + 8252 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 8253 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 8254 function( i, name ) { 8255 8256 // Handle event binding 8257 jQuery.fn[ name ] = function( data, fn ) { 8258 return arguments.length > 0 ? 8259 this.on( name, null, data, fn ) : 8260 this.trigger( name ); 8261 }; 8262} ); 8263 8264jQuery.fn.extend( { 8265 hover: function( fnOver, fnOut ) { 8266 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 8267 } 8268} ); 8269 8270 8271 8272 8273support.focusin = "onfocusin" in window; 8274 8275 8276// Support: Firefox <=44 8277// Firefox doesn't have focus(in | out) events
vendor: 4,176 bytes, lines 8278-8441
8278// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 8279// 8280// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 8281// focus(in | out) events fire after focus & blur events, 8282// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 8283// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 8284if ( !support.focusin ) { 8285 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 8286 8287 // Attach a single capturing handler on the document while someone wants focusin/focusout 8288 var handler = function( event ) { 8289 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 8290 }; 8291 8292 jQuery.event.special[ fix ] = { 8293 setup: function() { 8294 var doc = this.ownerDocument || this, 8295 attaches = dataPriv.access( doc, fix ); 8296 8297 if ( !attaches ) { 8298 doc.addEventListener( orig, handler, true ); 8299 } 8300 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 8301 }, 8302 teardown: function() { 8303 var doc = this.ownerDocument || this, 8304 attaches = dataPriv.access( doc, fix ) - 1; 8305 8306 if ( !attaches ) { 8307 doc.removeEventListener( orig, handler, true ); 8308 dataPriv.remove( doc, fix ); 8309 8310 } else { 8311 dataPriv.access( doc, fix, attaches ); 8312 } 8313 } 8314 }; 8315 } ); 8316} 8317var location = window.location; 8318 8319var nonce = jQuery.now(); 8320 8321var rquery = ( /\?/ ); 8322 8323 8324 8325// Cross-browser xml parsing 8326jQuery.parseXML = function( data ) { 8327 var xml; 8328 if ( !data || typeof data !== "string" ) { 8329 return null; 8330 } 8331 8332 // Support: IE 9 - 11 only 8333 // IE throws on parseFromString with invalid input. 8334 try { 8335 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 8336 } catch ( e ) { 8337 xml = undefined; 8338 } 8339 8340 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 8341 jQuery.error( "Invalid XML: " + data ); 8342 } 8343 return xml; 8344}; 8345 8346 8347var 8348 rbracket = /\[\]$/, 8349 rCRLF = /\r?\n/g, 8350 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 8351 rsubmittable = /^(?:input|select|textarea|keygen)/i; 8352 8353function buildParams( prefix, obj, traditional, add ) { 8354 var name; 8355 8356 if ( jQuery.isArray( obj ) ) { 8357 8358 // Serialize array item. 8359 jQuery.each( obj, function( i, v ) { 8360 if ( traditional || rbracket.test( prefix ) ) { 8361 8362 // Treat each array item as a scalar. 8363 add( prefix, v ); 8364 8365 } else { 8366 8367 // Item is non-scalar (array or object), encode its numeric index. 8368 buildParams( 8369 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 8370 v, 8371 traditional, 8372 add 8373 ); 8374 } 8375 } ); 8376 8377 } else if ( !traditional && jQuery.type( obj ) === "object" ) { 8378 8379 // Serialize object item. 8380 for ( name in obj ) { 8381 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 8382 } 8383 8384 } else { 8385 8386 // Serialize scalar item. 8387 add( prefix, obj ); 8388 } 8389} 8390 8391// Serialize an array of form elements or a set of 8392// key/values into a query string 8393jQuery.param = function( a, traditional ) { 8394 var prefix, 8395 s = [], 8396 add = function( key, valueOrFunction ) { 8397 8398 // If value is a function, invoke it and use its return value 8399 var value = jQuery.isFunction( valueOrFunction ) ? 8400 valueOrFunction() : 8401 valueOrFunction; 8402 8403 s[ s.length ] = encodeURIComponent( key ) + "=" + 8404 encodeURIComponent( value == null ? "" : value ); 8405 }; 8406 8407 // If an array was passed in, assume that it is an array of form elements. 8408 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 8409 8410 // Serialize the form elements 8411 jQuery.each( a, function() { 8412 add( this.name, this.value ); 8413 } ); 8414 8415 } else { 8416 8417 // If traditional, encode the "old" way (the way 1.3.2 or older 8418 // did it), otherwise encode params recursively. 8419 for ( prefix in a ) { 8420 buildParams( prefix, a[ prefix ], traditional, add ); 8421 } 8422 } 8423 8424 // Return the resulting serialization 8425 return s.join( "&" ); 8426}; 8427 8428jQuery.fn.extend( { 8429 serialize: function() { 8430 return jQuery.param( this.serializeArray() ); 8431 }, 8432 serializeArray: function() { 8433 return this.map( function() { 8434 8435 // Can add propHook for "elements" to filter or add form elements 8436 var elements = jQuery.prop( this, "elements" ); 8437 return elements ? jQuery.makeArray( elements ) : this; 8438 } ) 8439 .filter( function() { 8440 var type = this.type; 8441
vendor: 4,940 bytes, lines 8442-8614
8442 // Use .is( ":disabled" ) so that fieldset[disabled] works 8443 return this.name && !jQuery( this ).is( ":disabled" ) && 8444 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 8445 ( this.checked || !rcheckableType.test( type ) ); 8446 } ) 8447 .map( function( i, elem ) { 8448 var val = jQuery( this ).val(); 8449 8450 if ( val == null ) { 8451 return null; 8452 } 8453 8454 if ( jQuery.isArray( val ) ) { 8455 return jQuery.map( val, function( val ) { 8456 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8457 } ); 8458 } 8459 8460 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8461 } ).get(); 8462 } 8463} ); 8464 8465 8466var 8467 r20 = /%20/g, 8468 rhash = /#.*$/, 8469 rantiCache = /([?&])_=[^&]*/, 8470 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 8471 8472 // #7653, #8125, #8152: local protocol detection 8473 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 8474 rnoContent = /^(?:GET|HEAD)$/, 8475 rprotocol = /^\/\//, 8476 8477 /* Prefilters 8478 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 8479 * 2) These are called: 8480 * - BEFORE asking for a transport 8481 * - AFTER param serialization (s.data is a string if s.processData is true) 8482 * 3) key is the dataType 8483 * 4) the catchall symbol "*" can be used 8484 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 8485 */ 8486 prefilters = {}, 8487 8488 /* Transports bindings 8489 * 1) key is the dataType 8490 * 2) the catchall symbol "*" can be used 8491 * 3) selection will start with transport dataType and THEN go to "*" if needed 8492 */ 8493 transports = {}, 8494 8495 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 8496 allTypes = "*/".concat( "*" ), 8497 8498 // Anchor tag for parsing the document origin 8499 originAnchor = document.createElement( "a" ); 8500 originAnchor.href = location.href; 8501 8502// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 8503function addToPrefiltersOrTransports( structure ) { 8504 8505 // dataTypeExpression is optional and defaults to "*" 8506 return function( dataTypeExpression, func ) { 8507 8508 if ( typeof dataTypeExpression !== "string" ) { 8509 func = dataTypeExpression; 8510 dataTypeExpression = "*"; 8511 } 8512 8513 var dataType, 8514 i = 0, 8515 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 8516 8517 if ( jQuery.isFunction( func ) ) { 8518 8519 // For each dataType in the dataTypeExpression 8520 while ( ( dataType = dataTypes[ i++ ] ) ) { 8521 8522 // Prepend if requested 8523 if ( dataType[ 0 ] === "+" ) { 8524 dataType = dataType.slice( 1 ) || "*"; 8525 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 8526 8527 // Otherwise append 8528 } else { 8529 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 8530 } 8531 } 8532 } 8533 }; 8534} 8535 8536// Base inspection function for prefilters and transports 8537function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 8538 8539 var inspected = {}, 8540 seekingTransport = ( structure === transports ); 8541 8542 function inspect( dataType ) { 8543 var selected; 8544 inspected[ dataType ] = true; 8545 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 8546 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 8547 if ( typeof dataTypeOrTransport === "string" && 8548 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 8549 8550 options.dataTypes.unshift( dataTypeOrTransport ); 8551 inspect( dataTypeOrTransport ); 8552 return false; 8553 } else if ( seekingTransport ) { 8554 return !( selected = dataTypeOrTransport ); 8555 } 8556 } ); 8557 return selected; 8558 } 8559 8560 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 8561} 8562 8563// A special extend for ajax options 8564// that takes "flat" options (not to be deep extended) 8565// Fixes #9887 8566function ajaxExtend( target, src ) { 8567 var key, deep, 8568 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 8569 8570 for ( key in src ) { 8571 if ( src[ key ] !== undefined ) { 8572 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 8573 } 8574 } 8575 if ( deep ) { 8576 jQuery.extend( true, target, deep ); 8577 } 8578 8579 return target; 8580} 8581 8582/* Handles responses to an ajax request: 8583 * - finds the right dataType (mediates between content-type and expected dataType) 8584 * - returns the corresponding response 8585 */ 8586function ajaxHandleResponses( s, jqXHR, responses ) { 8587 8588 var ct, type, finalDataType, firstDataType, 8589 contents = s.contents, 8590 dataTypes = s.dataTypes; 8591 8592 // Remove auto dataType and get content-type in the process 8593 while ( dataTypes[ 0 ] === "*" ) { 8594 dataTypes.shift(); 8595 if ( ct === undefined ) { 8596 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 8597 } 8598 } 8599 8600 // Check if we're dealing with a known content-type 8601 if ( ct ) { 8602 for ( type in contents ) { 8603 if ( contents[ type ] && contents[ type ].test( ct ) ) { 8604 dataTypes.unshift( type ); 8605 break; 8606 } 8607 } 8608 } 8609 8610 // Check to see if we have a response for the expected dataType 8611 if ( dataTypes[ 0 ] in responses ) { 8612 finalDataType = dataTypes[ 0 ]; 8613 } else { 8614
vendor: 18,932 bytes, lines 8615-9372
8615 // Try convertible dataTypes 8616 for ( type in responses ) { 8617 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 8618 finalDataType = type; 8619 break; 8620 } 8621 if ( !firstDataType ) { 8622 firstDataType = type; 8623 } 8624 } 8625 8626 // Or just use first one 8627 finalDataType = finalDataType || firstDataType; 8628 } 8629 8630 // If we found a dataType 8631 // We add the dataType to the list if needed 8632 // and return the corresponding response 8633 if ( finalDataType ) { 8634 if ( finalDataType !== dataTypes[ 0 ] ) { 8635 dataTypes.unshift( finalDataType ); 8636 } 8637 return responses[ finalDataType ]; 8638 } 8639} 8640 8641/* Chain conversions given the request and the original response 8642 * Also sets the responseXXX fields on the jqXHR instance 8643 */ 8644function ajaxConvert( s, response, jqXHR, isSuccess ) { 8645 var conv2, current, conv, tmp, prev, 8646 converters = {}, 8647 8648 // Work with a copy of dataTypes in case we need to modify it for conversion 8649 dataTypes = s.dataTypes.slice(); 8650 8651 // Create converters map with lowercased keys 8652 if ( dataTypes[ 1 ] ) { 8653 for ( conv in s.converters ) { 8654 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 8655 } 8656 } 8657 8658 current = dataTypes.shift(); 8659 8660 // Convert to each sequential dataType 8661 while ( current ) { 8662 8663 if ( s.responseFields[ current ] ) { 8664 jqXHR[ s.responseFields[ current ] ] = response; 8665 } 8666 8667 // Apply the dataFilter if provided 8668 if ( !prev && isSuccess && s.dataFilter ) { 8669 response = s.dataFilter( response, s.dataType ); 8670 } 8671 8672 prev = current; 8673 current = dataTypes.shift(); 8674 8675 if ( current ) { 8676 8677 // There's only work to do if current dataType is non-auto 8678 if ( current === "*" ) { 8679 8680 current = prev; 8681 8682 // Convert response if prev dataType is non-auto and differs from current 8683 } else if ( prev !== "*" && prev !== current ) { 8684 8685 // Seek a direct converter 8686 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 8687 8688 // If none found, seek a pair 8689 if ( !conv ) { 8690 for ( conv2 in converters ) { 8691 8692 // If conv2 outputs current 8693 tmp = conv2.split( " " ); 8694 if ( tmp[ 1 ] === current ) { 8695 8696 // If prev can be converted to accepted input 8697 conv = converters[ prev + " " + tmp[ 0 ] ] || 8698 converters[ "* " + tmp[ 0 ] ]; 8699 if ( conv ) { 8700 8701 // Condense equivalence converters 8702 if ( conv === true ) { 8703 conv = converters[ conv2 ]; 8704 8705 // Otherwise, insert the intermediate dataType 8706 } else if ( converters[ conv2 ] !== true ) { 8707 current = tmp[ 0 ]; 8708 dataTypes.unshift( tmp[ 1 ] ); 8709 } 8710 break; 8711 } 8712 } 8713 } 8714 } 8715 8716 // Apply converter (if not an equivalence) 8717 if ( conv !== true ) { 8718 8719 // Unless errors are allowed to bubble, catch and return them 8720 if ( conv && s.throws ) { 8721 response = conv( response ); 8722 } else { 8723 try { 8724 response = conv( response ); 8725 } catch ( e ) { 8726 return { 8727 state: "parsererror", 8728 error: conv ? e : "No conversion from " + prev + " to " + current 8729 }; 8730 } 8731 } 8732 } 8733 } 8734 } 8735 } 8736 8737 return { state: "success", data: response }; 8738} 8739 8740jQuery.extend( { 8741 8742 // Counter for holding the number of active queries 8743 active: 0, 8744 8745 // Last-Modified header cache for next request 8746 lastModified: {}, 8747 etag: {}, 8748 8749 ajaxSettings: { 8750 url: location.href, 8751 type: "GET", 8752 isLocal: rlocalProtocol.test( location.protocol ), 8753 global: true, 8754 processData: true, 8755 async: true, 8756 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 8757 8758 /* 8759 timeout: 0, 8760 data: null, 8761 dataType: null, 8762 username: null, 8763 password: null, 8764 cache: null, 8765 throws: false, 8766 traditional: false, 8767 headers: {}, 8768 */ 8769 8770 accepts: { 8771 "*": allTypes, 8772 text: "text/plain", 8773 html: "text/html", 8774 xml: "application/xml, text/xml", 8775 json: "application/json, text/javascript" 8776 }, 8777 8778 contents: { 8779 xml: /\bxml\b/, 8780 html: /\bhtml/, 8781 json: /\bjson\b/ 8782 }, 8783 8784 responseFields: { 8785 xml: "responseXML", 8786 text: "responseText", 8787 json: "responseJSON" 8788 }, 8789 8790 // Data converters 8791 // Keys separate source (or catchall "*") and destination types with a single space 8792 converters: { 8793 8794 // Convert anything to text 8795 "* text": String, 8796 8797 // Text to html (true = no transformation) 8798 "text html": true, 8799 8800 // Evaluate text as a json expression 8801 "text json": JSON.parse, 8802 8803 // Parse text as xml 8804 "text xml": jQuery.parseXML 8805 }, 8806 8807 // For options that shouldn't be deep extended: 8808 // you can add your own custom options here if 8809 // and when you create one that shouldn't be 8810 // deep extended (see ajaxExtend) 8811 flatOptions: { 8812 url: true, 8813 context: true 8814 } 8815 }, 8816 8817 // Creates a full fledged settings object into target 8818 // with both ajaxSettings and settings fields. 8819 // If target is omitted, writes into ajaxSettings. 8820 ajaxSetup: function( target, settings ) { 8821 return settings ? 8822 8823 // Building a settings object 8824 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 8825 8826 // Extending ajaxSettings 8827 ajaxExtend( jQuery.ajaxSettings, target ); 8828 }, 8829 8830 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 8831 ajaxTransport: addToPrefiltersOrTransports( transports ), 8832 8833 // Main method 8834 ajax: function( url, options ) { 8835 8836 // If url is an object, simulate pre-1.5 signature 8837 if ( typeof url === "object" ) { 8838 options = url; 8839 url = undefined; 8840 } 8841 8842 // Force options to be an object 8843 options = options || {}; 8844 8845 var transport, 8846 8847 // URL without anti-cache param 8848 cacheURL, 8849 8850 // Response headers 8851 responseHeadersString, 8852 responseHeaders, 8853 8854 // timeout handle 8855 timeoutTimer, 8856 8857 // Url cleanup var 8858 urlAnchor, 8859 8860 // Request state (becomes false upon send and true upon completion) 8861 completed, 8862 8863 // To know if global events are to be dispatched 8864 fireGlobals, 8865 8866 // Loop variable 8867 i, 8868 8869 // uncached part of the url 8870 uncached, 8871 8872 // Create the final options object 8873 s = jQuery.ajaxSetup( {}, options ), 8874 8875 // Callbacks context 8876 callbackContext = s.context || s, 8877 8878 // Context for global events is callbackContext if it is a DOM node or jQuery collection 8879 globalEventContext = s.context && 8880 ( callbackContext.nodeType || callbackContext.jquery ) ? 8881 jQuery( callbackContext ) : 8882 jQuery.event, 8883 8884 // Deferreds 8885 deferred = jQuery.Deferred(), 8886 completeDeferred = jQuery.Callbacks( "once memory" ), 8887 8888 // Status-dependent callbacks 8889 statusCode = s.statusCode || {}, 8890 8891 // Headers (they are sent all at once) 8892 requestHeaders = {}, 8893 requestHeadersNames = {}, 8894 8895 // Default abort message 8896 strAbort = "canceled", 8897 8898 // Fake xhr 8899 jqXHR = { 8900 readyState: 0, 8901 8902 // Builds headers hashtable if needed 8903 getResponseHeader: function( key ) { 8904 var match; 8905 if ( completed ) { 8906 if ( !responseHeaders ) { 8907 responseHeaders = {}; 8908 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 8909 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; 8910 } 8911 } 8912 match = responseHeaders[ key.toLowerCase() ]; 8913 } 8914 return match == null ? null : match; 8915 }, 8916 8917 // Raw string 8918 getAllResponseHeaders: function() { 8919 return completed ? responseHeadersString : null; 8920 }, 8921 8922 // Caches the header 8923 setRequestHeader: function( name, value ) { 8924 if ( completed == null ) { 8925 name = requestHeadersNames[ name.toLowerCase() ] = 8926 requestHeadersNames[ name.toLowerCase() ] || name; 8927 requestHeaders[ name ] = value; 8928 } 8929 return this; 8930 }, 8931 8932 // Overrides response content-type header 8933 overrideMimeType: function( type ) { 8934 if ( completed == null ) { 8935 s.mimeType = type; 8936 } 8937 return this; 8938 }, 8939 8940 // Status-dependent callbacks 8941 statusCode: function( map ) { 8942 var code; 8943 if ( map ) { 8944 if ( completed ) { 8945 8946 // Execute the appropriate callbacks 8947 jqXHR.always( map[ jqXHR.status ] ); 8948 } else { 8949 8950 // Lazy-add the new callbacks in a way that preserves old ones 8951 for ( code in map ) { 8952 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 8953 } 8954 } 8955 } 8956 return this; 8957 }, 8958 8959 // Cancel the request 8960 abort: function( statusText ) { 8961 var finalText = statusText || strAbort; 8962 if ( transport ) { 8963 transport.abort( finalText ); 8964 } 8965 done( 0, finalText ); 8966 return this; 8967 } 8968 }; 8969 8970 // Attach deferreds 8971 deferred.promise( jqXHR ); 8972 8973 // Add protocol if not provided (prefilters might expect it) 8974 // Handle falsy url in the settings object (#10093: consistency with old signature) 8975 // We also use the url parameter if available 8976 s.url = ( ( url || s.url || location.href ) + "" ) 8977 .replace( rprotocol, location.protocol + "//" ); 8978 8979 // Alias method option to type as per ticket #12004 8980 s.type = options.method || options.type || s.method || s.type; 8981 8982 // Extract dataTypes list 8983 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 8984 8985 // A cross-domain request is in order when the origin doesn't match the current origin. 8986 if ( s.crossDomain == null ) { 8987 urlAnchor = document.createElement( "a" ); 8988 8989 // Support: IE <=8 - 11, Edge 12 - 13 8990 // IE throws exception on accessing the href property if url is malformed, 8991 // e.g. http://example.com:80x/ 8992 try { 8993 urlAnchor.href = s.url; 8994 8995 // Support: IE <=8 - 11 only 8996 // Anchor's host property isn't correctly set when s.url is relative 8997 urlAnchor.href = urlAnchor.href; 8998 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 8999 urlAnchor.protocol + "//" + urlAnchor.host; 9000 } catch ( e ) { 9001 9002 // If there is an error parsing the URL, assume it is crossDomain, 9003 // it can be rejected by the transport if it is invalid 9004 s.crossDomain = true; 9005 } 9006 } 9007 9008 // Convert data if not already a string 9009 if ( s.data && s.processData && typeof s.data !== "string" ) { 9010 s.data = jQuery.param( s.data, s.traditional ); 9011 } 9012 9013 // Apply prefilters 9014 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 9015 9016 // If request was aborted inside a prefilter, stop there 9017 if ( completed ) { 9018 return jqXHR; 9019 } 9020 9021 // We can fire global events as of now if asked to 9022 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 9023 fireGlobals = jQuery.event && s.global; 9024 9025 // Watch for a new set of requests 9026 if ( fireGlobals && jQuery.active++ === 0 ) { 9027 jQuery.event.trigger( "ajaxStart" ); 9028 } 9029 9030 // Uppercase the type 9031 s.type = s.type.toUpperCase(); 9032 9033 // Determine if request has content 9034 s.hasContent = !rnoContent.test( s.type ); 9035 9036 // Save the URL in case we're toying with the If-Modified-Since 9037 // and/or If-None-Match header later on 9038 // Remove hash to simplify url manipulation 9039 cacheURL = s.url.replace( rhash, "" ); 9040 9041 // More options handling for requests with no content 9042 if ( !s.hasContent ) { 9043 9044 // Remember the hash so we can put it back 9045 uncached = s.url.slice( cacheURL.length ); 9046 9047 // If data is available, append data to url 9048 if ( s.data ) { 9049 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 9050 9051 // #9682: remove data so that it's not used in an eventual retry 9052 delete s.data; 9053 } 9054 9055 // Add or update anti-cache param if needed 9056 if ( s.cache === false ) { 9057 cacheURL = cacheURL.replace( rantiCache, "$1" ); 9058 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; 9059 } 9060 9061 // Put hash and anti-cache on the URL that will be requested (gh-1732) 9062 s.url = cacheURL + uncached; 9063 9064 // Change '%20' to '+' if this is encoded form body content (gh-2658) 9065 } else if ( s.data && s.processData && 9066 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 9067 s.data = s.data.replace( r20, "+" ); 9068 } 9069 9070 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9071 if ( s.ifModified ) { 9072 if ( jQuery.lastModified[ cacheURL ] ) { 9073 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 9074 } 9075 if ( jQuery.etag[ cacheURL ] ) { 9076 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 9077 } 9078 } 9079 9080 // Set the correct header, if data is being sent 9081 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 9082 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 9083 } 9084 9085 // Set the Accepts header for the server, depending on the dataType 9086 jqXHR.setRequestHeader( 9087 "Accept", 9088 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 9089 s.accepts[ s.dataTypes[ 0 ] ] + 9090 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 9091 s.accepts[ "*" ] 9092 ); 9093 9094 // Check for headers option 9095 for ( i in s.headers ) { 9096 jqXHR.setRequestHeader( i, s.headers[ i ] ); 9097 } 9098 9099 // Allow custom headers/mimetypes and early abort 9100 if ( s.beforeSend && 9101 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 9102 9103 // Abort if not done already and return 9104 return jqXHR.abort(); 9105 } 9106 9107 // Aborting is no longer a cancellation 9108 strAbort = "abort"; 9109 9110 // Install callbacks on deferreds 9111 completeDeferred.add( s.complete ); 9112 jqXHR.done( s.success ); 9113 jqXHR.fail( s.error ); 9114 9115 // Get transport 9116 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 9117 9118 // If no transport, we auto-abort 9119 if ( !transport ) { 9120 done( -1, "No Transport" ); 9121 } else { 9122 jqXHR.readyState = 1; 9123 9124 // Send global event 9125 if ( fireGlobals ) { 9126 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 9127 } 9128 9129 // If request was aborted inside ajaxSend, stop there 9130 if ( completed ) { 9131 return jqXHR; 9132 } 9133 9134 // Timeout 9135 if ( s.async && s.timeout > 0 ) { 9136 timeoutTimer = window.setTimeout( function() { 9137 jqXHR.abort( "timeout" ); 9138 }, s.timeout ); 9139 } 9140 9141 try { 9142 completed = false; 9143 transport.send( requestHeaders, done ); 9144 } catch ( e ) { 9145 9146 // Rethrow post-completion exceptions 9147 if ( completed ) { 9148 throw e; 9149 } 9150 9151 // Propagate others as results 9152 done( -1, e ); 9153 } 9154 } 9155 9156 // Callback for when everything is done 9157 function done( status, nativeStatusText, responses, headers ) { 9158 var isSuccess, success, error, response, modified, 9159 statusText = nativeStatusText; 9160 9161 // Ignore repeat invocations 9162 if ( completed ) { 9163 return; 9164 } 9165 9166 completed = true; 9167 9168 // Clear timeout if it exists 9169 if ( timeoutTimer ) { 9170 window.clearTimeout( timeoutTimer ); 9171 } 9172 9173 // Dereference transport for early garbage collection 9174 // (no matter how long the jqXHR object will be used) 9175 transport = undefined; 9176 9177 // Cache response headers 9178 responseHeadersString = headers || ""; 9179 9180 // Set readyState 9181 jqXHR.readyState = status > 0 ? 4 : 0; 9182 9183 // Determine if successful 9184 isSuccess = status >= 200 && status < 300 || status === 304; 9185 9186 // Get response data 9187 if ( responses ) { 9188 response = ajaxHandleResponses( s, jqXHR, responses ); 9189 } 9190 9191 // Convert no matter what (that way responseXXX fields are always set) 9192 response = ajaxConvert( s, response, jqXHR, isSuccess ); 9193 9194 // If successful, handle type chaining 9195 if ( isSuccess ) { 9196 9197 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9198 if ( s.ifModified ) { 9199 modified = jqXHR.getResponseHeader( "Last-Modified" ); 9200 if ( modified ) { 9201 jQuery.lastModified[ cacheURL ] = modified; 9202 } 9203 modified = jqXHR.getResponseHeader( "etag" ); 9204 if ( modified ) { 9205 jQuery.etag[ cacheURL ] = modified; 9206 } 9207 } 9208 9209 // if no content 9210 if ( status === 204 || s.type === "HEAD" ) { 9211 statusText = "nocontent"; 9212 9213 // if not modified 9214 } else if ( status === 304 ) { 9215 statusText = "notmodified"; 9216 9217 // If we have data, let's convert it 9218 } else { 9219 statusText = response.state; 9220 success = response.data; 9221 error = response.error; 9222 isSuccess = !error; 9223 } 9224 } else { 9225 9226 // Extract error from statusText and normalize for non-aborts 9227 error = statusText; 9228 if ( status || !statusText ) { 9229 statusText = "error"; 9230 if ( status < 0 ) { 9231 status = 0; 9232 } 9233 } 9234 } 9235 9236 // Set data for the fake xhr object 9237 jqXHR.status = status; 9238 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 9239 9240 // Success/Error 9241 if ( isSuccess ) { 9242 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 9243 } else { 9244 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 9245 } 9246 9247 // Status-dependent callbacks 9248 jqXHR.statusCode( statusCode ); 9249 statusCode = undefined; 9250 9251 if ( fireGlobals ) { 9252 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 9253 [ jqXHR, s, isSuccess ? success : error ] ); 9254 } 9255 9256 // Complete 9257 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 9258 9259 if ( fireGlobals ) { 9260 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 9261 9262 // Handle the global AJAX counter 9263 if ( !( --jQuery.active ) ) { 9264 jQuery.event.trigger( "ajaxStop" ); 9265 } 9266 } 9267 } 9268 9269 return jqXHR; 9270 }, 9271 9272 getJSON: function( url, data, callback ) { 9273 return jQuery.get( url, data, callback, "json" ); 9274 }, 9275 9276 getScript: function( url, callback ) { 9277 return jQuery.get( url, undefined, callback, "script" ); 9278 } 9279} ); 9280 9281jQuery.each( [ "get", "post" ], function( i, method ) { 9282 jQuery[ method ] = function( url, data, callback, type ) { 9283 9284 // Shift arguments if data argument was omitted 9285 if ( jQuery.isFunction( data ) ) { 9286 type = type || callback; 9287 callback = data; 9288 data = undefined; 9289 } 9290 9291 // The url can be an options object (which then must have .url) 9292 return jQuery.ajax( jQuery.extend( { 9293 url: url, 9294 type: method, 9295 dataType: type, 9296 data: data, 9297 success: callback 9298 }, jQuery.isPlainObject( url ) && url ) ); 9299 }; 9300} ); 9301 9302 9303jQuery._evalUrl = function( url ) { 9304 return jQuery.ajax( { 9305 url: url, 9306 9307 // Make this explicit, since user can override this through ajaxSetup (#11264) 9308 type: "GET", 9309 dataType: "script", 9310 cache: true, 9311 async: false, 9312 global: false, 9313 "throws": true 9314 } ); 9315}; 9316 9317 9318jQuery.fn.extend( { 9319 wrapAll: function( html ) { 9320 var wrap; 9321 9322 if ( this[ 0 ] ) { 9323 if ( jQuery.isFunction( html ) ) { 9324 html = html.call( this[ 0 ] ); 9325 } 9326 9327 // The elements to wrap the target around 9328 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 9329 9330 if ( this[ 0 ].parentNode ) { 9331 wrap.insertBefore( this[ 0 ] ); 9332 } 9333 9334 wrap.map( function() { 9335 var elem = this; 9336 9337 while ( elem.firstElementChild ) { 9338 elem = elem.firstElementChild; 9339 } 9340 9341 return elem; 9342 } ).append( this ); 9343 } 9344 9345 return this; 9346 }, 9347 9348 wrapInner: function( html ) { 9349 if ( jQuery.isFunction( html ) ) { 9350 return this.each( function( i ) { 9351 jQuery( this ).wrapInner( html.call( this, i ) ); 9352 } ); 9353 } 9354 9355 return this.each( function() { 9356 var self = jQuery( this ), 9357 contents = self.contents(); 9358 9359 if ( contents.length ) { 9360 contents.wrapAll( html ); 9361 9362 } else { 9363 self.append( html ); 9364 } 9365 } ); 9366 }, 9367 9368 wrap: function( html ) { 9369 var isFunction = jQuery.isFunction( html ); 9370 9371 return this.each( function( i ) { 9372 jQuery( this ).wrapAll( i
vendor: 2,399 bytes, lines 9372-9464
9372sFunction ? html.call( this, i ) : html ); 9373 } ); 9374 }, 9375 9376 unwrap: function( selector ) { 9377 this.parent( selector ).not( "body" ).each( function() { 9378 jQuery( this ).replaceWith( this.childNodes ); 9379 } ); 9380 return this; 9381 } 9382} ); 9383 9384 9385jQuery.expr.pseudos.hidden = function( elem ) { 9386 return !jQuery.expr.pseudos.visible( elem ); 9387}; 9388jQuery.expr.pseudos.visible = function( elem ) { 9389 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 9390}; 9391 9392 9393 9394 9395jQuery.ajaxSettings.xhr = function() { 9396 try { 9397 return new window.XMLHttpRequest(); 9398 } catch ( e ) {} 9399}; 9400 9401var xhrSuccessStatus = { 9402 9403 // File protocol always yields status code 0, assume 200 9404 0: 200, 9405 9406 // Support: IE <=9 only 9407 // #1450: sometimes IE returns 1223 when it should be 204 9408 1223: 204 9409 }, 9410 xhrSupported = jQuery.ajaxSettings.xhr(); 9411 9412support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 9413support.ajax = xhrSupported = !!xhrSupported; 9414 9415jQuery.ajaxTransport( function( options ) { 9416 var callback, errorCallback; 9417 9418 // Cross domain only allowed if supported through XMLHttpRequest 9419 if ( support.cors || xhrSupported && !options.crossDomain ) { 9420 return { 9421 send: function( headers, complete ) { 9422 var i, 9423 xhr = options.xhr(); 9424 9425 xhr.open( 9426 options.type, 9427 options.url, 9428 options.async, 9429 options.username, 9430 options.password 9431 ); 9432 9433 // Apply custom fields if provided 9434 if ( options.xhrFields ) { 9435 for ( i in options.xhrFields ) { 9436 xhr[ i ] = options.xhrFields[ i ]; 9437 } 9438 } 9439 9440 // Override mime type if needed 9441 if ( options.mimeType && xhr.overrideMimeType ) { 9442 xhr.overrideMimeType( options.mimeType ); 9443 } 9444 9445 // X-Requested-With header 9446 // For cross-domain requests, seeing as conditions for a preflight are 9447 // akin to a jigsaw puzzle, we simply never set it to be sure. 9448 // (it can always be set on a per-request basis or even using ajaxSetup) 9449 // For same-domain requests, won't change header if already provided. 9450 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 9451 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 9452 } 9453 9454 // Set headers 9455 for ( i in headers ) { 9456 xhr.setRequestHeader( i, headers[ i ] ); 9457 } 9458 9459 // Callback 9460 callback = function( type ) { 9461 return function() { 9462 if ( callback ) { 9463 callback = errorCallback = xhr.onload = 9464 xhr.onerror = xhr.onabort = xhr.on
vendor: 5,102 bytes, lines 9464-9669
9464readystatechange = null; 9465 9466 if ( type === "abort" ) { 9467 xhr.abort(); 9468 } else if ( type === "error" ) { 9469 9470 // Support: IE <=9 only 9471 // On a manual native abort, IE9 throws 9472 // errors on any property access that is not readyState 9473 if ( typeof xhr.status !== "number" ) { 9474 complete( 0, "error" ); 9475 } else { 9476 complete( 9477 9478 // File: protocol always yields status 0; see #8605, #14207 9479 xhr.status, 9480 xhr.statusText 9481 ); 9482 } 9483 } else { 9484 complete( 9485 xhrSuccessStatus[ xhr.status ] || xhr.status, 9486 xhr.statusText, 9487 9488 // Support: IE <=9 only 9489 // IE9 has no XHR2 but throws on binary (trac-11426) 9490 // For XHR2 non-text, let the caller handle it (gh-2498) 9491 ( xhr.responseType || "text" ) !== "text" || 9492 typeof xhr.responseText !== "string" ? 9493 { binary: xhr.response } : 9494 { text: xhr.responseText }, 9495 xhr.getAllResponseHeaders() 9496 ); 9497 } 9498 } 9499 }; 9500 }; 9501 9502 // Listen to events 9503 xhr.onload = callback(); 9504 errorCallback = xhr.onerror = callback( "error" ); 9505 9506 // Support: IE 9 only 9507 // Use onreadystatechange to replace onabort 9508 // to handle uncaught aborts 9509 if ( xhr.onabort !== undefined ) { 9510 xhr.onabort = errorCallback; 9511 } else { 9512 xhr.onreadystatechange = function() { 9513 9514 // Check readyState before timeout as it changes 9515 if ( xhr.readyState === 4 ) { 9516 9517 // Allow onerror to be called first, 9518 // but that will not handle a native abort 9519 // Also, save errorCallback to a variable 9520 // as xhr.onerror cannot be accessed 9521 window.setTimeout( function() { 9522 if ( callback ) { 9523 errorCallback(); 9524 } 9525 } ); 9526 } 9527 }; 9528 } 9529 9530 // Create the abort callback 9531 callback = callback( "abort" ); 9532 9533 try { 9534 9535 // Do send the request (this may raise an exception) 9536 xhr.send( options.hasContent && options.data || null ); 9537 } catch ( e ) { 9538 9539 // #14683: Only rethrow if this hasn't been notified as an error yet 9540 if ( callback ) { 9541 throw e; 9542 } 9543 } 9544 }, 9545 9546 abort: function() { 9547 if ( callback ) { 9548 callback(); 9549 } 9550 } 9551 }; 9552 } 9553} ); 9554 9555 9556 9557 9558// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 9559jQuery.ajaxPrefilter( function( s ) { 9560 if ( s.crossDomain ) { 9561 s.contents.script = false; 9562 } 9563} ); 9564 9565// Install script dataType 9566jQuery.ajaxSetup( { 9567 accepts: { 9568 script: "text/javascript, application/javascript, " + 9569 "application/ecmascript, application/x-ecmascript" 9570 }, 9571 contents: { 9572 script: /\b(?:java|ecma)script\b/ 9573 }, 9574 converters: { 9575 "text script": function( text ) { 9576 jQuery.globalEval( text ); 9577 return text; 9578 } 9579 } 9580} ); 9581 9582// Handle cache's special case and crossDomain 9583jQuery.ajaxPrefilter( "script", function( s ) { 9584 if ( s.cache === undefined ) { 9585 s.cache = false; 9586 } 9587 if ( s.crossDomain ) { 9588 s.type = "GET"; 9589 } 9590} ); 9591 9592// Bind script tag hack transport 9593jQuery.ajaxTransport( "script", function( s ) { 9594 9595 // This transport only deals with cross domain requests 9596 if ( s.crossDomain ) { 9597 var script, callback; 9598 return { 9599 send: function( _, complete ) { 9600 script = jQuery( "<script>" ).prop( { 9601 charset: s.scriptCharset, 9602 src: s.url 9603 } ).on( 9604 "load error", 9605 callback = function( evt ) { 9606 script.remove(); 9607 callback = null; 9608 if ( evt ) { 9609 complete( evt.type === "error" ? 404 : 200, evt.type ); 9610 } 9611 } 9612 ); 9613 9614 // Use native DOM manipulation to avoid our domManip AJAX trickery 9615 document.head.appendChild( script[ 0 ] ); 9616 }, 9617 abort: function() { 9618 if ( callback ) { 9619 callback(); 9620 } 9621 } 9622 }; 9623 } 9624} ); 9625 9626 9627 9628 9629var oldCallbacks = [], 9630 rjsonp = /(=)\?(?=&|$)|\?\?/; 9631 9632// Default jsonp settings 9633jQuery.ajaxSetup( { 9634 jsonp: "callback", 9635 jsonpCallback: function() { 9636 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 9637 this[ callback ] = true; 9638 return callback; 9639 } 9640} ); 9641 9642// Detect, normalize options and install callbacks for jsonp requests 9643jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 9644 9645 var callbackName, overwritten, responseContainer, 9646 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 9647 "url" : 9648 typeof s.data === "string" && 9649 ( s.contentType || "" ) 9650 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 9651 rjsonp.test( s.data ) && "data" 9652 ); 9653 9654 // Handle iff the expected data type is "jsonp" or we have a parameter to set 9655 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 9656 9657 // Get callback name, remembering preexisting value associated with it 9658 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? 9659 s.jsonpCallback() : 9660 s.jsonpCallback; 9661 9662 // Insert callback into url or form data 9663 if ( jsonProp ) { 9664 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 9665 } else if ( s.jsonp !== false ) { 9666 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 9667 } 9668 9669 // Use data converter to retrieve json after script execution
vendor: 2,994 bytes, lines 9670-9779
9670 s.converters[ "script json" ] = function() { 9671 if ( !responseContainer ) { 9672 jQuery.error( callbackName + " was not called" ); 9673 } 9674 return responseContainer[ 0 ]; 9675 }; 9676 9677 // Force json dataType 9678 s.dataTypes[ 0 ] = "json"; 9679 9680 // Install callback 9681 overwritten = window[ callbackName ]; 9682 window[ callbackName ] = function() { 9683 responseContainer = arguments; 9684 }; 9685 9686 // Clean-up function (fires after converters) 9687 jqXHR.always( function() { 9688 9689 // If previous value didn't exist - remove it 9690 if ( overwritten === undefined ) { 9691 jQuery( window ).removeProp( callbackName ); 9692 9693 // Otherwise restore preexisting value 9694 } else { 9695 window[ callbackName ] = overwritten; 9696 } 9697 9698 // Save back as free 9699 if ( s[ callbackName ] ) { 9700 9701 // Make sure that re-using the options doesn't screw things around 9702 s.jsonpCallback = originalSettings.jsonpCallback; 9703 9704 // Save the callback name for future use 9705 oldCallbacks.push( callbackName ); 9706 } 9707 9708 // Call if it was a function and we have a response 9709 if ( responseContainer && jQuery.isFunction( overwritten ) ) { 9710 overwritten( responseContainer[ 0 ] ); 9711 } 9712 9713 responseContainer = overwritten = undefined; 9714 } ); 9715 9716 // Delegate to script 9717 return "script"; 9718 } 9719} ); 9720 9721 9722 9723 9724// Support: Safari 8 only 9725// In Safari 8 documents created via document.implementation.createHTMLDocument 9726// collapse sibling forms: the second one becomes a child of the first one. 9727// Because of that, this security measure has to be disabled in Safari 8. 9728// https://bugs.webkit.org/show_bug.cgi?id=137337 9729support.createHTMLDocument = ( function() { 9730 var body = document.implementation.createHTMLDocument( "" ).body; 9731 body.innerHTML = "<form></form><form></form>"; 9732 return body.childNodes.length === 2; 9733} )(); 9734 9735 9736// Argument "data" should be string of html 9737// context (optional): If specified, the fragment will be created in this context, 9738// defaults to document 9739// keepScripts (optional): If true, will include scripts passed in the html string 9740jQuery.parseHTML = function( data, context, keepScripts ) { 9741 if ( typeof data !== "string" ) { 9742 return []; 9743 } 9744 if ( typeof context === "boolean" ) { 9745 keepScripts = context; 9746 context = false; 9747 } 9748 9749 var base, parsed, scripts; 9750 9751 if ( !context ) { 9752 9753 // Stop scripts or inline event handlers from being executed immediately 9754 // by using document.implementation 9755 if ( support.createHTMLDocument ) { 9756 context = document.implementation.createHTMLDocument( "" ); 9757 9758 // Set the base href for the created document 9759 // so any parsed elements with URLs 9760 // are based on the document's URL (gh-2965) 9761 base = context.createElement( "base" ); 9762 base.href = document.location.href; 9763 context.head.appendChild( base ); 9764 } else { 9765 context = document; 9766 } 9767 } 9768 9769 parsed = rsingleTag.exec( data ); 9770 scripts = !keepScripts && []; 9771 9772 // Single tag 9773 if ( parsed ) { 9774 return [ context.createElement( parsed[ 1 ] ) ]; 9775 } 9776 9777 parsed = buildFragment( [ data ], context, scripts ); 9778 9779 if ( scripts && scripts.length ) {
vendor: 4,169 bytes, lines 9780-9956
9780 jQuery( scripts ).remove(); 9781 } 9782 9783 return jQuery.merge( [], parsed.childNodes ); 9784}; 9785 9786 9787/** 9788 * Load a url into a page 9789 */ 9790jQuery.fn.load = function( url, params, callback ) { 9791 var selector, type, response, 9792 self = this, 9793 off = url.indexOf( " " ); 9794 9795 if ( off > -1 ) { 9796 selector = stripAndCollapse( url.slice( off ) ); 9797 url = url.slice( 0, off ); 9798 } 9799 9800 // If it's a function 9801 if ( jQuery.isFunction( params ) ) { 9802 9803 // We assume that it's the callback 9804 callback = params; 9805 params = undefined; 9806 9807 // Otherwise, build a param string 9808 } else if ( params && typeof params === "object" ) { 9809 type = "POST"; 9810 } 9811 9812 // If we have elements to modify, make the request 9813 if ( self.length > 0 ) { 9814 jQuery.ajax( { 9815 url: url, 9816 9817 // If "type" variable is undefined, then "GET" method will be used. 9818 // Make value of this field explicit since 9819 // user can override it through ajaxSetup method 9820 type: type || "GET", 9821 dataType: "html", 9822 data: params 9823 } ).done( function( responseText ) { 9824 9825 // Save response for use in complete callback 9826 response = arguments; 9827 9828 self.html( selector ? 9829 9830 // If a selector was specified, locate the right elements in a dummy div 9831 // Exclude scripts to avoid IE 'Permission Denied' errors 9832 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 9833 9834 // Otherwise use the full result 9835 responseText ); 9836 9837 // If the request succeeds, this function gets "data", "status", "jqXHR" 9838 // but they are ignored because response was set above. 9839 // If it fails, this function gets "jqXHR", "status", "error" 9840 } ).always( callback && function( jqXHR, status ) { 9841 self.each( function() { 9842 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 9843 } ); 9844 } ); 9845 } 9846 9847 return this; 9848}; 9849 9850 9851 9852 9853// Attach a bunch of functions for handling common AJAX events 9854jQuery.each( [ 9855 "ajaxStart", 9856 "ajaxStop", 9857 "ajaxComplete", 9858 "ajaxError", 9859 "ajaxSuccess", 9860 "ajaxSend" 9861], function( i, type ) { 9862 jQuery.fn[ type ] = function( fn ) { 9863 return this.on( type, fn ); 9864 }; 9865} ); 9866 9867 9868 9869 9870jQuery.expr.pseudos.animated = function( elem ) { 9871 return jQuery.grep( jQuery.timers, function( fn ) { 9872 return elem === fn.elem; 9873 } ).length; 9874}; 9875 9876 9877 9878 9879/** 9880 * Gets a window from an element 9881 */ 9882function getWindow( elem ) { 9883 return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; 9884} 9885 9886jQuery.offset = { 9887 setOffset: function( elem, options, i ) { 9888 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 9889 position = jQuery.css( elem, "position" ), 9890 curElem = jQuery( elem ), 9891 props = {}; 9892 9893 // Set position first, in-case top/left are set even on static elem 9894 if ( position === "static" ) { 9895 elem.style.position = "relative"; 9896 } 9897 9898 curOffset = curElem.offset(); 9899 curCSSTop = jQuery.css( elem, "top" ); 9900 curCSSLeft = jQuery.css( elem, "left" ); 9901 calculatePosition = ( position === "absolute" || position === "fixed" ) && 9902 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 9903 9904 // Need to be able to calculate position if either 9905 // top or left is auto and position is either absolute or fixed 9906 if ( calculatePosition ) { 9907 curPosition = curElem.position(); 9908 curTop = curPosition.top; 9909 curLeft = curPosition.left; 9910 9911 } else { 9912 curTop = parseFloat( curCSSTop ) || 0; 9913 curLeft = parseFloat( curCSSLeft ) || 0; 9914 } 9915 9916 if ( jQuery.isFunction( options ) ) { 9917 9918 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 9919 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 9920 } 9921 9922 if ( options.top != null ) { 9923 props.top = ( options.top - curOffset.top ) + curTop; 9924 } 9925 if ( options.left != null ) { 9926 props.left = ( options.left - curOffset.left ) + curLeft; 9927 } 9928 9929 if ( "using" in options ) { 9930 options.using.call( elem, props ); 9931 9932 } else { 9933 curElem.css( props ); 9934 } 9935 } 9936}; 9937 9938jQuery.fn.extend( { 9939 offset: function( options ) { 9940 9941 // Preserve chaining for setter 9942 if ( arguments.length ) { 9943 return options === undefined ? 9944 this : 9945 this.each( function( i ) { 9946 jQuery.offset.setOffset( this, options, i ); 9947 } ); 9948 } 9949 9950 var docElem, win, rect, doc, 9951 elem = this[ 0 ]; 9952 9953 if ( !elem ) { 9954 return; 9955 } 9956
vendor: 4,167 bytes, lines 9957-10094
9957 // Support: IE <=11 only 9958 // Running getBoundingClientRect on a 9959 // disconnected node in IE throws an error 9960 if ( !elem.getClientRects().length ) { 9961 return { top: 0, left: 0 }; 9962 } 9963 9964 rect = elem.getBoundingClientRect(); 9965 9966 // Make sure element is not hidden (display: none) 9967 if ( rect.width || rect.height ) { 9968 doc = elem.ownerDocument; 9969 win = getWindow( doc ); 9970 docElem = doc.documentElement; 9971 9972 return { 9973 top: rect.top + win.pageYOffset - docElem.clientTop, 9974 left: rect.left + win.pageXOffset - docElem.clientLeft 9975 }; 9976 } 9977 9978 // Return zeros for disconnected and hidden elements (gh-2310) 9979 return rect; 9980 }, 9981 9982 position: function() { 9983 if ( !this[ 0 ] ) { 9984 return; 9985 } 9986 9987 var offsetParent, offset, 9988 elem = this[ 0 ], 9989 parentOffset = { top: 0, left: 0 }; 9990 9991 // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, 9992 // because it is its only offset parent 9993 if ( jQuery.css( elem, "position" ) === "fixed" ) { 9994 9995 // Assume getBoundingClientRect is there when computed position is fixed 9996 offset = elem.getBoundingClientRect(); 9997 9998 } else { 9999 10000 // Get *real* offsetParent 10001 offsetParent = this.offsetParent(); 10002 10003 // Get correct offsets 10004 offset = this.offset(); 10005 if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { 10006 parentOffset = offsetParent.offset(); 10007 } 10008 10009 // Add offsetParent borders 10010 parentOffset = { 10011 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ), 10012 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) 10013 }; 10014 } 10015 10016 // Subtract parent offsets and element margins 10017 return { 10018 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 10019 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 10020 }; 10021 }, 10022 10023 // This method will return documentElement in the following cases: 10024 // 1) For the element inside the iframe without offsetParent, this method will return 10025 // documentElement of the parent window 10026 // 2) For the hidden or detached element 10027 // 3) For body or html element, i.e. in case of the html node - it will return itself 10028 // 10029 // but those exceptions were never presented as a real life use-cases 10030 // and might be considered as more preferable results. 10031 // 10032 // This logic, however, is not guaranteed and can change at any point in the future 10033 offsetParent: function() { 10034 return this.map( function() { 10035 var offsetParent = this.offsetParent; 10036 10037 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 10038 offsetParent = offsetParent.offsetParent; 10039 } 10040 10041 return offsetParent || documentElement; 10042 } ); 10043 } 10044} ); 10045 10046// Create scrollLeft and scrollTop methods 10047jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 10048 var top = "pageYOffset" === prop; 10049 10050 jQuery.fn[ method ] = function( val ) { 10051 return access( this, function( elem, method, val ) { 10052 var win = getWindow( elem ); 10053 10054 if ( val === undefined ) { 10055 return win ? win[ prop ] : elem[ method ]; 10056 } 10057 10058 if ( win ) { 10059 win.scrollTo( 10060 !top ? val : win.pageXOffset, 10061 top ? val : win.pageYOffset 10062 ); 10063 10064 } else { 10065 elem[ method ] = val; 10066 } 10067 }, method, val, arguments.length ); 10068 }; 10069} ); 10070 10071// Support: Safari <=7 - 9.1, Chrome <=37 - 49 10072// Add the top/left cssHooks using jQuery.fn.position 10073// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 10074// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 10075// getComputedStyle returns percent when specified for top/left/bottom/right; 10076// rather than make the css module depend on the offset module, just check for it here 10077jQuery.each( [ "top", "left" ], function( i, prop ) { 10078 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 10079 function( elem, computed ) { 10080 if ( computed ) { 10081 computed = curCSS( elem, prop ); 10082 10083 // If curCSS returns percentage, fallback to offset 10084 return rnumnonpx.test( computed ) ? 10085 jQuery( elem ).position()[ prop ] + "px" : 10086 computed; 10087 } 10088 } 10089 ); 10090} ); 10091 10092 10093// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 10094jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
vendor: 5,171 bytes, lines 10095-10256
10095 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, 10096 function( defaultExtra, funcName ) { 10097 10098 // Margin is only for outerHeight, outerWidth 10099 jQuery.fn[ funcName ] = function( margin, value ) { 10100 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 10101 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 10102 10103 return access( this, function( elem, type, value ) { 10104 var doc; 10105 10106 if ( jQuery.isWindow( elem ) ) { 10107 10108 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 10109 return funcName.indexOf( "outer" ) === 0 ? 10110 elem[ "inner" + name ] : 10111 elem.document.documentElement[ "client" + name ]; 10112 } 10113 10114 // Get document width or height 10115 if ( elem.nodeType === 9 ) { 10116 doc = elem.documentElement; 10117 10118 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 10119 // whichever is greatest 10120 return Math.max( 10121 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 10122 elem.body[ "offset" + name ], doc[ "offset" + name ], 10123 doc[ "client" + name ] 10124 ); 10125 } 10126 10127 return value === undefined ? 10128 10129 // Get width or height on the element, requesting but not forcing parseFloat 10130 jQuery.css( elem, type, extra ) : 10131 10132 // Set width or height on the element 10133 jQuery.style( elem, type, value, extra ); 10134 }, type, chainable ? margin : undefined, chainable ); 10135 }; 10136 } ); 10137} ); 10138 10139 10140jQuery.fn.extend( { 10141 10142 bind: function( types, data, fn ) { 10143 return this.on( types, null, data, fn ); 10144 }, 10145 unbind: function( types, fn ) { 10146 return this.off( types, null, fn ); 10147 }, 10148 10149 delegate: function( selector, types, data, fn ) { 10150 return this.on( types, selector, data, fn ); 10151 }, 10152 undelegate: function( selector, types, fn ) { 10153 10154 // ( namespace ) or ( selector, types [, fn] ) 10155 return arguments.length === 1 ? 10156 this.off( selector, "**" ) : 10157 this.off( types, selector || "**", fn ); 10158 } 10159} ); 10160 10161jQuery.parseJSON = JSON.parse; 10162 10163 10164 10165 10166// Register as a named AMD module, since jQuery can be concatenated with other 10167// files that may use define, but not via a proper concatenation script that 10168// understands anonymous AMD modules. A named AMD is safest and most robust 10169// way to register. Lowercase jquery is used because AMD module names are 10170// derived from file names, and jQuery is normally delivered in a lowercase 10171// file name. Do this after creating the global so that if an AMD module wants 10172// to call noConflict to hide this version of jQuery, it will work. 10173 10174// Note that for maximum portability, libraries that are not jQuery should 10175// declare themselves as anonymous modules, and avoid setting a global if an 10176// AMD loader is present. jQuery is a special case. For more information, see 10177// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 10178 10179if ( typeof define === "function" && define.amd ) { 10180 define( "jquery", [], function() { 10181 return jQuery; 10182 } ); 10183} 10184 10185 10186 10187 10188var 10189 10190 // Map over jQuery in case of overwrite 10191 _jQuery = window.jQuery, 10192 10193 // Map over the $ in case of overwrite 10194 _$ = window.$; 10195 10196jQuery.noConflict = function( deep ) { 10197 if ( window.$ === jQuery ) { 10198 window.$ = _$; 10199 } 10200 10201 if ( deep && window.jQuery === jQuery ) { 10202 window.jQuery = _jQuery; 10203 } 10204 10205 return jQuery; 10206}; 10207 10208// Expose jQuery and $ identifiers, even in AMD 10209// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 10210// and CommonJS for browser emulators (#13566) 10211if ( !noGlobal ) { 10212 window.jQuery = window.$ = jQuery; 10213} 10214 10215 10216 10217 10218 10219return jQuery; 10220} ); 10221 10222/*! jQuery UI - v1.13.1 - 2022-02-07 10223* http://jqueryui.com 10224* Includes: data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, position.js, scroll-parent.js, tabbable.js, unique-id.js, widget.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js 10225* Copyright jQuery Foundation and other contributors; Licensed MIT */ 10226 10227( function( factory ) { 10228 "use strict"; 10229 10230 if ( typeof define === "function" && define.amd ) { 10231 10232 // AMD. Register as an anonymous module. 10233 define( [ "jquery" ], factory ); 10234 } else { 10235 10236 // Browser globals 10237 factory( jQuery ); 10238 } 10239} )( function( $ ) { 10240"use strict"; 10241 10242$.ui = $.ui || {}; 10243 10244var version = $.ui.version = "1.13.1"; 10245 10246 10247/*! 10248 * jQuery UI :data 1.13.1 10249 * http://jqueryui.com 10250 * 10251 * Copyright jQuery Foundation and other contributors 10252 * Released under the MIT license. 10253 * http://jquery.org/license 10254 */ 10255 10256//>>label: :data Selector
vendor: 1,696 bytes, lines 10257-10325
10257//>>group: Core 10258//>>description: Selects elements which have data stored under the specified key. 10259//>>docs: http://api.jqueryui.com/data-selector/ 10260 10261 10262var data = $.extend( $.expr.pseudos, { 10263 data: $.expr.createPseudo ? 10264 $.expr.createPseudo( function( dataName ) { 10265 return function( elem ) { 10266 return !!$.data( elem, dataName ); 10267 }; 10268 } ) : 10269 10270 // Support: jQuery <1.8 10271 function( elem, i, match ) { 10272 return !!$.data( elem, match[ 3 ] ); 10273 } 10274} ); 10275 10276/*! 10277 * jQuery UI Disable Selection 1.13.1 10278 * http://jqueryui.com 10279 * 10280 * Copyright jQuery Foundation and other contributors 10281 * Released under the MIT license. 10282 * http://jquery.org/license 10283 */ 10284 10285//>>label: disableSelection 10286//>>group: Core 10287//>>description: Disable selection of text content within the set of matched elements. 10288//>>docs: http://api.jqueryui.com/disableSelection/ 10289 10290// This file is deprecated 10291 10292var disableSelection = $.fn.extend( { 10293 disableSelection: ( function() { 10294 var eventType = "onselectstart" in document.createElement( "div" ) ? 10295 "selectstart" : 10296 "mousedown"; 10297 10298 return function() { 10299 return this.on( eventType + ".ui-disableSelection", function( event ) { 10300 event.preventDefault(); 10301 } ); 10302 }; 10303 } )(), 10304 10305 enableSelection: function() { 10306 return this.off( ".ui-disableSelection" ); 10307 } 10308} ); 10309 10310 10311 10312// Create a local jQuery because jQuery Color relies on it and the 10313// global may not exist with AMD and a custom build (#10199). 10314// This module is a noop if used as a regular AMD module. 10315// eslint-disable-next-line no-unused-vars 10316var jQuery = $; 10317 10318 10319/*! 10320 * jQuery Color Animations v2.2.0 10321 * https://github.com/jquery/jquery-color 10322 * 10323 * Copyright OpenJS Foundation and other contributors 10324 * Released under the MIT license. 10325 * http
vendor: 16,926 bytes, lines 10325-11032
10325://jquery.org/license 10326 * 10327 * Date: Sun May 10 09:02:36 2020 +0200 10328 */ 10329 10330 10331 10332 var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " + 10333 "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", 10334 10335 class2type = {}, 10336 toString = class2type.toString, 10337 10338 // plusequals test for += 100 -= 100 10339 rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, 10340 10341 // a set of RE's that can match strings and generate color tuples. 10342 stringParsers = [ { 10343 re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, 10344 parse: function( execResult ) { 10345 return [ 10346 execResult[ 1 ], 10347 execResult[ 2 ], 10348 execResult[ 3 ], 10349 execResult[ 4 ] 10350 ]; 10351 } 10352 }, { 10353 re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, 10354 parse: function( execResult ) { 10355 return [ 10356 execResult[ 1 ] * 2.55, 10357 execResult[ 2 ] * 2.55, 10358 execResult[ 3 ] * 2.55, 10359 execResult[ 4 ] 10360 ]; 10361 } 10362 }, { 10363 10364 // this regex ignores A-F because it's compared against an already lowercased string 10365 re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/, 10366 parse: function( execResult ) { 10367 return [ 10368 parseInt( execResult[ 1 ], 16 ), 10369 parseInt( execResult[ 2 ], 16 ), 10370 parseInt( execResult[ 3 ], 16 ), 10371 execResult[ 4 ] ? 10372 ( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) : 10373 1 10374 ]; 10375 } 10376 }, { 10377 10378 // this regex ignores A-F because it's compared against an already lowercased string 10379 re: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/, 10380 parse: function( execResult ) { 10381 return [ 10382 parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), 10383 parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), 10384 parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ), 10385 execResult[ 4 ] ? 10386 ( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 ) 10387 .toFixed( 2 ) : 10388 1 10389 ]; 10390 } 10391 }, { 10392 re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, 10393 space: "hsla", 10394 parse: function( execResult ) { 10395 return [ 10396 execResult[ 1 ], 10397 execResult[ 2 ] / 100, 10398 execResult[ 3 ] / 100, 10399 execResult[ 4 ] 10400 ]; 10401 } 10402 } ], 10403 10404 // jQuery.Color( ) 10405 color = jQuery.Color = function( color, green, blue, alpha ) { 10406 return new jQuery.Color.fn.parse( color, green, blue, alpha ); 10407 }, 10408 spaces = { 10409 rgba: { 10410 props: { 10411 red: { 10412 idx: 0, 10413 type: "byte" 10414 }, 10415 green: { 10416 idx: 1, 10417 type: "byte" 10418 }, 10419 blue: { 10420 idx: 2, 10421 type: "byte" 10422 } 10423 } 10424 }, 10425 10426 hsla: { 10427 props: { 10428 hue: { 10429 idx: 0, 10430 type: "degrees" 10431 }, 10432 saturation: { 10433 idx: 1, 10434 type: "percent" 10435 }, 10436 lightness: { 10437 idx: 2, 10438 type: "percent" 10439 } 10440 } 10441 } 10442 }, 10443 propTypes = { 10444 "byte": { 10445 floor: true, 10446 max: 255 10447 }, 10448 "percent": { 10449 max: 1 10450 }, 10451 "degrees": { 10452 mod: 360, 10453 floor: true 10454 } 10455 }, 10456 support = color.support = {}, 10457 10458 // element for support tests 10459 supportElem = jQuery( "<p>" )[ 0 ], 10460 10461 // colors = jQuery.Color.names 10462 colors, 10463 10464 // local aliases of functions called often 10465 each = jQuery.each; 10466 10467// determine rgba support immediately 10468supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; 10469support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; 10470 10471// define cache name and alpha properties 10472// for rgba and hsla spaces 10473each( spaces, function( spaceName, space ) { 10474 space.cache = "_" + spaceName; 10475 space.props.alpha = { 10476 idx: 3, 10477 type: "percent", 10478 def: 1 10479 }; 10480} ); 10481 10482// Populate the class2type map 10483jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 10484 function( _i, name ) { 10485 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 10486 } ); 10487 10488function getType( obj ) { 10489 if ( obj == null ) { 10490 return obj + ""; 10491 } 10492 10493 return typeof obj === "object" ? 10494 class2type[ toString.call( obj ) ] || "object" : 10495 typeof obj; 10496} 10497 10498function clamp( value, prop, allowEmpty ) { 10499 var type = propTypes[ prop.type ] || {}; 10500 10501 if ( value == null ) { 10502 return ( allowEmpty || !prop.def ) ? null : prop.def; 10503 } 10504 10505 // ~~ is an short way of doing floor for positive numbers 10506 value = type.floor ? ~~value : parseFloat( value ); 10507 10508 // IE will pass in empty strings as value for alpha, 10509 // which will hit this case 10510 if ( isNaN( value ) ) { 10511 return prop.def; 10512 } 10513 10514 if ( type.mod ) { 10515 10516 // we add mod before modding to make sure that negatives values 10517 // get converted properly: -10 -> 350 10518 return ( value + type.mod ) % type.mod; 10519 } 10520 10521 // for now all property types without mod have min and max 10522 return Math.min( type.max, Math.max( 0, value ) ); 10523} 10524 10525function stringParse( string ) { 10526 var inst = color(), 10527 rgba = inst._rgba = []; 10528 10529 string = string.toLowerCase(); 10530 10531 each( stringParsers, function( _i, parser ) { 10532 var parsed, 10533 match = parser.re.exec( string ), 10534 values = match && parser.parse( match ), 10535 spaceName = parser.space || "rgba"; 10536 10537 if ( values ) { 10538 parsed = inst[ spaceName ]( values ); 10539 10540 // if this was an rgba parse the assignment might happen twice 10541 // oh well.... 10542 inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; 10543 rgba = inst._rgba = parsed._rgba; 10544 10545 // exit each( stringParsers ) here because we matched 10546 return false; 10547 } 10548 } ); 10549 10550 // Found a stringParser that handled it 10551 if ( rgba.length ) { 10552 10553 // if this came from a parsed string, force "transparent" when alpha is 0 10554 // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) 10555 if ( rgba.join() === "0,0,0,0" ) { 10556 jQuery.extend( rgba, colors.transparent ); 10557 } 10558 return inst; 10559 } 10560 10561 // named colors 10562 return colors[ string ]; 10563} 10564 10565color.fn = jQuery.extend( color.prototype, { 10566 parse: function( red, green, blue, alpha ) { 10567 if ( red === undefined ) { 10568 this._rgba = [ null, null, null, null ]; 10569 return this; 10570 } 10571 if ( red.jquery || red.nodeType ) { 10572 red = jQuery( red ).css( green ); 10573 green = undefined; 10574 } 10575 10576 var inst = this, 10577 type = getType( red ), 10578 rgba = this._rgba = []; 10579 10580 // more than 1 argument specified - assume ( red, green, blue, alpha ) 10581 if ( green !== undefined ) { 10582 red = [ red, green, blue, alpha ]; 10583 type = "array"; 10584 } 10585 10586 if ( type === "string" ) { 10587 return this.parse( stringParse( red ) || colors._default ); 10588 } 10589 10590 if ( type === "array" ) { 10591 each( spaces.rgba.props, function( _key, prop ) { 10592 rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); 10593 } ); 10594 return this; 10595 } 10596 10597 if ( type === "object" ) { 10598 if ( red instanceof color ) { 10599 each( spaces, function( _spaceName, space ) { 10600 if ( red[ space.cache ] ) { 10601 inst[ space.cache ] = red[ space.cache ].slice(); 10602 } 10603 } ); 10604 } else { 10605 each( spaces, function( _spaceName, space ) { 10606 var cache = space.cache; 10607 each( space.props, function( key, prop ) { 10608 10609 // if the cache doesn't exist, and we know how to convert 10610 if ( !inst[ cache ] && space.to ) { 10611 10612 // if the value was null, we don't need to copy it 10613 // if the key was alpha, we don't need to copy it either 10614 if ( key === "alpha" || red[ key ] == null ) { 10615 return; 10616 } 10617 inst[ cache ] = space.to( inst._rgba ); 10618 } 10619 10620 // this is the only case where we allow nulls for ALL properties. 10621 // call clamp with alwaysAllowEmpty 10622 inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); 10623 } ); 10624 10625 // everything defined but alpha? 10626 if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { 10627 10628 // use the default of 1 10629 if ( inst[ cache ][ 3 ] == null ) { 10630 inst[ cache ][ 3 ] = 1; 10631 } 10632 10633 if ( space.from ) { 10634 inst._rgba = space.from( inst[ cache ] ); 10635 } 10636 } 10637 } ); 10638 } 10639 return this; 10640 } 10641 }, 10642 is: function( compare ) { 10643 var is = color( compare ), 10644 same = true, 10645 inst = this; 10646 10647 each( spaces, function( _, space ) { 10648 var localCache, 10649 isCache = is[ space.cache ]; 10650 if ( isCache ) { 10651 localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; 10652 each( space.props, function( _, prop ) { 10653 if ( isCache[ prop.idx ] != null ) { 10654 same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); 10655 return same; 10656 } 10657 } ); 10658 } 10659 return same; 10660 } ); 10661 return same; 10662 }, 10663 _space: function() { 10664 var used = [], 10665 inst = this; 10666 each( spaces, function( spaceName, space ) { 10667 if ( inst[ space.cache ] ) { 10668 used.push( spaceName ); 10669 } 10670 } ); 10671 return used.pop(); 10672 }, 10673 transition: function( other, distance ) { 10674 var end = color( other ), 10675 spaceName = end._space(), 10676 space = spaces[ spaceName ], 10677 startColor = this.alpha() === 0 ? color( "transparent" ) : this, 10678 start = startColor[ space.cache ] || space.to( startColor._rgba ), 10679 result = start.slice(); 10680 10681 end = end[ space.cache ]; 10682 each( space.props, function( _key, prop ) { 10683 var index = prop.idx, 10684 startValue = start[ index ], 10685 endValue = end[ index ], 10686 type = propTypes[ prop.type ] || {}; 10687 10688 // if null, don't override start value 10689 if ( endValue === null ) { 10690 return; 10691 } 10692 10693 // if null - use end 10694 if ( startValue === null ) { 10695 result[ index ] = endValue; 10696 } else { 10697 if ( type.mod ) { 10698 if ( endValue - startValue > type.mod / 2 ) { 10699 startValue += type.mod; 10700 } else if ( startValue - endValue > type.mod / 2 ) { 10701 startValue -= type.mod; 10702 } 10703 } 10704 result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); 10705 } 10706 } ); 10707 return this[ spaceName ]( result ); 10708 }, 10709 blend: function( opaque ) { 10710 10711 // if we are already opaque - return ourself 10712 if ( this._rgba[ 3 ] === 1 ) { 10713 return this; 10714 } 10715 10716 var rgb = this._rgba.slice(), 10717 a = rgb.pop(), 10718 blend = color( opaque )._rgba; 10719 10720 return color( jQuery.map( rgb, function( v, i ) { 10721 return ( 1 - a ) * blend[ i ] + a * v; 10722 } ) ); 10723 }, 10724 toRgbaString: function() { 10725 var prefix = "rgba(", 10726 rgba = jQuery.map( this._rgba, function( v, i ) { 10727 if ( v != null ) { 10728 return v; 10729 } 10730 return i > 2 ? 1 : 0; 10731 } ); 10732 10733 if ( rgba[ 3 ] === 1 ) { 10734 rgba.pop(); 10735 prefix = "rgb("; 10736 } 10737 10738 return prefix + rgba.join() + ")"; 10739 }, 10740 toHslaString: function() { 10741 var prefix = "hsla(", 10742 hsla = jQuery.map( this.hsla(), function( v, i ) { 10743 if ( v == null ) { 10744 v = i > 2 ? 1 : 0; 10745 } 10746 10747 // catch 1 and 2 10748 if ( i && i < 3 ) { 10749 v = Math.round( v * 100 ) + "%"; 10750 } 10751 return v; 10752 } ); 10753 10754 if ( hsla[ 3 ] === 1 ) { 10755 hsla.pop(); 10756 prefix = "hsl("; 10757 } 10758 return prefix + hsla.join() + ")"; 10759 }, 10760 toHexString: function( includeAlpha ) { 10761 var rgba = this._rgba.slice(), 10762 alpha = rgba.pop(); 10763 10764 if ( includeAlpha ) { 10765 rgba.push( ~~( alpha * 255 ) ); 10766 } 10767 10768 return "#" + jQuery.map( rgba, function( v ) { 10769 10770 // default to 0 when nulls exist 10771 v = ( v || 0 ).toString( 16 ); 10772 return v.length === 1 ? "0" + v : v; 10773 } ).join( "" ); 10774 }, 10775 toString: function() { 10776 return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); 10777 } 10778} ); 10779color.fn.parse.prototype = color.fn; 10780 10781// hsla conversions adapted from: 10782// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 10783 10784function hue2rgb( p, q, h ) { 10785 h = ( h + 1 ) % 1; 10786 if ( h * 6 < 1 ) { 10787 return p + ( q - p ) * h * 6; 10788 } 10789 if ( h * 2 < 1 ) { 10790 return q; 10791 } 10792 if ( h * 3 < 2 ) { 10793 return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6; 10794 } 10795 return p; 10796} 10797 10798spaces.hsla.to = function( rgba ) { 10799 if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { 10800 return [ null, null, null, rgba[ 3 ] ]; 10801 } 10802 var r = rgba[ 0 ] / 255, 10803 g = rgba[ 1 ] / 255, 10804 b = rgba[ 2 ] / 255, 10805 a = rgba[ 3 ], 10806 max = Math.max( r, g, b ), 10807 min = Math.min( r, g, b ), 10808 diff = max - min, 10809 add = max + min, 10810 l = add * 0.5, 10811 h, s; 10812 10813 if ( min === max ) { 10814 h = 0; 10815 } else if ( r === max ) { 10816 h = ( 60 * ( g - b ) / diff ) + 360; 10817 } else if ( g === max ) { 10818 h = ( 60 * ( b - r ) / diff ) + 120; 10819 } else { 10820 h = ( 60 * ( r - g ) / diff ) + 240; 10821 } 10822 10823 // chroma (diff) == 0 means greyscale which, by definition, saturation = 0% 10824 // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) 10825 if ( diff === 0 ) { 10826 s = 0; 10827 } else if ( l <= 0.5 ) { 10828 s = diff / add; 10829 } else { 10830 s = diff / ( 2 - add ); 10831 } 10832 return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ]; 10833}; 10834 10835spaces.hsla.from = function( hsla ) { 10836 if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { 10837 return [ null, null, null, hsla[ 3 ] ]; 10838 } 10839 var h = hsla[ 0 ] / 360, 10840 s = hsla[ 1 ], 10841 l = hsla[ 2 ], 10842 a = hsla[ 3 ], 10843 q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, 10844 p = 2 * l - q; 10845 10846 return [ 10847 Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), 10848 Math.round( hue2rgb( p, q, h ) * 255 ), 10849 Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), 10850 a 10851 ]; 10852}; 10853 10854 10855each( spaces, function( spaceName, space ) { 10856 var props = space.props, 10857 cache = space.cache, 10858 to = space.to, 10859 from = space.from; 10860 10861 // makes rgba() and hsla() 10862 color.fn[ spaceName ] = function( value ) { 10863 10864 // generate a cache for this space if it doesn't exist 10865 if ( to && !this[ cache ] ) { 10866 this[ cache ] = to( this._rgba ); 10867 } 10868 if ( value === undefined ) { 10869 return this[ cache ].slice(); 10870 } 10871 10872 var ret, 10873 type = getType( value ), 10874 arr = ( type === "array" || type === "object" ) ? value : arguments, 10875 local = this[ cache ].slice(); 10876 10877 each( props, function( key, prop ) { 10878 var val = arr[ type === "object" ? key : prop.idx ]; 10879 if ( val == null ) { 10880 val = local[ prop.idx ]; 10881 } 10882 local[ prop.idx ] = clamp( val, prop ); 10883 } ); 10884 10885 if ( from ) { 10886 ret = color( from( local ) ); 10887 ret[ cache ] = local; 10888 return ret; 10889 } else { 10890 return color( local ); 10891 } 10892 }; 10893 10894 // makes red() green() blue() alpha() hue() saturation() lightness() 10895 each( props, function( key, prop ) { 10896 10897 // alpha is included in more than one space 10898 if ( color.fn[ key ] ) { 10899 return; 10900 } 10901 color.fn[ key ] = function( value ) { 10902 var local, cur, match, fn, 10903 vtype = getType( value ); 10904 10905 if ( key === "alpha" ) { 10906 fn = this._hsla ? "hsla" : "rgba"; 10907 } else { 10908 fn = spaceName; 10909 } 10910 local = this[ fn ](); 10911 cur = local[ prop.idx ]; 10912 10913 if ( vtype === "undefined" ) { 10914 return cur; 10915 } 10916 10917 if ( vtype === "function" ) { 10918 value = value.call( this, cur ); 10919 vtype = getType( value ); 10920 } 10921 if ( value == null && prop.empty ) { 10922 return this; 10923 } 10924 if ( vtype === "string" ) { 10925 match = rplusequals.exec( value ); 10926 if ( match ) { 10927 value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); 10928 } 10929 } 10930 local[ prop.idx ] = value; 10931 return this[ fn ]( local ); 10932 }; 10933 } ); 10934} ); 10935 10936// add cssHook and .fx.step function for each named hook. 10937// accept a space separated string of properties 10938color.hook = function( hook ) { 10939 var hooks = hook.split( " " ); 10940 each( hooks, function( _i, hook ) { 10941 jQuery.cssHooks[ hook ] = { 10942 set: function( elem, value ) { 10943 var parsed, curElem, 10944 backgroundColor = ""; 10945 10946 if ( value !== "transparent" && ( getType( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) { 10947 value = color( parsed || value ); 10948 if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { 10949 curElem = hook === "backgroundColor" ? elem.parentNode : elem; 10950 while ( 10951 ( backgroundColor === "" || backgroundColor === "transparent" ) && 10952 curElem && curElem.style 10953 ) { 10954 try { 10955 backgroundColor = jQuery.css( curElem, "backgroundColor" ); 10956 curElem = curElem.parentNode; 10957 } catch ( e ) { 10958 } 10959 } 10960 10961 value = value.blend( backgroundColor && backgroundColor !== "transparent" ? 10962 backgroundColor : 10963 "_default" ); 10964 } 10965 10966 value = value.toRgbaString(); 10967 } 10968 try { 10969 elem.style[ hook ] = value; 10970 } catch ( e ) { 10971 10972 // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit' 10973 } 10974 } 10975 }; 10976 jQuery.fx.step[ hook ] = function( fx ) { 10977 if ( !fx.colorInit ) { 10978 fx.start = color( fx.elem, hook ); 10979 fx.end = color( fx.end ); 10980 fx.colorInit = true; 10981 } 10982 jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); 10983 }; 10984 } ); 10985 10986}; 10987 10988color.hook( stepHooks ); 10989 10990jQuery.cssHooks.borderColor = { 10991 expand: function( value ) { 10992 var expanded = {}; 10993 10994 each( [ "Top", "Right", "Bottom", "Left" ], function( _i, part ) { 10995 expanded[ "border" + part + "Color" ] = value; 10996 } ); 10997 return expanded; 10998 } 10999}; 11000 11001// Basic color names only. 11002// Usage of any of the other color names requires adding yourself or including 11003// jquery.color.svg-names.js. 11004colors = jQuery.Color.names = { 11005 11006 // 4.1. Basic color keywords 11007 aqua: "#00ffff", 11008 black: "#000000", 11009 blue: "#0000ff", 11010 fuchsia: "#ff00ff", 11011 gray: "#808080", 11012 green: "#008000", 11013 lime: "#00ff00", 11014 maroon: "#800000", 11015 navy: "#000080", 11016 olive: "#808000", 11017 purple: "#800080", 11018 red: "#ff0000", 11019 silver: "#c0c0c0", 11020 teal: "#008080", 11021 white: "#ffffff", 11022 yellow: "#ffff00", 11023 11024 // 4.2.3. "transparent" color keyword 11025 transparent: [ null, null, null, 0 ], 11026 11027 _default: "#ffffff" 11028}; 11029 11030 11031/*! 11032 * jQuery UI Effects 1.13.
110321 11033 * http://jqueryui.com 11034 * 11035 * Copyright jQuery Foundation and other contributors 11036 * Released under the MIT license. 11037 * http://jquery.org/license 11038 */ 11039 11040//>>label: Effects Core 11041//>>group: Effects 11042/* eslint-disable max-len */ 11043//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. 11044/* eslint-enable max-len */ 11045//>>docs: http://api.jqueryui.com/category/effects-core/ 11046//>>demos: http
vendor: 9,484 bytes, lines 11046-11416
11046://jqueryui.com/effect/ 11047 11048 11049var dataSpace = "ui-effects-", 11050 dataSpaceStyle = "ui-effects-style", 11051 dataSpaceAnimated = "ui-effects-animated"; 11052 11053$.effects = { 11054 effect: {} 11055}; 11056 11057/******************************************************************************/ 11058/****************************** CLASS ANIMATIONS ******************************/ 11059/******************************************************************************/ 11060( function() { 11061 11062var classAnimationActions = [ "add", "remove", "toggle" ], 11063 shorthandStyles = { 11064 border: 1, 11065 borderBottom: 1, 11066 borderColor: 1, 11067 borderLeft: 1, 11068 borderRight: 1, 11069 borderTop: 1, 11070 borderWidth: 1, 11071 margin: 1, 11072 padding: 1 11073 }; 11074 11075$.each( 11076 [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], 11077 function( _, prop ) { 11078 $.fx.step[ prop ] = function( fx ) { 11079 if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { 11080 jQuery.style( fx.elem, prop, fx.end ); 11081 fx.setAttr = true; 11082 } 11083 }; 11084 } 11085); 11086 11087function camelCase( string ) { 11088 return string.replace( /-([\da-z])/gi, function( all, letter ) { 11089 return letter.toUpperCase(); 11090 } ); 11091} 11092 11093function getElementStyles( elem ) { 11094 var key, len, 11095 style = elem.ownerDocument.defaultView ? 11096 elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : 11097 elem.currentStyle, 11098 styles = {}; 11099 11100 if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { 11101 len = style.length; 11102 while ( len-- ) { 11103 key = style[ len ]; 11104 if ( typeof style[ key ] === "string" ) { 11105 styles[ camelCase( key ) ] = style[ key ]; 11106 } 11107 } 11108 11109 // Support: Opera, IE <9 11110 } else { 11111 for ( key in style ) { 11112 if ( typeof style[ key ] === "string" ) { 11113 styles[ key ] = style[ key ]; 11114 } 11115 } 11116 } 11117 11118 return styles; 11119} 11120 11121function styleDifference( oldStyle, newStyle ) { 11122 var diff = {}, 11123 name, value; 11124 11125 for ( name in newStyle ) { 11126 value = newStyle[ name ]; 11127 if ( oldStyle[ name ] !== value ) { 11128 if ( !shorthandStyles[ name ] ) { 11129 if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { 11130 diff[ name ] = value; 11131 } 11132 } 11133 } 11134 } 11135 11136 return diff; 11137} 11138 11139// Support: jQuery <1.8 11140if ( !$.fn.addBack ) { 11141 $.fn.addBack = function( selector ) { 11142 return this.add( selector == null ? 11143 this.prevObject : this.prevObject.filter( selector ) 11144 ); 11145 }; 11146} 11147 11148$.effects.animateClass = function( value, duration, easing, callback ) { 11149 var o = $.speed( duration, easing, callback ); 11150 11151 return this.queue( function() { 11152 var animated = $( this ), 11153 baseClass = animated.attr( "class" ) || "", 11154 applyClassChange, 11155 allAnimations = o.children ? animated.find( "*" ).addBack() : animated; 11156 11157 // Map the animated objects to store the original styles. 11158 allAnimations = allAnimations.map( function() { 11159 var el = $( this ); 11160 return { 11161 el: el, 11162 start: getElementStyles( this ) 11163 }; 11164 } ); 11165 11166 // Apply class change 11167 applyClassChange = function() { 11168 $.each( classAnimationActions, function( i, action ) { 11169 if ( value[ action ] ) { 11170 animated[ action + "Class" ]( value[ action ] ); 11171 } 11172 } ); 11173 }; 11174 applyClassChange(); 11175 11176 // Map all animated objects again - calculate new styles and diff 11177 allAnimations = allAnimations.map( function() { 11178 this.end = getElementStyles( this.el[ 0 ] ); 11179 this.diff = styleDifference( this.start, this.end ); 11180 return this; 11181 } ); 11182 11183 // Apply original class 11184 animated.attr( "class", baseClass ); 11185 11186 // Map all animated objects again - this time collecting a promise 11187 allAnimations = allAnimations.map( function() { 11188 var styleInfo = this, 11189 dfd = $.Deferred(), 11190 opts = $.extend( {}, o, { 11191 queue: false, 11192 complete: function() { 11193 dfd.resolve( styleInfo ); 11194 } 11195 } ); 11196 11197 this.el.animate( this.diff, opts ); 11198 return dfd.promise(); 11199 } ); 11200 11201 // Once all animations have completed: 11202 $.when.apply( $, allAnimations.get() ).done( function() { 11203 11204 // Set the final class 11205 applyClassChange(); 11206 11207 // For each animated element, 11208 // clear all css properties that were animated 11209 $.each( arguments, function() { 11210 var el = this.el; 11211 $.each( this.diff, function( key ) { 11212 el.css( key, "" ); 11213 } ); 11214 } ); 11215 11216 // This is guarnteed to be there if you use jQuery.speed() 11217 // it also handles dequeuing the next anim... 11218 o.complete.call( animated[ 0 ] ); 11219 } ); 11220 } ); 11221}; 11222 11223$.fn.extend( { 11224 addClass: ( function( orig ) { 11225 return function( classNames, speed, easing, callback ) { 11226 return speed ? 11227 $.effects.animateClass.call( this, 11228 { add: classNames }, speed, easing, callback ) : 11229 orig.apply( this, arguments ); 11230 }; 11231 } )( $.fn.addClass ), 11232 11233 removeClass: ( function( orig ) { 11234 return function( classNames, speed, easing, callback ) { 11235 return arguments.length > 1 ? 11236 $.effects.animateClass.call( this, 11237 { remove: classNames }, speed, easing, callback ) : 11238 orig.apply( this, arguments ); 11239 }; 11240 } )( $.fn.removeClass ), 11241 11242 toggleClass: ( function( orig ) { 11243 return function( classNames, force, speed, easing, callback ) { 11244 if ( typeof force === "boolean" || force === undefined ) { 11245 if ( !speed ) { 11246 11247 // Without speed parameter 11248 return orig.apply( this, arguments ); 11249 } else { 11250 return $.effects.animateClass.call( this, 11251 ( force ? { add: classNames } : { remove: classNames } ), 11252 speed, easing, callback ); 11253 } 11254 } else { 11255 11256 // Without force parameter 11257 return $.effects.animateClass.call( this, 11258 { toggle: classNames }, force, speed, easing ); 11259 } 11260 }; 11261 } )( $.fn.toggleClass ), 11262 11263 switchClass: function( remove, add, speed, easing, callback ) { 11264 return $.effects.animateClass.call( this, { 11265 add: add, 11266 remove: remove 11267 }, speed, easing, callback ); 11268 } 11269} ); 11270 11271} )(); 11272 11273/******************************************************************************/ 11274/*********************************** EFFECTS **********************************/ 11275/******************************************************************************/ 11276 11277( function() { 11278 11279if ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) { 11280 $.expr.pseudos.animated = ( function( orig ) { 11281 return function( elem ) { 11282 return !!$( elem ).data( dataSpaceAnimated ) || orig( elem ); 11283 }; 11284 } )( $.expr.pseudos.animated ); 11285} 11286 11287if ( $.uiBackCompat !== false ) { 11288 $.extend( $.effects, { 11289 11290 // Saves a set of properties in a data storage 11291 save: function( element, set ) { 11292 var i = 0, length = set.length; 11293 for ( ; i < length; i++ ) { 11294 if ( set[ i ] !== null ) { 11295 element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); 11296 } 11297 } 11298 }, 11299 11300 // Restores a set of previously saved properties from a data storage 11301 restore: function( element, set ) { 11302 var val, i = 0, length = set.length; 11303 for ( ; i < length; i++ ) { 11304 if ( set[ i ] !== null ) { 11305 val = element.data( dataSpace + set[ i ] ); 11306 element.css( set[ i ], val ); 11307 } 11308 } 11309 }, 11310 11311 setMode: function( el, mode ) { 11312 if ( mode === "toggle" ) { 11313 mode = el.is( ":hidden" ) ? "show" : "hide"; 11314 } 11315 return mode; 11316 }, 11317 11318 // Wraps the element around a wrapper that copies position properties 11319 createWrapper: function( element ) { 11320 11321 // If the element is already wrapped, return it 11322 if ( element.parent().is( ".ui-effects-wrapper" ) ) { 11323 return element.parent(); 11324 } 11325 11326 // Wrap the element 11327 var props = { 11328 width: element.outerWidth( true ), 11329 height: element.outerHeight( true ), 11330 "float": element.css( "float" ) 11331 }, 11332 wrapper = $( "<div></div>" ) 11333 .addClass( "ui-effects-wrapper" ) 11334 .css( { 11335 fontSize: "100%", 11336 background: "transparent", 11337 border: "none", 11338 margin: 0, 11339 padding: 0 11340 } ), 11341 11342 // Store the size in case width/height are defined in % - Fixes #5245 11343 size = { 11344 width: element.width(), 11345 height: element.height() 11346 }, 11347 active = document.activeElement; 11348 11349 // Support: Firefox 11350 // Firefox incorrectly exposes anonymous content 11351 // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 11352 try { 11353 // eslint-disable-next-line no-unused-expressions 11354 active.id; 11355 } catch ( e ) { 11356 active = document.body; 11357 } 11358 11359 element.wrap( wrapper ); 11360 11361 // Fixes #7595 - Elements lose focus when wrapped. 11362 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 11363 $( active ).trigger( "focus" ); 11364 } 11365 11366 // Hotfix for jQuery 1.4 since some change in wrap() seems to actually 11367 // lose the reference to the wrapped element 11368 wrapper = element.parent(); 11369 11370 // Transfer positioning properties to the wrapper 11371 if ( element.css( "position" ) === "static" ) { 11372 wrapper.css( { position: "relative" } ); 11373 element.css( { position: "relative" } ); 11374 } else { 11375 $.extend( props, { 11376 position: element.css( "position" ), 11377 zIndex: element.css( "z-index" ) 11378 } ); 11379 $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) { 11380 props[ pos ] = element.css( pos ); 11381 if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { 11382 props[ pos ] = "auto"; 11383 } 11384 } ); 11385 element.css( { 11386 position: "relative", 11387 top: 0, 11388 left: 0, 11389 right: "auto", 11390 bottom: "auto" 11391 } ); 11392 } 11393 element.css( size ); 11394 11395 return wrapper.css( props ).show(); 11396 }, 11397 11398 removeWrapper: function( element ) { 11399 var active = document.activeElement; 11400 11401 if ( element.parent().is( ".ui-effects-wrapper" ) ) { 11402 element.parent().replaceWith( element ); 11403 11404 // Fixes #7595 - Elements lose focus when wrapped. 11405 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 11406 $( active ).trigger( "focus" ); 11407 } 11408 } 11409 11410 return element; 11411 } 11412 } ); 11413} 11414 11415$.extend( $.effects, { 11416 version: "1.13.
vendor: 2,055 bytes, lines 11416-11511
114161", 11417 11418 define: function( name, mode, effect ) { 11419 if ( !effect ) { 11420 effect = mode; 11421 mode = "effect"; 11422 } 11423 11424 $.effects.effect[ name ] = effect; 11425 $.effects.effect[ name ].mode = mode; 11426 11427 return effect; 11428 }, 11429 11430 scaledDimensions: function( element, percent, direction ) { 11431 if ( percent === 0 ) { 11432 return { 11433 height: 0, 11434 width: 0, 11435 outerHeight: 0, 11436 outerWidth: 0 11437 }; 11438 } 11439 11440 var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1, 11441 y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1; 11442 11443 return { 11444 height: element.height() * y, 11445 width: element.width() * x, 11446 outerHeight: element.outerHeight() * y, 11447 outerWidth: element.outerWidth() * x 11448 }; 11449 11450 }, 11451 11452 clipToBox: function( animation ) { 11453 return { 11454 width: animation.clip.right - animation.clip.left, 11455 height: animation.clip.bottom - animation.clip.top, 11456 left: animation.clip.left, 11457 top: animation.clip.top 11458 }; 11459 }, 11460 11461 // Injects recently queued functions to be first in line (after "inprogress") 11462 unshift: function( element, queueLength, count ) { 11463 var queue = element.queue(); 11464 11465 if ( queueLength > 1 ) { 11466 queue.splice.apply( queue, 11467 [ 1, 0 ].concat( queue.splice( queueLength, count ) ) ); 11468 } 11469 element.dequeue(); 11470 }, 11471 11472 saveStyle: function( element ) { 11473 element.data( dataSpaceStyle, element[ 0 ].style.cssText ); 11474 }, 11475 11476 restoreStyle: function( element ) { 11477 element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || ""; 11478 element.removeData( dataSpaceStyle ); 11479 }, 11480 11481 mode: function( element, mode ) { 11482 var hidden = element.is( ":hidden" ); 11483 11484 if ( mode === "toggle" ) { 11485 mode = hidden ? "show" : "hide"; 11486 } 11487 if ( hidden ? mode === "hide" : mode === "show" ) { 11488 mode = "none"; 11489 } 11490 return mode; 11491 }, 11492 11493 // Translates a [top,left] array into a baseline value 11494 getBaseline: function( origin, original ) { 11495 var y, x; 11496 11497 switch ( origin[ 0 ] ) { 11498 case "top": 11499 y = 0; 11500 break; 11501 case "middle": 11502 y = 0.5; 11503 break; 11504 case "bottom": 11505 y = 1; 11506 break; 11507 default: 11508 y = origin[ 0 ] / original.height; 11509 } 11510 11511 switch ( origin[ 1 ] ) {
11512 case "left": 11513 x = 0; 11514 break; 11515 case "center": 11516 x = 0.5; 11517 break; 11518 case "right": 11519 x = 1; 11520 break; 11521 default: 11522 x = origin[ 1 ] / original.width; 11523 } 11524 11525 return { 11526 x: x, 11527 y: y 11528 }; 11529 }, 11530 11531 // Creates a placeholder element so that the original element can be made absolute 11532 createPlaceholder: function( element ) { 11533 var placeholder, 11534 cssPosition = element.css( "position" ), 11535 position = element.position(); 11536 11537 // Lock in margins first to account for form elements, which 11538 // will change margin if you explicitly set height 11539 // see: http
vendor: 10,558 bytes, lines 11539-11933
11539://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 11540 // Support: Safari 11541 element.css( { 11542 marginTop: element.css( "marginTop" ), 11543 marginBottom: element.css( "marginBottom" ), 11544 marginLeft: element.css( "marginLeft" ), 11545 marginRight: element.css( "marginRight" ) 11546 } ) 11547 .outerWidth( element.outerWidth() ) 11548 .outerHeight( element.outerHeight() ); 11549 11550 if ( /^(static|relative)/.test( cssPosition ) ) { 11551 cssPosition = "absolute"; 11552 11553 placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( { 11554 11555 // Convert inline to inline block to account for inline elements 11556 // that turn to inline block based on content (like img) 11557 display: /^(inline|ruby)/.test( element.css( "display" ) ) ? 11558 "inline-block" : 11559 "block", 11560 visibility: "hidden", 11561 11562 // Margins need to be set to account for margin collapse 11563 marginTop: element.css( "marginTop" ), 11564 marginBottom: element.css( "marginBottom" ), 11565 marginLeft: element.css( "marginLeft" ), 11566 marginRight: element.css( "marginRight" ), 11567 "float": element.css( "float" ) 11568 } ) 11569 .outerWidth( element.outerWidth() ) 11570 .outerHeight( element.outerHeight() ) 11571 .addClass( "ui-effects-placeholder" ); 11572 11573 element.data( dataSpace + "placeholder", placeholder ); 11574 } 11575 11576 element.css( { 11577 position: cssPosition, 11578 left: position.left, 11579 top: position.top 11580 } ); 11581 11582 return placeholder; 11583 }, 11584 11585 removePlaceholder: function( element ) { 11586 var dataKey = dataSpace + "placeholder", 11587 placeholder = element.data( dataKey ); 11588 11589 if ( placeholder ) { 11590 placeholder.remove(); 11591 element.removeData( dataKey ); 11592 } 11593 }, 11594 11595 // Removes a placeholder if it exists and restores 11596 // properties that were modified during placeholder creation 11597 cleanUp: function( element ) { 11598 $.effects.restoreStyle( element ); 11599 $.effects.removePlaceholder( element ); 11600 }, 11601 11602 setTransition: function( element, list, factor, value ) { 11603 value = value || {}; 11604 $.each( list, function( i, x ) { 11605 var unit = element.cssUnit( x ); 11606 if ( unit[ 0 ] > 0 ) { 11607 value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; 11608 } 11609 } ); 11610 return value; 11611 } 11612} ); 11613 11614// Return an effect options object for the given parameters: 11615function _normalizeArguments( effect, options, speed, callback ) { 11616 11617 // Allow passing all options as the first parameter 11618 if ( $.isPlainObject( effect ) ) { 11619 options = effect; 11620 effect = effect.effect; 11621 } 11622 11623 // Convert to an object 11624 effect = { effect: effect }; 11625 11626 // Catch (effect, null, ...) 11627 if ( options == null ) { 11628 options = {}; 11629 } 11630 11631 // Catch (effect, callback) 11632 if ( typeof options === "function" ) { 11633 callback = options; 11634 speed = null; 11635 options = {}; 11636 } 11637 11638 // Catch (effect, speed, ?) 11639 if ( typeof options === "number" || $.fx.speeds[ options ] ) { 11640 callback = speed; 11641 speed = options; 11642 options = {}; 11643 } 11644 11645 // Catch (effect, options, callback) 11646 if ( typeof speed === "function" ) { 11647 callback = speed; 11648 speed = null; 11649 } 11650 11651 // Add options to effect 11652 if ( options ) { 11653 $.extend( effect, options ); 11654 } 11655 11656 speed = speed || options.duration; 11657 effect.duration = $.fx.off ? 0 : 11658 typeof speed === "number" ? speed : 11659 speed in $.fx.speeds ? $.fx.speeds[ speed ] : 11660 $.fx.speeds._default; 11661 11662 effect.complete = callback || options.complete; 11663 11664 return effect; 11665} 11666 11667function standardAnimationOption( option ) { 11668 11669 // Valid standard speeds (nothing, number, named speed) 11670 if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { 11671 return true; 11672 } 11673 11674 // Invalid strings - treat as "normal" speed 11675 if ( typeof option === "string" && !$.effects.effect[ option ] ) { 11676 return true; 11677 } 11678 11679 // Complete callback 11680 if ( typeof option === "function" ) { 11681 return true; 11682 } 11683 11684 // Options hash (but not naming an effect) 11685 if ( typeof option === "object" && !option.effect ) { 11686 return true; 11687 } 11688 11689 // Didn't match any standard API 11690 return false; 11691} 11692 11693$.fn.extend( { 11694 effect: function( /* effect, options, speed, callback */ ) { 11695 var args = _normalizeArguments.apply( this, arguments ), 11696 effectMethod = $.effects.effect[ args.effect ], 11697 defaultMode = effectMethod.mode, 11698 queue = args.queue, 11699 queueName = queue || "fx", 11700 complete = args.complete, 11701 mode = args.mode, 11702 modes = [], 11703 prefilter = function( next ) { 11704 var el = $( this ), 11705 normalizedMode = $.effects.mode( el, mode ) || defaultMode; 11706 11707 // Sentinel for duck-punching the :animated pseudo-selector 11708 el.data( dataSpaceAnimated, true ); 11709 11710 // Save effect mode for later use, 11711 // we can't just call $.effects.mode again later, 11712 // as the .show() below destroys the initial state 11713 modes.push( normalizedMode ); 11714 11715 // See $.uiBackCompat inside of run() for removal of defaultMode in 1.14 11716 if ( defaultMode && ( normalizedMode === "show" || 11717 ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) { 11718 el.show(); 11719 } 11720 11721 if ( !defaultMode || normalizedMode !== "none" ) { 11722 $.effects.saveStyle( el ); 11723 } 11724 11725 if ( typeof next === "function" ) { 11726 next(); 11727 } 11728 }; 11729 11730 if ( $.fx.off || !effectMethod ) { 11731 11732 // Delegate to the original method (e.g., .show()) if possible 11733 if ( mode ) { 11734 return this[ mode ]( args.duration, complete ); 11735 } else { 11736 return this.each( function() { 11737 if ( complete ) { 11738 complete.call( this ); 11739 } 11740 } ); 11741 } 11742 } 11743 11744 function run( next ) { 11745 var elem = $( this ); 11746 11747 function cleanup() { 11748 elem.removeData( dataSpaceAnimated ); 11749 11750 $.effects.cleanUp( elem ); 11751 11752 if ( args.mode === "hide" ) { 11753 elem.hide(); 11754 } 11755 11756 done(); 11757 } 11758 11759 function done() { 11760 if ( typeof complete === "function" ) { 11761 complete.call( elem[ 0 ] ); 11762 } 11763 11764 if ( typeof next === "function" ) { 11765 next(); 11766 } 11767 } 11768 11769 // Override mode option on a per element basis, 11770 // as toggle can be either show or hide depending on element state 11771 args.mode = modes.shift(); 11772 11773 if ( $.uiBackCompat !== false && !defaultMode ) { 11774 if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { 11775 11776 // Call the core method to track "olddisplay" properly 11777 elem[ mode ](); 11778 done(); 11779 } else { 11780 effectMethod.call( elem[ 0 ], args, done ); 11781 } 11782 } else { 11783 if ( args.mode === "none" ) { 11784 11785 // Call the core method to track "olddisplay" properly 11786 elem[ mode ](); 11787 done(); 11788 } else { 11789 effectMethod.call( elem[ 0 ], args, cleanup ); 11790 } 11791 } 11792 } 11793 11794 // Run prefilter on all elements first to ensure that 11795 // any showing or hiding happens before placeholder creation, 11796 // which ensures that any layout changes are correctly captured. 11797 return queue === false ? 11798 this.each( prefilter ).each( run ) : 11799 this.queue( queueName, prefilter ).queue( queueName, run ); 11800 }, 11801 11802 show: ( function( orig ) { 11803 return function( option ) { 11804 if ( standardAnimationOption( option ) ) { 11805 return orig.apply( this, arguments ); 11806 } else { 11807 var args = _normalizeArguments.apply( this, arguments ); 11808 args.mode = "show"; 11809 return this.effect.call( this, args ); 11810 } 11811 }; 11812 } )( $.fn.show ), 11813 11814 hide: ( function( orig ) { 11815 return function( option ) { 11816 if ( standardAnimationOption( option ) ) { 11817 return orig.apply( this, arguments ); 11818 } else { 11819 var args = _normalizeArguments.apply( this, arguments ); 11820 args.mode = "hide"; 11821 return this.effect.call( this, args ); 11822 } 11823 }; 11824 } )( $.fn.hide ), 11825 11826 toggle: ( function( orig ) { 11827 return function( option ) { 11828 if ( standardAnimationOption( option ) || typeof option === "boolean" ) { 11829 return orig.apply( this, arguments ); 11830 } else { 11831 var args = _normalizeArguments.apply( this, arguments ); 11832 args.mode = "toggle"; 11833 return this.effect.call( this, args ); 11834 } 11835 }; 11836 } )( $.fn.toggle ), 11837 11838 cssUnit: function( key ) { 11839 var style = this.css( key ), 11840 val = []; 11841 11842 $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { 11843 if ( style.indexOf( unit ) > 0 ) { 11844 val = [ parseFloat( style ), unit ]; 11845 } 11846 } ); 11847 return val; 11848 }, 11849 11850 cssClip: function( clipObj ) { 11851 if ( clipObj ) { 11852 return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " + 11853 clipObj.bottom + "px " + clipObj.left + "px)" ); 11854 } 11855 return parseClip( this.css( "clip" ), this ); 11856 }, 11857 11858 transfer: function( options, done ) { 11859 var element = $( this ), 11860 target = $( options.to ), 11861 targetFixed = target.css( "position" ) === "fixed", 11862 body = $( "body" ), 11863 fixTop = targetFixed ? body.scrollTop() : 0, 11864 fixLeft = targetFixed ? body.scrollLeft() : 0, 11865 endPosition = target.offset(), 11866 animation = { 11867 top: endPosition.top - fixTop, 11868 left: endPosition.left - fixLeft, 11869 height: target.innerHeight(), 11870 width: target.innerWidth() 11871 }, 11872 startPosition = element.offset(), 11873 transfer = $( "<div class='ui-effects-transfer'></div>" ); 11874 11875 transfer 11876 .appendTo( "body" ) 11877 .addClass( options.className ) 11878 .css( { 11879 top: startPosition.top - fixTop, 11880 left: startPosition.left - fixLeft, 11881 height: element.innerHeight(), 11882 width: element.innerWidth(), 11883 position: targetFixed ? "fixed" : "absolute" 11884 } ) 11885 .animate( animation, options.duration, options.easing, function() { 11886 transfer.remove(); 11887 if ( typeof done === "function" ) { 11888 done(); 11889 } 11890 } ); 11891 } 11892} ); 11893 11894function parseClip( str, element ) { 11895 var outerWidth = element.outerWidth(), 11896 outerHeight = element.outerHeight(), 11897 clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/, 11898 values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ]; 11899 11900 return { 11901 top: parseFloat( values[ 1 ] ) || 0, 11902 right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ), 11903 bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ), 11904 left: parseFloat( values[ 4 ] ) || 0 11905 }; 11906} 11907 11908$.fx.step.clip = function( fx ) { 11909 if ( !fx.clipInit ) { 11910 fx.start = $( fx.elem ).cssClip(); 11911 if ( typeof fx.end === "string" ) { 11912 fx.end = parseClip( fx.end, fx.elem ); 11913 } 11914 fx.clipInit = true; 11915 } 11916 11917 $( fx.elem ).cssClip( { 11918 top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top, 11919 right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right, 11920 bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom, 11921 left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left 11922 } ); 11923}; 11924 11925} )(); 11926 11927/******************************************************************************/ 11928/*********************************** EASING ***********************************/ 11929/******************************************************************************/ 11930 11931( function() { 11932 11933// Based on easing equations from Robert Penner (http://
vendor: 24,998 bytes, lines 11933-12888
11933www.robertpenner.com/easing) 11934 11935var baseEasings = {}; 11936 11937$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { 11938 baseEasings[ name ] = function( p ) { 11939 return Math.pow( p, i + 2 ); 11940 }; 11941} ); 11942 11943$.extend( baseEasings, { 11944 Sine: function( p ) { 11945 return 1 - Math.cos( p * Math.PI / 2 ); 11946 }, 11947 Circ: function( p ) { 11948 return 1 - Math.sqrt( 1 - p * p ); 11949 }, 11950 Elastic: function( p ) { 11951 return p === 0 || p === 1 ? p : 11952 -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 ); 11953 }, 11954 Back: function( p ) { 11955 return p * p * ( 3 * p - 2 ); 11956 }, 11957 Bounce: function( p ) { 11958 var pow2, 11959 bounce = 4; 11960 11961 while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} 11962 return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); 11963 } 11964} ); 11965 11966$.each( baseEasings, function( name, easeIn ) { 11967 $.easing[ "easeIn" + name ] = easeIn; 11968 $.easing[ "easeOut" + name ] = function( p ) { 11969 return 1 - easeIn( 1 - p ); 11970 }; 11971 $.easing[ "easeInOut" + name ] = function( p ) { 11972 return p < 0.5 ? 11973 easeIn( p * 2 ) / 2 : 11974 1 - easeIn( p * -2 + 2 ) / 2; 11975 }; 11976} ); 11977 11978} )(); 11979 11980var effect = $.effects; 11981 11982 11983/*! 11984 * jQuery UI Effects Blind 1.13.1 11985 * http://jqueryui.com 11986 * 11987 * Copyright jQuery Foundation and other contributors 11988 * Released under the MIT license. 11989 * http://jquery.org/license 11990 */ 11991 11992//>>label: Blind Effect 11993//>>group: Effects 11994//>>description: Blinds the element. 11995//>>docs: http://api.jqueryui.com/blind-effect/ 11996//>>demos: http://jqueryui.com/effect/ 11997 11998 11999var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) { 12000 var map = { 12001 up: [ "bottom", "top" ], 12002 vertical: [ "bottom", "top" ], 12003 down: [ "top", "bottom" ], 12004 left: [ "right", "left" ], 12005 horizontal: [ "right", "left" ], 12006 right: [ "left", "right" ] 12007 }, 12008 element = $( this ), 12009 direction = options.direction || "up", 12010 start = element.cssClip(), 12011 animate = { clip: $.extend( {}, start ) }, 12012 placeholder = $.effects.createPlaceholder( element ); 12013 12014 animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ]; 12015 12016 if ( options.mode === "show" ) { 12017 element.cssClip( animate.clip ); 12018 if ( placeholder ) { 12019 placeholder.css( $.effects.clipToBox( animate ) ); 12020 } 12021 12022 animate.clip = start; 12023 } 12024 12025 if ( placeholder ) { 12026 placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing ); 12027 } 12028 12029 element.animate( animate, { 12030 queue: false, 12031 duration: options.duration, 12032 easing: options.easing, 12033 complete: done 12034 } ); 12035} ); 12036 12037 12038/*! 12039 * jQuery UI Effects Bounce 1.13.1 12040 * http://jqueryui.com 12041 * 12042 * Copyright jQuery Foundation and other contributors 12043 * Released under the MIT license. 12044 * http://jquery.org/license 12045 */ 12046 12047//>>label: Bounce Effect 12048//>>group: Effects 12049//>>description: Bounces an element horizontally or vertically n times. 12050//>>docs: http://api.jqueryui.com/bounce-effect/ 12051//>>demos: http://jqueryui.com/effect/ 12052 12053 12054var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) { 12055 var upAnim, downAnim, refValue, 12056 element = $( this ), 12057 12058 // Defaults: 12059 mode = options.mode, 12060 hide = mode === "hide", 12061 show = mode === "show", 12062 direction = options.direction || "up", 12063 distance = options.distance, 12064 times = options.times || 5, 12065 12066 // Number of internal animations 12067 anims = times * 2 + ( show || hide ? 1 : 0 ), 12068 speed = options.duration / anims, 12069 easing = options.easing, 12070 12071 // Utility: 12072 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 12073 motion = ( direction === "up" || direction === "left" ), 12074 i = 0, 12075 12076 queuelen = element.queue().length; 12077 12078 $.effects.createPlaceholder( element ); 12079 12080 refValue = element.css( ref ); 12081 12082 // Default distance for the BIGGEST bounce is the outer Distance / 3 12083 if ( !distance ) { 12084 distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; 12085 } 12086 12087 if ( show ) { 12088 downAnim = { opacity: 1 }; 12089 downAnim[ ref ] = refValue; 12090 12091 // If we are showing, force opacity 0 and set the initial position 12092 // then do the "first" animation 12093 element 12094 .css( "opacity", 0 ) 12095 .css( ref, motion ? -distance * 2 : distance * 2 ) 12096 .animate( downAnim, speed, easing ); 12097 } 12098 12099 // Start at the smallest distance if we are hiding 12100 if ( hide ) { 12101 distance = distance / Math.pow( 2, times - 1 ); 12102 } 12103 12104 downAnim = {}; 12105 downAnim[ ref ] = refValue; 12106 12107 // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here 12108 for ( ; i < times; i++ ) { 12109 upAnim = {}; 12110 upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; 12111 12112 element 12113 .animate( upAnim, speed, easing ) 12114 .animate( downAnim, speed, easing ); 12115 12116 distance = hide ? distance * 2 : distance / 2; 12117 } 12118 12119 // Last Bounce when Hiding 12120 if ( hide ) { 12121 upAnim = { opacity: 0 }; 12122 upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; 12123 12124 element.animate( upAnim, speed, easing ); 12125 } 12126 12127 element.queue( done ); 12128 12129 $.effects.unshift( element, queuelen, anims + 1 ); 12130} ); 12131 12132 12133/*! 12134 * jQuery UI Effects Clip 1.13.1 12135 * http://jqueryui.com 12136 * 12137 * Copyright jQuery Foundation and other contributors 12138 * Released under the MIT license. 12139 * http://jquery.org/license 12140 */ 12141 12142//>>label: Clip Effect 12143//>>group: Effects 12144//>>description: Clips the element on and off like an old TV. 12145//>>docs: http://api.jqueryui.com/clip-effect/ 12146//>>demos: http://jqueryui.com/effect/ 12147 12148 12149var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) { 12150 var start, 12151 animate = {}, 12152 element = $( this ), 12153 direction = options.direction || "vertical", 12154 both = direction === "both", 12155 horizontal = both || direction === "horizontal", 12156 vertical = both || direction === "vertical"; 12157 12158 start = element.cssClip(); 12159 animate.clip = { 12160 top: vertical ? ( start.bottom - start.top ) / 2 : start.top, 12161 right: horizontal ? ( start.right - start.left ) / 2 : start.right, 12162 bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom, 12163 left: horizontal ? ( start.right - start.left ) / 2 : start.left 12164 }; 12165 12166 $.effects.createPlaceholder( element ); 12167 12168 if ( options.mode === "show" ) { 12169 element.cssClip( animate.clip ); 12170 animate.clip = start; 12171 } 12172 12173 element.animate( animate, { 12174 queue: false, 12175 duration: options.duration, 12176 easing: options.easing, 12177 complete: done 12178 } ); 12179 12180} ); 12181 12182 12183/*! 12184 * jQuery UI Effects Drop 1.13.1 12185 * http://jqueryui.com 12186 * 12187 * Copyright jQuery Foundation and other contributors 12188 * Released under the MIT license. 12189 * http://jquery.org/license 12190 */ 12191 12192//>>label: Drop Effect 12193//>>group: Effects 12194//>>description: Moves an element in one direction and hides it at the same time. 12195//>>docs: http://api.jqueryui.com/drop-effect/ 12196//>>demos: http://jqueryui.com/effect/ 12197 12198 12199var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) { 12200 12201 var distance, 12202 element = $( this ), 12203 mode = options.mode, 12204 show = mode === "show", 12205 direction = options.direction || "left", 12206 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 12207 motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=", 12208 oppositeMotion = ( motion === "+=" ) ? "-=" : "+=", 12209 animation = { 12210 opacity: 0 12211 }; 12212 12213 $.effects.createPlaceholder( element ); 12214 12215 distance = options.distance || 12216 element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2; 12217 12218 animation[ ref ] = motion + distance; 12219 12220 if ( show ) { 12221 element.css( animation ); 12222 12223 animation[ ref ] = oppositeMotion + distance; 12224 animation.opacity = 1; 12225 } 12226 12227 // Animate 12228 element.animate( animation, { 12229 queue: false, 12230 duration: options.duration, 12231 easing: options.easing, 12232 complete: done 12233 } ); 12234} ); 12235 12236 12237/*! 12238 * jQuery UI Effects Explode 1.13.1 12239 * http://jqueryui.com 12240 * 12241 * Copyright jQuery Foundation and other contributors 12242 * Released under the MIT license. 12243 * http://jquery.org/license 12244 */ 12245 12246//>>label: Explode Effect 12247//>>group: Effects 12248/* eslint-disable max-len */ 12249//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. 12250/* eslint-enable max-len */ 12251//>>docs: http://api.jqueryui.com/explode-effect/ 12252//>>demos: http://jqueryui.com/effect/ 12253 12254 12255var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) { 12256 12257 var i, j, left, top, mx, my, 12258 rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3, 12259 cells = rows, 12260 element = $( this ), 12261 mode = options.mode, 12262 show = mode === "show", 12263 12264 // Show and then visibility:hidden the element before calculating offset 12265 offset = element.show().css( "visibility", "hidden" ).offset(), 12266 12267 // Width and height of a piece 12268 width = Math.ceil( element.outerWidth() / cells ), 12269 height = Math.ceil( element.outerHeight() / rows ), 12270 pieces = []; 12271 12272 // Children animate complete: 12273 function childComplete() { 12274 pieces.push( this ); 12275 if ( pieces.length === rows * cells ) { 12276 animComplete(); 12277 } 12278 } 12279 12280 // Clone the element for each row and cell. 12281 for ( i = 0; i < rows; i++ ) { // ===> 12282 top = offset.top + i * height; 12283 my = i - ( rows - 1 ) / 2; 12284 12285 for ( j = 0; j < cells; j++ ) { // ||| 12286 left = offset.left + j * width; 12287 mx = j - ( cells - 1 ) / 2; 12288 12289 // Create a clone of the now hidden main element that will be absolute positioned 12290 // within a wrapper div off the -left and -top equal to size of our pieces 12291 element 12292 .clone() 12293 .appendTo( "body" ) 12294 .wrap( "<div></div>" ) 12295 .css( { 12296 position: "absolute", 12297 visibility: "visible", 12298 left: -j * width, 12299 top: -i * height 12300 } ) 12301 12302 // Select the wrapper - make it overflow: hidden and absolute positioned based on 12303 // where the original was located +left and +top equal to the size of pieces 12304 .parent() 12305 .addClass( "ui-effects-explode" ) 12306 .css( { 12307 position: "absolute", 12308 overflow: "hidden", 12309 width: width, 12310 height: height, 12311 left: left + ( show ? mx * width : 0 ), 12312 top: top + ( show ? my * height : 0 ), 12313 opacity: show ? 0 : 1 12314 } ) 12315 .animate( { 12316 left: left + ( show ? 0 : mx * width ), 12317 top: top + ( show ? 0 : my * height ), 12318 opacity: show ? 1 : 0 12319 }, options.duration || 500, options.easing, childComplete ); 12320 } 12321 } 12322 12323 function animComplete() { 12324 element.css( { 12325 visibility: "visible" 12326 } ); 12327 $( pieces ).remove(); 12328 done(); 12329 } 12330} ); 12331 12332 12333/*! 12334 * jQuery UI Effects Fade 1.13.1 12335 * http://jqueryui.com 12336 * 12337 * Copyright jQuery Foundation and other contributors 12338 * Released under the MIT license. 12339 * http://jquery.org/license 12340 */ 12341 12342//>>label: Fade Effect 12343//>>group: Effects 12344//>>description: Fades the element. 12345//>>docs: http://api.jqueryui.com/fade-effect/ 12346//>>demos: http://jqueryui.com/effect/ 12347 12348 12349var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) { 12350 var show = options.mode === "show"; 12351 12352 $( this ) 12353 .css( "opacity", show ? 0 : 1 ) 12354 .animate( { 12355 opacity: show ? 1 : 0 12356 }, { 12357 queue: false, 12358 duration: options.duration, 12359 easing: options.easing, 12360 complete: done 12361 } ); 12362} ); 12363 12364 12365/*! 12366 * jQuery UI Effects Fold 1.13.1 12367 * http://jqueryui.com 12368 * 12369 * Copyright jQuery Foundation and other contributors 12370 * Released under the MIT license. 12371 * http://jquery.org/license 12372 */ 12373 12374//>>label: Fold Effect 12375//>>group: Effects 12376//>>description: Folds an element first horizontally and then vertically. 12377//>>docs: http://api.jqueryui.com/fold-effect/ 12378//>>demos: http://jqueryui.com/effect/ 12379 12380 12381var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) { 12382 12383 // Create element 12384 var element = $( this ), 12385 mode = options.mode, 12386 show = mode === "show", 12387 hide = mode === "hide", 12388 size = options.size || 15, 12389 percent = /([0-9]+)%/.exec( size ), 12390 horizFirst = !!options.horizFirst, 12391 ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ], 12392 duration = options.duration / 2, 12393 12394 placeholder = $.effects.createPlaceholder( element ), 12395 12396 start = element.cssClip(), 12397 animation1 = { clip: $.extend( {}, start ) }, 12398 animation2 = { clip: $.extend( {}, start ) }, 12399 12400 distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ], 12401 12402 queuelen = element.queue().length; 12403 12404 if ( percent ) { 12405 size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; 12406 } 12407 animation1.clip[ ref[ 0 ] ] = size; 12408 animation2.clip[ ref[ 0 ] ] = size; 12409 animation2.clip[ ref[ 1 ] ] = 0; 12410 12411 if ( show ) { 12412 element.cssClip( animation2.clip ); 12413 if ( placeholder ) { 12414 placeholder.css( $.effects.clipToBox( animation2 ) ); 12415 } 12416 12417 animation2.clip = start; 12418 } 12419 12420 // Animate 12421 element 12422 .queue( function( next ) { 12423 if ( placeholder ) { 12424 placeholder 12425 .animate( $.effects.clipToBox( animation1 ), duration, options.easing ) 12426 .animate( $.effects.clipToBox( animation2 ), duration, options.easing ); 12427 } 12428 12429 next(); 12430 } ) 12431 .animate( animation1, duration, options.easing ) 12432 .animate( animation2, duration, options.easing ) 12433 .queue( done ); 12434 12435 $.effects.unshift( element, queuelen, 4 ); 12436} ); 12437 12438 12439/*! 12440 * jQuery UI Effects Highlight 1.13.1 12441 * http://jqueryui.com 12442 * 12443 * Copyright jQuery Foundation and other contributors 12444 * Released under the MIT license. 12445 * http://jquery.org/license 12446 */ 12447 12448//>>label: Highlight Effect 12449//>>group: Effects 12450//>>description: Highlights the background of an element in a defined color for a custom duration. 12451//>>docs: http://api.jqueryui.com/highlight-effect/ 12452//>>demos: http://jqueryui.com/effect/ 12453 12454 12455var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) { 12456 var element = $( this ), 12457 animation = { 12458 backgroundColor: element.css( "backgroundColor" ) 12459 }; 12460 12461 if ( options.mode === "hide" ) { 12462 animation.opacity = 0; 12463 } 12464 12465 $.effects.saveStyle( element ); 12466 12467 element 12468 .css( { 12469 backgroundImage: "none", 12470 backgroundColor: options.color || "#ffff99" 12471 } ) 12472 .animate( animation, { 12473 queue: false, 12474 duration: options.duration, 12475 easing: options.easing, 12476 complete: done 12477 } ); 12478} ); 12479 12480 12481/*! 12482 * jQuery UI Effects Size 1.13.1 12483 * http://jqueryui.com 12484 * 12485 * Copyright jQuery Foundation and other contributors 12486 * Released under the MIT license. 12487 * http://jquery.org/license 12488 */ 12489 12490//>>label: Size Effect 12491//>>group: Effects 12492//>>description: Resize an element to a specified width and height. 12493//>>docs: http://api.jqueryui.com/size-effect/ 12494//>>demos: http://jqueryui.com/effect/ 12495 12496 12497var effectsEffectSize = $.effects.define( "size", function( options, done ) { 12498 12499 // Create element 12500 var baseline, factor, temp, 12501 element = $( this ), 12502 12503 // Copy for children 12504 cProps = [ "fontSize" ], 12505 vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], 12506 hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], 12507 12508 // Set options 12509 mode = options.mode, 12510 restore = mode !== "effect", 12511 scale = options.scale || "both", 12512 origin = options.origin || [ "middle", "center" ], 12513 position = element.css( "position" ), 12514 pos = element.position(), 12515 original = $.effects.scaledDimensions( element ), 12516 from = options.from || original, 12517 to = options.to || $.effects.scaledDimensions( element, 0 ); 12518 12519 $.effects.createPlaceholder( element ); 12520 12521 if ( mode === "show" ) { 12522 temp = from; 12523 from = to; 12524 to = temp; 12525 } 12526 12527 // Set scaling factor 12528 factor = { 12529 from: { 12530 y: from.height / original.height, 12531 x: from.width / original.width 12532 }, 12533 to: { 12534 y: to.height / original.height, 12535 x: to.width / original.width 12536 } 12537 }; 12538 12539 // Scale the css box 12540 if ( scale === "box" || scale === "both" ) { 12541 12542 // Vertical props scaling 12543 if ( factor.from.y !== factor.to.y ) { 12544 from = $.effects.setTransition( element, vProps, factor.from.y, from ); 12545 to = $.effects.setTransition( element, vProps, factor.to.y, to ); 12546 } 12547 12548 // Horizontal props scaling 12549 if ( factor.from.x !== factor.to.x ) { 12550 from = $.effects.setTransition( element, hProps, factor.from.x, from ); 12551 to = $.effects.setTransition( element, hProps, factor.to.x, to ); 12552 } 12553 } 12554 12555 // Scale the content 12556 if ( scale === "content" || scale === "both" ) { 12557 12558 // Vertical props scaling 12559 if ( factor.from.y !== factor.to.y ) { 12560 from = $.effects.setTransition( element, cProps, factor.from.y, from ); 12561 to = $.effects.setTransition( element, cProps, factor.to.y, to ); 12562 } 12563 } 12564 12565 // Adjust the position properties based on the provided origin points 12566 if ( origin ) { 12567 baseline = $.effects.getBaseline( origin, original ); 12568 from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top; 12569 from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left; 12570 to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top; 12571 to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left; 12572 } 12573 delete from.outerHeight; 12574 delete from.outerWidth; 12575 element.css( from ); 12576 12577 // Animate the children if desired 12578 if ( scale === "content" || scale === "both" ) { 12579 12580 vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps ); 12581 hProps = hProps.concat( [ "marginLeft", "marginRight" ] ); 12582 12583 // Only animate children with width attributes specified 12584 // TODO: is this right? should we include anything with css width specified as well 12585 element.find( "*[width]" ).each( function() { 12586 var child = $( this ), 12587 childOriginal = $.effects.scaledDimensions( child ), 12588 childFrom = { 12589 height: childOriginal.height * factor.from.y, 12590 width: childOriginal.width * factor.from.x, 12591 outerHeight: childOriginal.outerHeight * factor.from.y, 12592 outerWidth: childOriginal.outerWidth * factor.from.x 12593 }, 12594 childTo = { 12595 height: childOriginal.height * factor.to.y, 12596 width: childOriginal.width * factor.to.x, 12597 outerHeight: childOriginal.height * factor.to.y, 12598 outerWidth: childOriginal.width * factor.to.x 12599 }; 12600 12601 // Vertical props scaling 12602 if ( factor.from.y !== factor.to.y ) { 12603 childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom ); 12604 childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo ); 12605 } 12606 12607 // Horizontal props scaling 12608 if ( factor.from.x !== factor.to.x ) { 12609 childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom ); 12610 childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo ); 12611 } 12612 12613 if ( restore ) { 12614 $.effects.saveStyle( child ); 12615 } 12616 12617 // Animate children 12618 child.css( childFrom ); 12619 child.animate( childTo, options.duration, options.easing, function() { 12620 12621 // Restore children 12622 if ( restore ) { 12623 $.effects.restoreStyle( child ); 12624 } 12625 } ); 12626 } ); 12627 } 12628 12629 // Animate 12630 element.animate( to, { 12631 queue: false, 12632 duration: options.duration, 12633 easing: options.easing, 12634 complete: function() { 12635 12636 var offset = element.offset(); 12637 12638 if ( to.opacity === 0 ) { 12639 element.css( "opacity", from.opacity ); 12640 } 12641 12642 if ( !restore ) { 12643 element 12644 .css( "position", position === "static" ? "relative" : position ) 12645 .offset( offset ); 12646 12647 // Need to save style here so that automatic style restoration 12648 // doesn't restore to the original styles from before the animation. 12649 $.effects.saveStyle( element ); 12650 } 12651 12652 done(); 12653 } 12654 } ); 12655 12656} ); 12657 12658 12659/*! 12660 * jQuery UI Effects Scale 1.13.1 12661 * http://jqueryui.com 12662 * 12663 * Copyright jQuery Foundation and other contributors 12664 * Released under the MIT license. 12665 * http://jquery.org/license 12666 */ 12667 12668//>>label: Scale Effect 12669//>>group: Effects 12670//>>description: Grows or shrinks an element and its content. 12671//>>docs: http://api.jqueryui.com/scale-effect/ 12672//>>demos: http://jqueryui.com/effect/ 12673 12674 12675var effectsEffectScale = $.effects.define( "scale", function( options, done ) { 12676 12677 // Create element 12678 var el = $( this ), 12679 mode = options.mode, 12680 percent = parseInt( options.percent, 10 ) || 12681 ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ), 12682 12683 newOptions = $.extend( true, { 12684 from: $.effects.scaledDimensions( el ), 12685 to: $.effects.scaledDimensions( el, percent, options.direction || "both" ), 12686 origin: options.origin || [ "middle", "center" ] 12687 }, options ); 12688 12689 // Fade option to support puff 12690 if ( options.fade ) { 12691 newOptions.from.opacity = 1; 12692 newOptions.to.opacity = 0; 12693 } 12694 12695 $.effects.effect.size.call( this, newOptions, done ); 12696} ); 12697 12698 12699/*! 12700 * jQuery UI Effects Puff 1.13.1 12701 * http://jqueryui.com 12702 * 12703 * Copyright jQuery Foundation and other contributors 12704 * Released under the MIT license. 12705 * http://jquery.org/license 12706 */ 12707 12708//>>label: Puff Effect 12709//>>group: Effects 12710//>>description: Creates a puff effect by scaling the element up and hiding it at the same time. 12711//>>docs: http://api.jqueryui.com/puff-effect/ 12712//>>demos: http://jqueryui.com/effect/ 12713 12714 12715var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) { 12716 var newOptions = $.extend( true, {}, options, { 12717 fade: true, 12718 percent: parseInt( options.percent, 10 ) || 150 12719 } ); 12720 12721 $.effects.effect.scale.call( this, newOptions, done ); 12722} ); 12723 12724 12725/*! 12726 * jQuery UI Effects Pulsate 1.13.1 12727 * http://jqueryui.com 12728 * 12729 * Copyright jQuery Foundation and other contributors 12730 * Released under the MIT license. 12731 * http://jquery.org/license 12732 */ 12733 12734//>>label: Pulsate Effect 12735//>>group: Effects 12736//>>description: Pulsates an element n times by changing the opacity to zero and back. 12737//>>docs: http://api.jqueryui.com/pulsate-effect/ 12738//>>demos: http://jqueryui.com/effect/ 12739 12740 12741var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) { 12742 var element = $( this ), 12743 mode = options.mode, 12744 show = mode === "show", 12745 hide = mode === "hide", 12746 showhide = show || hide, 12747 12748 // Showing or hiding leaves off the "last" animation 12749 anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), 12750 duration = options.duration / anims, 12751 animateTo = 0, 12752 i = 1, 12753 queuelen = element.queue().length; 12754 12755 if ( show || !element.is( ":visible" ) ) { 12756 element.css( "opacity", 0 ).show(); 12757 animateTo = 1; 12758 } 12759 12760 // Anims - 1 opacity "toggles" 12761 for ( ; i < anims; i++ ) { 12762 element.animate( { opacity: animateTo }, duration, options.easing ); 12763 animateTo = 1 - animateTo; 12764 } 12765 12766 element.animate( { opacity: animateTo }, duration, options.easing ); 12767 12768 element.queue( done ); 12769 12770 $.effects.unshift( element, queuelen, anims + 1 ); 12771} ); 12772 12773 12774/*! 12775 * jQuery UI Effects Shake 1.13.1 12776 * http://jqueryui.com 12777 * 12778 * Copyright jQuery Foundation and other contributors 12779 * Released under the MIT license. 12780 * http://jquery.org/license 12781 */ 12782 12783//>>label: Shake Effect 12784//>>group: Effects 12785//>>description: Shakes an element horizontally or vertically n times. 12786//>>docs: http://api.jqueryui.com/shake-effect/ 12787//>>demos: http://jqueryui.com/effect/ 12788 12789 12790var effectsEffectShake = $.effects.define( "shake", function( options, done ) { 12791 12792 var i = 1, 12793 element = $( this ), 12794 direction = options.direction || "left", 12795 distance = options.distance || 20, 12796 times = options.times || 3, 12797 anims = times * 2 + 1, 12798 speed = Math.round( options.duration / anims ), 12799 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 12800 positiveMotion = ( direction === "up" || direction === "left" ), 12801 animation = {}, 12802 animation1 = {}, 12803 animation2 = {}, 12804 12805 queuelen = element.queue().length; 12806 12807 $.effects.createPlaceholder( element ); 12808 12809 // Animation 12810 animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; 12811 animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; 12812 animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; 12813 12814 // Animate 12815 element.animate( animation, speed, options.easing ); 12816 12817 // Shakes 12818 for ( ; i < times; i++ ) { 12819 element 12820 .animate( animation1, speed, options.easing ) 12821 .animate( animation2, speed, options.easing ); 12822 } 12823 12824 element 12825 .animate( animation1, speed, options.easing ) 12826 .animate( animation, speed / 2, options.easing ) 12827 .queue( done ); 12828 12829 $.effects.unshift( element, queuelen, anims + 1 ); 12830} ); 12831 12832 12833/*! 12834 * jQuery UI Effects Slide 1.13.1 12835 * http://jqueryui.com 12836 * 12837 * Copyright jQuery Foundation and other contributors 12838 * Released under the MIT license. 12839 * http://jquery.org/license 12840 */ 12841 12842//>>label: Slide Effect 12843//>>group: Effects 12844//>>description: Slides an element in and out of the viewport. 12845//>>docs: http://api.jqueryui.com/slide-effect/ 12846//>>demos: http://jqueryui.com/effect/ 12847 12848 12849var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) { 12850 var startClip, startRef, 12851 element = $( this ), 12852 map = { 12853 up: [ "bottom", "top" ], 12854 down: [ "top", "bottom" ], 12855 left: [ "right", "left" ], 12856 right: [ "left", "right" ] 12857 }, 12858 mode = options.mode, 12859 direction = options.direction || "left", 12860 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 12861 positiveMotion = ( direction === "up" || direction === "left" ), 12862 distance = options.distance || 12863 element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ), 12864 animation = {}; 12865 12866 $.effects.createPlaceholder( element ); 12867 12868 startClip = element.cssClip(); 12869 startRef = element.position()[ ref ]; 12870 12871 // Define hide animation 12872 animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef; 12873 animation.clip = element.cssClip(); 12874 animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ]; 12875 12876 // Reverse the animation if we're showing 12877 if ( mode === "show" ) { 12878 element.cssClip( animation.clip ); 12879 element.css( ref, animation[ ref ] ); 12880 animation.clip = startClip; 12881 animation[ ref ] = startRef; 12882 } 12883 12884 // Actually animate 12885 element.animate( animation, { 12886 queue: false, 12887 duration: options.duration, 12888 easing: options.easing,
vendor: 10,271 bytes, lines 12889-13309
12889 complete: done 12890 } ); 12891} ); 12892 12893 12894/*! 12895 * jQuery UI Effects Transfer 1.13.1 12896 * http://jqueryui.com 12897 * 12898 * Copyright jQuery Foundation and other contributors 12899 * Released under the MIT license. 12900 * http://jquery.org/license 12901 */ 12902 12903//>>label: Transfer Effect 12904//>>group: Effects 12905//>>description: Displays a transfer effect from one element to another. 12906//>>docs: http://api.jqueryui.com/transfer-effect/ 12907//>>demos: http://jqueryui.com/effect/ 12908 12909 12910var effect; 12911if ( $.uiBackCompat !== false ) { 12912 effect = $.effects.define( "transfer", function( options, done ) { 12913 $( this ).transfer( options, done ); 12914 } ); 12915} 12916var effectsEffectTransfer = effect; 12917 12918 12919/*! 12920 * jQuery UI Focusable 1.13.1 12921 * http://jqueryui.com 12922 * 12923 * Copyright jQuery Foundation and other contributors 12924 * Released under the MIT license. 12925 * http://jquery.org/license 12926 */ 12927 12928//>>label: :focusable Selector 12929//>>group: Core 12930//>>description: Selects elements which can be focused. 12931//>>docs: http://api.jqueryui.com/focusable-selector/ 12932 12933 12934// Selectors 12935$.ui.focusable = function( element, hasTabindex ) { 12936 var map, mapName, img, focusableIfVisible, fieldset, 12937 nodeName = element.nodeName.toLowerCase(); 12938 12939 if ( "area" === nodeName ) { 12940 map = element.parentNode; 12941 mapName = map.name; 12942 if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { 12943 return false; 12944 } 12945 img = $( "img[usemap='#" + mapName + "']" ); 12946 return img.length > 0 && img.is( ":visible" ); 12947 } 12948 12949 if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) { 12950 focusableIfVisible = !element.disabled; 12951 12952 if ( focusableIfVisible ) { 12953 12954 // Form controls within a disabled fieldset are disabled. 12955 // However, controls within the fieldset's legend do not get disabled. 12956 // Since controls generally aren't placed inside legends, we skip 12957 // this portion of the check. 12958 fieldset = $( element ).closest( "fieldset" )[ 0 ]; 12959 if ( fieldset ) { 12960 focusableIfVisible = !fieldset.disabled; 12961 } 12962 } 12963 } else if ( "a" === nodeName ) { 12964 focusableIfVisible = element.href || hasTabindex; 12965 } else { 12966 focusableIfVisible = hasTabindex; 12967 } 12968 12969 return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) ); 12970}; 12971 12972// Support: IE 8 only 12973// IE 8 doesn't resolve inherit to visible/hidden for computed values 12974function visible( element ) { 12975 var visibility = element.css( "visibility" ); 12976 while ( visibility === "inherit" ) { 12977 element = element.parent(); 12978 visibility = element.css( "visibility" ); 12979 } 12980 return visibility === "visible"; 12981} 12982 12983$.extend( $.expr.pseudos, { 12984 focusable: function( element ) { 12985 return $.ui.focusable( element, $.attr( element, "tabindex" ) != null ); 12986 } 12987} ); 12988 12989var focusable = $.ui.focusable; 12990 12991 12992 12993// Support: IE8 Only 12994// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop 12995// with a string, so we need to find the proper form. 12996var form = $.fn._form = function() { 12997 return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); 12998}; 12999 13000 13001/*! 13002 * jQuery UI Form Reset Mixin 1.13.1 13003 * http://jqueryui.com 13004 * 13005 * Copyright jQuery Foundation and other contributors 13006 * Released under the MIT license. 13007 * http://jquery.org/license 13008 */ 13009 13010//>>label: Form Reset Mixin 13011//>>group: Core 13012//>>description: Refresh input widgets when their form is reset 13013//>>docs: http://api.jqueryui.com/form-reset-mixin/ 13014 13015 13016var formResetMixin = $.ui.formResetMixin = { 13017 _formResetHandler: function() { 13018 var form = $( this ); 13019 13020 // Wait for the form reset to actually happen before refreshing 13021 setTimeout( function() { 13022 var instances = form.data( "ui-form-reset-instances" ); 13023 $.each( instances, function() { 13024 this.refresh(); 13025 } ); 13026 } ); 13027 }, 13028 13029 _bindFormResetHandler: function() { 13030 this.form = this.element._form(); 13031 if ( !this.form.length ) { 13032 return; 13033 } 13034 13035 var instances = this.form.data( "ui-form-reset-instances" ) || []; 13036 if ( !instances.length ) { 13037 13038 // We don't use _on() here because we use a single event handler per form 13039 this.form.on( "reset.ui-form-reset", this._formResetHandler ); 13040 } 13041 instances.push( this ); 13042 this.form.data( "ui-form-reset-instances", instances ); 13043 }, 13044 13045 _unbindFormResetHandler: function() { 13046 if ( !this.form.length ) { 13047 return; 13048 } 13049 13050 var instances = this.form.data( "ui-form-reset-instances" ); 13051 instances.splice( $.inArray( this, instances ), 1 ); 13052 if ( instances.length ) { 13053 this.form.data( "ui-form-reset-instances", instances ); 13054 } else { 13055 this.form 13056 .removeData( "ui-form-reset-instances" ) 13057 .off( "reset.ui-form-reset" ); 13058 } 13059 } 13060}; 13061 13062 13063/*! 13064 * jQuery UI Support for jQuery core 1.8.x and newer 1.13.1 13065 * http://jqueryui.com 13066 * 13067 * Copyright jQuery Foundation and other contributors 13068 * Released under the MIT license. 13069 * http://jquery.org/license 13070 * 13071 */ 13072 13073//>>label: jQuery 1.8+ Support 13074//>>group: Core 13075//>>description: Support version 1.8.x and newer of jQuery core 13076 13077 13078// Support: jQuery 1.9.x or older 13079// $.expr[ ":" ] is deprecated. 13080if ( !$.expr.pseudos ) { 13081 $.expr.pseudos = $.expr[ ":" ]; 13082} 13083 13084// Support: jQuery 1.11.x or older 13085// $.unique has been renamed to $.uniqueSort 13086if ( !$.uniqueSort ) { 13087 $.uniqueSort = $.unique; 13088} 13089 13090// Support: jQuery 2.2.x or older. 13091// This method has been defined in jQuery 3.0.0. 13092// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js 13093if ( !$.escapeSelector ) { 13094 13095 // CSS string/identifier serialization 13096 // https://drafts.csswg.org/cssom/#common-serializing-idioms 13097 var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 13098 13099 var fcssescape = function( ch, asCodePoint ) { 13100 if ( asCodePoint ) { 13101 13102 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 13103 if ( ch === "\0" ) { 13104 return "\uFFFD"; 13105 } 13106 13107 // Control characters and (dependent upon position) numbers get escaped as code points 13108 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 13109 } 13110 13111 // Other potentially-special ASCII characters get backslash-escaped 13112 return "\\" + ch; 13113 }; 13114 13115 $.escapeSelector = function( sel ) { 13116 return ( sel + "" ).replace( rcssescape, fcssescape ); 13117 }; 13118} 13119 13120// Support: jQuery 3.4.x or older 13121// These methods have been defined in jQuery 3.5.0. 13122if ( !$.fn.even || !$.fn.odd ) { 13123 $.fn.extend( { 13124 even: function() { 13125 return this.filter( function( i ) { 13126 return i % 2 === 0; 13127 } ); 13128 }, 13129 odd: function() { 13130 return this.filter( function( i ) { 13131 return i % 2 === 1; 13132 } ); 13133 } 13134 } ); 13135} 13136 13137; 13138/*! 13139 * jQuery UI Keycode 1.13.1 13140 * http://jqueryui.com 13141 * 13142 * Copyright jQuery Foundation and other contributors 13143 * Released under the MIT license. 13144 * http://jquery.org/license 13145 */ 13146 13147//>>label: Keycode 13148//>>group: Core 13149//>>description: Provide keycodes as keynames 13150//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ 13151 13152 13153var keycode = $.ui.keyCode = { 13154 BACKSPACE: 8, 13155 COMMA: 188, 13156 DELETE: 46, 13157 DOWN: 40, 13158 END: 35, 13159 ENTER: 13, 13160 ESCAPE: 27, 13161 HOME: 36, 13162 LEFT: 37, 13163 PAGE_DOWN: 34, 13164 PAGE_UP: 33, 13165 PERIOD: 190, 13166 RIGHT: 39, 13167 SPACE: 32, 13168 TAB: 9, 13169 UP: 38 13170}; 13171 13172 13173/*! 13174 * jQuery UI Labels 1.13.1 13175 * http://jqueryui.com 13176 * 13177 * Copyright jQuery Foundation and other contributors 13178 * Released under the MIT license. 13179 * http://jquery.org/license 13180 */ 13181 13182//>>label: labels 13183//>>group: Core 13184//>>description: Find all the labels associated with a given input 13185//>>docs: http://api.jqueryui.com/labels/ 13186 13187 13188var labels = $.fn.labels = function() { 13189 var ancestor, selector, id, labels, ancestors; 13190 13191 if ( !this.length ) { 13192 return this.pushStack( [] ); 13193 } 13194 13195 // Check control.labels first 13196 if ( this[ 0 ].labels && this[ 0 ].labels.length ) { 13197 return this.pushStack( this[ 0 ].labels ); 13198 } 13199 13200 // Support: IE <= 11, FF <= 37, Android <= 2.3 only 13201 // Above browsers do not support control.labels. Everything below is to support them 13202 // as well as document fragments. control.labels does not work on document fragments 13203 labels = this.eq( 0 ).parents( "label" ); 13204 13205 // Look for the label based on the id 13206 id = this.attr( "id" ); 13207 if ( id ) { 13208 13209 // We don't search against the document in case the element 13210 // is disconnected from the DOM 13211 ancestor = this.eq( 0 ).parents().last(); 13212 13213 // Get a full set of top level ancestors 13214 ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); 13215 13216 // Create a selector for the label based on the id 13217 selector = "label[for='" + $.escapeSelector( id ) + "']"; 13218 13219 labels = labels.add( ancestors.find( selector ).addBack( selector ) ); 13220 13221 } 13222 13223 // Return whatever we have found for labels 13224 return this.pushStack( labels ); 13225}; 13226 13227 13228/*! 13229 * jQuery UI Position 1.13.1 13230 * http://jqueryui.com 13231 * 13232 * Copyright jQuery Foundation and other contributors 13233 * Released under the MIT license. 13234 * http://jquery.org/license 13235 * 13236 * http://api.jqueryui.com/position/ 13237 */ 13238 13239//>>label: Position 13240//>>group: Core 13241//>>description: Positions elements relative to other elements. 13242//>>docs: http://api.jqueryui.com/position/ 13243//>>demos: http://jqueryui.com/position/ 13244 13245 13246( function() { 13247var cachedScrollbarWidth, 13248 max = Math.max, 13249 abs = Math.abs, 13250 rhorizontal = /left|center|right/, 13251 rvertical = /top|center|bottom/, 13252 roffset = /[\+\-]\d+(\.[\d]+)?%?/, 13253 rposition = /^\w+/, 13254 rpercent = /%$/, 13255 _position = $.fn.position; 13256 13257function getOffsets( offsets, width, height ) { 13258 return [ 13259 parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), 13260 parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) 13261 ]; 13262} 13263 13264function parseCss( element, property ) { 13265 return parseInt( $.css( element, property ), 10 ) || 0; 13266} 13267 13268function isWindow( obj ) { 13269 return obj != null && obj === obj.window; 13270} 13271 13272function getDimensions( elem ) { 13273 var raw = elem[ 0 ]; 13274 if ( raw.nodeType === 9 ) { 13275 return { 13276 width: elem.width(), 13277 height: elem.height(), 13278 offset: { top: 0, left: 0 } 13279 }; 13280 } 13281 if ( isWindow( raw ) ) { 13282 return { 13283 width: elem.width(), 13284 height: elem.height(), 13285 offset: { top: elem.scrollTop(), left: elem.scrollLeft() } 13286 }; 13287 } 13288 if ( raw.preventDefault ) { 13289 return { 13290 width: 0, 13291 height: 0, 13292 offset: { top: raw.pageY, left: raw.pageX } 13293 }; 13294 } 13295 return { 13296 width: elem.outerWidth(), 13297 height: elem.outerHeight(), 13298 offset: elem.offset() 13299 }; 13300} 13301 13302$.position = { 13303 scrollbarWidth: function() { 13304 if ( cachedScrollbarWidth !== undefined ) { 13305 return cachedScrollbarWidth; 13306 } 13307 var w1, w2, 13308 div = $( "<div style=" + 13309 "'display:block;position:absolute;
vendor: 4,494 bytes, lines 13309-13453
13309width:200px;height:200px;overflow:hidden;'>" + 13310 "<div style='height:300px;width:auto;'></div></div>" ), 13311 innerDiv = div.children()[ 0 ]; 13312 13313 $( "body" ).append( div ); 13314 w1 = innerDiv.offsetWidth; 13315 div.css( "overflow", "scroll" ); 13316 13317 w2 = innerDiv.offsetWidth; 13318 13319 if ( w1 === w2 ) { 13320 w2 = div[ 0 ].clientWidth; 13321 } 13322 13323 div.remove(); 13324 13325 return ( cachedScrollbarWidth = w1 - w2 ); 13326 }, 13327 getScrollInfo: function( within ) { 13328 var overflowX = within.isWindow || within.isDocument ? "" : 13329 within.element.css( "overflow-x" ), 13330 overflowY = within.isWindow || within.isDocument ? "" : 13331 within.element.css( "overflow-y" ), 13332 hasOverflowX = overflowX === "scroll" || 13333 ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), 13334 hasOverflowY = overflowY === "scroll" || 13335 ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); 13336 return { 13337 width: hasOverflowY ? $.position.scrollbarWidth() : 0, 13338 height: hasOverflowX ? $.position.scrollbarWidth() : 0 13339 }; 13340 }, 13341 getWithinInfo: function( element ) { 13342 var withinElement = $( element || window ), 13343 isElemWindow = isWindow( withinElement[ 0 ] ), 13344 isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, 13345 hasOffset = !isElemWindow && !isDocument; 13346 return { 13347 element: withinElement, 13348 isWindow: isElemWindow, 13349 isDocument: isDocument, 13350 offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, 13351 scrollLeft: withinElement.scrollLeft(), 13352 scrollTop: withinElement.scrollTop(), 13353 width: withinElement.outerWidth(), 13354 height: withinElement.outerHeight() 13355 }; 13356 } 13357}; 13358 13359$.fn.position = function( options ) { 13360 if ( !options || !options.of ) { 13361 return _position.apply( this, arguments ); 13362 } 13363 13364 // Make a copy, we don't want to modify arguments 13365 options = $.extend( {}, options ); 13366 13367 var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, 13368 13369 // Make sure string options are treated as CSS selectors 13370 target = typeof options.of === "string" ? 13371 $( document ).find( options.of ) : 13372 $( options.of ), 13373 13374 within = $.position.getWithinInfo( options.within ), 13375 scrollInfo = $.position.getScrollInfo( within ), 13376 collision = ( options.collision || "flip" ).split( " " ), 13377 offsets = {}; 13378 13379 dimensions = getDimensions( target ); 13380 if ( target[ 0 ].preventDefault ) { 13381 13382 // Force left top to allow flipping 13383 options.at = "left top"; 13384 } 13385 targetWidth = dimensions.width; 13386 targetHeight = dimensions.height; 13387 targetOffset = dimensions.offset; 13388 13389 // Clone to reuse original targetOffset later 13390 basePosition = $.extend( {}, targetOffset ); 13391 13392 // Force my and at to have valid horizontal and vertical positions 13393 // if a value is missing or invalid, it will be converted to center 13394 $.each( [ "my", "at" ], function() { 13395 var pos = ( options[ this ] || "" ).split( " " ), 13396 horizontalOffset, 13397 verticalOffset; 13398 13399 if ( pos.length === 1 ) { 13400 pos = rhorizontal.test( pos[ 0 ] ) ? 13401 pos.concat( [ "center" ] ) : 13402 rvertical.test( pos[ 0 ] ) ? 13403 [ "center" ].concat( pos ) : 13404 [ "center", "center" ]; 13405 } 13406 pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; 13407 pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; 13408 13409 // Calculate offsets 13410 horizontalOffset = roffset.exec( pos[ 0 ] ); 13411 verticalOffset = roffset.exec( pos[ 1 ] ); 13412 offsets[ this ] = [ 13413 horizontalOffset ? horizontalOffset[ 0 ] : 0, 13414 verticalOffset ? verticalOffset[ 0 ] : 0 13415 ]; 13416 13417 // Reduce to just the positions without the offsets 13418 options[ this ] = [ 13419 rposition.exec( pos[ 0 ] )[ 0 ], 13420 rposition.exec( pos[ 1 ] )[ 0 ] 13421 ]; 13422 } ); 13423 13424 // Normalize collision option 13425 if ( collision.length === 1 ) { 13426 collision[ 1 ] = collision[ 0 ]; 13427 } 13428 13429 if ( options.at[ 0 ] === "right" ) { 13430 basePosition.left += targetWidth; 13431 } else if ( options.at[ 0 ] === "center" ) { 13432 basePosition.left += targetWidth / 2; 13433 } 13434 13435 if ( options.at[ 1 ] === "bottom" ) { 13436 basePosition.top += targetHeight; 13437 } else if ( options.at[ 1 ] === "center" ) { 13438 basePosition.top += targetHeight / 2; 13439 } 13440 13441 atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); 13442 basePosition.left += atOffset[ 0 ]; 13443 basePosition.top += atOffset[ 1 ]; 13444 13445 return this.each( function() { 13446 var collisionPosition, using, 13447 elem = $( this ), 13448 elemWidth = elem.outerWidth(), 13449 elemHeight = elem.outerHeight(), 13450 marginLeft = parseCss( this, "marginLeft" ), 13451 marginTop = parseCss( this, "marginTop" ), 13452 collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + 13453 scrollInfo.width,
vendor: 9,275 bytes, lines 13454-13747
13454 collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + 13455 scrollInfo.height, 13456 position = $.extend( {}, basePosition ), 13457 myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); 13458 13459 if ( options.my[ 0 ] === "right" ) { 13460 position.left -= elemWidth; 13461 } else if ( options.my[ 0 ] === "center" ) { 13462 position.left -= elemWidth / 2; 13463 } 13464 13465 if ( options.my[ 1 ] === "bottom" ) { 13466 position.top -= elemHeight; 13467 } else if ( options.my[ 1 ] === "center" ) { 13468 position.top -= elemHeight / 2; 13469 } 13470 13471 position.left += myOffset[ 0 ]; 13472 position.top += myOffset[ 1 ]; 13473 13474 collisionPosition = { 13475 marginLeft: marginLeft, 13476 marginTop: marginTop 13477 }; 13478 13479 $.each( [ "left", "top" ], function( i, dir ) { 13480 if ( $.ui.position[ collision[ i ] ] ) { 13481 $.ui.position[ collision[ i ] ][ dir ]( position, { 13482 targetWidth: targetWidth, 13483 targetHeight: targetHeight, 13484 elemWidth: elemWidth, 13485 elemHeight: elemHeight, 13486 collisionPosition: collisionPosition, 13487 collisionWidth: collisionWidth, 13488 collisionHeight: collisionHeight, 13489 offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], 13490 my: options.my, 13491 at: options.at, 13492 within: within, 13493 elem: elem 13494 } ); 13495 } 13496 } ); 13497 13498 if ( options.using ) { 13499 13500 // Adds feedback as second argument to using callback, if present 13501 using = function( props ) { 13502 var left = targetOffset.left - position.left, 13503 right = left + targetWidth - elemWidth, 13504 top = targetOffset.top - position.top, 13505 bottom = top + targetHeight - elemHeight, 13506 feedback = { 13507 target: { 13508 element: target, 13509 left: targetOffset.left, 13510 top: targetOffset.top, 13511 width: targetWidth, 13512 height: targetHeight 13513 }, 13514 element: { 13515 element: elem, 13516 left: position.left, 13517 top: position.top, 13518 width: elemWidth, 13519 height: elemHeight 13520 }, 13521 horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", 13522 vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" 13523 }; 13524 if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { 13525 feedback.horizontal = "center"; 13526 } 13527 if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { 13528 feedback.vertical = "middle"; 13529 } 13530 if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { 13531 feedback.important = "horizontal"; 13532 } else { 13533 feedback.important = "vertical"; 13534 } 13535 options.using.call( this, props, feedback ); 13536 }; 13537 } 13538 13539 elem.offset( $.extend( position, { using: using } ) ); 13540 } ); 13541}; 13542 13543$.ui.position = { 13544 fit: { 13545 left: function( position, data ) { 13546 var within = data.within, 13547 withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, 13548 outerWidth = within.width, 13549 collisionPosLeft = position.left - data.collisionPosition.marginLeft, 13550 overLeft = withinOffset - collisionPosLeft, 13551 overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, 13552 newOverRight; 13553 13554 // Element is wider than within 13555 if ( data.collisionWidth > outerWidth ) { 13556 13557 // Element is initially over the left side of within 13558 if ( overLeft > 0 && overRight <= 0 ) { 13559 newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - 13560 withinOffset; 13561 position.left += overLeft - newOverRight; 13562 13563 // Element is initially over right side of within 13564 } else if ( overRight > 0 && overLeft <= 0 ) { 13565 position.left = withinOffset; 13566 13567 // Element is initially over both left and right sides of within 13568 } else { 13569 if ( overLeft > overRight ) { 13570 position.left = withinOffset + outerWidth - data.collisionWidth; 13571 } else { 13572 position.left = withinOffset; 13573 } 13574 } 13575 13576 // Too far left -> align with left edge 13577 } else if ( overLeft > 0 ) { 13578 position.left += overLeft; 13579 13580 // Too far right -> align with right edge 13581 } else if ( overRight > 0 ) { 13582 position.left -= overRight; 13583 13584 // Adjust based on position and margin 13585 } else { 13586 position.left = max( position.left - collisionPosLeft, position.left ); 13587 } 13588 }, 13589 top: function( position, data ) { 13590 var within = data.within, 13591 withinOffset = within.isWindow ? within.scrollTop : within.offset.top, 13592 outerHeight = data.within.height, 13593 collisionPosTop = position.top - data.collisionPosition.marginTop, 13594 overTop = withinOffset - collisionPosTop, 13595 overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, 13596 newOverBottom; 13597 13598 // Element is taller than within 13599 if ( data.collisionHeight > outerHeight ) { 13600 13601 // Element is initially over the top of within 13602 if ( overTop > 0 && overBottom <= 0 ) { 13603 newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - 13604 withinOffset; 13605 position.top += overTop - newOverBottom; 13606 13607 // Element is initially over bottom of within 13608 } else if ( overBottom > 0 && overTop <= 0 ) { 13609 position.top = withinOffset; 13610 13611 // Element is initially over both top and bottom of within 13612 } else { 13613 if ( overTop > overBottom ) { 13614 position.top = withinOffset + outerHeight - data.collisionHeight; 13615 } else { 13616 position.top = withinOffset; 13617 } 13618 } 13619 13620 // Too far up -> align with top 13621 } else if ( overTop > 0 ) { 13622 position.top += overTop; 13623 13624 // Too far down -> align with bottom edge 13625 } else if ( overBottom > 0 ) { 13626 position.top -= overBottom; 13627 13628 // Adjust based on position and margin 13629 } else { 13630 position.top = max( position.top - collisionPosTop, position.top ); 13631 } 13632 } 13633 }, 13634 flip: { 13635 left: function( position, data ) { 13636 var within = data.within, 13637 withinOffset = within.offset.left + within.scrollLeft, 13638 outerWidth = within.width, 13639 offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, 13640 collisionPosLeft = position.left - data.collisionPosition.marginLeft, 13641 overLeft = collisionPosLeft - offsetLeft, 13642 overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, 13643 myOffset = data.my[ 0 ] === "left" ? 13644 -data.elemWidth : 13645 data.my[ 0 ] === "right" ? 13646 data.elemWidth : 13647 0, 13648 atOffset = data.at[ 0 ] === "left" ? 13649 data.targetWidth : 13650 data.at[ 0 ] === "right" ? 13651 -data.targetWidth : 13652 0, 13653 offset = -2 * data.offset[ 0 ], 13654 newOverRight, 13655 newOverLeft; 13656 13657 if ( overLeft < 0 ) { 13658 newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - 13659 outerWidth - withinOffset; 13660 if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { 13661 position.left += myOffset + atOffset + offset; 13662 } 13663 } else if ( overRight > 0 ) { 13664 newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + 13665 atOffset + offset - offsetLeft; 13666 if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { 13667 position.left += myOffset + atOffset + offset; 13668 } 13669 } 13670 }, 13671 top: function( position, data ) { 13672 var within = data.within, 13673 withinOffset = within.offset.top + within.scrollTop, 13674 outerHeight = within.height, 13675 offsetTop = within.isWindow ? within.scrollTop : within.offset.top, 13676 collisionPosTop = position.top - data.collisionPosition.marginTop, 13677 overTop = collisionPosTop - offsetTop, 13678 overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, 13679 top = data.my[ 1 ] === "top", 13680 myOffset = top ? 13681 -data.elemHeight : 13682 data.my[ 1 ] === "bottom" ? 13683 data.elemHeight : 13684 0, 13685 atOffset = data.at[ 1 ] === "top" ? 13686 data.targetHeight : 13687 data.at[ 1 ] === "bottom" ? 13688 -data.targetHeight : 13689 0, 13690 offset = -2 * data.offset[ 1 ], 13691 newOverTop, 13692 newOverBottom; 13693 if ( overTop < 0 ) { 13694 newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - 13695 outerHeight - withinOffset; 13696 if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { 13697 position.top += myOffset + atOffset + offset; 13698 } 13699 } else if ( overBottom > 0 ) { 13700 newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + 13701 offset - offsetTop; 13702 if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { 13703 position.top += myOffset + atOffset + offset; 13704 } 13705 } 13706 } 13707 }, 13708 flipfit: { 13709 left: function() { 13710 $.ui.position.flip.left.apply( this, arguments ); 13711 $.ui.position.fit.left.apply( this, arguments ); 13712 }, 13713 top: function() { 13714 $.ui.position.flip.top.apply( this, arguments ); 13715 $.ui.position.fit.top.apply( this, arguments ); 13716 } 13717 } 13718}; 13719 13720} )(); 13721 13722var position = $.ui.position; 13723 13724 13725/*! 13726 * jQuery UI Scroll Parent 1.13.1 13727 * http://jqueryui.com 13728 * 13729 * Copyright jQuery Foundation and other contributors 13730 * Released under the MIT license. 13731 * http://jquery.org/license 13732 */ 13733 13734//>>label: scrollParent 13735//>>group: Core 13736//>>description: Get the closest ancestor element that is scrollable. 13737//>>docs: http://api.jqueryui.com/scrollParent/ 13738 13739 13740var scrollParent = $.fn.scrollParent = function( includeHidden ) { 13741 var position = this.css( "position" ), 13742 excludeStaticParent = position === "absolute", 13743 overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, 13744 scrollParent = this.parents().filter( function() { 13745 var parent = $( this ); 13746 if ( excludeStaticParent && parent.css( "position" ) === "static" ) { 13747 return false;
vendor: 2,777 bytes, lines 13748-13864
13748 } 13749 return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + 13750 parent.css( "overflow-x" ) ); 13751 } ).eq( 0 ); 13752 13753 return position === "fixed" || !scrollParent.length ? 13754 $( this[ 0 ].ownerDocument || document ) : 13755 scrollParent; 13756}; 13757 13758 13759/*! 13760 * jQuery UI Tabbable 1.13.1 13761 * http://jqueryui.com 13762 * 13763 * Copyright jQuery Foundation and other contributors 13764 * Released under the MIT license. 13765 * http://jquery.org/license 13766 */ 13767 13768//>>label: :tabbable Selector 13769//>>group: Core 13770//>>description: Selects elements which can be tabbed to. 13771//>>docs: http://api.jqueryui.com/tabbable-selector/ 13772 13773 13774var tabbable = $.extend( $.expr.pseudos, { 13775 tabbable: function( element ) { 13776 var tabIndex = $.attr( element, "tabindex" ), 13777 hasTabindex = tabIndex != null; 13778 return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex ); 13779 } 13780} ); 13781 13782 13783/*! 13784 * jQuery UI Unique ID 1.13.1 13785 * http://jqueryui.com 13786 * 13787 * Copyright jQuery Foundation and other contributors 13788 * Released under the MIT license. 13789 * http://jquery.org/license 13790 */ 13791 13792//>>label: uniqueId 13793//>>group: Core 13794//>>description: Functions to generate and remove uniqueId's 13795//>>docs: http://api.jqueryui.com/uniqueId/ 13796 13797 13798var uniqueId = $.fn.extend( { 13799 uniqueId: ( function() { 13800 var uuid = 0; 13801 13802 return function() { 13803 return this.each( function() { 13804 if ( !this.id ) { 13805 this.id = "ui-id-" + ( ++uuid ); 13806 } 13807 } ); 13808 }; 13809 } )(), 13810 13811 removeUniqueId: function() { 13812 return this.each( function() { 13813 if ( /^ui-id-\d+$/.test( this.id ) ) { 13814 $( this ).removeAttr( "id" ); 13815 } 13816 } ); 13817 } 13818} ); 13819 13820 13821/*! 13822 * jQuery UI Widget 1.13.1 13823 * http://jqueryui.com 13824 * 13825 * Copyright jQuery Foundation and other contributors 13826 * Released under the MIT license. 13827 * http://jquery.org/license 13828 */ 13829 13830//>>label: Widget 13831//>>group: Core 13832//>>description: Provides a factory for creating stateful widgets with a common API. 13833//>>docs: http://api.jqueryui.com/jQuery.widget/ 13834//>>demos: http://jqueryui.com/widget/ 13835 13836 13837var widgetUuid = 0; 13838var widgetHasOwnProperty = Array.prototype.hasOwnProperty; 13839var widgetSlice = Array.prototype.slice; 13840 13841$.cleanData = ( function( orig ) { 13842 return function( elems ) { 13843 var events, elem, i; 13844 for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { 13845 13846 // Only trigger remove when necessary to save time 13847 events = $._data( elem, "events" ); 13848 if ( events && events.remove ) { 13849 $( elem ).triggerHandler( "remove" ); 13850 } 13851 } 13852 orig( elems ); 13853 }; 13854} )( $.cleanData ); 13855 13856$.widget = function( name, base, prototype ) { 13857 var existingConstructor, constructor, basePrototype; 13858 13859 // ProxiedPrototype allows the provided prototype to remain unmodified 13860 // so that it can be used as a mixin for multiple widgets (#8876) 13861 var proxiedPrototype = {}; 13862 13863 var namespace = name.split( "." )[ 0 ]; 13864 name = name.split( "." )[ 1 ];
vendor: 18,811 bytes, lines 13864-14564
13864 13865 var fullName = namespace + "-" + name; 13866 13867 if ( !prototype ) { 13868 prototype = base; 13869 base = $.Widget; 13870 } 13871 13872 if ( Array.isArray( prototype ) ) { 13873 prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); 13874 } 13875 13876 // Create selector for plugin 13877 $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) { 13878 return !!$.data( elem, fullName ); 13879 }; 13880 13881 $[ namespace ] = $[ namespace ] || {}; 13882 existingConstructor = $[ namespace ][ name ]; 13883 constructor = $[ namespace ][ name ] = function( options, element ) { 13884 13885 // Allow instantiation without "new" keyword 13886 if ( !this || !this._createWidget ) { 13887 return new constructor( options, element ); 13888 } 13889 13890 // Allow instantiation without initializing for simple inheritance 13891 // must use "new" keyword (the code above always passes args) 13892 if ( arguments.length ) { 13893 this._createWidget( options, element ); 13894 } 13895 }; 13896 13897 // Extend with the existing constructor to carry over any static properties 13898 $.extend( constructor, existingConstructor, { 13899 version: prototype.version, 13900 13901 // Copy the object used to create the prototype in case we need to 13902 // redefine the widget later 13903 _proto: $.extend( {}, prototype ), 13904 13905 // Track widgets that inherit from this widget in case this widget is 13906 // redefined after a widget inherits from it 13907 _childConstructors: [] 13908 } ); 13909 13910 basePrototype = new base(); 13911 13912 // We need to make the options hash a property directly on the new instance 13913 // otherwise we'll modify the options hash on the prototype that we're 13914 // inheriting from 13915 basePrototype.options = $.widget.extend( {}, basePrototype.options ); 13916 $.each( prototype, function( prop, value ) { 13917 if ( typeof value !== "function" ) { 13918 proxiedPrototype[ prop ] = value; 13919 return; 13920 } 13921 proxiedPrototype[ prop ] = ( function() { 13922 function _super() { 13923 return base.prototype[ prop ].apply( this, arguments ); 13924 } 13925 13926 function _superApply( args ) { 13927 return base.prototype[ prop ].apply( this, args ); 13928 } 13929 13930 return function() { 13931 var __super = this._super; 13932 var __superApply = this._superApply; 13933 var returnValue; 13934 13935 this._super = _super; 13936 this._superApply = _superApply; 13937 13938 returnValue = value.apply( this, arguments ); 13939 13940 this._super = __super; 13941 this._superApply = __superApply; 13942 13943 return returnValue; 13944 }; 13945 } )(); 13946 } ); 13947 constructor.prototype = $.widget.extend( basePrototype, { 13948 13949 // TODO: remove support for widgetEventPrefix 13950 // always use the name + a colon as the prefix, e.g., draggable:start 13951 // don't prefix for widgets that aren't DOM-based 13952 widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name 13953 }, proxiedPrototype, { 13954 constructor: constructor, 13955 namespace: namespace, 13956 widgetName: name, 13957 widgetFullName: fullName 13958 } ); 13959 13960 // If this widget is being redefined then we need to find all widgets that 13961 // are inheriting from it and redefine all of them so that they inherit from 13962 // the new version of this widget. We're essentially trying to replace one 13963 // level in the prototype chain. 13964 if ( existingConstructor ) { 13965 $.each( existingConstructor._childConstructors, function( i, child ) { 13966 var childPrototype = child.prototype; 13967 13968 // Redefine the child widget using the same prototype that was 13969 // originally used, but inherit from the new version of the base 13970 $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, 13971 child._proto ); 13972 } ); 13973 13974 // Remove the list of existing child constructors from the old constructor 13975 // so the old child constructors can be garbage collected 13976 delete existingConstructor._childConstructors; 13977 } else { 13978 base._childConstructors.push( constructor ); 13979 } 13980 13981 $.widget.bridge( name, constructor ); 13982 13983 return constructor; 13984}; 13985 13986$.widget.extend = function( target ) { 13987 var input = widgetSlice.call( arguments, 1 ); 13988 var inputIndex = 0; 13989 var inputLength = input.length; 13990 var key; 13991 var value; 13992 13993 for ( ; inputIndex < inputLength; inputIndex++ ) { 13994 for ( key in input[ inputIndex ] ) { 13995 value = input[ inputIndex ][ key ]; 13996 if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) { 13997 13998 // Clone objects 13999 if ( $.isPlainObject( value ) ) { 14000 target[ key ] = $.isPlainObject( target[ key ] ) ? 14001 $.widget.extend( {}, target[ key ], value ) : 14002 14003 // Don't extend strings, arrays, etc. with objects 14004 $.widget.extend( {}, value ); 14005 14006 // Copy everything else by reference 14007 } else { 14008 target[ key ] = value; 14009 } 14010 } 14011 } 14012 } 14013 return target; 14014}; 14015 14016$.widget.bridge = function( name, object ) { 14017 var fullName = object.prototype.widgetFullName || name; 14018 $.fn[ name ] = function( options ) { 14019 var isMethodCall = typeof options === "string"; 14020 var args = widgetSlice.call( arguments, 1 ); 14021 var returnValue = this; 14022 14023 if ( isMethodCall ) { 14024 14025 // If this is an empty collection, we need to have the instance method 14026 // return undefined instead of the jQuery instance 14027 if ( !this.length && options === "instance" ) { 14028 returnValue = undefined; 14029 } else { 14030 this.each( function() { 14031 var methodValue; 14032 var instance = $.data( this, fullName ); 14033 14034 if ( options === "instance" ) { 14035 returnValue = instance; 14036 return false; 14037 } 14038 14039 if ( !instance ) { 14040 return $.error( "cannot call methods on " + name + 14041 " prior to initialization; " + 14042 "attempted to call method '" + options + "'" ); 14043 } 14044 14045 if ( typeof instance[ options ] !== "function" || 14046 options.charAt( 0 ) === "_" ) { 14047 return $.error( "no such method '" + options + "' for " + name + 14048 " widget instance" ); 14049 } 14050 14051 methodValue = instance[ options ].apply( instance, args ); 14052 14053 if ( methodValue !== instance && methodValue !== undefined ) { 14054 returnValue = methodValue && methodValue.jquery ? 14055 returnValue.pushStack( methodValue.get() ) : 14056 methodValue; 14057 return false; 14058 } 14059 } ); 14060 } 14061 } else { 14062 14063 // Allow multiple hashes to be passed on init 14064 if ( args.length ) { 14065 options = $.widget.extend.apply( null, [ options ].concat( args ) ); 14066 } 14067 14068 this.each( function() { 14069 var instance = $.data( this, fullName ); 14070 if ( instance ) { 14071 instance.option( options || {} ); 14072 if ( instance._init ) { 14073 instance._init(); 14074 } 14075 } else { 14076 $.data( this, fullName, new object( options, this ) ); 14077 } 14078 } ); 14079 } 14080 14081 return returnValue; 14082 }; 14083}; 14084 14085$.Widget = function( /* options, element */ ) {}; 14086$.Widget._childConstructors = []; 14087 14088$.Widget.prototype = { 14089 widgetName: "widget", 14090 widgetEventPrefix: "", 14091 defaultElement: "<div>", 14092 14093 options: { 14094 classes: {}, 14095 disabled: false, 14096 14097 // Callbacks 14098 create: null 14099 }, 14100 14101 _createWidget: function( options, element ) { 14102 element = $( element || this.defaultElement || this )[ 0 ]; 14103 this.element = $( element ); 14104 this.uuid = widgetUuid++; 14105 this.eventNamespace = "." + this.widgetName + this.uuid; 14106 14107 this.bindings = $(); 14108 this.hoverable = $(); 14109 this.focusable = $(); 14110 this.classesElementLookup = {}; 14111 14112 if ( element !== this ) { 14113 $.data( element, this.widgetFullName, this ); 14114 this._on( true, this.element, { 14115 remove: function( event ) { 14116 if ( event.target === element ) { 14117 this.destroy(); 14118 } 14119 } 14120 } ); 14121 this.document = $( element.style ? 14122 14123 // Element within the document 14124 element.ownerDocument : 14125 14126 // Element is window or document 14127 element.document || element ); 14128 this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); 14129 } 14130 14131 this.options = $.widget.extend( {}, 14132 this.options, 14133 this._getCreateOptions(), 14134 options ); 14135 14136 this._create(); 14137 14138 if ( this.options.disabled ) { 14139 this._setOptionDisabled( this.options.disabled ); 14140 } 14141 14142 this._trigger( "create", null, this._getCreateEventData() ); 14143 this._init(); 14144 }, 14145 14146 _getCreateOptions: function() { 14147 return {}; 14148 }, 14149 14150 _getCreateEventData: $.noop, 14151 14152 _create: $.noop, 14153 14154 _init: $.noop, 14155 14156 destroy: function() { 14157 var that = this; 14158 14159 this._destroy(); 14160 $.each( this.classesElementLookup, function( key, value ) { 14161 that._removeClass( value, key ); 14162 } ); 14163 14164 // We can probably remove the unbind calls in 2.0 14165 // all event bindings should go through this._on() 14166 this.element 14167 .off( this.eventNamespace ) 14168 .removeData( this.widgetFullName ); 14169 this.widget() 14170 .off( this.eventNamespace ) 14171 .removeAttr( "aria-disabled" ); 14172 14173 // Clean up events and states 14174 this.bindings.off( this.eventNamespace ); 14175 }, 14176 14177 _destroy: $.noop, 14178 14179 widget: function() { 14180 return this.element; 14181 }, 14182 14183 option: function( key, value ) { 14184 var options = key; 14185 var parts; 14186 var curOption; 14187 var i; 14188 14189 if ( arguments.length === 0 ) { 14190 14191 // Don't return a reference to the internal hash 14192 return $.widget.extend( {}, this.options ); 14193 } 14194 14195 if ( typeof key === "string" ) { 14196 14197 // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } 14198 options = {}; 14199 parts = key.split( "." ); 14200 key = parts.shift(); 14201 if ( parts.length ) { 14202 curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); 14203 for ( i = 0; i < parts.length - 1; i++ ) { 14204 curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; 14205 curOption = curOption[ parts[ i ] ]; 14206 } 14207 key = parts.pop(); 14208 if ( arguments.length === 1 ) { 14209 return curOption[ key ] === undefined ? null : curOption[ key ]; 14210 } 14211 curOption[ key ] = value; 14212 } else { 14213 if ( arguments.length === 1 ) { 14214 return this.options[ key ] === undefined ? null : this.options[ key ]; 14215 } 14216 options[ key ] = value; 14217 } 14218 } 14219 14220 this._setOptions( options ); 14221 14222 return this; 14223 }, 14224 14225 _setOptions: function( options ) { 14226 var key; 14227 14228 for ( key in options ) { 14229 this._setOption( key, options[ key ] ); 14230 } 14231 14232 return this; 14233 }, 14234 14235 _setOption: function( key, value ) { 14236 if ( key === "classes" ) { 14237 this._setOptionClasses( value ); 14238 } 14239 14240 this.options[ key ] = value; 14241 14242 if ( key === "disabled" ) { 14243 this._setOptionDisabled( value ); 14244 } 14245 14246 return this; 14247 }, 14248 14249 _setOptionClasses: function( value ) { 14250 var classKey, elements, currentElements; 14251 14252 for ( classKey in value ) { 14253 currentElements = this.classesElementLookup[ classKey ]; 14254 if ( value[ classKey ] === this.options.classes[ classKey ] || 14255 !currentElements || 14256 !currentElements.length ) { 14257 continue; 14258 } 14259 14260 // We are doing this to create a new jQuery object because the _removeClass() call 14261 // on the next line is going to destroy the reference to the current elements being 14262 // tracked. We need to save a copy of this collection so that we can add the new classes 14263 // below. 14264 elements = $( currentElements.get() ); 14265 this._removeClass( currentElements, classKey ); 14266 14267 // We don't use _addClass() here, because that uses this.options.classes 14268 // for generating the string of classes. We want to use the value passed in from 14269 // _setOption(), this is the new value of the classes option which was passed to 14270 // _setOption(). We pass this value directly to _classes(). 14271 elements.addClass( this._classes( { 14272 element: elements, 14273 keys: classKey, 14274 classes: value, 14275 add: true 14276 } ) ); 14277 } 14278 }, 14279 14280 _setOptionDisabled: function( value ) { 14281 this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); 14282 14283 // If the widget is becoming disabled, then nothing is interactive 14284 if ( value ) { 14285 this._removeClass( this.hoverable, null, "ui-state-hover" ); 14286 this._removeClass( this.focusable, null, "ui-state-focus" ); 14287 } 14288 }, 14289 14290 enable: function() { 14291 return this._setOptions( { disabled: false } ); 14292 }, 14293 14294 disable: function() { 14295 return this._setOptions( { disabled: true } ); 14296 }, 14297 14298 _classes: function( options ) { 14299 var full = []; 14300 var that = this; 14301 14302 options = $.extend( { 14303 element: this.element, 14304 classes: this.options.classes || {} 14305 }, options ); 14306 14307 function bindRemoveEvent() { 14308 var nodesToBind = []; 14309 14310 options.element.each( function( _, element ) { 14311 var isTracked = $.map( that.classesElementLookup, function( elements ) { 14312 return elements; 14313 } ) 14314 .some( function( elements ) { 14315 return elements.is( element ); 14316 } ); 14317 14318 if ( !isTracked ) { 14319 nodesToBind.push( element ); 14320 } 14321 } ); 14322 14323 that._on( $( nodesToBind ), { 14324 remove: "_untrackClassesElement" 14325 } ); 14326 } 14327 14328 function processClassString( classes, checkOption ) { 14329 var current, i; 14330 for ( i = 0; i < classes.length; i++ ) { 14331 current = that.classesElementLookup[ classes[ i ] ] || $(); 14332 if ( options.add ) { 14333 bindRemoveEvent(); 14334 current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) ); 14335 } else { 14336 current = $( current.not( options.element ).get() ); 14337 } 14338 that.classesElementLookup[ classes[ i ] ] = current; 14339 full.push( classes[ i ] ); 14340 if ( checkOption && options.classes[ classes[ i ] ] ) { 14341 full.push( options.classes[ classes[ i ] ] ); 14342 } 14343 } 14344 } 14345 14346 if ( options.keys ) { 14347 processClassString( options.keys.match( /\S+/g ) || [], true ); 14348 } 14349 if ( options.extra ) { 14350 processClassString( options.extra.match( /\S+/g ) || [] ); 14351 } 14352 14353 return full.join( " " ); 14354 }, 14355 14356 _untrackClassesElement: function( event ) { 14357 var that = this; 14358 $.each( that.classesElementLookup, function( key, value ) { 14359 if ( $.inArray( event.target, value ) !== -1 ) { 14360 that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); 14361 } 14362 } ); 14363 14364 this._off( $( event.target ) ); 14365 }, 14366 14367 _removeClass: function( element, keys, extra ) { 14368 return this._toggleClass( element, keys, extra, false ); 14369 }, 14370 14371 _addClass: function( element, keys, extra ) { 14372 return this._toggleClass( element, keys, extra, true ); 14373 }, 14374 14375 _toggleClass: function( element, keys, extra, add ) { 14376 add = ( typeof add === "boolean" ) ? add : extra; 14377 var shift = ( typeof element === "string" || element === null ), 14378 options = { 14379 extra: shift ? keys : extra, 14380 keys: shift ? element : keys, 14381 element: shift ? this.element : element, 14382 add: add 14383 }; 14384 options.element.toggleClass( this._classes( options ), add ); 14385 return this; 14386 }, 14387 14388 _on: function( suppressDisabledCheck, element, handlers ) { 14389 var delegateElement; 14390 var instance = this; 14391 14392 // No suppressDisabledCheck flag, shuffle arguments 14393 if ( typeof suppressDisabledCheck !== "boolean" ) { 14394 handlers = element; 14395 element = suppressDisabledCheck; 14396 suppressDisabledCheck = false; 14397 } 14398 14399 // No element argument, shuffle and use this.element 14400 if ( !handlers ) { 14401 handlers = element; 14402 element = this.element; 14403 delegateElement = this.widget(); 14404 } else { 14405 element = delegateElement = $( element ); 14406 this.bindings = this.bindings.add( element ); 14407 } 14408 14409 $.each( handlers, function( event, handler ) { 14410 function handlerProxy() { 14411 14412 // Allow widgets to customize the disabled handling 14413 // - disabled as an array instead of boolean 14414 // - disabled class as method for disabling individual parts 14415 if ( !suppressDisabledCheck && 14416 ( instance.options.disabled === true || 14417 $( this ).hasClass( "ui-state-disabled" ) ) ) { 14418 return; 14419 } 14420 return ( typeof handler === "string" ? instance[ handler ] : handler ) 14421 .apply( instance, arguments ); 14422 } 14423 14424 // Copy the guid so direct unbinding works 14425 if ( typeof handler !== "string" ) { 14426 handlerProxy.guid = handler.guid = 14427 handler.guid || handlerProxy.guid || $.guid++; 14428 } 14429 14430 var match = event.match( /^([\w:-]*)\s*(.*)$/ ); 14431 var eventName = match[ 1 ] + instance.eventNamespace; 14432 var selector = match[ 2 ]; 14433 14434 if ( selector ) { 14435 delegateElement.on( eventName, selector, handlerProxy ); 14436 } else { 14437 element.on( eventName, handlerProxy ); 14438 } 14439 } ); 14440 }, 14441 14442 _off: function( element, eventName ) { 14443 eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + 14444 this.eventNamespace; 14445 element.off( eventName ); 14446 14447 // Clear the stack to avoid memory leaks (#10056) 14448 this.bindings = $( this.bindings.not( element ).get() ); 14449 this.focusable = $( this.focusable.not( element ).get() ); 14450 this.hoverable = $( this.hoverable.not( element ).get() ); 14451 }, 14452 14453 _delay: function( handler, delay ) { 14454 function handlerProxy() { 14455 return ( typeof handler === "string" ? instance[ handler ] : handler ) 14456 .apply( instance, arguments ); 14457 } 14458 var instance = this; 14459 return setTimeout( handlerProxy, delay || 0 ); 14460 }, 14461 14462 _hoverable: function( element ) { 14463 this.hoverable = this.hoverable.add( element ); 14464 this._on( element, { 14465 mouseenter: function( event ) { 14466 this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); 14467 }, 14468 mouseleave: function( event ) { 14469 this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); 14470 } 14471 } ); 14472 }, 14473 14474 _focusable: function( element ) { 14475 this.focusable = this.focusable.add( element ); 14476 this._on( element, { 14477 focusin: function( event ) { 14478 this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); 14479 }, 14480 focusout: function( event ) { 14481 this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); 14482 } 14483 } ); 14484 }, 14485 14486 _trigger: function( type, event, data ) { 14487 var prop, orig; 14488 var callback = this.options[ type ]; 14489 14490 data = data || {}; 14491 event = $.Event( event ); 14492 event.type = ( type === this.widgetEventPrefix ? 14493 type : 14494 this.widgetEventPrefix + type ).toLowerCase(); 14495 14496 // The original event may come from any element 14497 // so we need to reset the target on the new event 14498 event.target = this.element[ 0 ]; 14499 14500 // Copy original event properties over to the new event 14501 orig = event.originalEvent; 14502 if ( orig ) { 14503 for ( prop in orig ) { 14504 if ( !( prop in event ) ) { 14505 event[ prop ] = orig[ prop ]; 14506 } 14507 } 14508 } 14509 14510 this.element.trigger( event, data ); 14511 return !( typeof callback === "function" && 14512 callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || 14513 event.isDefaultPrevented() ); 14514 } 14515}; 14516 14517$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { 14518 $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { 14519 if ( typeof options === "string" ) { 14520 options = { effect: options }; 14521 } 14522 14523 var hasOptions; 14524 var effectName = !options ? 14525 method : 14526 options === true || typeof options === "number" ? 14527 defaultEffect : 14528 options.effect || defaultEffect; 14529 14530 options = options || {}; 14531 if ( typeof options === "number" ) { 14532 options = { duration: options }; 14533 } else if ( options === true ) { 14534 options = {}; 14535 } 14536 14537 hasOptions = !$.isEmptyObject( options ); 14538 options.complete = callback; 14539 14540 if ( options.delay ) { 14541 element.delay( options.delay ); 14542 } 14543 14544 if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { 14545 element[ method ]( options ); 14546 } else if ( effectName !== method && element[ effectName ] ) { 14547 element[ effectName ]( options.duration, options.easing, callback ); 14548 } else { 14549 element.queue( function( next ) { 14550 $( this )[ method ](); 14551 if ( callback ) { 14552 callback.call( element[ 0 ] ); 14553 } 14554 next(); 14555 } ); 14556 } 14557 }; 14558} ); 14559 14560var widget = $.widget; 14561 14562 14563/*! 14564 * jQuery UI
14564Accordion 1.13.1 14565 * http://jqueryui.com 14566 * 14567 * Copyright jQuery Foundation and other contributors 14568 * Released under the MIT license. 14569 * http://jquery.org/license 14570 */ 14571 14572//>>label: Accordion 14573//>>group: Widgets 14574/* eslint-disable max-len */ 14575//>>description: Displays collapsible content panels for presenting information in a limited amount of space. 14576/* eslint-enable max-len */ 14577//>>docs: http://api.jqueryui.com/accordion/ 14578//>>demos: http://jqueryui.com/accordion/ 14579//>>css.structure: ../../themes/base/core.css 14580//>>css.structure: ../../themes/base/accordion.css 14581//>>css.theme: ../../themes/base/theme.css 14582 14583 14584var widgetsAccordion = $.widget( "ui.accordion", { 14585 version: "1.13.1
vendor: 15,900 bytes, lines 14585-15196
14585", 14586 options: { 14587 active: 0, 14588 animate: {}, 14589 classes: { 14590 "ui-accordion-header": "ui-corner-top", 14591 "ui-accordion-header-collapsed": "ui-corner-all", 14592 "ui-accordion-content": "ui-corner-bottom" 14593 }, 14594 collapsible: false, 14595 event: "click", 14596 header: function( elem ) { 14597 return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() ); 14598 }, 14599 heightStyle: "auto", 14600 icons: { 14601 activeHeader: "ui-icon-triangle-1-s", 14602 header: "ui-icon-triangle-1-e" 14603 }, 14604 14605 // Callbacks 14606 activate: null, 14607 beforeActivate: null 14608 }, 14609 14610 hideProps: { 14611 borderTopWidth: "hide", 14612 borderBottomWidth: "hide", 14613 paddingTop: "hide", 14614 paddingBottom: "hide", 14615 height: "hide" 14616 }, 14617 14618 showProps: { 14619 borderTopWidth: "show", 14620 borderBottomWidth: "show", 14621 paddingTop: "show", 14622 paddingBottom: "show", 14623 height: "show" 14624 }, 14625 14626 _create: function() { 14627 var options = this.options; 14628 14629 this.prevShow = this.prevHide = $(); 14630 this._addClass( "ui-accordion", "ui-widget ui-helper-reset" ); 14631 this.element.attr( "role", "tablist" ); 14632 14633 // Don't allow collapsible: false and active: false / null 14634 if ( !options.collapsible && ( options.active === false || options.active == null ) ) { 14635 options.active = 0; 14636 } 14637 14638 this._processPanels(); 14639 14640 // handle negative values 14641 if ( options.active < 0 ) { 14642 options.active += this.headers.length; 14643 } 14644 this._refresh(); 14645 }, 14646 14647 _getCreateEventData: function() { 14648 return { 14649 header: this.active, 14650 panel: !this.active.length ? $() : this.active.next() 14651 }; 14652 }, 14653 14654 _createIcons: function() { 14655 var icon, children, 14656 icons = this.options.icons; 14657 14658 if ( icons ) { 14659 icon = $( "<span>" ); 14660 this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header ); 14661 icon.prependTo( this.headers ); 14662 children = this.active.children( ".ui-accordion-header-icon" ); 14663 this._removeClass( children, icons.header ) 14664 ._addClass( children, null, icons.activeHeader ) 14665 ._addClass( this.headers, "ui-accordion-icons" ); 14666 } 14667 }, 14668 14669 _destroyIcons: function() { 14670 this._removeClass( this.headers, "ui-accordion-icons" ); 14671 this.headers.children( ".ui-accordion-header-icon" ).remove(); 14672 }, 14673 14674 _destroy: function() { 14675 var contents; 14676 14677 // Clean up main element 14678 this.element.removeAttr( "role" ); 14679 14680 // Clean up headers 14681 this.headers 14682 .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" ) 14683 .removeUniqueId(); 14684 14685 this._destroyIcons(); 14686 14687 // Clean up content panels 14688 contents = this.headers.next() 14689 .css( "display", "" ) 14690 .removeAttr( "role aria-hidden aria-labelledby" ) 14691 .removeUniqueId(); 14692 14693 if ( this.options.heightStyle !== "content" ) { 14694 contents.css( "height", "" ); 14695 } 14696 }, 14697 14698 _setOption: function( key, value ) { 14699 if ( key === "active" ) { 14700 14701 // _activate() will handle invalid values and update this.options 14702 this._activate( value ); 14703 return; 14704 } 14705 14706 if ( key === "event" ) { 14707 if ( this.options.event ) { 14708 this._off( this.headers, this.options.event ); 14709 } 14710 this._setupEvents( value ); 14711 } 14712 14713 this._super( key, value ); 14714 14715 // Setting collapsible: false while collapsed; open first panel 14716 if ( key === "collapsible" && !value && this.options.active === false ) { 14717 this._activate( 0 ); 14718 } 14719 14720 if ( key === "icons" ) { 14721 this._destroyIcons(); 14722 if ( value ) { 14723 this._createIcons(); 14724 } 14725 } 14726 }, 14727 14728 _setOptionDisabled: function( value ) { 14729 this._super( value ); 14730 14731 this.element.attr( "aria-disabled", value ); 14732 14733 // Support: IE8 Only 14734 // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE 14735 // so we need to add the disabled class to the headers and panels 14736 this._toggleClass( null, "ui-state-disabled", !!value ); 14737 this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled", 14738 !!value ); 14739 }, 14740 14741 _keydown: function( event ) { 14742 if ( event.altKey || event.ctrlKey ) { 14743 return; 14744 } 14745 14746 var keyCode = $.ui.keyCode, 14747 length = this.headers.length, 14748 currentIndex = this.headers.index( event.target ), 14749 toFocus = false; 14750 14751 switch ( event.keyCode ) { 14752 case keyCode.RIGHT: 14753 case keyCode.DOWN: 14754 toFocus = this.headers[ ( currentIndex + 1 ) % length ]; 14755 break; 14756 case keyCode.LEFT: 14757 case keyCode.UP: 14758 toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; 14759 break; 14760 case keyCode.SPACE: 14761 case keyCode.ENTER: 14762 this._eventHandler( event ); 14763 break; 14764 case keyCode.HOME: 14765 toFocus = this.headers[ 0 ]; 14766 break; 14767 case keyCode.END: 14768 toFocus = this.headers[ length - 1 ]; 14769 break; 14770 } 14771 14772 if ( toFocus ) { 14773 $( event.target ).attr( "tabIndex", -1 ); 14774 $( toFocus ).attr( "tabIndex", 0 ); 14775 $( toFocus ).trigger( "focus" ); 14776 event.preventDefault(); 14777 } 14778 }, 14779 14780 _panelKeyDown: function( event ) { 14781 if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { 14782 $( event.currentTarget ).prev().trigger( "focus" ); 14783 } 14784 }, 14785 14786 refresh: function() { 14787 var options = this.options; 14788 this._processPanels(); 14789 14790 // Was collapsed or no panel 14791 if ( ( options.active === false && options.collapsible === true ) || 14792 !this.headers.length ) { 14793 options.active = false; 14794 this.active = $(); 14795 14796 // active false only when collapsible is true 14797 } else if ( options.active === false ) { 14798 this._activate( 0 ); 14799 14800 // was active, but active panel is gone 14801 } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { 14802 14803 // all remaining panel are disabled 14804 if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) { 14805 options.active = false; 14806 this.active = $(); 14807 14808 // activate previous panel 14809 } else { 14810 this._activate( Math.max( 0, options.active - 1 ) ); 14811 } 14812 14813 // was active, active panel still exists 14814 } else { 14815 14816 // make sure active index is correct 14817 options.active = this.headers.index( this.active ); 14818 } 14819 14820 this._destroyIcons(); 14821 14822 this._refresh(); 14823 }, 14824 14825 _processPanels: function() { 14826 var prevHeaders = this.headers, 14827 prevPanels = this.panels; 14828 14829 if ( typeof this.options.header === "function" ) { 14830 this.headers = this.options.header( this.element ); 14831 } else { 14832 this.headers = this.element.find( this.options.header ); 14833 } 14834 this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed", 14835 "ui-state-default" ); 14836 14837 this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide(); 14838 this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" ); 14839 14840 // Avoid memory leaks (#10056) 14841 if ( prevPanels ) { 14842 this._off( prevHeaders.not( this.headers ) ); 14843 this._off( prevPanels.not( this.panels ) ); 14844 } 14845 }, 14846 14847 _refresh: function() { 14848 var maxHeight, 14849 options = this.options, 14850 heightStyle = options.heightStyle, 14851 parent = this.element.parent(); 14852 14853 this.active = this._findActive( options.active ); 14854 this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" ) 14855 ._removeClass( this.active, "ui-accordion-header-collapsed" ); 14856 this._addClass( this.active.next(), "ui-accordion-content-active" ); 14857 this.active.next().show(); 14858 14859 this.headers 14860 .attr( "role", "tab" ) 14861 .each( function() { 14862 var header = $( this ), 14863 headerId = header.uniqueId().attr( "id" ), 14864 panel = header.next(), 14865 panelId = panel.uniqueId().attr( "id" ); 14866 header.attr( "aria-controls", panelId ); 14867 panel.attr( "aria-labelledby", headerId ); 14868 } ) 14869 .next() 14870 .attr( "role", "tabpanel" ); 14871 14872 this.headers 14873 .not( this.active ) 14874 .attr( { 14875 "aria-selected": "false", 14876 "aria-expanded": "false", 14877 tabIndex: -1 14878 } ) 14879 .next() 14880 .attr( { 14881 "aria-hidden": "true" 14882 } ) 14883 .hide(); 14884 14885 // Make sure at least one header is in the tab order 14886 if ( !this.active.length ) { 14887 this.headers.eq( 0 ).attr( "tabIndex", 0 ); 14888 } else { 14889 this.active.attr( { 14890 "aria-selected": "true", 14891 "aria-expanded": "true", 14892 tabIndex: 0 14893 } ) 14894 .next() 14895 .attr( { 14896 "aria-hidden": "false" 14897 } ); 14898 } 14899 14900 this._createIcons(); 14901 14902 this._setupEvents( options.event ); 14903 14904 if ( heightStyle === "fill" ) { 14905 maxHeight = parent.height(); 14906 this.element.siblings( ":visible" ).each( function() { 14907 var elem = $( this ), 14908 position = elem.css( "position" ); 14909 14910 if ( position === "absolute" || position === "fixed" ) { 14911 return; 14912 } 14913 maxHeight -= elem.outerHeight( true ); 14914 } ); 14915 14916 this.headers.each( function() { 14917 maxHeight -= $( this ).outerHeight( true ); 14918 } ); 14919 14920 this.headers.next() 14921 .each( function() { 14922 $( this ).height( Math.max( 0, maxHeight - 14923 $( this ).innerHeight() + $( this ).height() ) ); 14924 } ) 14925 .css( "overflow", "auto" ); 14926 } else if ( heightStyle === "auto" ) { 14927 maxHeight = 0; 14928 this.headers.next() 14929 .each( function() { 14930 var isVisible = $( this ).is( ":visible" ); 14931 if ( !isVisible ) { 14932 $( this ).show(); 14933 } 14934 maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); 14935 if ( !isVisible ) { 14936 $( this ).hide(); 14937 } 14938 } ) 14939 .height( maxHeight ); 14940 } 14941 }, 14942 14943 _activate: function( index ) { 14944 var active = this._findActive( index )[ 0 ]; 14945 14946 // Trying to activate the already active panel 14947 if ( active === this.active[ 0 ] ) { 14948 return; 14949 } 14950 14951 // Trying to collapse, simulate a click on the currently active header 14952 active = active || this.active[ 0 ]; 14953 14954 this._eventHandler( { 14955 target: active, 14956 currentTarget: active, 14957 preventDefault: $.noop 14958 } ); 14959 }, 14960 14961 _findActive: function( selector ) { 14962 return typeof selector === "number" ? this.headers.eq( selector ) : $(); 14963 }, 14964 14965 _setupEvents: function( event ) { 14966 var events = { 14967 keydown: "_keydown" 14968 }; 14969 if ( event ) { 14970 $.each( event.split( " " ), function( index, eventName ) { 14971 events[ eventName ] = "_eventHandler"; 14972 } ); 14973 } 14974 14975 this._off( this.headers.add( this.headers.next() ) ); 14976 this._on( this.headers, events ); 14977 this._on( this.headers.next(), { keydown: "_panelKeyDown" } ); 14978 this._hoverable( this.headers ); 14979 this._focusable( this.headers ); 14980 }, 14981 14982 _eventHandler: function( event ) { 14983 var activeChildren, clickedChildren, 14984 options = this.options, 14985 active = this.active, 14986 clicked = $( event.currentTarget ), 14987 clickedIsActive = clicked[ 0 ] === active[ 0 ], 14988 collapsing = clickedIsActive && options.collapsible, 14989 toShow = collapsing ? $() : clicked.next(), 14990 toHide = active.next(), 14991 eventData = { 14992 oldHeader: active, 14993 oldPanel: toHide, 14994 newHeader: collapsing ? $() : clicked, 14995 newPanel: toShow 14996 }; 14997 14998 event.preventDefault(); 14999 15000 if ( 15001 15002 // click on active header, but not collapsible 15003 ( clickedIsActive && !options.collapsible ) || 15004 15005 // allow canceling activation 15006 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { 15007 return; 15008 } 15009 15010 options.active = collapsing ? false : this.headers.index( clicked ); 15011 15012 // When the call to ._toggle() comes after the class changes 15013 // it causes a very odd bug in IE 8 (see #6720) 15014 this.active = clickedIsActive ? $() : clicked; 15015 this._toggle( eventData ); 15016 15017 // Switch classes 15018 // corner classes on the previously active header stay after the animation 15019 this._removeClass( active, "ui-accordion-header-active", "ui-state-active" ); 15020 if ( options.icons ) { 15021 activeChildren = active.children( ".ui-accordion-header-icon" ); 15022 this._removeClass( activeChildren, null, options.icons.activeHeader ) 15023 ._addClass( activeChildren, null, options.icons.header ); 15024 } 15025 15026 if ( !clickedIsActive ) { 15027 this._removeClass( clicked, "ui-accordion-header-collapsed" ) 15028 ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" ); 15029 if ( options.icons ) { 15030 clickedChildren = clicked.children( ".ui-accordion-header-icon" ); 15031 this._removeClass( clickedChildren, null, options.icons.header ) 15032 ._addClass( clickedChildren, null, options.icons.activeHeader ); 15033 } 15034 15035 this._addClass( clicked.next(), "ui-accordion-content-active" ); 15036 } 15037 }, 15038 15039 _toggle: function( data ) { 15040 var toShow = data.newPanel, 15041 toHide = this.prevShow.length ? this.prevShow : data.oldPanel; 15042 15043 // Handle activating a panel during the animation for another activation 15044 this.prevShow.add( this.prevHide ).stop( true, true ); 15045 this.prevShow = toShow; 15046 this.prevHide = toHide; 15047 15048 if ( this.options.animate ) { 15049 this._animate( toShow, toHide, data ); 15050 } else { 15051 toHide.hide(); 15052 toShow.show(); 15053 this._toggleComplete( data ); 15054 } 15055 15056 toHide.attr( { 15057 "aria-hidden": "true" 15058 } ); 15059 toHide.prev().attr( { 15060 "aria-selected": "false", 15061 "aria-expanded": "false" 15062 } ); 15063 15064 // if we're switching panels, remove the old header from the tab order 15065 // if we're opening from collapsed state, remove the previous header from the tab order 15066 // if we're collapsing, then keep the collapsing header in the tab order 15067 if ( toShow.length && toHide.length ) { 15068 toHide.prev().attr( { 15069 "tabIndex": -1, 15070 "aria-expanded": "false" 15071 } ); 15072 } else if ( toShow.length ) { 15073 this.headers.filter( function() { 15074 return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; 15075 } ) 15076 .attr( "tabIndex", -1 ); 15077 } 15078 15079 toShow 15080 .attr( "aria-hidden", "false" ) 15081 .prev() 15082 .attr( { 15083 "aria-selected": "true", 15084 "aria-expanded": "true", 15085 tabIndex: 0 15086 } ); 15087 }, 15088 15089 _animate: function( toShow, toHide, data ) { 15090 var total, easing, duration, 15091 that = this, 15092 adjust = 0, 15093 boxSizing = toShow.css( "box-sizing" ), 15094 down = toShow.length && 15095 ( !toHide.length || ( toShow.index() < toHide.index() ) ), 15096 animate = this.options.animate || {}, 15097 options = down && animate.down || animate, 15098 complete = function() { 15099 that._toggleComplete( data ); 15100 }; 15101 15102 if ( typeof options === "number" ) { 15103 duration = options; 15104 } 15105 if ( typeof options === "string" ) { 15106 easing = options; 15107 } 15108 15109 // fall back from options to animation in case of partial down settings 15110 easing = easing || options.easing || animate.easing; 15111 duration = duration || options.duration || animate.duration; 15112 15113 if ( !toHide.length ) { 15114 return toShow.animate( this.showProps, duration, easing, complete ); 15115 } 15116 if ( !toShow.length ) { 15117 return toHide.animate( this.hideProps, duration, easing, complete ); 15118 } 15119 15120 total = toShow.show().outerHeight(); 15121 toHide.animate( this.hideProps, { 15122 duration: duration, 15123 easing: easing, 15124 step: function( now, fx ) { 15125 fx.now = Math.round( now ); 15126 } 15127 } ); 15128 toShow 15129 .hide() 15130 .animate( this.showProps, { 15131 duration: duration, 15132 easing: easing, 15133 complete: complete, 15134 step: function( now, fx ) { 15135 fx.now = Math.round( now ); 15136 if ( fx.prop !== "height" ) { 15137 if ( boxSizing === "content-box" ) { 15138 adjust += fx.now; 15139 } 15140 } else if ( that.options.heightStyle !== "content" ) { 15141 fx.now = Math.round( total - toHide.outerHeight() - adjust ); 15142 adjust = 0; 15143 } 15144 } 15145 } ); 15146 }, 15147 15148 _toggleComplete: function( data ) { 15149 var toHide = data.oldPanel, 15150 prev = toHide.prev(); 15151 15152 this._removeClass( toHide, "ui-accordion-content-active" ); 15153 this._removeClass( prev, "ui-accordion-header-active" ) 15154 ._addClass( prev, "ui-accordion-header-collapsed" ); 15155 15156 // Work around for rendering bug in IE (#5421) 15157 if ( toHide.length ) { 15158 toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; 15159 } 15160 this._trigger( "activate", null, data ); 15161 } 15162} ); 15163 15164 15165 15166var safeActiveElement = $.ui.safeActiveElement = function( document ) { 15167 var activeElement; 15168 15169 // Support: IE 9 only 15170 // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> 15171 try { 15172 activeElement = document.activeElement; 15173 } catch ( error ) { 15174 activeElement = document.body; 15175 } 15176 15177 // Support: IE 9 - 11 only 15178 // IE may return null instead of an element 15179 // Interestingly, this only seems to occur when NOT in an iframe 15180 if ( !activeElement ) { 15181 activeElement = document.body; 15182 } 15183 15184 // Support: IE 11 only 15185 // IE11 returns a seemingly empty object in some cases when accessing 15186 // document.activeElement from an <iframe> 15187 if ( !activeElement.nodeName ) { 15188 activeElement = document.body; 15189 } 15190 15191 return activeElement; 15192}; 15193 15194 15195/*! 15196 * jQuery UI Menu 1.13.
151961 15197 * http://jqueryui.com 15198 * 15199 * Copyright jQuery Foundation and other contributors 15200 * Released under the MIT license. 15201 * http://jquery.org/license 15202 */ 15203 15204//>>label: Menu 15205//>>group: Widgets 15206//>>description: Creates nestable menus. 15207//>>docs: http://api.jqueryui.com/menu/ 15208//>>demos: http://jqueryui.com/menu/ 15209//>>css.structure: ../../themes/base/core.css 15210//>>css.structure: ../../themes/base/menu.css 15211//>>css.theme: ../../themes/base/theme.css 15212 15213 15214var widgetsMenu = $.widget( "ui.menu", { 15215 version: "1.13.1
vendor: 2,668 bytes, lines 15215-15317
15215", 15216 defaultElement: "<ul>", 15217 delay: 300, 15218 options: { 15219 icons: { 15220 submenu: "ui-icon-caret-1-e" 15221 }, 15222 items: "> *", 15223 menus: "ul", 15224 position: { 15225 my: "left top", 15226 at: "right top" 15227 }, 15228 role: "menu", 15229 15230 // Callbacks 15231 blur: null, 15232 focus: null, 15233 select: null 15234 }, 15235 15236 _create: function() { 15237 this.activeMenu = this.element; 15238 15239 // Flag used to prevent firing of the click handler 15240 // as the event bubbles up through nested menus 15241 this.mouseHandled = false; 15242 this.lastMousePosition = { x: null, y: null }; 15243 this.element 15244 .uniqueId() 15245 .attr( { 15246 role: this.options.role, 15247 tabIndex: 0 15248 } ); 15249 15250 this._addClass( "ui-menu", "ui-widget ui-widget-content" ); 15251 this._on( { 15252 15253 // Prevent focus from sticking to links inside menu after clicking 15254 // them (focus should always stay on UL during navigation). 15255 "mousedown .ui-menu-item": function( event ) { 15256 event.preventDefault(); 15257 15258 this._activateItem( event ); 15259 }, 15260 "click .ui-menu-item": function( event ) { 15261 var target = $( event.target ); 15262 var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) ); 15263 if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { 15264 this.select( event ); 15265 15266 // Only set the mouseHandled flag if the event will bubble, see #9469. 15267 if ( !event.isPropagationStopped() ) { 15268 this.mouseHandled = true; 15269 } 15270 15271 // Open submenu on click 15272 if ( target.has( ".ui-menu" ).length ) { 15273 this.expand( event ); 15274 } else if ( !this.element.is( ":focus" ) && 15275 active.closest( ".ui-menu" ).length ) { 15276 15277 // Redirect focus to the menu 15278 this.element.trigger( "focus", [ true ] ); 15279 15280 // If the active item is on the top level, let it stay active. 15281 // Otherwise, blur the active item since it is no longer visible. 15282 if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { 15283 clearTimeout( this.timer ); 15284 } 15285 } 15286 } 15287 }, 15288 "mouseenter .ui-menu-item": "_activateItem", 15289 "mousemove .ui-menu-item": "_activateItem", 15290 mouseleave: "collapseAll", 15291 "mouseleave .ui-menu": "collapseAll", 15292 focus: function( event, keepActiveItem ) { 15293 15294 // If there's already an active item, keep it active 15295 // If not, activate the first item 15296 var item = this.active || this._menuItems().first(); 15297 15298 if ( !keepActiveItem ) { 15299 this.focus( event, item ); 15300 } 15301 }, 15302 blur: function( event ) { 15303 this._delay( function() { 15304 var notContained = !$.contains( 15305 this.element[ 0 ], 15306 $.ui.safeActiveElement( this.document[ 0 ] ) 15307 ); 15308 if ( notContained ) { 15309 this.collapseAll( event ); 15310 } 15311 } ); 15312 }, 15313 keydown: "_keydown" 15314 } ); 15315 15316 this.refresh(); 15317
vendor: 3,056 bytes, lines 15318-15434
15318 // Clicks outside of a menu collapse any open menus 15319 this._on( this.document, { 15320 click: function( event ) { 15321 if ( this._closeOnDocumentClick( event ) ) { 15322 this.collapseAll( event, true ); 15323 } 15324 15325 // Reset the mouseHandled flag 15326 this.mouseHandled = false; 15327 } 15328 } ); 15329 }, 15330 15331 _activateItem: function( event ) { 15332 15333 // Ignore mouse events while typeahead is active, see #10458. 15334 // Prevents focusing the wrong item when typeahead causes a scroll while the mouse 15335 // is over an item in the menu 15336 if ( this.previousFilter ) { 15337 return; 15338 } 15339 15340 // If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356) 15341 if ( event.clientX === this.lastMousePosition.x && 15342 event.clientY === this.lastMousePosition.y ) { 15343 return; 15344 } 15345 15346 this.lastMousePosition = { 15347 x: event.clientX, 15348 y: event.clientY 15349 }; 15350 15351 var actualTarget = $( event.target ).closest( ".ui-menu-item" ), 15352 target = $( event.currentTarget ); 15353 15354 // Ignore bubbled events on parent items, see #11641 15355 if ( actualTarget[ 0 ] !== target[ 0 ] ) { 15356 return; 15357 } 15358 15359 // If the item is already active, there's nothing to do 15360 if ( target.is( ".ui-state-active" ) ) { 15361 return; 15362 } 15363 15364 // Remove ui-state-active class from siblings of the newly focused menu item 15365 // to avoid a jump caused by adjacent elements both having a class with a border 15366 this._removeClass( target.siblings().children( ".ui-state-active" ), 15367 null, "ui-state-active" ); 15368 this.focus( event, target ); 15369 }, 15370 15371 _destroy: function() { 15372 var items = this.element.find( ".ui-menu-item" ) 15373 .removeAttr( "role aria-disabled" ), 15374 submenus = items.children( ".ui-menu-item-wrapper" ) 15375 .removeUniqueId() 15376 .removeAttr( "tabIndex role aria-haspopup" ); 15377 15378 // Destroy (sub)menus 15379 this.element 15380 .removeAttr( "aria-activedescendant" ) 15381 .find( ".ui-menu" ).addBack() 15382 .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " + 15383 "tabIndex" ) 15384 .removeUniqueId() 15385 .show(); 15386 15387 submenus.children().each( function() { 15388 var elem = $( this ); 15389 if ( elem.data( "ui-menu-submenu-caret" ) ) { 15390 elem.remove(); 15391 } 15392 } ); 15393 }, 15394 15395 _keydown: function( event ) { 15396 var match, prev, character, skip, 15397 preventDefault = true; 15398 15399 switch ( event.keyCode ) { 15400 case $.ui.keyCode.PAGE_UP: 15401 this.previousPage( event ); 15402 break; 15403 case $.ui.keyCode.PAGE_DOWN: 15404 this.nextPage( event ); 15405 break; 15406 case $.ui.keyCode.HOME: 15407 this._move( "first", "first", event ); 15408 break; 15409 case $.ui.keyCode.END: 15410 this._move( "last", "last", event ); 15411 break; 15412 case $.ui.keyCode.UP: 15413 this.previous( event ); 15414 break; 15415 case $.ui.keyCode.DOWN: 15416 this.next( event ); 15417 break; 15418 case $.ui.keyCode.LEFT: 15419 this.collapse( event ); 15420 break; 15421 case $.ui.keyCode.RIGHT: 15422 if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { 15423 this.expand( event ); 15424 } 15425 break; 15426 case $.ui.keyCode.ENTER: 15427 case $.ui.keyCode.SPACE: 15428 this._activate( event ); 15429 break; 15430 case $.ui.keyCode.ESCAPE: 15431 this.collapse( event ); 15432 break; 15433 default: 15434 preventDefault = false;
vendor: 6,930 bytes, lines 15435-15683
15435 prev = this.previousFilter || ""; 15436 skip = false; 15437 15438 // Support number pad values 15439 character = event.keyCode >= 96 && event.keyCode <= 105 ? 15440 ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode ); 15441 15442 clearTimeout( this.filterTimer ); 15443 15444 if ( character === prev ) { 15445 skip = true; 15446 } else { 15447 character = prev + character; 15448 } 15449 15450 match = this._filterMenuItems( character ); 15451 match = skip && match.index( this.active.next() ) !== -1 ? 15452 this.active.nextAll( ".ui-menu-item" ) : 15453 match; 15454 15455 // If no matches on the current filter, reset to the last character pressed 15456 // to move down the menu to the first item that starts with that character 15457 if ( !match.length ) { 15458 character = String.fromCharCode( event.keyCode ); 15459 match = this._filterMenuItems( character ); 15460 } 15461 15462 if ( match.length ) { 15463 this.focus( event, match ); 15464 this.previousFilter = character; 15465 this.filterTimer = this._delay( function() { 15466 delete this.previousFilter; 15467 }, 1000 ); 15468 } else { 15469 delete this.previousFilter; 15470 } 15471 } 15472 15473 if ( preventDefault ) { 15474 event.preventDefault(); 15475 } 15476 }, 15477 15478 _activate: function( event ) { 15479 if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { 15480 if ( this.active.children( "[aria-haspopup='true']" ).length ) { 15481 this.expand( event ); 15482 } else { 15483 this.select( event ); 15484 } 15485 } 15486 }, 15487 15488 refresh: function() { 15489 var menus, items, newSubmenus, newItems, newWrappers, 15490 that = this, 15491 icon = this.options.icons.submenu, 15492 submenus = this.element.find( this.options.menus ); 15493 15494 this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length ); 15495 15496 // Initialize nested menus 15497 newSubmenus = submenus.filter( ":not(.ui-menu)" ) 15498 .hide() 15499 .attr( { 15500 role: this.options.role, 15501 "aria-hidden": "true", 15502 "aria-expanded": "false" 15503 } ) 15504 .each( function() { 15505 var menu = $( this ), 15506 item = menu.prev(), 15507 submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true ); 15508 15509 that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon ); 15510 item 15511 .attr( "aria-haspopup", "true" ) 15512 .prepend( submenuCaret ); 15513 menu.attr( "aria-labelledby", item.attr( "id" ) ); 15514 } ); 15515 15516 this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" ); 15517 15518 menus = submenus.add( this.element ); 15519 items = menus.find( this.options.items ); 15520 15521 // Initialize menu-items containing spaces and/or dashes only as dividers 15522 items.not( ".ui-menu-item" ).each( function() { 15523 var item = $( this ); 15524 if ( that._isDivider( item ) ) { 15525 that._addClass( item, "ui-menu-divider", "ui-widget-content" ); 15526 } 15527 } ); 15528 15529 // Don't refresh list items that are already adapted 15530 newItems = items.not( ".ui-menu-item, .ui-menu-divider" ); 15531 newWrappers = newItems.children() 15532 .not( ".ui-menu" ) 15533 .uniqueId() 15534 .attr( { 15535 tabIndex: -1, 15536 role: this._itemRole() 15537 } ); 15538 this._addClass( newItems, "ui-menu-item" ) 15539 ._addClass( newWrappers, "ui-menu-item-wrapper" ); 15540 15541 // Add aria-disabled attribute to any disabled menu item 15542 items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); 15543 15544 // If the active item has been removed, blur the menu 15545 if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { 15546 this.blur(); 15547 } 15548 }, 15549 15550 _itemRole: function() { 15551 return { 15552 menu: "menuitem", 15553 listbox: "option" 15554 }[ this.options.role ]; 15555 }, 15556 15557 _setOption: function( key, value ) { 15558 if ( key === "icons" ) { 15559 var icons = this.element.find( ".ui-menu-icon" ); 15560 this._removeClass( icons, null, this.options.icons.submenu ) 15561 ._addClass( icons, null, value.submenu ); 15562 } 15563 this._super( key, value ); 15564 }, 15565 15566 _setOptionDisabled: function( value ) { 15567 this._super( value ); 15568 15569 this.element.attr( "aria-disabled", String( value ) ); 15570 this._toggleClass( null, "ui-state-disabled", !!value ); 15571 }, 15572 15573 focus: function( event, item ) { 15574 var nested, focused, activeParent; 15575 this.blur( event, event && event.type === "focus" ); 15576 15577 this._scrollIntoView( item ); 15578 15579 this.active = item.first(); 15580 15581 focused = this.active.children( ".ui-menu-item-wrapper" ); 15582 this._addClass( focused, null, "ui-state-active" ); 15583 15584 // Only update aria-activedescendant if there's a role 15585 // otherwise we assume focus is managed elsewhere 15586 if ( this.options.role ) { 15587 this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); 15588 } 15589 15590 // Highlight active parent menu item, if any 15591 activeParent = this.active 15592 .parent() 15593 .closest( ".ui-menu-item" ) 15594 .children( ".ui-menu-item-wrapper" ); 15595 this._addClass( activeParent, null, "ui-state-active" ); 15596 15597 if ( event && event.type === "keydown" ) { 15598 this._close(); 15599 } else { 15600 this.timer = this._delay( function() { 15601 this._close(); 15602 }, this.delay ); 15603 } 15604 15605 nested = item.children( ".ui-menu" ); 15606 if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { 15607 this._startOpening( nested ); 15608 } 15609 this.activeMenu = item.parent(); 15610 15611 this._trigger( "focus", event, { item: item } ); 15612 }, 15613 15614 _scrollIntoView: function( item ) { 15615 var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; 15616 if ( this._hasScroll() ) { 15617 borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; 15618 paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; 15619 offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; 15620 scroll = this.activeMenu.scrollTop(); 15621 elementHeight = this.activeMenu.height(); 15622 itemHeight = item.outerHeight(); 15623 15624 if ( offset < 0 ) { 15625 this.activeMenu.scrollTop( scroll + offset ); 15626 } else if ( offset + itemHeight > elementHeight ) { 15627 this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); 15628 } 15629 } 15630 }, 15631 15632 blur: function( event, fromFocus ) { 15633 if ( !fromFocus ) { 15634 clearTimeout( this.timer ); 15635 } 15636 15637 if ( !this.active ) { 15638 return; 15639 } 15640 15641 this._removeClass( this.active.children( ".ui-menu-item-wrapper" ), 15642 null, "ui-state-active" ); 15643 15644 this._trigger( "blur", event, { item: this.active } ); 15645 this.active = null; 15646 }, 15647 15648 _startOpening: function( submenu ) { 15649 clearTimeout( this.timer ); 15650 15651 // Don't open if already open fixes a Firefox bug that caused a .5 pixel 15652 // shift in the submenu position when mousing over the caret icon 15653 if ( submenu.attr( "aria-hidden" ) !== "true" ) { 15654 return; 15655 } 15656 15657 this.timer = this._delay( function() { 15658 this._close(); 15659 this._open( submenu ); 15660 }, this.delay ); 15661 }, 15662 15663 _open: function( submenu ) { 15664 var position = $.extend( { 15665 of: this.active 15666 }, this.options.position ); 15667 15668 clearTimeout( this.timer ); 15669 this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) 15670 .hide() 15671 .attr( "aria-hidden", "true" ); 15672 15673 submenu 15674 .show() 15675 .removeAttr( "aria-hidden" ) 15676 .attr( "aria-expanded", "true" ) 15677 .position( position ); 15678 }, 15679 15680 collapseAll: function( event, all ) { 15681 clearTimeout( this.timer ); 15682 this.timer = this._delay( function() { 15683
vendor: 5,432 bytes, lines 15684-15887
15684 // If we were passed an event, look for the submenu that contains the event 15685 var currentMenu = all ? this.element : 15686 $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); 15687 15688 // If we found no valid submenu ancestor, use the main menu to close all 15689 // sub menus anyway 15690 if ( !currentMenu.length ) { 15691 currentMenu = this.element; 15692 } 15693 15694 this._close( currentMenu ); 15695 15696 this.blur( event ); 15697 15698 // Work around active item staying active after menu is blurred 15699 this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" ); 15700 15701 this.activeMenu = currentMenu; 15702 }, all ? 0 : this.delay ); 15703 }, 15704 15705 // With no arguments, closes the currently active menu - if nothing is active 15706 // it closes all menus. If passed an argument, it will search for menus BELOW 15707 _close: function( startMenu ) { 15708 if ( !startMenu ) { 15709 startMenu = this.active ? this.active.parent() : this.element; 15710 } 15711 15712 startMenu.find( ".ui-menu" ) 15713 .hide() 15714 .attr( "aria-hidden", "true" ) 15715 .attr( "aria-expanded", "false" ); 15716 }, 15717 15718 _closeOnDocumentClick: function( event ) { 15719 return !$( event.target ).closest( ".ui-menu" ).length; 15720 }, 15721 15722 _isDivider: function( item ) { 15723 15724 // Match hyphen, em dash, en dash 15725 return !/[^\-\u2014\u2013\s]/.test( item.text() ); 15726 }, 15727 15728 collapse: function( event ) { 15729 var newItem = this.active && 15730 this.active.parent().closest( ".ui-menu-item", this.element ); 15731 if ( newItem && newItem.length ) { 15732 this._close(); 15733 this.focus( event, newItem ); 15734 } 15735 }, 15736 15737 expand: function( event ) { 15738 var newItem = this.active && this._menuItems( this.active.children( ".ui-menu" ) ).first(); 15739 15740 if ( newItem && newItem.length ) { 15741 this._open( newItem.parent() ); 15742 15743 // Delay so Firefox will not hide activedescendant change in expanding submenu from AT 15744 this._delay( function() { 15745 this.focus( event, newItem ); 15746 } ); 15747 } 15748 }, 15749 15750 next: function( event ) { 15751 this._move( "next", "first", event ); 15752 }, 15753 15754 previous: function( event ) { 15755 this._move( "prev", "last", event ); 15756 }, 15757 15758 isFirstItem: function() { 15759 return this.active && !this.active.prevAll( ".ui-menu-item" ).length; 15760 }, 15761 15762 isLastItem: function() { 15763 return this.active && !this.active.nextAll( ".ui-menu-item" ).length; 15764 }, 15765 15766 _menuItems: function( menu ) { 15767 return ( menu || this.element ) 15768 .find( this.options.items ) 15769 .filter( ".ui-menu-item" ); 15770 }, 15771 15772 _move: function( direction, filter, event ) { 15773 var next; 15774 if ( this.active ) { 15775 if ( direction === "first" || direction === "last" ) { 15776 next = this.active 15777 [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) 15778 .last(); 15779 } else { 15780 next = this.active 15781 [ direction + "All" ]( ".ui-menu-item" ) 15782 .first(); 15783 } 15784 } 15785 if ( !next || !next.length || !this.active ) { 15786 next = this._menuItems( this.activeMenu )[ filter ](); 15787 } 15788 15789 this.focus( event, next ); 15790 }, 15791 15792 nextPage: function( event ) { 15793 var item, base, height; 15794 15795 if ( !this.active ) { 15796 this.next( event ); 15797 return; 15798 } 15799 if ( this.isLastItem() ) { 15800 return; 15801 } 15802 if ( this._hasScroll() ) { 15803 base = this.active.offset().top; 15804 height = this.element.innerHeight(); 15805 15806 // jQuery 3.2 doesn't include scrollbars in innerHeight, add it back. 15807 if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) { 15808 height += this.element[ 0 ].offsetHeight - this.element.outerHeight(); 15809 } 15810 15811 this.active.nextAll( ".ui-menu-item" ).each( function() { 15812 item = $( this ); 15813 return item.offset().top - base - height < 0; 15814 } ); 15815 15816 this.focus( event, item ); 15817 } else { 15818 this.focus( event, this._menuItems( this.activeMenu ) 15819 [ !this.active ? "first" : "last" ]() ); 15820 } 15821 }, 15822 15823 previousPage: function( event ) { 15824 var item, base, height; 15825 if ( !this.active ) { 15826 this.next( event ); 15827 return; 15828 } 15829 if ( this.isFirstItem() ) { 15830 return; 15831 } 15832 if ( this._hasScroll() ) { 15833 base = this.active.offset().top; 15834 height = this.element.innerHeight(); 15835 15836 // jQuery 3.2 doesn't include scrollbars in innerHeight, add it back. 15837 if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) { 15838 height += this.element[ 0 ].offsetHeight - this.element.outerHeight(); 15839 } 15840 15841 this.active.prevAll( ".ui-menu-item" ).each( function() { 15842 item = $( this ); 15843 return item.offset().top - base + height > 0; 15844 } ); 15845 15846 this.focus( event, item ); 15847 } else { 15848 this.focus( event, this._menuItems( this.activeMenu ).first() ); 15849 } 15850 }, 15851 15852 _hasScroll: function() { 15853 return this.element.outerHeight() < this.element.prop( "scrollHeight" ); 15854 }, 15855 15856 select: function( event ) { 15857 15858 // TODO: It should never be possible to not have an active item at this 15859 // point, but the tests don't trigger mouseenter before click. 15860 this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); 15861 var ui = { item: this.active }; 15862 if ( !this.active.has( ".ui-menu" ).length ) { 15863 this.collapseAll( event, true ); 15864 } 15865 this._trigger( "select", event, ui ); 15866 }, 15867 15868 _filterMenuItems: function( character ) { 15869 var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ), 15870 regex = new RegExp( "^" + escapedCharacter, "i" ); 15871 15872 return this.activeMenu 15873 .find( this.options.items ) 15874 15875 // Only match on items, not dividers or other content (#10571) 15876 .filter( ".ui-menu-item" ) 15877 .filter( function() { 15878 return regex.test( 15879 String.prototype.trim.call( 15880 $( this ).children( ".ui-menu-item-wrapper" ).text() ) ); 15881 } ); 15882 } 15883} ); 15884 15885 15886/*! 15887 * jQuery UI Autocomplete 1.1
158873.1 15888 * http://jqueryui.com 15889 * 15890 * Copyright jQuery Foundation and other contributors 15891 * Released under the MIT license. 15892 * http://jquery.org/license 15893 */ 15894 15895//>>label: Autocomplete 15896//>>group: Widgets 15897//>>description: Lists suggested words as the user is typing. 15898//>>docs: http://api.jqueryui.com/autocomplete/ 15899//>>demos: http://jqueryui.com/autocomplete/ 15900//>>css.structure: ../../themes/base/core.css 15901//>>css.structure: ../../themes/base/autocomplete.css 15902//>>css.theme: ../../themes/base/theme.css 15903 15904 15905$.widget( "ui.autocomplete", { 15906 version: "1.13.1
vendor: 16,621 bytes, lines 15906-16543
15906", 15907 defaultElement: "<input>", 15908 options: { 15909 appendTo: null, 15910 autoFocus: false, 15911 delay: 300, 15912 minLength: 1, 15913 position: { 15914 my: "left top", 15915 at: "left bottom", 15916 collision: "none" 15917 }, 15918 source: null, 15919 15920 // Callbacks 15921 change: null, 15922 close: null, 15923 focus: null, 15924 open: null, 15925 response: null, 15926 search: null, 15927 select: null 15928 }, 15929 15930 requestIndex: 0, 15931 pending: 0, 15932 liveRegionTimer: null, 15933 15934 _create: function() { 15935 15936 // Some browsers only repeat keydown events, not keypress events, 15937 // so we use the suppressKeyPress flag to determine if we've already 15938 // handled the keydown event. #7269 15939 // Unfortunately the code for & in keypress is the same as the up arrow, 15940 // so we use the suppressKeyPressRepeat flag to avoid handling keypress 15941 // events when we know the keydown event was used to modify the 15942 // search term. #7799 15943 var suppressKeyPress, suppressKeyPressRepeat, suppressInput, 15944 nodeName = this.element[ 0 ].nodeName.toLowerCase(), 15945 isTextarea = nodeName === "textarea", 15946 isInput = nodeName === "input"; 15947 15948 // Textareas are always multi-line 15949 // Inputs are always single-line, even if inside a contentEditable element 15950 // IE also treats inputs as contentEditable 15951 // All other element types are determined by whether or not they're contentEditable 15952 this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element ); 15953 15954 this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; 15955 this.isNewMenu = true; 15956 15957 this._addClass( "ui-autocomplete-input" ); 15958 this.element.attr( "autocomplete", "off" ); 15959 15960 this._on( this.element, { 15961 keydown: function( event ) { 15962 if ( this.element.prop( "readOnly" ) ) { 15963 suppressKeyPress = true; 15964 suppressInput = true; 15965 suppressKeyPressRepeat = true; 15966 return; 15967 } 15968 15969 suppressKeyPress = false; 15970 suppressInput = false; 15971 suppressKeyPressRepeat = false; 15972 var keyCode = $.ui.keyCode; 15973 switch ( event.keyCode ) { 15974 case keyCode.PAGE_UP: 15975 suppressKeyPress = true; 15976 this._move( "previousPage", event ); 15977 break; 15978 case keyCode.PAGE_DOWN: 15979 suppressKeyPress = true; 15980 this._move( "nextPage", event ); 15981 break; 15982 case keyCode.UP: 15983 suppressKeyPress = true; 15984 this._keyEvent( "previous", event ); 15985 break; 15986 case keyCode.DOWN: 15987 suppressKeyPress = true; 15988 this._keyEvent( "next", event ); 15989 break; 15990 case keyCode.ENTER: 15991 15992 // when menu is open and has focus 15993 if ( this.menu.active ) { 15994 15995 // #6055 - Opera still allows the keypress to occur 15996 // which causes forms to submit 15997 suppressKeyPress = true; 15998 event.preventDefault(); 15999 this.menu.select( event ); 16000 } 16001 break; 16002 case keyCode.TAB: 16003 if ( this.menu.active ) { 16004 this.menu.select( event ); 16005 } 16006 break; 16007 case keyCode.ESCAPE: 16008 if ( this.menu.element.is( ":visible" ) ) { 16009 if ( !this.isMultiLine ) { 16010 this._value( this.term ); 16011 } 16012 this.close( event ); 16013 16014 // Different browsers have different default behavior for escape 16015 // Single press can mean undo or clear 16016 // Double press in IE means clear the whole form 16017 event.preventDefault(); 16018 } 16019 break; 16020 default: 16021 suppressKeyPressRepeat = true; 16022 16023 // search timeout should be triggered before the input value is changed 16024 this._searchTimeout( event ); 16025 break; 16026 } 16027 }, 16028 keypress: function( event ) { 16029 if ( suppressKeyPress ) { 16030 suppressKeyPress = false; 16031 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { 16032 event.preventDefault(); 16033 } 16034 return; 16035 } 16036 if ( suppressKeyPressRepeat ) { 16037 return; 16038 } 16039 16040 // Replicate some key handlers to allow them to repeat in Firefox and Opera 16041 var keyCode = $.ui.keyCode; 16042 switch ( event.keyCode ) { 16043 case keyCode.PAGE_UP: 16044 this._move( "previousPage", event ); 16045 break; 16046 case keyCode.PAGE_DOWN: 16047 this._move( "nextPage", event ); 16048 break; 16049 case keyCode.UP: 16050 this._keyEvent( "previous", event ); 16051 break; 16052 case keyCode.DOWN: 16053 this._keyEvent( "next", event ); 16054 break; 16055 } 16056 }, 16057 input: function( event ) { 16058 if ( suppressInput ) { 16059 suppressInput = false; 16060 event.preventDefault(); 16061 return; 16062 } 16063 this._searchTimeout( event ); 16064 }, 16065 focus: function() { 16066 this.selectedItem = null; 16067 this.previous = this._value(); 16068 }, 16069 blur: function( event ) { 16070 clearTimeout( this.searching ); 16071 this.close( event ); 16072 this._change( event ); 16073 } 16074 } ); 16075 16076 this._initSource(); 16077 this.menu = $( "<ul>" ) 16078 .appendTo( this._appendTo() ) 16079 .menu( { 16080 16081 // disable ARIA support, the live region takes care of that 16082 role: null 16083 } ) 16084 .hide() 16085 16086 // Support: IE 11 only, Edge <= 14 16087 // For other browsers, we preventDefault() on the mousedown event 16088 // to keep the dropdown from taking focus from the input. This doesn't 16089 // work for IE/Edge, causing problems with selection and scrolling (#9638) 16090 // Happily, IE and Edge support an "unselectable" attribute that 16091 // prevents an element from receiving focus, exactly what we want here. 16092 .attr( { 16093 "unselectable": "on" 16094 } ) 16095 .menu( "instance" ); 16096 16097 this._addClass( this.menu.element, "ui-autocomplete", "ui-front" ); 16098 this._on( this.menu.element, { 16099 mousedown: function( event ) { 16100 16101 // Prevent moving focus out of the text field 16102 event.preventDefault(); 16103 }, 16104 menufocus: function( event, ui ) { 16105 var label, item; 16106 16107 // support: Firefox 16108 // Prevent accidental activation of menu items in Firefox (#7024 #9118) 16109 if ( this.isNewMenu ) { 16110 this.isNewMenu = false; 16111 if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { 16112 this.menu.blur(); 16113 16114 this.document.one( "mousemove", function() { 16115 $( event.target ).trigger( event.originalEvent ); 16116 } ); 16117 16118 return; 16119 } 16120 } 16121 16122 item = ui.item.data( "ui-autocomplete-item" ); 16123 if ( false !== this._trigger( "focus", event, { item: item } ) ) { 16124 16125 // use value to match what will end up in the input, if it was a key event 16126 if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { 16127 this._value( item.value ); 16128 } 16129 } 16130 16131 // Announce the value in the liveRegion 16132 label = ui.item.attr( "aria-label" ) || item.value; 16133 if ( label && String.prototype.trim.call( label ).length ) { 16134 clearTimeout( this.liveRegionTimer ); 16135 this.liveRegionTimer = this._delay( function() { 16136 this.liveRegion.html( $( "<div>" ).text( label ) ); 16137 }, 100 ); 16138 } 16139 }, 16140 menuselect: function( event, ui ) { 16141 var item = ui.item.data( "ui-autocomplete-item" ), 16142 previous = this.previous; 16143 16144 // Only trigger when focus was lost (click on menu) 16145 if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) { 16146 this.element.trigger( "focus" ); 16147 this.previous = previous; 16148 16149 // #6109 - IE triggers two focus events and the second 16150 // is asynchronous, so we need to reset the previous 16151 // term synchronously and asynchronously :-( 16152 this._delay( function() { 16153 this.previous = previous; 16154 this.selectedItem = item; 16155 } ); 16156 } 16157 16158 if ( false !== this._trigger( "select", event, { item: item } ) ) { 16159 this._value( item.value ); 16160 } 16161 16162 // reset the term after the select event 16163 // this allows custom select handling to work properly 16164 this.term = this._value(); 16165 16166 this.close( event ); 16167 this.selectedItem = item; 16168 } 16169 } ); 16170 16171 this.liveRegion = $( "<div>", { 16172 role: "status", 16173 "aria-live": "assertive", 16174 "aria-relevant": "additions" 16175 } ) 16176 .appendTo( this.document[ 0 ].body ); 16177 16178 this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" ); 16179 16180 // Turning off autocomplete prevents the browser from remembering the 16181 // value when navigating through history, so we re-enable autocomplete 16182 // if the page is unloaded before the widget is destroyed. #7790 16183 this._on( this.window, { 16184 beforeunload: function() { 16185 this.element.removeAttr( "autocomplete" ); 16186 } 16187 } ); 16188 }, 16189 16190 _destroy: function() { 16191 clearTimeout( this.searching ); 16192 this.element.removeAttr( "autocomplete" ); 16193 this.menu.element.remove(); 16194 this.liveRegion.remove(); 16195 }, 16196 16197 _setOption: function( key, value ) { 16198 this._super( key, value ); 16199 if ( key === "source" ) { 16200 this._initSource(); 16201 } 16202 if ( key === "appendTo" ) { 16203 this.menu.element.appendTo( this._appendTo() ); 16204 } 16205 if ( key === "disabled" && value && this.xhr ) { 16206 this.xhr.abort(); 16207 } 16208 }, 16209 16210 _isEventTargetInWidget: function( event ) { 16211 var menuElement = this.menu.element[ 0 ]; 16212 16213 return event.target === this.element[ 0 ] || 16214 event.target === menuElement || 16215 $.contains( menuElement, event.target ); 16216 }, 16217 16218 _closeOnClickOutside: function( event ) { 16219 if ( !this._isEventTargetInWidget( event ) ) { 16220 this.close(); 16221 } 16222 }, 16223 16224 _appendTo: function() { 16225 var element = this.options.appendTo; 16226 16227 if ( element ) { 16228 element = element.jquery || element.nodeType ? 16229 $( element ) : 16230 this.document.find( element ).eq( 0 ); 16231 } 16232 16233 if ( !element || !element[ 0 ] ) { 16234 element = this.element.closest( ".ui-front, dialog" ); 16235 } 16236 16237 if ( !element.length ) { 16238 element = this.document[ 0 ].body; 16239 } 16240 16241 return element; 16242 }, 16243 16244 _initSource: function() { 16245 var array, url, 16246 that = this; 16247 if ( Array.isArray( this.options.source ) ) { 16248 array = this.options.source; 16249 this.source = function( request, response ) { 16250 response( $.ui.autocomplete.filter( array, request.term ) ); 16251 }; 16252 } else if ( typeof this.options.source === "string" ) { 16253 url = this.options.source; 16254 this.source = function( request, response ) { 16255 if ( that.xhr ) { 16256 that.xhr.abort(); 16257 } 16258 that.xhr = $.ajax( { 16259 url: url, 16260 data: request, 16261 dataType: "json", 16262 success: function( data ) { 16263 response( data ); 16264 }, 16265 error: function() { 16266 response( [] ); 16267 } 16268 } ); 16269 }; 16270 } else { 16271 this.source = this.options.source; 16272 } 16273 }, 16274 16275 _searchTimeout: function( event ) { 16276 clearTimeout( this.searching ); 16277 this.searching = this._delay( function() { 16278 16279 // Search if the value has changed, or if the user retypes the same value (see #7434) 16280 var equalValues = this.term === this._value(), 16281 menuVisible = this.menu.element.is( ":visible" ), 16282 modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; 16283 16284 if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) { 16285 this.selectedItem = null; 16286 this.search( null, event ); 16287 } 16288 }, this.options.delay ); 16289 }, 16290 16291 search: function( value, event ) { 16292 value = value != null ? value : this._value(); 16293 16294 // Always save the actual value, not the one passed as an argument 16295 this.term = this._value(); 16296 16297 if ( value.length < this.options.minLength ) { 16298 return this.close( event ); 16299 } 16300 16301 if ( this._trigger( "search", event ) === false ) { 16302 return; 16303 } 16304 16305 return this._search( value ); 16306 }, 16307 16308 _search: function( value ) { 16309 this.pending++; 16310 this._addClass( "ui-autocomplete-loading" ); 16311 this.cancelSearch = false; 16312 16313 this.source( { term: value }, this._response() ); 16314 }, 16315 16316 _response: function() { 16317 var index = ++this.requestIndex; 16318 16319 return function( content ) { 16320 if ( index === this.requestIndex ) { 16321 this.__response( content ); 16322 } 16323 16324 this.pending--; 16325 if ( !this.pending ) { 16326 this._removeClass( "ui-autocomplete-loading" ); 16327 } 16328 }.bind( this ); 16329 }, 16330 16331 __response: function( content ) { 16332 if ( content ) { 16333 content = this._normalize( content ); 16334 } 16335 this._trigger( "response", null, { content: content } ); 16336 if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { 16337 this._suggest( content ); 16338 this._trigger( "open" ); 16339 } else { 16340 16341 // use ._close() instead of .close() so we don't cancel future searches 16342 this._close(); 16343 } 16344 }, 16345 16346 close: function( event ) { 16347 this.cancelSearch = true; 16348 this._close( event ); 16349 }, 16350 16351 _close: function( event ) { 16352 16353 // Remove the handler that closes the menu on outside clicks 16354 this._off( this.document, "mousedown" ); 16355 16356 if ( this.menu.element.is( ":visible" ) ) { 16357 this.menu.element.hide(); 16358 this.menu.blur(); 16359 this.isNewMenu = true; 16360 this._trigger( "close", event ); 16361 } 16362 }, 16363 16364 _change: function( event ) { 16365 if ( this.previous !== this._value() ) { 16366 this._trigger( "change", event, { item: this.selectedItem } ); 16367 } 16368 }, 16369 16370 _normalize: function( items ) { 16371 16372 // assume all items have the right format when the first item is complete 16373 if ( items.length && items[ 0 ].label && items[ 0 ].value ) { 16374 return items; 16375 } 16376 return $.map( items, function( item ) { 16377 if ( typeof item === "string" ) { 16378 return { 16379 label: item, 16380 value: item 16381 }; 16382 } 16383 return $.extend( {}, item, { 16384 label: item.label || item.value, 16385 value: item.value || item.label 16386 } ); 16387 } ); 16388 }, 16389 16390 _suggest: function( items ) { 16391 var ul = this.menu.element.empty(); 16392 this._renderMenu( ul, items ); 16393 this.isNewMenu = true; 16394 this.menu.refresh(); 16395 16396 // Size and position menu 16397 ul.show(); 16398 this._resizeMenu(); 16399 ul.position( $.extend( { 16400 of: this.element 16401 }, this.options.position ) ); 16402 16403 if ( this.options.autoFocus ) { 16404 this.menu.next(); 16405 } 16406 16407 // Listen for interactions outside of the widget (#6642) 16408 this._on( this.document, { 16409 mousedown: "_closeOnClickOutside" 16410 } ); 16411 }, 16412 16413 _resizeMenu: function() { 16414 var ul = this.menu.element; 16415 ul.outerWidth( Math.max( 16416 16417 // Firefox wraps long text (possibly a rounding bug) 16418 // so we add 1px to avoid the wrapping (#7513) 16419 ul.width( "" ).outerWidth() + 1, 16420 this.element.outerWidth() 16421 ) ); 16422 }, 16423 16424 _renderMenu: function( ul, items ) { 16425 var that = this; 16426 $.each( items, function( index, item ) { 16427 that._renderItemData( ul, item ); 16428 } ); 16429 }, 16430 16431 _renderItemData: function( ul, item ) { 16432 return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); 16433 }, 16434 16435 _renderItem: function( ul, item ) { 16436 return $( "<li>" ) 16437 .append( $( "<div>" ).text( item.label ) ) 16438 .appendTo( ul ); 16439 }, 16440 16441 _move: function( direction, event ) { 16442 if ( !this.menu.element.is( ":visible" ) ) { 16443 this.search( null, event ); 16444 return; 16445 } 16446 if ( this.menu.isFirstItem() && /^previous/.test( direction ) || 16447 this.menu.isLastItem() && /^next/.test( direction ) ) { 16448 16449 if ( !this.isMultiLine ) { 16450 this._value( this.term ); 16451 } 16452 16453 this.menu.blur(); 16454 return; 16455 } 16456 this.menu[ direction ]( event ); 16457 }, 16458 16459 widget: function() { 16460 return this.menu.element; 16461 }, 16462 16463 _value: function() { 16464 return this.valueMethod.apply( this.element, arguments ); 16465 }, 16466 16467 _keyEvent: function( keyEvent, event ) { 16468 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { 16469 this._move( keyEvent, event ); 16470 16471 // Prevents moving cursor to beginning/end of the text field in some browsers 16472 event.preventDefault(); 16473 } 16474 }, 16475 16476 // Support: Chrome <=50 16477 // We should be able to just use this.element.prop( "isContentEditable" ) 16478 // but hidden elements always report false in Chrome. 16479 // https://code.google.com/p/chromium/issues/detail?id=313082 16480 _isContentEditable: function( element ) { 16481 if ( !element.length ) { 16482 return false; 16483 } 16484 16485 var editable = element.prop( "contentEditable" ); 16486 16487 if ( editable === "inherit" ) { 16488 return this._isContentEditable( element.parent() ); 16489 } 16490 16491 return editable === "true"; 16492 } 16493} ); 16494 16495$.extend( $.ui.autocomplete, { 16496 escapeRegex: function( value ) { 16497 return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); 16498 }, 16499 filter: function( array, term ) { 16500 var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" ); 16501 return $.grep( array, function( value ) { 16502 return matcher.test( value.label || value.value || value ); 16503 } ); 16504 } 16505} ); 16506 16507// Live region extension, adding a `messages` option 16508// NOTE: This is an experimental API. We are still investigating 16509// a full solution for string manipulation and internationalization. 16510$.widget( "ui.autocomplete", $.ui.autocomplete, { 16511 options: { 16512 messages: { 16513 noResults: "No search results.", 16514 results: function( amount ) { 16515 return amount + ( amount > 1 ? " results are" : " result is" ) + 16516 " available, use up and down arrow keys to navigate."; 16517 } 16518 } 16519 }, 16520 16521 __response: function( content ) { 16522 var message; 16523 this._superApply( arguments ); 16524 if ( this.options.disabled || this.cancelSearch ) { 16525 return; 16526 } 16527 if ( content && content.length ) { 16528 message = this.options.messages.results( content.length ); 16529 } else { 16530 message = this.options.messages.noResults; 16531 } 16532 clearTimeout( this.liveRegionTimer ); 16533 this.liveRegionTimer = this._delay( function() { 16534 this.liveRegion.html( $( "<div>" ).text( message ) ); 16535 }, 100 ); 16536 } 16537} ); 16538 16539var widgetsAutocomplete = $.ui.autocomplete; 16540 16541 16542/*! 16543 * jQuery UI Controlgroup 1.13.
165431 16544 * http://jqueryui.com 16545 * 16546 * Copyright jQuery Foundation and other contributors 16547 * Released under the MIT license. 16548 * http://jquery.org/license 16549 */ 16550 16551//>>label: Controlgroup 16552//>>group: Widgets 16553//>>description: Visually groups form control widgets 16554//>>docs: http://api.jqueryui.com/controlgroup/ 16555//>>demos: http://jqueryui.com/controlgroup/ 16556//>>css.structure: ../../themes/base/core.css 16557//>>css.structure: ../../themes/base/controlgroup.css 16558//>>css.theme: ../../themes/base/theme.css 16559 16560 16561var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g; 16562 16563var widgetsControlgroup = $.widget( "ui.controlgroup", { 16564 version: "1.13.1
vendor: 7,734 bytes, lines 16564-16828
16564", 16565 defaultElement: "<div>", 16566 options: { 16567 direction: "horizontal", 16568 disabled: null, 16569 onlyVisible: true, 16570 items: { 16571 "button": "input[type=button], input[type=submit], input[type=reset], button, a", 16572 "controlgroupLabel": ".ui-controlgroup-label", 16573 "checkboxradio": "input[type='checkbox'], input[type='radio']", 16574 "selectmenu": "select", 16575 "spinner": ".ui-spinner-input" 16576 } 16577 }, 16578 16579 _create: function() { 16580 this._enhance(); 16581 }, 16582 16583 // To support the enhanced option in jQuery Mobile, we isolate DOM manipulation 16584 _enhance: function() { 16585 this.element.attr( "role", "toolbar" ); 16586 this.refresh(); 16587 }, 16588 16589 _destroy: function() { 16590 this._callChildMethod( "destroy" ); 16591 this.childWidgets.removeData( "ui-controlgroup-data" ); 16592 this.element.removeAttr( "role" ); 16593 if ( this.options.items.controlgroupLabel ) { 16594 this.element 16595 .find( this.options.items.controlgroupLabel ) 16596 .find( ".ui-controlgroup-label-contents" ) 16597 .contents().unwrap(); 16598 } 16599 }, 16600 16601 _initWidgets: function() { 16602 var that = this, 16603 childWidgets = []; 16604 16605 // First we iterate over each of the items options 16606 $.each( this.options.items, function( widget, selector ) { 16607 var labels; 16608 var options = {}; 16609 16610 // Make sure the widget has a selector set 16611 if ( !selector ) { 16612 return; 16613 } 16614 16615 if ( widget === "controlgroupLabel" ) { 16616 labels = that.element.find( selector ); 16617 labels.each( function() { 16618 var element = $( this ); 16619 16620 if ( element.children( ".ui-controlgroup-label-contents" ).length ) { 16621 return; 16622 } 16623 element.contents() 16624 .wrapAll( "<span class='ui-controlgroup-label-contents'></span>" ); 16625 } ); 16626 that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" ); 16627 childWidgets = childWidgets.concat( labels.get() ); 16628 return; 16629 } 16630 16631 // Make sure the widget actually exists 16632 if ( !$.fn[ widget ] ) { 16633 return; 16634 } 16635 16636 // We assume everything is in the middle to start because we can't determine 16637 // first / last elements until all enhancments are done. 16638 if ( that[ "_" + widget + "Options" ] ) { 16639 options = that[ "_" + widget + "Options" ]( "middle" ); 16640 } else { 16641 options = { classes: {} }; 16642 } 16643 16644 // Find instances of this widget inside controlgroup and init them 16645 that.element 16646 .find( selector ) 16647 .each( function() { 16648 var element = $( this ); 16649 var instance = element[ widget ]( "instance" ); 16650 16651 // We need to clone the default options for this type of widget to avoid 16652 // polluting the variable options which has a wider scope than a single widget. 16653 var instanceOptions = $.widget.extend( {}, options ); 16654 16655 // If the button is the child of a spinner ignore it 16656 // TODO: Find a more generic solution 16657 if ( widget === "button" && element.parent( ".ui-spinner" ).length ) { 16658 return; 16659 } 16660 16661 // Create the widget if it doesn't exist 16662 if ( !instance ) { 16663 instance = element[ widget ]()[ widget ]( "instance" ); 16664 } 16665 if ( instance ) { 16666 instanceOptions.classes = 16667 that._resolveClassesValues( instanceOptions.classes, instance ); 16668 } 16669 element[ widget ]( instanceOptions ); 16670 16671 // Store an instance of the controlgroup to be able to reference 16672 // from the outermost element for changing options and refresh 16673 var widgetElement = element[ widget ]( "widget" ); 16674 $.data( widgetElement[ 0 ], "ui-controlgroup-data", 16675 instance ? instance : element[ widget ]( "instance" ) ); 16676 16677 childWidgets.push( widgetElement[ 0 ] ); 16678 } ); 16679 } ); 16680 16681 this.childWidgets = $( $.uniqueSort( childWidgets ) ); 16682 this._addClass( this.childWidgets, "ui-controlgroup-item" ); 16683 }, 16684 16685 _callChildMethod: function( method ) { 16686 this.childWidgets.each( function() { 16687 var element = $( this ), 16688 data = element.data( "ui-controlgroup-data" ); 16689 if ( data && data[ method ] ) { 16690 data[ method ](); 16691 } 16692 } ); 16693 }, 16694 16695 _updateCornerClass: function( element, position ) { 16696 var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"; 16697 var add = this._buildSimpleOptions( position, "label" ).classes.label; 16698 16699 this._removeClass( element, null, remove ); 16700 this._addClass( element, null, add ); 16701 }, 16702 16703 _buildSimpleOptions: function( position, key ) { 16704 var direction = this.options.direction === "vertical"; 16705 var result = { 16706 classes: {} 16707 }; 16708 result.classes[ key ] = { 16709 "middle": "", 16710 "first": "ui-corner-" + ( direction ? "top" : "left" ), 16711 "last": "ui-corner-" + ( direction ? "bottom" : "right" ), 16712 "only": "ui-corner-all" 16713 }[ position ]; 16714 16715 return result; 16716 }, 16717 16718 _spinnerOptions: function( position ) { 16719 var options = this._buildSimpleOptions( position, "ui-spinner" ); 16720 16721 options.classes[ "ui-spinner-up" ] = ""; 16722 options.classes[ "ui-spinner-down" ] = ""; 16723 16724 return options; 16725 }, 16726 16727 _buttonOptions: function( position ) { 16728 return this._buildSimpleOptions( position, "ui-button" ); 16729 }, 16730 16731 _checkboxradioOptions: function( position ) { 16732 return this._buildSimpleOptions( position, "ui-checkboxradio-label" ); 16733 }, 16734 16735 _selectmenuOptions: function( position ) { 16736 var direction = this.options.direction === "vertical"; 16737 return { 16738 width: direction ? "auto" : false, 16739 classes: { 16740 middle: { 16741 "ui-selectmenu-button-open": "", 16742 "ui-selectmenu-button-closed": "" 16743 }, 16744 first: { 16745 "ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ), 16746 "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" ) 16747 }, 16748 last: { 16749 "ui-selectmenu-button-open": direction ? "" : "ui-corner-tr", 16750 "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" ) 16751 }, 16752 only: { 16753 "ui-selectmenu-button-open": "ui-corner-top", 16754 "ui-selectmenu-button-closed": "ui-corner-all" 16755 } 16756 16757 }[ position ] 16758 }; 16759 }, 16760 16761 _resolveClassesValues: function( classes, instance ) { 16762 var result = {}; 16763 $.each( classes, function( key ) { 16764 var current = instance.options.classes[ key ] || ""; 16765 current = String.prototype.trim.call( current.replace( controlgroupCornerRegex, "" ) ); 16766 result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " ); 16767 } ); 16768 return result; 16769 }, 16770 16771 _setOption: function( key, value ) { 16772 if ( key === "direction" ) { 16773 this._removeClass( "ui-controlgroup-" + this.options.direction ); 16774 } 16775 16776 this._super( key, value ); 16777 if ( key === "disabled" ) { 16778 this._callChildMethod( value ? "disable" : "enable" ); 16779 return; 16780 } 16781 16782 this.refresh(); 16783 }, 16784 16785 refresh: function() { 16786 var children, 16787 that = this; 16788 16789 this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction ); 16790 16791 if ( this.options.direction === "horizontal" ) { 16792 this._addClass( null, "ui-helper-clearfix" ); 16793 } 16794 this._initWidgets(); 16795 16796 children = this.childWidgets; 16797 16798 // We filter here because we need to track all childWidgets not just the visible ones 16799 if ( this.options.onlyVisible ) { 16800 children = children.filter( ":visible" ); 16801 } 16802 16803 if ( children.length ) { 16804 16805 // We do this last because we need to make sure all enhancment is done 16806 // before determining first and last 16807 $.each( [ "first", "last" ], function( index, value ) { 16808 var instance = children[ value ]().data( "ui-controlgroup-data" ); 16809 16810 if ( instance && that[ "_" + instance.widgetName + "Options" ] ) { 16811 var options = that[ "_" + instance.widgetName + "Options" ]( 16812 children.length === 1 ? "only" : value 16813 ); 16814 options.classes = that._resolveClassesValues( options.classes, instance ); 16815 instance.element[ instance.widgetName ]( options ); 16816 } else { 16817 that._updateCornerClass( children[ value ](), value ); 16818 } 16819 } ); 16820 16821 // Finally call the refresh method on each of the child widgets. 16822 this._callChildMethod( "refresh" ); 16823 } 16824 } 16825} ); 16826 16827/*! 16828 * jQuery UI Checkboxradio 1.1
vendor: 4,983 bytes, lines 16828-17006
168283.1 16829 * http://jqueryui.com 16830 * 16831 * Copyright jQuery Foundation and other contributors 16832 * Released under the MIT license. 16833 * http://jquery.org/license 16834 */ 16835 16836//>>label: Checkboxradio 16837//>>group: Widgets 16838//>>description: Enhances a form with multiple themeable checkboxes or radio buttons. 16839//>>docs: http://api.jqueryui.com/checkboxradio/ 16840//>>demos: http://jqueryui.com/checkboxradio/ 16841//>>css.structure: ../../themes/base/core.css 16842//>>css.structure: ../../themes/base/button.css 16843//>>css.structure: ../../themes/base/checkboxradio.css 16844//>>css.theme: ../../themes/base/theme.css 16845 16846 16847$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, { 16848 version: "1.13.1", 16849 options: { 16850 disabled: null, 16851 label: null, 16852 icon: true, 16853 classes: { 16854 "ui-checkboxradio-label": "ui-corner-all", 16855 "ui-checkboxradio-icon": "ui-corner-all" 16856 } 16857 }, 16858 16859 _getCreateOptions: function() { 16860 var disabled, labels; 16861 var that = this; 16862 var options = this._super() || {}; 16863 16864 // We read the type here, because it makes more sense to throw a element type error first, 16865 // rather then the error for lack of a label. Often if its the wrong type, it 16866 // won't have a label (e.g. calling on a div, btn, etc) 16867 this._readType(); 16868 16869 labels = this.element.labels(); 16870 16871 // If there are multiple labels, use the last one 16872 this.label = $( labels[ labels.length - 1 ] ); 16873 if ( !this.label.length ) { 16874 $.error( "No label found for checkboxradio widget" ); 16875 } 16876 16877 this.originalLabel = ""; 16878 16879 // We need to get the label text but this may also need to make sure it does not contain the 16880 // input itself. 16881 this.label.contents().not( this.element[ 0 ] ).each( function() { 16882 16883 // The label contents could be text, html, or a mix. We concat each element to get a 16884 // string representation of the label, without the input as part of it. 16885 that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML; 16886 } ); 16887 16888 // Set the label option if we found label text 16889 if ( this.originalLabel ) { 16890 options.label = this.originalLabel; 16891 } 16892 16893 disabled = this.element[ 0 ].disabled; 16894 if ( disabled != null ) { 16895 options.disabled = disabled; 16896 } 16897 return options; 16898 }, 16899 16900 _create: function() { 16901 var checked = this.element[ 0 ].checked; 16902 16903 this._bindFormResetHandler(); 16904 16905 if ( this.options.disabled == null ) { 16906 this.options.disabled = this.element[ 0 ].disabled; 16907 } 16908 16909 this._setOption( "disabled", this.options.disabled ); 16910 this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" ); 16911 this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" ); 16912 16913 if ( this.type === "radio" ) { 16914 this._addClass( this.label, "ui-checkboxradio-radio-label" ); 16915 } 16916 16917 if ( this.options.label && this.options.label !== this.originalLabel ) { 16918 this._updateLabel(); 16919 } else if ( this.originalLabel ) { 16920 this.options.label = this.originalLabel; 16921 } 16922 16923 this._enhance(); 16924 16925 if ( checked ) { 16926 this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" ); 16927 } 16928 16929 this._on( { 16930 change: "_toggleClasses", 16931 focus: function() { 16932 this._addClass( this.label, null, "ui-state-focus ui-visual-focus" ); 16933 }, 16934 blur: function() { 16935 this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" ); 16936 } 16937 } ); 16938 }, 16939 16940 _readType: function() { 16941 var nodeName = this.element[ 0 ].nodeName.toLowerCase(); 16942 this.type = this.element[ 0 ].type; 16943 if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) { 16944 $.error( "Can't create checkboxradio on element.nodeName=" + nodeName + 16945 " and element.type=" + this.type ); 16946 } 16947 }, 16948 16949 // Support jQuery Mobile enhanced option 16950 _enhance: function() { 16951 this._updateIcon( this.element[ 0 ].checked ); 16952 }, 16953 16954 widget: function() { 16955 return this.label; 16956 }, 16957 16958 _getRadioGroup: function() { 16959 var group; 16960 var name = this.element[ 0 ].name; 16961 var nameSelector = "input[name='" + $.escapeSelector( name ) + "']"; 16962 16963 if ( !name ) { 16964 return $( [] ); 16965 } 16966 16967 if ( this.form.length ) { 16968 group = $( this.form[ 0 ].elements ).filter( nameSelector ); 16969 } else { 16970 16971 // Not inside a form, check all inputs that also are not inside a form 16972 group = $( nameSelector ).filter( function() { 16973 return $( this )._form().length === 0; 16974 } ); 16975 } 16976 16977 return group.not( this.element ); 16978 }, 16979 16980 _toggleClasses: function() { 16981 var checked = this.element[ 0 ].checked; 16982 this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked ); 16983 16984 if ( this.options.icon && this.type === "checkbox" ) { 16985 this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked ) 16986 ._toggleClass( this.icon, null, "ui-icon-blank", !checked ); 16987 } 16988 16989 if ( this.type === "radio" ) { 16990 this._getRadioGroup() 16991 .each( function() { 16992 var instance = $( this ).checkboxradio( "instance" ); 16993 16994 if ( instance ) { 16995 instance._removeClass( instance.label, 16996 "ui-checkboxradio-checked", "ui-state-active" ); 16997 } 16998 } ); 16999 } 17000 }, 17001 17002 _destroy: function() { 17003 this._unbindFormResetHandler(); 17004 17005 if ( this.icon ) { 17006 this.icon.remove();
vendor: 2,708 bytes, lines 17007-17113
17007 this.iconSpace.remove(); 17008 } 17009 }, 17010 17011 _setOption: function( key, value ) { 17012 17013 // We don't allow the value to be set to nothing 17014 if ( key === "label" && !value ) { 17015 return; 17016 } 17017 17018 this._super( key, value ); 17019 17020 if ( key === "disabled" ) { 17021 this._toggleClass( this.label, null, "ui-state-disabled", value ); 17022 this.element[ 0 ].disabled = value; 17023 17024 // Don't refresh when setting disabled 17025 return; 17026 } 17027 this.refresh(); 17028 }, 17029 17030 _updateIcon: function( checked ) { 17031 var toAdd = "ui-icon ui-icon-background "; 17032 17033 if ( this.options.icon ) { 17034 if ( !this.icon ) { 17035 this.icon = $( "<span>" ); 17036 this.iconSpace = $( "<span> </span>" ); 17037 this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" ); 17038 } 17039 17040 if ( this.type === "checkbox" ) { 17041 toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank"; 17042 this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" ); 17043 } else { 17044 toAdd += "ui-icon-blank"; 17045 } 17046 this._addClass( this.icon, "ui-checkboxradio-icon", toAdd ); 17047 if ( !checked ) { 17048 this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" ); 17049 } 17050 this.icon.prependTo( this.label ).after( this.iconSpace ); 17051 } else if ( this.icon !== undefined ) { 17052 this.icon.remove(); 17053 this.iconSpace.remove(); 17054 delete this.icon; 17055 } 17056 }, 17057 17058 _updateLabel: function() { 17059 17060 // Remove the contents of the label ( minus the icon, icon space, and input ) 17061 var contents = this.label.contents().not( this.element[ 0 ] ); 17062 if ( this.icon ) { 17063 contents = contents.not( this.icon[ 0 ] ); 17064 } 17065 if ( this.iconSpace ) { 17066 contents = contents.not( this.iconSpace[ 0 ] ); 17067 } 17068 contents.remove(); 17069 17070 this.label.append( this.options.label ); 17071 }, 17072 17073 refresh: function() { 17074 var checked = this.element[ 0 ].checked, 17075 isDisabled = this.element[ 0 ].disabled; 17076 17077 this._updateIcon( checked ); 17078 this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked ); 17079 if ( this.options.label !== null ) { 17080 this._updateLabel(); 17081 } 17082 17083 if ( isDisabled !== this.options.disabled ) { 17084 this._setOptions( { "disabled": isDisabled } ); 17085 } 17086 } 17087 17088} ] ); 17089 17090var widgetsCheckboxradio = $.ui.checkboxradio; 17091 17092 17093/*! 17094 * jQuery UI Button 1.13.1 17095 * http://jqueryui.com 17096 * 17097 * Copyright jQuery Foundation and other contributors 17098 * Released under the MIT license. 17099 * http://jquery.org/license 17100 */ 17101 17102//>>label: Button 17103//>>group: Widgets 17104//>>description: Enhances a form with themeable buttons. 17105//>>docs: http://api.jqueryui.com/button/ 17106//>>demos: http://jqueryui.com/button/ 17107//>>css.structure: ../../themes/base/core.css 17108//>>css.structure: ../../themes/base/button.css 17109//>>css.theme: ../../themes/base/theme.css 17110 17111 17112$.widget( "ui.button", { 17113 version: "1.13.1
vendor: 10,836 bytes, lines 17113-17520
17113", 17114 defaultElement: "<button>", 17115 options: { 17116 classes: { 17117 "ui-button": "ui-corner-all" 17118 }, 17119 disabled: null, 17120 icon: null, 17121 iconPosition: "beginning", 17122 label: null, 17123 showLabel: true 17124 }, 17125 17126 _getCreateOptions: function() { 17127 var disabled, 17128 17129 // This is to support cases like in jQuery Mobile where the base widget does have 17130 // an implementation of _getCreateOptions 17131 options = this._super() || {}; 17132 17133 this.isInput = this.element.is( "input" ); 17134 17135 disabled = this.element[ 0 ].disabled; 17136 if ( disabled != null ) { 17137 options.disabled = disabled; 17138 } 17139 17140 this.originalLabel = this.isInput ? this.element.val() : this.element.html(); 17141 if ( this.originalLabel ) { 17142 options.label = this.originalLabel; 17143 } 17144 17145 return options; 17146 }, 17147 17148 _create: function() { 17149 if ( !this.option.showLabel & !this.options.icon ) { 17150 this.options.showLabel = true; 17151 } 17152 17153 // We have to check the option again here even though we did in _getCreateOptions, 17154 // because null may have been passed on init which would override what was set in 17155 // _getCreateOptions 17156 if ( this.options.disabled == null ) { 17157 this.options.disabled = this.element[ 0 ].disabled || false; 17158 } 17159 17160 this.hasTitle = !!this.element.attr( "title" ); 17161 17162 // Check to see if the label needs to be set or if its already correct 17163 if ( this.options.label && this.options.label !== this.originalLabel ) { 17164 if ( this.isInput ) { 17165 this.element.val( this.options.label ); 17166 } else { 17167 this.element.html( this.options.label ); 17168 } 17169 } 17170 this._addClass( "ui-button", "ui-widget" ); 17171 this._setOption( "disabled", this.options.disabled ); 17172 this._enhance(); 17173 17174 if ( this.element.is( "a" ) ) { 17175 this._on( { 17176 "keyup": function( event ) { 17177 if ( event.keyCode === $.ui.keyCode.SPACE ) { 17178 event.preventDefault(); 17179 17180 // Support: PhantomJS <= 1.9, IE 8 Only 17181 // If a native click is available use it so we actually cause navigation 17182 // otherwise just trigger a click event 17183 if ( this.element[ 0 ].click ) { 17184 this.element[ 0 ].click(); 17185 } else { 17186 this.element.trigger( "click" ); 17187 } 17188 } 17189 } 17190 } ); 17191 } 17192 }, 17193 17194 _enhance: function() { 17195 if ( !this.element.is( "button" ) ) { 17196 this.element.attr( "role", "button" ); 17197 } 17198 17199 if ( this.options.icon ) { 17200 this._updateIcon( "icon", this.options.icon ); 17201 this._updateTooltip(); 17202 } 17203 }, 17204 17205 _updateTooltip: function() { 17206 this.title = this.element.attr( "title" ); 17207 17208 if ( !this.options.showLabel && !this.title ) { 17209 this.element.attr( "title", this.options.label ); 17210 } 17211 }, 17212 17213 _updateIcon: function( option, value ) { 17214 var icon = option !== "iconPosition", 17215 position = icon ? this.options.iconPosition : value, 17216 displayBlock = position === "top" || position === "bottom"; 17217 17218 // Create icon 17219 if ( !this.icon ) { 17220 this.icon = $( "<span>" ); 17221 17222 this._addClass( this.icon, "ui-button-icon", "ui-icon" ); 17223 17224 if ( !this.options.showLabel ) { 17225 this._addClass( "ui-button-icon-only" ); 17226 } 17227 } else if ( icon ) { 17228 17229 // If we are updating the icon remove the old icon class 17230 this._removeClass( this.icon, null, this.options.icon ); 17231 } 17232 17233 // If we are updating the icon add the new icon class 17234 if ( icon ) { 17235 this._addClass( this.icon, null, value ); 17236 } 17237 17238 this._attachIcon( position ); 17239 17240 // If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove 17241 // the iconSpace if there is one. 17242 if ( displayBlock ) { 17243 this._addClass( this.icon, null, "ui-widget-icon-block" ); 17244 if ( this.iconSpace ) { 17245 this.iconSpace.remove(); 17246 } 17247 } else { 17248 17249 // Position is beginning or end so remove the ui-widget-icon-block class and add the 17250 // space if it does not exist 17251 if ( !this.iconSpace ) { 17252 this.iconSpace = $( "<span> </span>" ); 17253 this._addClass( this.iconSpace, "ui-button-icon-space" ); 17254 } 17255 this._removeClass( this.icon, null, "ui-wiget-icon-block" ); 17256 this._attachIconSpace( position ); 17257 } 17258 }, 17259 17260 _destroy: function() { 17261 this.element.removeAttr( "role" ); 17262 17263 if ( this.icon ) { 17264 this.icon.remove(); 17265 } 17266 if ( this.iconSpace ) { 17267 this.iconSpace.remove(); 17268 } 17269 if ( !this.hasTitle ) { 17270 this.element.removeAttr( "title" ); 17271 } 17272 }, 17273 17274 _attachIconSpace: function( iconPosition ) { 17275 this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace ); 17276 }, 17277 17278 _attachIcon: function( iconPosition ) { 17279 this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon ); 17280 }, 17281 17282 _setOptions: function( options ) { 17283 var newShowLabel = options.showLabel === undefined ? 17284 this.options.showLabel : 17285 options.showLabel, 17286 newIcon = options.icon === undefined ? this.options.icon : options.icon; 17287 17288 if ( !newShowLabel && !newIcon ) { 17289 options.showLabel = true; 17290 } 17291 this._super( options ); 17292 }, 17293 17294 _setOption: function( key, value ) { 17295 if ( key === "icon" ) { 17296 if ( value ) { 17297 this._updateIcon( key, value ); 17298 } else if ( this.icon ) { 17299 this.icon.remove(); 17300 if ( this.iconSpace ) { 17301 this.iconSpace.remove(); 17302 } 17303 } 17304 } 17305 17306 if ( key === "iconPosition" ) { 17307 this._updateIcon( key, value ); 17308 } 17309 17310 // Make sure we can't end up with a button that has neither text nor icon 17311 if ( key === "showLabel" ) { 17312 this._toggleClass( "ui-button-icon-only", null, !value ); 17313 this._updateTooltip(); 17314 } 17315 17316 if ( key === "label" ) { 17317 if ( this.isInput ) { 17318 this.element.val( value ); 17319 } else { 17320 17321 // If there is an icon, append it, else nothing then append the value 17322 // this avoids removal of the icon when setting label text 17323 this.element.html( value ); 17324 if ( this.icon ) { 17325 this._attachIcon( this.options.iconPosition ); 17326 this._attachIconSpace( this.options.iconPosition ); 17327 } 17328 } 17329 } 17330 17331 this._super( key, value ); 17332 17333 if ( key === "disabled" ) { 17334 this._toggleClass( null, "ui-state-disabled", value ); 17335 this.element[ 0 ].disabled = value; 17336 if ( value ) { 17337 this.element.trigger( "blur" ); 17338 } 17339 } 17340 }, 17341 17342 refresh: function() { 17343 17344 // Make sure to only check disabled if its an element that supports this otherwise 17345 // check for the disabled class to determine state 17346 var isDisabled = this.element.is( "input, button" ) ? 17347 this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" ); 17348 17349 if ( isDisabled !== this.options.disabled ) { 17350 this._setOptions( { disabled: isDisabled } ); 17351 } 17352 17353 this._updateTooltip(); 17354 } 17355} ); 17356 17357// DEPRECATED 17358if ( $.uiBackCompat !== false ) { 17359 17360 // Text and Icons options 17361 $.widget( "ui.button", $.ui.button, { 17362 options: { 17363 text: true, 17364 icons: { 17365 primary: null, 17366 secondary: null 17367 } 17368 }, 17369 17370 _create: function() { 17371 if ( this.options.showLabel && !this.options.text ) { 17372 this.options.showLabel = this.options.text; 17373 } 17374 if ( !this.options.showLabel && this.options.text ) { 17375 this.options.text = this.options.showLabel; 17376 } 17377 if ( !this.options.icon && ( this.options.icons.primary || 17378 this.options.icons.secondary ) ) { 17379 if ( this.options.icons.primary ) { 17380 this.options.icon = this.options.icons.primary; 17381 } else { 17382 this.options.icon = this.options.icons.secondary; 17383 this.options.iconPosition = "end"; 17384 } 17385 } else if ( this.options.icon ) { 17386 this.options.icons.primary = this.options.icon; 17387 } 17388 this._super(); 17389 }, 17390 17391 _setOption: function( key, value ) { 17392 if ( key === "text" ) { 17393 this._super( "showLabel", value ); 17394 return; 17395 } 17396 if ( key === "showLabel" ) { 17397 this.options.text = value; 17398 } 17399 if ( key === "icon" ) { 17400 this.options.icons.primary = value; 17401 } 17402 if ( key === "icons" ) { 17403 if ( value.primary ) { 17404 this._super( "icon", value.primary ); 17405 this._super( "iconPosition", "beginning" ); 17406 } else if ( value.secondary ) { 17407 this._super( "icon", value.secondary ); 17408 this._super( "iconPosition", "end" ); 17409 } 17410 } 17411 this._superApply( arguments ); 17412 } 17413 } ); 17414 17415 $.fn.button = ( function( orig ) { 17416 return function( options ) { 17417 var isMethodCall = typeof options === "string"; 17418 var args = Array.prototype.slice.call( arguments, 1 ); 17419 var returnValue = this; 17420 17421 if ( isMethodCall ) { 17422 17423 // If this is an empty collection, we need to have the instance method 17424 // return undefined instead of the jQuery instance 17425 if ( !this.length && options === "instance" ) { 17426 returnValue = undefined; 17427 } else { 17428 this.each( function() { 17429 var methodValue; 17430 var type = $( this ).attr( "type" ); 17431 var name = type !== "checkbox" && type !== "radio" ? 17432 "button" : 17433 "checkboxradio"; 17434 var instance = $.data( this, "ui-" + name ); 17435 17436 if ( options === "instance" ) { 17437 returnValue = instance; 17438 return false; 17439 } 17440 17441 if ( !instance ) { 17442 return $.error( "cannot call methods on button" + 17443 " prior to initialization; " + 17444 "attempted to call method '" + options + "'" ); 17445 } 17446 17447 if ( typeof instance[ options ] !== "function" || 17448 options.charAt( 0 ) === "_" ) { 17449 return $.error( "no such method '" + options + "' for button" + 17450 " widget instance" ); 17451 } 17452 17453 methodValue = instance[ options ].apply( instance, args ); 17454 17455 if ( methodValue !== instance && methodValue !== undefined ) { 17456 returnValue = methodValue && methodValue.jquery ? 17457 returnValue.pushStack( methodValue.get() ) : 17458 methodValue; 17459 return false; 17460 } 17461 } ); 17462 } 17463 } else { 17464 17465 // Allow multiple hashes to be passed on init 17466 if ( args.length ) { 17467 options = $.widget.extend.apply( null, [ options ].concat( args ) ); 17468 } 17469 17470 this.each( function() { 17471 var type = $( this ).attr( "type" ); 17472 var name = type !== "checkbox" && type !== "radio" ? "button" : "checkboxradio"; 17473 var instance = $.data( this, "ui-" + name ); 17474 17475 if ( instance ) { 17476 instance.option( options || {} ); 17477 if ( instance._init ) { 17478 instance._init(); 17479 } 17480 } else { 17481 if ( name === "button" ) { 17482 orig.call( $( this ), options ); 17483 return; 17484 } 17485 17486 $( this ).checkboxradio( $.extend( { icon: false }, options ) ); 17487 } 17488 } ); 17489 } 17490 17491 return returnValue; 17492 }; 17493 } )( $.fn.button ); 17494 17495 $.fn.buttonset = function() { 17496 if ( !$.ui.controlgroup ) { 17497 $.error( "Controlgroup widget missing" ); 17498 } 17499 if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) { 17500 return this.controlgroup.apply( this, 17501 [ arguments[ 0 ], "items.button", arguments[ 2 ] ] ); 17502 } 17503 if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) { 17504 return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] ); 17505 } 17506 if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) { 17507 arguments[ 0 ].items = { 17508 button: arguments[ 0 ].items 17509 }; 17510 } 17511 return this.controlgroup.apply( this, arguments ); 17512 }; 17513} 17514 17515var widgetsButton = $.ui.button; 17516 17517 17518/* eslint-disable max-len, camelcase */ 17519/*! 17520 * jQuery UI Datepicker 1.13.
175201 17521 * http://jqueryui.com 17522 * 17523 * Copyright jQuery Foundation and other contributors 17524 * Released under the MIT license. 17525 * http://jquery.org/license 17526 */ 17527 17528//>>label: Datepicker 17529//>>group: Widgets 17530//>>description: Displays a calendar from an input or inline for selecting dates. 17531//>>docs: http://api.jqueryui.com/datepicker/ 17532//>>demos: http://jqueryui.com/datepicker/ 17533//>>css.structure: ../../themes/base/core.css 17534//>>css.structure: ../../themes/base/datepicker.css 17535//>>css.theme: ../../themes/base/theme.css 17536 17537 17538$.extend( $.ui, { datepicker: { version: "1.13.1
vendor: 14,162 bytes, lines 17538-17855
17538" } } ); 17539 17540var datepicker_instActive; 17541 17542function datepicker_getZindex( elem ) { 17543 var position, value; 17544 while ( elem.length && elem[ 0 ] !== document ) { 17545 17546 // Ignore z-index if position is set to a value where z-index is ignored by the browser 17547 // This makes behavior of this function consistent across browsers 17548 // WebKit always returns auto if the element is positioned 17549 position = elem.css( "position" ); 17550 if ( position === "absolute" || position === "relative" || position === "fixed" ) { 17551 17552 // IE returns 0 when zIndex is not specified 17553 // other browsers return a string 17554 // we ignore the case of nested elements with an explicit value of 0 17555 // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> 17556 value = parseInt( elem.css( "zIndex" ), 10 ); 17557 if ( !isNaN( value ) && value !== 0 ) { 17558 return value; 17559 } 17560 } 17561 elem = elem.parent(); 17562 } 17563 17564 return 0; 17565} 17566 17567/* Date picker manager. 17568 Use the singleton instance of this class, $.datepicker, to interact with the date picker. 17569 Settings for (groups of) date pickers are maintained in an instance object, 17570 allowing multiple different settings on the same page. */ 17571 17572function Datepicker() { 17573 this._curInst = null; // The current instance in use 17574 this._keyEvent = false; // If the last event was a key event 17575 this._disabledInputs = []; // List of date picker inputs that have been disabled 17576 this._datepickerShowing = false; // True if the popup picker is showing , false if not 17577 this._inDialog = false; // True if showing within a "dialog", false if not 17578 this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division 17579 this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class 17580 this._appendClass = "ui-datepicker-append"; // The name of the append marker class 17581 this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class 17582 this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class 17583 this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class 17584 this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class 17585 this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class 17586 this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class 17587 this.regional = []; // Available regional settings, indexed by language code 17588 this.regional[ "" ] = { // Default regional settings 17589 closeText: "Done", // Display text for close link 17590 prevText: "Prev", // Display text for previous month link 17591 nextText: "Next", // Display text for next month link 17592 currentText: "Today", // Display text for current month link 17593 monthNames: [ "January", "February", "March", "April", "May", "June", 17594 "July", "August", "September", "October", "November", "December" ], // Names of months for drop-down and formatting 17595 monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting 17596 dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting 17597 dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting 17598 dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], // Column headings for days starting at Sunday 17599 weekHeader: "Wk", // Column header for week of the year 17600 dateFormat: "mm/dd/yy", // See format options on parseDate 17601 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... 17602 isRTL: false, // True if right-to-left language, false if left-to-right 17603 showMonthAfterYear: false, // True if the year select precedes month, false for month then year 17604 yearSuffix: "", // Additional text to append to the year in the month headers, 17605 selectMonthLabel: "Select month", // Invisible label for month selector 17606 selectYearLabel: "Select year" // Invisible label for year selector 17607 }; 17608 this._defaults = { // Global defaults for all the date picker instances 17609 showOn: "focus", // "focus" for popup on focus, 17610 // "button" for trigger button, or "both" for either 17611 showAnim: "fadeIn", // Name of jQuery animation for popup 17612 showOptions: {}, // Options for enhanced animations 17613 defaultDate: null, // Used when field is blank: actual date, 17614 // +/-number for offset from today, null for today 17615 appendText: "", // Display text following the input box, e.g. showing the format 17616 buttonText: "...", // Text for trigger button 17617 buttonImage: "", // URL for trigger button image 17618 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button 17619 hideIfNoPrevNext: false, // True to hide next/previous month links 17620 // if not applicable, false to just disable them 17621 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links 17622 gotoCurrent: false, // True if today link goes back to current selection instead 17623 changeMonth: false, // True if month can be selected directly, false if only prev/next 17624 changeYear: false, // True if year can be selected directly, false if only prev/next 17625 yearRange: "c-10:c+10", // Range of years to display in drop-down, 17626 // either relative to today's year (-nn:+nn), relative to currently displayed year 17627 // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) 17628 showOtherMonths: false, // True to show dates in other months, false to leave blank 17629 selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable 17630 showWeek: false, // True to show week of the year, false to not show it 17631 calculateWeek: this.iso8601Week, // How to calculate the week of the year, 17632 // takes a Date and returns the number of the week for it 17633 shortYearCutoff: "+10", // Short year values < this are in the current century, 17634 // > this are in the previous century, 17635 // string value starting with "+" for current year + value 17636 minDate: null, // The earliest selectable date, or null for no limit 17637 maxDate: null, // The latest selectable date, or null for no limit 17638 duration: "fast", // Duration of display/closure 17639 beforeShowDay: null, // Function that takes a date and returns an array with 17640 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", 17641 // [2] = cell title (optional), e.g. $.datepicker.noWeekends 17642 beforeShow: null, // Function that takes an input field and 17643 // returns a set of custom settings for the date picker 17644 onSelect: null, // Define a callback function when a date is selected 17645 onChangeMonthYear: null, // Define a callback function when the month or year is changed 17646 onClose: null, // Define a callback function when the datepicker is closed 17647 onUpdateDatepicker: null, // Define a callback function when the datepicker is updated 17648 numberOfMonths: 1, // Number of months to show at a time 17649 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) 17650 stepMonths: 1, // Number of months to step back/forward 17651 stepBigMonths: 12, // Number of months to step back/forward for the big links 17652 altField: "", // Selector for an alternate field to store selected dates into 17653 altFormat: "", // The date format to use for the alternate field 17654 constrainInput: true, // The input is constrained by the current date format 17655 showButtonPanel: false, // True to show button panel, false to not show it 17656 autoSize: false, // True to size the input for the date format, false to leave as is 17657 disabled: false // The initial disabled state 17658 }; 17659 $.extend( this._defaults, this.regional[ "" ] ); 17660 this.regional.en = $.extend( true, {}, this.regional[ "" ] ); 17661 this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en ); 17662 this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ); 17663} 17664 17665$.extend( Datepicker.prototype, { 17666 17667 /* Class name added to elements to indicate already configured with a date picker. */ 17668 markerClassName: "hasDatepicker", 17669 17670 //Keep track of the maximum number of rows displayed (see #7043) 17671 maxRows: 4, 17672 17673 // TODO rename to "widget" when switching to widget factory 17674 _widgetDatepicker: function() { 17675 return this.dpDiv; 17676 }, 17677 17678 /* Override the default settings for all instances of the date picker. 17679 * @param settings object - the new settings to use as defaults (anonymous object) 17680 * @return the manager object 17681 */ 17682 setDefaults: function( settings ) { 17683 datepicker_extendRemove( this._defaults, settings || {} ); 17684 return this; 17685 }, 17686 17687 /* Attach the date picker to a jQuery selection. 17688 * @param target element - the target input field or division or span 17689 * @param settings object - the new settings to use for this date picker instance (anonymous) 17690 */ 17691 _attachDatepicker: function( target, settings ) { 17692 var nodeName, inline, inst; 17693 nodeName = target.nodeName.toLowerCase(); 17694 inline = ( nodeName === "div" || nodeName === "span" ); 17695 if ( !target.id ) { 17696 this.uuid += 1; 17697 target.id = "dp" + this.uuid; 17698 } 17699 inst = this._newInst( $( target ), inline ); 17700 inst.settings = $.extend( {}, settings || {} ); 17701 if ( nodeName === "input" ) { 17702 this._connectDatepicker( target, inst ); 17703 } else if ( inline ) { 17704 this._inlineDatepicker( target, inst ); 17705 } 17706 }, 17707 17708 /* Create a new instance object. */ 17709 _newInst: function( target, inline ) { 17710 var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars 17711 return { id: id, input: target, // associated target 17712 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection 17713 drawMonth: 0, drawYear: 0, // month being drawn 17714 inline: inline, // is datepicker inline or not 17715 dpDiv: ( !inline ? this.dpDiv : // presentation div 17716 datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) }; 17717 }, 17718 17719 /* Attach the date picker to an input field. */ 17720 _connectDatepicker: function( target, inst ) { 17721 var input = $( target ); 17722 inst.append = $( [] ); 17723 inst.trigger = $( [] ); 17724 if ( input.hasClass( this.markerClassName ) ) { 17725 return; 17726 } 17727 this._attachments( input, inst ); 17728 input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ). 17729 on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp ); 17730 this._autoSize( inst ); 17731 $.data( target, "datepicker", inst ); 17732 17733 //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) 17734 if ( inst.settings.disabled ) { 17735 this._disableDatepicker( target ); 17736 } 17737 }, 17738 17739 /* Make attachments based on settings. */ 17740 _attachments: function( input, inst ) { 17741 var showOn, buttonText, buttonImage, 17742 appendText = this._get( inst, "appendText" ), 17743 isRTL = this._get( inst, "isRTL" ); 17744 17745 if ( inst.append ) { 17746 inst.append.remove(); 17747 } 17748 if ( appendText ) { 17749 inst.append = $( "<span>" ) 17750 .addClass( this._appendClass ) 17751 .text( appendText ); 17752 input[ isRTL ? "before" : "after" ]( inst.append ); 17753 } 17754 17755 input.off( "focus", this._showDatepicker ); 17756 17757 if ( inst.trigger ) { 17758 inst.trigger.remove(); 17759 } 17760 17761 showOn = this._get( inst, "showOn" ); 17762 if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field 17763 input.on( "focus", this._showDatepicker ); 17764 } 17765 if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked 17766 buttonText = this._get( inst, "buttonText" ); 17767 buttonImage = this._get( inst, "buttonImage" ); 17768 17769 if ( this._get( inst, "buttonImageOnly" ) ) { 17770 inst.trigger = $( "<img>" ) 17771 .addClass( this._triggerClass ) 17772 .attr( { 17773 src: buttonImage, 17774 alt: buttonText, 17775 title: buttonText 17776 } ); 17777 } else { 17778 inst.trigger = $( "<button type='button'>" ) 17779 .addClass( this._triggerClass ); 17780 if ( buttonImage ) { 17781 inst.trigger.html( 17782 $( "<img>" ) 17783 .attr( { 17784 src: buttonImage, 17785 alt: buttonText, 17786 title: buttonText 17787 } ) 17788 ); 17789 } else { 17790 inst.trigger.text( buttonText ); 17791 } 17792 } 17793 17794 input[ isRTL ? "before" : "after" ]( inst.trigger ); 17795 inst.trigger.on( "click", function() { 17796 if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) { 17797 $.datepicker._hideDatepicker(); 17798 } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) { 17799 $.datepicker._hideDatepicker(); 17800 $.datepicker._showDatepicker( input[ 0 ] ); 17801 } else { 17802 $.datepicker._showDatepicker( input[ 0 ] ); 17803 } 17804 return false; 17805 } ); 17806 } 17807 }, 17808 17809 /* Apply the maximum length for the date format. */ 17810 _autoSize: function( inst ) { 17811 if ( this._get( inst, "autoSize" ) && !inst.inline ) { 17812 var findMax, max, maxI, i, 17813 date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits 17814 dateFormat = this._get( inst, "dateFormat" ); 17815 17816 if ( dateFormat.match( /[DM]/ ) ) { 17817 findMax = function( names ) { 17818 max = 0; 17819 maxI = 0; 17820 for ( i = 0; i < names.length; i++ ) { 17821 if ( names[ i ].length > max ) { 17822 max = names[ i ].length; 17823 maxI = i; 17824 } 17825 } 17826 return maxI; 17827 }; 17828 date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ? 17829 "monthNames" : "monthNamesShort" ) ) ) ); 17830 date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ? 17831 "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() ); 17832 } 17833 inst.input.attr( "size", this._formatDate( inst, date ).length ); 17834 } 17835 }, 17836 17837 /* Attach an inline date picker to a div. */ 17838 _inlineDatepicker: function( target, inst ) { 17839 var divSpan = $( target ); 17840 if ( divSpan.hasClass( this.markerClassName ) ) { 17841 return; 17842 } 17843 divSpan.addClass( this.markerClassName ).append( inst.dpDiv ); 17844 $.data( target, "datepicker", inst ); 17845 this._setDate( inst, this._getDefaultDate( inst ), true ); 17846 this._updateDatepicker( inst ); 17847 this._updateAlternate( inst ); 17848 17849 //If disabled option is true, disable the datepicker before showing it (see ticket #5665) 17850 if ( inst.settings.disabled ) { 17851 this._disableDatepicker( target ); 17852 } 17853 17854 // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements 17855 // http
vendor: 14,693 bytes, lines 17855-18277
17855://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height 17856 inst.dpDiv.css( "display", "block" ); 17857 }, 17858 17859 /* Pop-up the date picker in a "dialog" box. 17860 * @param input element - ignored 17861 * @param date string or Date - the initial date to display 17862 * @param onSelect function - the function to call when a date is selected 17863 * @param settings object - update the dialog date picker instance's settings (anonymous object) 17864 * @param pos int[2] - coordinates for the dialog's position within the screen or 17865 * event - with x/y coordinates or 17866 * leave empty for default (screen centre) 17867 * @return the manager object 17868 */ 17869 _dialogDatepicker: function( input, date, onSelect, settings, pos ) { 17870 var id, browserWidth, browserHeight, scrollX, scrollY, 17871 inst = this._dialogInst; // internal instance 17872 17873 if ( !inst ) { 17874 this.uuid += 1; 17875 id = "dp" + this.uuid; 17876 this._dialogInput = $( "<input type='text' id='" + id + 17877 "' style='position: absolute; top: -100px; width: 0px;'/>" ); 17878 this._dialogInput.on( "keydown", this._doKeyDown ); 17879 $( "body" ).append( this._dialogInput ); 17880 inst = this._dialogInst = this._newInst( this._dialogInput, false ); 17881 inst.settings = {}; 17882 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 17883 } 17884 datepicker_extendRemove( inst.settings, settings || {} ); 17885 date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date ); 17886 this._dialogInput.val( date ); 17887 17888 this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null ); 17889 if ( !this._pos ) { 17890 browserWidth = document.documentElement.clientWidth; 17891 browserHeight = document.documentElement.clientHeight; 17892 scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; 17893 scrollY = document.documentElement.scrollTop || document.body.scrollTop; 17894 this._pos = // should use actual width/height below 17895 [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ]; 17896 } 17897 17898 // Move input on screen for focus, but hidden behind dialog 17899 this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" ); 17900 inst.settings.onSelect = onSelect; 17901 this._inDialog = true; 17902 this.dpDiv.addClass( this._dialogClass ); 17903 this._showDatepicker( this._dialogInput[ 0 ] ); 17904 if ( $.blockUI ) { 17905 $.blockUI( this.dpDiv ); 17906 } 17907 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 17908 return this; 17909 }, 17910 17911 /* Detach a datepicker from its control. 17912 * @param target element - the target input field or division or span 17913 */ 17914 _destroyDatepicker: function( target ) { 17915 var nodeName, 17916 $target = $( target ), 17917 inst = $.data( target, "datepicker" ); 17918 17919 if ( !$target.hasClass( this.markerClassName ) ) { 17920 return; 17921 } 17922 17923 nodeName = target.nodeName.toLowerCase(); 17924 $.removeData( target, "datepicker" ); 17925 if ( nodeName === "input" ) { 17926 inst.append.remove(); 17927 inst.trigger.remove(); 17928 $target.removeClass( this.markerClassName ). 17929 off( "focus", this._showDatepicker ). 17930 off( "keydown", this._doKeyDown ). 17931 off( "keypress", this._doKeyPress ). 17932 off( "keyup", this._doKeyUp ); 17933 } else if ( nodeName === "div" || nodeName === "span" ) { 17934 $target.removeClass( this.markerClassName ).empty(); 17935 } 17936 17937 if ( datepicker_instActive === inst ) { 17938 datepicker_instActive = null; 17939 this._curInst = null; 17940 } 17941 }, 17942 17943 /* Enable the date picker to a jQuery selection. 17944 * @param target element - the target input field or division or span 17945 */ 17946 _enableDatepicker: function( target ) { 17947 var nodeName, inline, 17948 $target = $( target ), 17949 inst = $.data( target, "datepicker" ); 17950 17951 if ( !$target.hasClass( this.markerClassName ) ) { 17952 return; 17953 } 17954 17955 nodeName = target.nodeName.toLowerCase(); 17956 if ( nodeName === "input" ) { 17957 target.disabled = false; 17958 inst.trigger.filter( "button" ). 17959 each( function() { 17960 this.disabled = false; 17961 } ).end(). 17962 filter( "img" ).css( { opacity: "1.0", cursor: "" } ); 17963 } else if ( nodeName === "div" || nodeName === "span" ) { 17964 inline = $target.children( "." + this._inlineClass ); 17965 inline.children().removeClass( "ui-state-disabled" ); 17966 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 17967 prop( "disabled", false ); 17968 } 17969 this._disabledInputs = $.map( this._disabledInputs, 17970 17971 // Delete entry 17972 function( value ) { 17973 return ( value === target ? null : value ); 17974 } ); 17975 }, 17976 17977 /* Disable the date picker to a jQuery selection. 17978 * @param target element - the target input field or division or span 17979 */ 17980 _disableDatepicker: function( target ) { 17981 var nodeName, inline, 17982 $target = $( target ), 17983 inst = $.data( target, "datepicker" ); 17984 17985 if ( !$target.hasClass( this.markerClassName ) ) { 17986 return; 17987 } 17988 17989 nodeName = target.nodeName.toLowerCase(); 17990 if ( nodeName === "input" ) { 17991 target.disabled = true; 17992 inst.trigger.filter( "button" ). 17993 each( function() { 17994 this.disabled = true; 17995 } ).end(). 17996 filter( "img" ).css( { opacity: "0.5", cursor: "default" } ); 17997 } else if ( nodeName === "div" || nodeName === "span" ) { 17998 inline = $target.children( "." + this._inlineClass ); 17999 inline.children().addClass( "ui-state-disabled" ); 18000 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 18001 prop( "disabled", true ); 18002 } 18003 this._disabledInputs = $.map( this._disabledInputs, 18004 18005 // Delete entry 18006 function( value ) { 18007 return ( value === target ? null : value ); 18008 } ); 18009 this._disabledInputs[ this._disabledInputs.length ] = target; 18010 }, 18011 18012 /* Is the first field in a jQuery collection disabled as a datepicker? 18013 * @param target element - the target input field or division or span 18014 * @return boolean - true if disabled, false if enabled 18015 */ 18016 _isDisabledDatepicker: function( target ) { 18017 if ( !target ) { 18018 return false; 18019 } 18020 for ( var i = 0; i < this._disabledInputs.length; i++ ) { 18021 if ( this._disabledInputs[ i ] === target ) { 18022 return true; 18023 } 18024 } 18025 return false; 18026 }, 18027 18028 /* Retrieve the instance data for the target control. 18029 * @param target element - the target input field or division or span 18030 * @return object - the associated instance data 18031 * @throws error if a jQuery problem getting data 18032 */ 18033 _getInst: function( target ) { 18034 try { 18035 return $.data( target, "datepicker" ); 18036 } catch ( err ) { 18037 throw "Missing instance data for this datepicker"; 18038 } 18039 }, 18040 18041 /* Update or retrieve the settings for a date picker attached to an input field or division. 18042 * @param target element - the target input field or division or span 18043 * @param name object - the new settings to update or 18044 * string - the name of the setting to change or retrieve, 18045 * when retrieving also "all" for all instance settings or 18046 * "defaults" for all global defaults 18047 * @param value any - the new value for the setting 18048 * (omit if above is an object or to retrieve a value) 18049 */ 18050 _optionDatepicker: function( target, name, value ) { 18051 var settings, date, minDate, maxDate, 18052 inst = this._getInst( target ); 18053 18054 if ( arguments.length === 2 && typeof name === "string" ) { 18055 return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) : 18056 ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) : 18057 this._get( inst, name ) ) : null ) ); 18058 } 18059 18060 settings = name || {}; 18061 if ( typeof name === "string" ) { 18062 settings = {}; 18063 settings[ name ] = value; 18064 } 18065 18066 if ( inst ) { 18067 if ( this._curInst === inst ) { 18068 this._hideDatepicker(); 18069 } 18070 18071 date = this._getDateDatepicker( target, true ); 18072 minDate = this._getMinMaxDate( inst, "min" ); 18073 maxDate = this._getMinMaxDate( inst, "max" ); 18074 datepicker_extendRemove( inst.settings, settings ); 18075 18076 // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided 18077 if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) { 18078 inst.settings.minDate = this._formatDate( inst, minDate ); 18079 } 18080 if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) { 18081 inst.settings.maxDate = this._formatDate( inst, maxDate ); 18082 } 18083 if ( "disabled" in settings ) { 18084 if ( settings.disabled ) { 18085 this._disableDatepicker( target ); 18086 } else { 18087 this._enableDatepicker( target ); 18088 } 18089 } 18090 this._attachments( $( target ), inst ); 18091 this._autoSize( inst ); 18092 this._setDate( inst, date ); 18093 this._updateAlternate( inst ); 18094 this._updateDatepicker( inst ); 18095 } 18096 }, 18097 18098 // Change method deprecated 18099 _changeDatepicker: function( target, name, value ) { 18100 this._optionDatepicker( target, name, value ); 18101 }, 18102 18103 /* Redraw the date picker attached to an input field or division. 18104 * @param target element - the target input field or division or span 18105 */ 18106 _refreshDatepicker: function( target ) { 18107 var inst = this._getInst( target ); 18108 if ( inst ) { 18109 this._updateDatepicker( inst ); 18110 } 18111 }, 18112 18113 /* Set the dates for a jQuery selection. 18114 * @param target element - the target input field or division or span 18115 * @param date Date - the new date 18116 */ 18117 _setDateDatepicker: function( target, date ) { 18118 var inst = this._getInst( target ); 18119 if ( inst ) { 18120 this._setDate( inst, date ); 18121 this._updateDatepicker( inst ); 18122 this._updateAlternate( inst ); 18123 } 18124 }, 18125 18126 /* Get the date(s) for the first entry in a jQuery selection. 18127 * @param target element - the target input field or division or span 18128 * @param noDefault boolean - true if no default date is to be used 18129 * @return Date - the current date 18130 */ 18131 _getDateDatepicker: function( target, noDefault ) { 18132 var inst = this._getInst( target ); 18133 if ( inst && !inst.inline ) { 18134 this._setDateFromField( inst, noDefault ); 18135 } 18136 return ( inst ? this._getDate( inst ) : null ); 18137 }, 18138 18139 /* Handle keystrokes. */ 18140 _doKeyDown: function( event ) { 18141 var onSelect, dateStr, sel, 18142 inst = $.datepicker._getInst( event.target ), 18143 handled = true, 18144 isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" ); 18145 18146 inst._keyEvent = true; 18147 if ( $.datepicker._datepickerShowing ) { 18148 switch ( event.keyCode ) { 18149 case 9: $.datepicker._hideDatepicker(); 18150 handled = false; 18151 break; // hide on tab out 18152 case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." + 18153 $.datepicker._currentClass + ")", inst.dpDiv ); 18154 if ( sel[ 0 ] ) { 18155 $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] ); 18156 } 18157 18158 onSelect = $.datepicker._get( inst, "onSelect" ); 18159 if ( onSelect ) { 18160 dateStr = $.datepicker._formatDate( inst ); 18161 18162 // Trigger custom callback 18163 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); 18164 } else { 18165 $.datepicker._hideDatepicker(); 18166 } 18167 18168 return false; // don't submit the form 18169 case 27: $.datepicker._hideDatepicker(); 18170 break; // hide on escape 18171 case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 18172 -$.datepicker._get( inst, "stepBigMonths" ) : 18173 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 18174 break; // previous month/year on page up/+ ctrl 18175 case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 18176 +$.datepicker._get( inst, "stepBigMonths" ) : 18177 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 18178 break; // next month/year on page down/+ ctrl 18179 case 35: if ( event.ctrlKey || event.metaKey ) { 18180 $.datepicker._clearDate( event.target ); 18181 } 18182 handled = event.ctrlKey || event.metaKey; 18183 break; // clear on ctrl or command +end 18184 case 36: if ( event.ctrlKey || event.metaKey ) { 18185 $.datepicker._gotoToday( event.target ); 18186 } 18187 handled = event.ctrlKey || event.metaKey; 18188 break; // current on ctrl or command +home 18189 case 37: if ( event.ctrlKey || event.metaKey ) { 18190 $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" ); 18191 } 18192 handled = event.ctrlKey || event.metaKey; 18193 18194 // -1 day on ctrl or command +left 18195 if ( event.originalEvent.altKey ) { 18196 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 18197 -$.datepicker._get( inst, "stepBigMonths" ) : 18198 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 18199 } 18200 18201 // next month/year on alt +left on Mac 18202 break; 18203 case 38: if ( event.ctrlKey || event.metaKey ) { 18204 $.datepicker._adjustDate( event.target, -7, "D" ); 18205 } 18206 handled = event.ctrlKey || event.metaKey; 18207 break; // -1 week on ctrl or command +up 18208 case 39: if ( event.ctrlKey || event.metaKey ) { 18209 $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" ); 18210 } 18211 handled = event.ctrlKey || event.metaKey; 18212 18213 // +1 day on ctrl or command +right 18214 if ( event.originalEvent.altKey ) { 18215 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 18216 +$.datepicker._get( inst, "stepBigMonths" ) : 18217 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 18218 } 18219 18220 // next month/year on alt +right 18221 break; 18222 case 40: if ( event.ctrlKey || event.metaKey ) { 18223 $.datepicker._adjustDate( event.target, +7, "D" ); 18224 } 18225 handled = event.ctrlKey || event.metaKey; 18226 break; // +1 week on ctrl or command +down 18227 default: handled = false; 18228 } 18229 } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home 18230 $.datepicker._showDatepicker( this ); 18231 } else { 18232 handled = false; 18233 } 18234 18235 if ( handled ) { 18236 event.preventDefault(); 18237 event.stopPropagation(); 18238 } 18239 }, 18240 18241 /* Filter entered characters - based on date format. */ 18242 _doKeyPress: function( event ) { 18243 var chars, chr, 18244 inst = $.datepicker._getInst( event.target ); 18245 18246 if ( $.datepicker._get( inst, "constrainInput" ) ) { 18247 chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) ); 18248 chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode ); 18249 return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 ); 18250 } 18251 }, 18252 18253 /* Synchronise manual entry and field/alternate field. */ 18254 _doKeyUp: function( event ) { 18255 var date, 18256 inst = $.datepicker._getInst( event.target ); 18257 18258 if ( inst.input.val() !== inst.lastVal ) { 18259 try { 18260 date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 18261 ( inst.input ? inst.input.val() : null ), 18262 $.datepicker._getFormatConfig( inst ) ); 18263 18264 if ( date ) { // only if valid 18265 $.datepicker._setDateFromField( inst ); 18266 $.datepicker._updateAlternate( inst ); 18267 $.datepicker._updateDatepicker( inst ); 18268 } 18269 } catch ( err ) { 18270 } 18271 } 18272 return true; 18273 }, 18274 18275 /* Pop-up the date picker for a given input field. 18276 * If false returned from beforeShow event handler do not show. 18277 * @param input element - the input field attached to the date picker or
vendor: 4,332 bytes, lines 18278-18400
18278 * event - if triggered by focus 18279 */ 18280 _showDatepicker: function( input ) { 18281 input = input.target || input; 18282 if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger 18283 input = $( "input", input.parentNode )[ 0 ]; 18284 } 18285 18286 if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here 18287 return; 18288 } 18289 18290 var inst, beforeShow, beforeShowSettings, isFixed, 18291 offset, showAnim, duration; 18292 18293 inst = $.datepicker._getInst( input ); 18294 if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) { 18295 $.datepicker._curInst.dpDiv.stop( true, true ); 18296 if ( inst && $.datepicker._datepickerShowing ) { 18297 $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] ); 18298 } 18299 } 18300 18301 beforeShow = $.datepicker._get( inst, "beforeShow" ); 18302 beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {}; 18303 if ( beforeShowSettings === false ) { 18304 return; 18305 } 18306 datepicker_extendRemove( inst.settings, beforeShowSettings ); 18307 18308 inst.lastVal = null; 18309 $.datepicker._lastInput = input; 18310 $.datepicker._setDateFromField( inst ); 18311 18312 if ( $.datepicker._inDialog ) { // hide cursor 18313 input.value = ""; 18314 } 18315 if ( !$.datepicker._pos ) { // position below input 18316 $.datepicker._pos = $.datepicker._findPos( input ); 18317 $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height 18318 } 18319 18320 isFixed = false; 18321 $( input ).parents().each( function() { 18322 isFixed |= $( this ).css( "position" ) === "fixed"; 18323 return !isFixed; 18324 } ); 18325 18326 offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] }; 18327 $.datepicker._pos = null; 18328 18329 //to avoid flashes on Firefox 18330 inst.dpDiv.empty(); 18331 18332 // determine sizing offscreen 18333 inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } ); 18334 $.datepicker._updateDatepicker( inst ); 18335 18336 // fix width for dynamic number of date pickers 18337 // and adjust position before showing 18338 offset = $.datepicker._checkOffset( inst, offset, isFixed ); 18339 inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ? 18340 "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none", 18341 left: offset.left + "px", top: offset.top + "px" } ); 18342 18343 if ( !inst.inline ) { 18344 showAnim = $.datepicker._get( inst, "showAnim" ); 18345 duration = $.datepicker._get( inst, "duration" ); 18346 inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); 18347 $.datepicker._datepickerShowing = true; 18348 18349 if ( $.effects && $.effects.effect[ showAnim ] ) { 18350 inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration ); 18351 } else { 18352 inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null ); 18353 } 18354 18355 if ( $.datepicker._shouldFocusInput( inst ) ) { 18356 inst.input.trigger( "focus" ); 18357 } 18358 18359 $.datepicker._curInst = inst; 18360 } 18361 }, 18362 18363 /* Generate the date picker content. */ 18364 _updateDatepicker: function( inst ) { 18365 this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) 18366 datepicker_instActive = inst; // for delegate hover events 18367 inst.dpDiv.empty().append( this._generateHTML( inst ) ); 18368 this._attachHandlers( inst ); 18369 18370 var origyearshtml, 18371 numMonths = this._getNumberOfMonths( inst ), 18372 cols = numMonths[ 1 ], 18373 width = 17, 18374 activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ), 18375 onUpdateDatepicker = $.datepicker._get( inst, "onUpdateDatepicker" ); 18376 18377 if ( activeCell.length > 0 ) { 18378 datepicker_handleMouseover.apply( activeCell.get( 0 ) ); 18379 } 18380 18381 inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" ); 18382 if ( cols > 1 ) { 18383 inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" ); 18384 } 18385 inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) + 18386 "Class" ]( "ui-datepicker-multi" ); 18387 inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) + 18388 "Class" ]( "ui-datepicker-rtl" ); 18389 18390 if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { 18391 inst.input.trigger( "focus" ); 18392 } 18393 18394 // Deffered render of the years select (to avoid flashes on Firefox) 18395 if ( inst.yearshtml ) { 18396 origyearshtml = inst.yearshtml; 18397 setTimeout( function() { 18398 18399 //assure that inst.yearshtml didn't change. 18400 if ( origyearshtml === inst.yearshtml && inst.yearshtml ) {
vendor: 5,508 bytes, lines 18401-18559
18401 inst.dpDiv.find( "select.ui-datepicker-year" ).first().replaceWith( inst.yearshtml ); 18402 } 18403 origyearshtml = inst.yearshtml = null; 18404 }, 0 ); 18405 } 18406 18407 if ( onUpdateDatepicker ) { 18408 onUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] ); 18409 } 18410 }, 18411 18412 // #6694 - don't focus the input if it's already focused 18413 // this breaks the change event in IE 18414 // Support: IE and jQuery <1.9 18415 _shouldFocusInput: function( inst ) { 18416 return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); 18417 }, 18418 18419 /* Check positioning to remain on screen. */ 18420 _checkOffset: function( inst, offset, isFixed ) { 18421 var dpWidth = inst.dpDiv.outerWidth(), 18422 dpHeight = inst.dpDiv.outerHeight(), 18423 inputWidth = inst.input ? inst.input.outerWidth() : 0, 18424 inputHeight = inst.input ? inst.input.outerHeight() : 0, 18425 viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ), 18426 viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() ); 18427 18428 offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 ); 18429 offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0; 18430 offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0; 18431 18432 // Now check if datepicker is showing outside window viewport - move to a better place if so. 18433 offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ? 18434 Math.abs( offset.left + dpWidth - viewWidth ) : 0 ); 18435 offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ? 18436 Math.abs( dpHeight + inputHeight ) : 0 ); 18437 18438 return offset; 18439 }, 18440 18441 /* Find an object's position on the screen. */ 18442 _findPos: function( obj ) { 18443 var position, 18444 inst = this._getInst( obj ), 18445 isRTL = this._get( inst, "isRTL" ); 18446 18447 while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) { 18448 obj = obj[ isRTL ? "previousSibling" : "nextSibling" ]; 18449 } 18450 18451 position = $( obj ).offset(); 18452 return [ position.left, position.top ]; 18453 }, 18454 18455 /* Hide the date picker from view. 18456 * @param input element - the input field attached to the date picker 18457 */ 18458 _hideDatepicker: function( input ) { 18459 var showAnim, duration, postProcess, onClose, 18460 inst = this._curInst; 18461 18462 if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) { 18463 return; 18464 } 18465 18466 if ( this._datepickerShowing ) { 18467 showAnim = this._get( inst, "showAnim" ); 18468 duration = this._get( inst, "duration" ); 18469 postProcess = function() { 18470 $.datepicker._tidyDialog( inst ); 18471 }; 18472 18473 // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed 18474 if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { 18475 inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess ); 18476 } else { 18477 inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" : 18478 ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess ); 18479 } 18480 18481 if ( !showAnim ) { 18482 postProcess(); 18483 } 18484 this._datepickerShowing = false; 18485 18486 onClose = this._get( inst, "onClose" ); 18487 if ( onClose ) { 18488 onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] ); 18489 } 18490 18491 this._lastInput = null; 18492 if ( this._inDialog ) { 18493 this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } ); 18494 if ( $.blockUI ) { 18495 $.unblockUI(); 18496 $( "body" ).append( this.dpDiv ); 18497 } 18498 } 18499 this._inDialog = false; 18500 } 18501 }, 18502 18503 /* Tidy up after a dialog display. */ 18504 _tidyDialog: function( inst ) { 18505 inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" ); 18506 }, 18507 18508 /* Close date picker if clicked elsewhere. */ 18509 _checkExternalClick: function( event ) { 18510 if ( !$.datepicker._curInst ) { 18511 return; 18512 } 18513 18514 var $target = $( event.target ), 18515 inst = $.datepicker._getInst( $target[ 0 ] ); 18516 18517 if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId && 18518 $target.parents( "#" + $.datepicker._mainDivId ).length === 0 && 18519 !$target.hasClass( $.datepicker.markerClassName ) && 18520 !$target.closest( "." + $.datepicker._triggerClass ).length && 18521 $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) || 18522 ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) { 18523 $.datepicker._hideDatepicker(); 18524 } 18525 }, 18526 18527 /* Adjust one of the date sub-fields. */ 18528 _adjustDate: function( id, offset, period ) { 18529 var target = $( id ), 18530 inst = this._getInst( target[ 0 ] ); 18531 18532 if ( this._isDisabledDatepicker( target[ 0 ] ) ) { 18533 return; 18534 } 18535 this._adjustInstDate( inst, offset, period ); 18536 this._updateDatepicker( inst ); 18537 }, 18538 18539 /* Action for current link. */ 18540 _gotoToday: function( id ) { 18541 var date, 18542 target = $( id ), 18543 inst = this._getInst( target[ 0 ] ); 18544 18545 if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) { 18546 inst.selectedDay = inst.currentDay; 18547 inst.drawMonth = inst.selectedMonth = inst.currentMonth; 18548 inst.drawYear = inst.selectedYear = inst.currentYear; 18549 } else { 18550 date = new Date(); 18551 inst.selectedDay = date.getDate(); 18552 inst.drawMonth = inst.selectedMonth = date.getMonth(); 18553 inst.drawYear = inst.selectedYear = date.getFullYear(); 18554 } 18555 this._notifyChange( inst ); 18556 this._adjustDate( target ); 18557 }, 18558 18559 /* Action for selecting a new month/year. */
vendor: 4,615 bytes, lines 18560-18691
18560 _selectMonthYear: function( id, select, period ) { 18561 var target = $( id ), 18562 inst = this._getInst( target[ 0 ] ); 18563 18564 inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] = 18565 inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] = 18566 parseInt( select.options[ select.selectedIndex ].value, 10 ); 18567 18568 this._notifyChange( inst ); 18569 this._adjustDate( target ); 18570 }, 18571 18572 /* Action for selecting a day. */ 18573 _selectDay: function( id, month, year, td ) { 18574 var inst, 18575 target = $( id ); 18576 18577 if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) { 18578 return; 18579 } 18580 18581 inst = this._getInst( target[ 0 ] ); 18582 inst.selectedDay = inst.currentDay = parseInt( $( "a", td ).attr( "data-date" ) ); 18583 inst.selectedMonth = inst.currentMonth = month; 18584 inst.selectedYear = inst.currentYear = year; 18585 this._selectDate( id, this._formatDate( inst, 18586 inst.currentDay, inst.currentMonth, inst.currentYear ) ); 18587 }, 18588 18589 /* Erase the input field and hide the date picker. */ 18590 _clearDate: function( id ) { 18591 var target = $( id ); 18592 this._selectDate( target, "" ); 18593 }, 18594 18595 /* Update the input field with the selected date. */ 18596 _selectDate: function( id, dateStr ) { 18597 var onSelect, 18598 target = $( id ), 18599 inst = this._getInst( target[ 0 ] ); 18600 18601 dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) ); 18602 if ( inst.input ) { 18603 inst.input.val( dateStr ); 18604 } 18605 this._updateAlternate( inst ); 18606 18607 onSelect = this._get( inst, "onSelect" ); 18608 if ( onSelect ) { 18609 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback 18610 } else if ( inst.input ) { 18611 inst.input.trigger( "change" ); // fire the change event 18612 } 18613 18614 if ( inst.inline ) { 18615 this._updateDatepicker( inst ); 18616 } else { 18617 this._hideDatepicker(); 18618 this._lastInput = inst.input[ 0 ]; 18619 if ( typeof( inst.input[ 0 ] ) !== "object" ) { 18620 inst.input.trigger( "focus" ); // restore focus 18621 } 18622 this._lastInput = null; 18623 } 18624 }, 18625 18626 /* Update any alternate field to synchronise with the main field. */ 18627 _updateAlternate: function( inst ) { 18628 var altFormat, date, dateStr, 18629 altField = this._get( inst, "altField" ); 18630 18631 if ( altField ) { // update alternate field too 18632 altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" ); 18633 date = this._getDate( inst ); 18634 dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) ); 18635 $( document ).find( altField ).val( dateStr ); 18636 } 18637 }, 18638 18639 /* Set as beforeShowDay function to prevent selection of weekends. 18640 * @param date Date - the date to customise 18641 * @return [boolean, string] - is this date selectable?, what is its CSS class? 18642 */ 18643 noWeekends: function( date ) { 18644 var day = date.getDay(); 18645 return [ ( day > 0 && day < 6 ), "" ]; 18646 }, 18647 18648 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. 18649 * @param date Date - the date to get the week for 18650 * @return number - the number of the week within the year that contains this date 18651 */ 18652 iso8601Week: function( date ) { 18653 var time, 18654 checkDate = new Date( date.getTime() ); 18655 18656 // Find Thursday of this week starting on Monday 18657 checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) ); 18658 18659 time = checkDate.getTime(); 18660 checkDate.setMonth( 0 ); // Compare with Jan 1 18661 checkDate.setDate( 1 ); 18662 return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1; 18663 }, 18664 18665 /* Parse a string value into a date object. 18666 * See formatDate below for the possible formats. 18667 * 18668 * @param format string - the expected format of the date 18669 * @param value string - the date in the above format 18670 * @param settings Object - attributes include: 18671 * shortYearCutoff number - the cutoff year for determining the century (optional) 18672 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 18673 * dayNames string[7] - names of the days from Sunday (optional) 18674 * monthNamesShort string[12] - abbreviated names of the months (optional) 18675 * monthNames string[12] - names of the months (optional) 18676 * @return Date - the extracted date value or null if value is blank 18677 */ 18678 parseDate: function( format, value, settings ) { 18679 if ( format == null || value == null ) { 18680 throw "Invalid arguments"; 18681 } 18682 18683 value = ( typeof value === "object" ? value.toString() : value + "" ); 18684 if ( value === "" ) { 18685 return null; 18686 } 18687 18688 var iFormat, dim, extra, 18689 iValue = 0, 18690 shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff, 18691 shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp
vendor: 5,431 bytes, lines 18691-18881
18691: 18692 new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ), 18693 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 18694 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 18695 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 18696 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 18697 year = -1, 18698 month = -1, 18699 day = -1, 18700 doy = -1, 18701 literal = false, 18702 date, 18703 18704 // Check whether a format character is doubled 18705 lookAhead = function( match ) { 18706 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 18707 if ( matches ) { 18708 iFormat++; 18709 } 18710 return matches; 18711 }, 18712 18713 // Extract a number from the string value 18714 getNumber = function( match ) { 18715 var isDoubled = lookAhead( match ), 18716 size = ( match === "@" ? 14 : ( match === "!" ? 20 : 18717 ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ), 18718 minSize = ( match === "y" ? size : 1 ), 18719 digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ), 18720 num = value.substring( iValue ).match( digits ); 18721 if ( !num ) { 18722 throw "Missing number at position " + iValue; 18723 } 18724 iValue += num[ 0 ].length; 18725 return parseInt( num[ 0 ], 10 ); 18726 }, 18727 18728 // Extract a name from the string value and convert to an index 18729 getName = function( match, shortNames, longNames ) { 18730 var index = -1, 18731 names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) { 18732 return [ [ k, v ] ]; 18733 } ).sort( function( a, b ) { 18734 return -( a[ 1 ].length - b[ 1 ].length ); 18735 } ); 18736 18737 $.each( names, function( i, pair ) { 18738 var name = pair[ 1 ]; 18739 if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) { 18740 index = pair[ 0 ]; 18741 iValue += name.length; 18742 return false; 18743 } 18744 } ); 18745 if ( index !== -1 ) { 18746 return index + 1; 18747 } else { 18748 throw "Unknown name at position " + iValue; 18749 } 18750 }, 18751 18752 // Confirm that a literal character matches the string value 18753 checkLiteral = function() { 18754 if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) { 18755 throw "Unexpected literal at position " + iValue; 18756 } 18757 iValue++; 18758 }; 18759 18760 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 18761 if ( literal ) { 18762 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 18763 literal = false; 18764 } else { 18765 checkLiteral(); 18766 } 18767 } else { 18768 switch ( format.charAt( iFormat ) ) { 18769 case "d": 18770 day = getNumber( "d" ); 18771 break; 18772 case "D": 18773 getName( "D", dayNamesShort, dayNames ); 18774 break; 18775 case "o": 18776 doy = getNumber( "o" ); 18777 break; 18778 case "m": 18779 month = getNumber( "m" ); 18780 break; 18781 case "M": 18782 month = getName( "M", monthNamesShort, monthNames ); 18783 break; 18784 case "y": 18785 year = getNumber( "y" ); 18786 break; 18787 case "@": 18788 date = new Date( getNumber( "@" ) ); 18789 year = date.getFullYear(); 18790 month = date.getMonth() + 1; 18791 day = date.getDate(); 18792 break; 18793 case "!": 18794 date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 ); 18795 year = date.getFullYear(); 18796 month = date.getMonth() + 1; 18797 day = date.getDate(); 18798 break; 18799 case "'": 18800 if ( lookAhead( "'" ) ) { 18801 checkLiteral(); 18802 } else { 18803 literal = true; 18804 } 18805 break; 18806 default: 18807 checkLiteral(); 18808 } 18809 } 18810 } 18811 18812 if ( iValue < value.length ) { 18813 extra = value.substr( iValue ); 18814 if ( !/^\s+/.test( extra ) ) { 18815 throw "Extra/unparsed characters found in date: " + extra; 18816 } 18817 } 18818 18819 if ( year === -1 ) { 18820 year = new Date().getFullYear(); 18821 } else if ( year < 100 ) { 18822 year += new Date().getFullYear() - new Date().getFullYear() % 100 + 18823 ( year <= shortYearCutoff ? 0 : -100 ); 18824 } 18825 18826 if ( doy > -1 ) { 18827 month = 1; 18828 day = doy; 18829 do { 18830 dim = this._getDaysInMonth( year, month - 1 ); 18831 if ( day <= dim ) { 18832 break; 18833 } 18834 month++; 18835 day -= dim; 18836 } while ( true ); 18837 } 18838 18839 date = this._daylightSavingAdjust( new Date( year, month - 1, day ) ); 18840 if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) { 18841 throw "Invalid date"; // E.g. 31/02/00 18842 } 18843 return date; 18844 }, 18845 18846 /* Standard date formats. */ 18847 ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) 18848 COOKIE: "D, dd M yy", 18849 ISO_8601: "yy-mm-dd", 18850 RFC_822: "D, d M y", 18851 RFC_850: "DD, dd-M-y", 18852 RFC_1036: "D, d M y", 18853 RFC_1123: "D, d M yy", 18854 RFC_2822: "D, d M yy", 18855 RSS: "D, d M y", // RFC 822 18856 TICKS: "!", 18857 TIMESTAMP: "@", 18858 W3C: "yy-mm-dd", // ISO 8601 18859 18860 _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) + 18861 Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ), 18862 18863 /* Format a date object into a string value. 18864 * The format can be combinations of the following: 18865 * d - day of month (no leading zero) 18866 * dd - day of month (two digit) 18867 * o - day of year (no leading zeros) 18868 * oo - day of year (three digit) 18869 * D - day name short 18870 * DD - day name long 18871 * m - month of year (no leading zero) 18872 * mm - month of year (two digit) 18873 * M - month name short 18874 * MM - month name long 18875 * y - year (two digit) 18876 * yy - year (four digit) 18877 * @ - Unix timestamp (ms since 01/01/1970) 18878 * ! - Windows ticks (100ns since 01/01/0001) 18879 * "..." - literal text 18880 * '' - single quote 18881 *
vendor: 6,198 bytes, lines 18882-19081
18882 * @param format string - the desired format of the date 18883 * @param date Date - the date value to format 18884 * @param settings Object - attributes include: 18885 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 18886 * dayNames string[7] - names of the days from Sunday (optional) 18887 * monthNamesShort string[12] - abbreviated names of the months (optional) 18888 * monthNames string[12] - names of the months (optional) 18889 * @return string - the date in the above format 18890 */ 18891 formatDate: function( format, date, settings ) { 18892 if ( !date ) { 18893 return ""; 18894 } 18895 18896 var iFormat, 18897 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 18898 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 18899 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 18900 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 18901 18902 // Check whether a format character is doubled 18903 lookAhead = function( match ) { 18904 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 18905 if ( matches ) { 18906 iFormat++; 18907 } 18908 return matches; 18909 }, 18910 18911 // Format a number, with leading zero if necessary 18912 formatNumber = function( match, value, len ) { 18913 var num = "" + value; 18914 if ( lookAhead( match ) ) { 18915 while ( num.length < len ) { 18916 num = "0" + num; 18917 } 18918 } 18919 return num; 18920 }, 18921 18922 // Format a name, short or long as requested 18923 formatName = function( match, value, shortNames, longNames ) { 18924 return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] ); 18925 }, 18926 output = "", 18927 literal = false; 18928 18929 if ( date ) { 18930 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 18931 if ( literal ) { 18932 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 18933 literal = false; 18934 } else { 18935 output += format.charAt( iFormat ); 18936 } 18937 } else { 18938 switch ( format.charAt( iFormat ) ) { 18939 case "d": 18940 output += formatNumber( "d", date.getDate(), 2 ); 18941 break; 18942 case "D": 18943 output += formatName( "D", date.getDay(), dayNamesShort, dayNames ); 18944 break; 18945 case "o": 18946 output += formatNumber( "o", 18947 Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 ); 18948 break; 18949 case "m": 18950 output += formatNumber( "m", date.getMonth() + 1, 2 ); 18951 break; 18952 case "M": 18953 output += formatName( "M", date.getMonth(), monthNamesShort, monthNames ); 18954 break; 18955 case "y": 18956 output += ( lookAhead( "y" ) ? date.getFullYear() : 18957 ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 ); 18958 break; 18959 case "@": 18960 output += date.getTime(); 18961 break; 18962 case "!": 18963 output += date.getTime() * 10000 + this._ticksTo1970; 18964 break; 18965 case "'": 18966 if ( lookAhead( "'" ) ) { 18967 output += "'"; 18968 } else { 18969 literal = true; 18970 } 18971 break; 18972 default: 18973 output += format.charAt( iFormat ); 18974 } 18975 } 18976 } 18977 } 18978 return output; 18979 }, 18980 18981 /* Extract all possible characters from the date format. */ 18982 _possibleChars: function( format ) { 18983 var iFormat, 18984 chars = "", 18985 literal = false, 18986 18987 // Check whether a format character is doubled 18988 lookAhead = function( match ) { 18989 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 18990 if ( matches ) { 18991 iFormat++; 18992 } 18993 return matches; 18994 }; 18995 18996 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 18997 if ( literal ) { 18998 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 18999 literal = false; 19000 } else { 19001 chars += format.charAt( iFormat ); 19002 } 19003 } else { 19004 switch ( format.charAt( iFormat ) ) { 19005 case "d": case "m": case "y": case "@": 19006 chars += "0123456789"; 19007 break; 19008 case "D": case "M": 19009 return null; // Accept anything 19010 case "'": 19011 if ( lookAhead( "'" ) ) { 19012 chars += "'"; 19013 } else { 19014 literal = true; 19015 } 19016 break; 19017 default: 19018 chars += format.charAt( iFormat ); 19019 } 19020 } 19021 } 19022 return chars; 19023 }, 19024 19025 /* Get a setting value, defaulting if necessary. */ 19026 _get: function( inst, name ) { 19027 return inst.settings[ name ] !== undefined ? 19028 inst.settings[ name ] : this._defaults[ name ]; 19029 }, 19030 19031 /* Parse existing date and initialise date picker. */ 19032 _setDateFromField: function( inst, noDefault ) { 19033 if ( inst.input.val() === inst.lastVal ) { 19034 return; 19035 } 19036 19037 var dateFormat = this._get( inst, "dateFormat" ), 19038 dates = inst.lastVal = inst.input ? inst.input.val() : null, 19039 defaultDate = this._getDefaultDate( inst ), 19040 date = defaultDate, 19041 settings = this._getFormatConfig( inst ); 19042 19043 try { 19044 date = this.parseDate( dateFormat, dates, settings ) || defaultDate; 19045 } catch ( event ) { 19046 dates = ( noDefault ? "" : dates ); 19047 } 19048 inst.selectedDay = date.getDate(); 19049 inst.drawMonth = inst.selectedMonth = date.getMonth(); 19050 inst.drawYear = inst.selectedYear = date.getFullYear(); 19051 inst.currentDay = ( dates ? date.getDate() : 0 ); 19052 inst.currentMonth = ( dates ? date.getMonth() : 0 ); 19053 inst.currentYear = ( dates ? date.getFullYear() : 0 ); 19054 this._adjustInstDate( inst ); 19055 }, 19056 19057 /* Retrieve the default date shown on opening. */ 19058 _getDefaultDate: function( inst ) { 19059 return this._restrictMinMax( inst, 19060 this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) ); 19061 }, 19062 19063 /* A date may be specified as an exact value or a relative one. */ 19064 _determineDate: function( inst, date, defaultDate ) { 19065 var offsetNumeric = function( offset ) { 19066 var date = new Date(); 19067 date.setDate( date.getDate() + offset ); 19068 return date; 19069 }, 19070 offsetString = function( offset ) { 19071 try { 19072 return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 19073 offset, $.datepicker._getFormatConfig( inst ) ); 19074 } catch ( e ) { 19075 19076 // Ignore 19077 } 19078 19079 var date = ( offset.toLowerCase().match( /^c/ ) ? 19080 $.datepicker._getDate( inst ) : null ) || new Date(), 19081 year = date.getFullYear(),
vendor: 5,359 bytes, lines 19082-19220
19082 month = date.getMonth(), 19083 day = date.getDate(), 19084 pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, 19085 matches = pattern.exec( offset ); 19086 19087 while ( matches ) { 19088 switch ( matches[ 2 ] || "d" ) { 19089 case "d" : case "D" : 19090 day += parseInt( matches[ 1 ], 10 ); break; 19091 case "w" : case "W" : 19092 day += parseInt( matches[ 1 ], 10 ) * 7; break; 19093 case "m" : case "M" : 19094 month += parseInt( matches[ 1 ], 10 ); 19095 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 19096 break; 19097 case "y": case "Y" : 19098 year += parseInt( matches[ 1 ], 10 ); 19099 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 19100 break; 19101 } 19102 matches = pattern.exec( offset ); 19103 } 19104 return new Date( year, month, day ); 19105 }, 19106 newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) : 19107 ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) ); 19108 19109 newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate ); 19110 if ( newDate ) { 19111 newDate.setHours( 0 ); 19112 newDate.setMinutes( 0 ); 19113 newDate.setSeconds( 0 ); 19114 newDate.setMilliseconds( 0 ); 19115 } 19116 return this._daylightSavingAdjust( newDate ); 19117 }, 19118 19119 /* Handle switch to/from daylight saving. 19120 * Hours may be non-zero on daylight saving cut-over: 19121 * > 12 when midnight changeover, but then cannot generate 19122 * midnight datetime, so jump to 1AM, otherwise reset. 19123 * @param date (Date) the date to check 19124 * @return (Date) the corrected date 19125 */ 19126 _daylightSavingAdjust: function( date ) { 19127 if ( !date ) { 19128 return null; 19129 } 19130 date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 ); 19131 return date; 19132 }, 19133 19134 /* Set the date(s) directly. */ 19135 _setDate: function( inst, date, noChange ) { 19136 var clear = !date, 19137 origMonth = inst.selectedMonth, 19138 origYear = inst.selectedYear, 19139 newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) ); 19140 19141 inst.selectedDay = inst.currentDay = newDate.getDate(); 19142 inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); 19143 inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); 19144 if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) { 19145 this._notifyChange( inst ); 19146 } 19147 this._adjustInstDate( inst ); 19148 if ( inst.input ) { 19149 inst.input.val( clear ? "" : this._formatDate( inst ) ); 19150 } 19151 }, 19152 19153 /* Retrieve the date(s) directly. */ 19154 _getDate: function( inst ) { 19155 var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null : 19156 this._daylightSavingAdjust( new Date( 19157 inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 19158 return startDate; 19159 }, 19160 19161 /* Attach the onxxx handlers. These are declared statically so 19162 * they work with static code transformers like Caja. 19163 */ 19164 _attachHandlers: function( inst ) { 19165 var stepMonths = this._get( inst, "stepMonths" ), 19166 id = "#" + inst.id.replace( /\\\\/g, "\\" ); 19167 inst.dpDiv.find( "[data-handler]" ).map( function() { 19168 var handler = { 19169 prev: function() { 19170 $.datepicker._adjustDate( id, -stepMonths, "M" ); 19171 }, 19172 next: function() { 19173 $.datepicker._adjustDate( id, +stepMonths, "M" ); 19174 }, 19175 hide: function() { 19176 $.datepicker._hideDatepicker(); 19177 }, 19178 today: function() { 19179 $.datepicker._gotoToday( id ); 19180 }, 19181 selectDay: function() { 19182 $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this ); 19183 return false; 19184 }, 19185 selectMonth: function() { 19186 $.datepicker._selectMonthYear( id, this, "M" ); 19187 return false; 19188 }, 19189 selectYear: function() { 19190 $.datepicker._selectMonthYear( id, this, "Y" ); 19191 return false; 19192 } 19193 }; 19194 $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] ); 19195 } ); 19196 }, 19197 19198 /* Generate the HTML for the current state of the date picker. */ 19199 _generateHTML: function( inst ) { 19200 var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, 19201 controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, 19202 monthNames, monthNamesShort, beforeShowDay, showOtherMonths, 19203 selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, 19204 cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, 19205 printDate, dRow, tbody, daySettings, otherMonth, unselectable, 19206 tempDate = new Date(), 19207 today = this._daylightSavingAdjust( 19208 new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time 19209 isRTL = this._get( inst, "isRTL" ), 19210 showButtonPanel = this._get( inst, "showButtonPanel" ), 19211 hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ), 19212 navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ), 19213 numMonths = this._getNumberOfMonths( inst ), 19214 showCurrentAtPos = this._get( inst, "showCurrentAtPos" ), 19215 stepMonths = this._get( inst, "stepMonths" ), 19216 isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ), 19217 currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) : 19218 new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ), 19219 minDate = this._getMinMaxDate( inst, "min" ), 19220 maxDate = this._getMinMaxDate( inst, "max" ),
vendor: 21,257 bytes, lines 19221-19735
19221 drawMonth = inst.drawMonth - showCurrentAtPos, 19222 drawYear = inst.drawYear; 19223 19224 if ( drawMonth < 0 ) { 19225 drawMonth += 12; 19226 drawYear--; 19227 } 19228 if ( maxDate ) { 19229 maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(), 19230 maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) ); 19231 maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw ); 19232 while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) { 19233 drawMonth--; 19234 if ( drawMonth < 0 ) { 19235 drawMonth = 11; 19236 drawYear--; 19237 } 19238 } 19239 } 19240 inst.drawMonth = drawMonth; 19241 inst.drawYear = drawYear; 19242 19243 prevText = this._get( inst, "prevText" ); 19244 prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText, 19245 this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ), 19246 this._getFormatConfig( inst ) ) ); 19247 19248 if ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) { 19249 prev = $( "<a>" ) 19250 .attr( { 19251 "class": "ui-datepicker-prev ui-corner-all", 19252 "data-handler": "prev", 19253 "data-event": "click", 19254 title: prevText 19255 } ) 19256 .append( 19257 $( "<span>" ) 19258 .addClass( "ui-icon ui-icon-circle-triangle-" + 19259 ( isRTL ? "e" : "w" ) ) 19260 .text( prevText ) 19261 )[ 0 ].outerHTML; 19262 } else if ( hideIfNoPrevNext ) { 19263 prev = ""; 19264 } else { 19265 prev = $( "<a>" ) 19266 .attr( { 19267 "class": "ui-datepicker-prev ui-corner-all ui-state-disabled", 19268 title: prevText 19269 } ) 19270 .append( 19271 $( "<span>" ) 19272 .addClass( "ui-icon ui-icon-circle-triangle-" + 19273 ( isRTL ? "e" : "w" ) ) 19274 .text( prevText ) 19275 )[ 0 ].outerHTML; 19276 } 19277 19278 nextText = this._get( inst, "nextText" ); 19279 nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText, 19280 this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ), 19281 this._getFormatConfig( inst ) ) ); 19282 19283 if ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) { 19284 next = $( "<a>" ) 19285 .attr( { 19286 "class": "ui-datepicker-next ui-corner-all", 19287 "data-handler": "next", 19288 "data-event": "click", 19289 title: nextText 19290 } ) 19291 .append( 19292 $( "<span>" ) 19293 .addClass( "ui-icon ui-icon-circle-triangle-" + 19294 ( isRTL ? "w" : "e" ) ) 19295 .text( nextText ) 19296 )[ 0 ].outerHTML; 19297 } else if ( hideIfNoPrevNext ) { 19298 next = ""; 19299 } else { 19300 next = $( "<a>" ) 19301 .attr( { 19302 "class": "ui-datepicker-next ui-corner-all ui-state-disabled", 19303 title: nextText 19304 } ) 19305 .append( 19306 $( "<span>" ) 19307 .attr( "class", "ui-icon ui-icon-circle-triangle-" + 19308 ( isRTL ? "w" : "e" ) ) 19309 .text( nextText ) 19310 )[ 0 ].outerHTML; 19311 } 19312 19313 currentText = this._get( inst, "currentText" ); 19314 gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today ); 19315 currentText = ( !navigationAsDateFormat ? currentText : 19316 this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) ); 19317 19318 controls = ""; 19319 if ( !inst.inline ) { 19320 controls = $( "<button>" ) 19321 .attr( { 19322 type: "button", 19323 "class": "ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all", 19324 "data-handler": "hide", 19325 "data-event": "click" 19326 } ) 19327 .text( this._get( inst, "closeText" ) )[ 0 ].outerHTML; 19328 } 19329 19330 buttonPanel = ""; 19331 if ( showButtonPanel ) { 19332 buttonPanel = $( "<div class='ui-datepicker-buttonpane ui-widget-content'>" ) 19333 .append( isRTL ? controls : "" ) 19334 .append( this._isInRange( inst, gotoDate ) ? 19335 $( "<button>" ) 19336 .attr( { 19337 type: "button", 19338 "class": "ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all", 19339 "data-handler": "today", 19340 "data-event": "click" 19341 } ) 19342 .text( currentText ) : 19343 "" ) 19344 .append( isRTL ? "" : controls )[ 0 ].outerHTML; 19345 } 19346 19347 firstDay = parseInt( this._get( inst, "firstDay" ), 10 ); 19348 firstDay = ( isNaN( firstDay ) ? 0 : firstDay ); 19349 19350 showWeek = this._get( inst, "showWeek" ); 19351 dayNames = this._get( inst, "dayNames" ); 19352 dayNamesMin = this._get( inst, "dayNamesMin" ); 19353 monthNames = this._get( inst, "monthNames" ); 19354 monthNamesShort = this._get( inst, "monthNamesShort" ); 19355 beforeShowDay = this._get( inst, "beforeShowDay" ); 19356 showOtherMonths = this._get( inst, "showOtherMonths" ); 19357 selectOtherMonths = this._get( inst, "selectOtherMonths" ); 19358 defaultDate = this._getDefaultDate( inst ); 19359 html = ""; 19360 19361 for ( row = 0; row < numMonths[ 0 ]; row++ ) { 19362 group = ""; 19363 this.maxRows = 4; 19364 for ( col = 0; col < numMonths[ 1 ]; col++ ) { 19365 selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) ); 19366 cornerClass = " ui-corner-all"; 19367 calender = ""; 19368 if ( isMultiMonth ) { 19369 calender += "<div class='ui-datepicker-group"; 19370 if ( numMonths[ 1 ] > 1 ) { 19371 switch ( col ) { 19372 case 0: calender += " ui-datepicker-group-first"; 19373 cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break; 19374 case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last"; 19375 cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break; 19376 default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break; 19377 } 19378 } 19379 calender += "'>"; 19380 } 19381 calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + 19382 ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) + 19383 ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) + 19384 this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate, 19385 row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers 19386 "</div><table class='ui-datepicker-calendar'><thead>" + 19387 "<tr>"; 19388 thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" ); 19389 for ( dow = 0; dow < 7; dow++ ) { // days of the week 19390 day = ( dow + firstDay ) % 7; 19391 thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" + 19392 "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>"; 19393 } 19394 calender += thead + "</tr></thead><tbody>"; 19395 daysInMonth = this._getDaysInMonth( drawYear, drawMonth ); 19396 if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) { 19397 inst.selectedDay = Math.min( inst.selectedDay, daysInMonth ); 19398 } 19399 leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7; 19400 curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate 19401 numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043) 19402 this.maxRows = numRows; 19403 printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) ); 19404 for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows 19405 calender += "<tr>"; 19406 tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" + 19407 this._get( inst, "calculateWeek" )( printDate ) + "</td>" ); 19408 for ( dow = 0; dow < 7; dow++ ) { // create date picker days 19409 daySettings = ( beforeShowDay ? 19410 beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] ); 19411 otherMonth = ( printDate.getMonth() !== drawMonth ); 19412 unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] || 19413 ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate ); 19414 tbody += "<td class='" + 19415 ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends 19416 ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months 19417 ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key 19418 ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ? 19419 19420 // or defaultDate is current printedDate and defaultDate is selectedDate 19421 " " + this._dayOverClass : "" ) + // highlight selected day 19422 ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days 19423 ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates 19424 ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day 19425 ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different) 19426 ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "'" ) + "'" : "" ) + // cell title 19427 ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions 19428 ( otherMonth && !showOtherMonths ? " " : // display for other months 19429 ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + 19430 ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) + 19431 ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day 19432 ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months 19433 "' href='#' aria-current='" + ( printDate.getTime() === currentDate.getTime() ? "true" : "false" ) + // mark date as selected for screen reader 19434 "' data-date='" + printDate.getDate() + // store date as data 19435 "'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date 19436 printDate.setDate( printDate.getDate() + 1 ); 19437 printDate = this._daylightSavingAdjust( printDate ); 19438 } 19439 calender += tbody + "</tr>"; 19440 } 19441 drawMonth++; 19442 if ( drawMonth > 11 ) { 19443 drawMonth = 0; 19444 drawYear++; 19445 } 19446 calender += "</tbody></table>" + ( isMultiMonth ? "</div>" + 19447 ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" ); 19448 group += calender; 19449 } 19450 html += group; 19451 } 19452 html += buttonPanel; 19453 inst._keyEvent = false; 19454 return html; 19455 }, 19456 19457 /* Generate the month and year header. */ 19458 _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate, 19459 secondary, monthNames, monthNamesShort ) { 19460 19461 var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, 19462 changeMonth = this._get( inst, "changeMonth" ), 19463 changeYear = this._get( inst, "changeYear" ), 19464 showMonthAfterYear = this._get( inst, "showMonthAfterYear" ), 19465 selectMonthLabel = this._get( inst, "selectMonthLabel" ), 19466 selectYearLabel = this._get( inst, "selectYearLabel" ), 19467 html = "<div class='ui-datepicker-title'>", 19468 monthHtml = ""; 19469 19470 // Month selection 19471 if ( secondary || !changeMonth ) { 19472 monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>"; 19473 } else { 19474 inMinYear = ( minDate && minDate.getFullYear() === drawYear ); 19475 inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear ); 19476 monthHtml += "<select class='ui-datepicker-month' aria-label='" + selectMonthLabel + "' data-handler='selectMonth' data-event='change'>"; 19477 for ( month = 0; month < 12; month++ ) { 19478 if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) { 19479 monthHtml += "<option value='" + month + "'" + 19480 ( month === drawMonth ? " selected='selected'" : "" ) + 19481 ">" + monthNamesShort[ month ] + "</option>"; 19482 } 19483 } 19484 monthHtml += "</select>"; 19485 } 19486 19487 if ( !showMonthAfterYear ) { 19488 html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? " " : "" ); 19489 } 19490 19491 // Year selection 19492 if ( !inst.yearshtml ) { 19493 inst.yearshtml = ""; 19494 if ( secondary || !changeYear ) { 19495 html += "<span class='ui-datepicker-year'>" + drawYear + "</span>"; 19496 } else { 19497 19498 // determine range of years to display 19499 years = this._get( inst, "yearRange" ).split( ":" ); 19500 thisYear = new Date().getFullYear(); 19501 determineYear = function( value ) { 19502 var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) : 19503 ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) : 19504 parseInt( value, 10 ) ) ); 19505 return ( isNaN( year ) ? thisYear : year ); 19506 }; 19507 year = determineYear( years[ 0 ] ); 19508 endYear = Math.max( year, determineYear( years[ 1 ] || "" ) ); 19509 year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year ); 19510 endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear ); 19511 inst.yearshtml += "<select class='ui-datepicker-year' aria-label='" + selectYearLabel + "' data-handler='selectYear' data-event='change'>"; 19512 for ( ; year <= endYear; year++ ) { 19513 inst.yearshtml += "<option value='" + year + "'" + 19514 ( year === drawYear ? " selected='selected'" : "" ) + 19515 ">" + year + "</option>"; 19516 } 19517 inst.yearshtml += "</select>"; 19518 19519 html += inst.yearshtml; 19520 inst.yearshtml = null; 19521 } 19522 } 19523 19524 html += this._get( inst, "yearSuffix" ); 19525 if ( showMonthAfterYear ) { 19526 html += ( secondary || !( changeMonth && changeYear ) ? " " : "" ) + monthHtml; 19527 } 19528 html += "</div>"; // Close datepicker_header 19529 return html; 19530 }, 19531 19532 /* Adjust one of the date sub-fields. */ 19533 _adjustInstDate: function( inst, offset, period ) { 19534 var year = inst.selectedYear + ( period === "Y" ? offset : 0 ), 19535 month = inst.selectedMonth + ( period === "M" ? offset : 0 ), 19536 day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ), 19537 date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) ); 19538 19539 inst.selectedDay = date.getDate(); 19540 inst.drawMonth = inst.selectedMonth = date.getMonth(); 19541 inst.drawYear = inst.selectedYear = date.getFullYear(); 19542 if ( period === "M" || period === "Y" ) { 19543 this._notifyChange( inst ); 19544 } 19545 }, 19546 19547 /* Ensure a date is within any min/max bounds. */ 19548 _restrictMinMax: function( inst, date ) { 19549 var minDate = this._getMinMaxDate( inst, "min" ), 19550 maxDate = this._getMinMaxDate( inst, "max" ), 19551 newDate = ( minDate && date < minDate ? minDate : date ); 19552 return ( maxDate && newDate > maxDate ? maxDate : newDate ); 19553 }, 19554 19555 /* Notify change of month/year. */ 19556 _notifyChange: function( inst ) { 19557 var onChange = this._get( inst, "onChangeMonthYear" ); 19558 if ( onChange ) { 19559 onChange.apply( ( inst.input ? inst.input[ 0 ] : null ), 19560 [ inst.selectedYear, inst.selectedMonth + 1, inst ] ); 19561 } 19562 }, 19563 19564 /* Determine the number of months to show. */ 19565 _getNumberOfMonths: function( inst ) { 19566 var numMonths = this._get( inst, "numberOfMonths" ); 19567 return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) ); 19568 }, 19569 19570 /* Determine the current maximum date - ensure no time components are set. */ 19571 _getMinMaxDate: function( inst, minMax ) { 19572 return this._determineDate( inst, this._get( inst, minMax + "Date" ), null ); 19573 }, 19574 19575 /* Find the number of days in a given month. */ 19576 _getDaysInMonth: function( year, month ) { 19577 return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate(); 19578 }, 19579 19580 /* Find the day of the week of the first of a month. */ 19581 _getFirstDayOfMonth: function( year, month ) { 19582 return new Date( year, month, 1 ).getDay(); 19583 }, 19584 19585 /* Determines if we should allow a "next/prev" month display change. */ 19586 _canAdjustMonth: function( inst, offset, curYear, curMonth ) { 19587 var numMonths = this._getNumberOfMonths( inst ), 19588 date = this._daylightSavingAdjust( new Date( curYear, 19589 curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) ); 19590 19591 if ( offset < 0 ) { 19592 date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) ); 19593 } 19594 return this._isInRange( inst, date ); 19595 }, 19596 19597 /* Is the given date in the accepted range? */ 19598 _isInRange: function( inst, date ) { 19599 var yearSplit, currentYear, 19600 minDate = this._getMinMaxDate( inst, "min" ), 19601 maxDate = this._getMinMaxDate( inst, "max" ), 19602 minYear = null, 19603 maxYear = null, 19604 years = this._get( inst, "yearRange" ); 19605 if ( years ) { 19606 yearSplit = years.split( ":" ); 19607 currentYear = new Date().getFullYear(); 19608 minYear = parseInt( yearSplit[ 0 ], 10 ); 19609 maxYear = parseInt( yearSplit[ 1 ], 10 ); 19610 if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) { 19611 minYear += currentYear; 19612 } 19613 if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) { 19614 maxYear += currentYear; 19615 } 19616 } 19617 19618 return ( ( !minDate || date.getTime() >= minDate.getTime() ) && 19619 ( !maxDate || date.getTime() <= maxDate.getTime() ) && 19620 ( !minYear || date.getFullYear() >= minYear ) && 19621 ( !maxYear || date.getFullYear() <= maxYear ) ); 19622 }, 19623 19624 /* Provide the configuration settings for formatting/parsing. */ 19625 _getFormatConfig: function( inst ) { 19626 var shortYearCutoff = this._get( inst, "shortYearCutoff" ); 19627 shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff : 19628 new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) ); 19629 return { shortYearCutoff: shortYearCutoff, 19630 dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ), 19631 monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) }; 19632 }, 19633 19634 /* Format the given date for display. */ 19635 _formatDate: function( inst, day, month, year ) { 19636 if ( !day ) { 19637 inst.currentDay = inst.selectedDay; 19638 inst.currentMonth = inst.selectedMonth; 19639 inst.currentYear = inst.selectedYear; 19640 } 19641 var date = ( day ? ( typeof day === "object" ? day : 19642 this._daylightSavingAdjust( new Date( year, month, day ) ) ) : 19643 this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 19644 return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) ); 19645 } 19646} ); 19647 19648/* 19649 * Bind hover events for datepicker elements. 19650 * Done via delegate so the binding only occurs once in the lifetime of the parent div. 19651 * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. 19652 */ 19653function datepicker_bindHover( dpDiv ) { 19654 var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; 19655 return dpDiv.on( "mouseout", selector, function() { 19656 $( this ).removeClass( "ui-state-hover" ); 19657 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 19658 $( this ).removeClass( "ui-datepicker-prev-hover" ); 19659 } 19660 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 19661 $( this ).removeClass( "ui-datepicker-next-hover" ); 19662 } 19663 } ) 19664 .on( "mouseover", selector, datepicker_handleMouseover ); 19665} 19666 19667function datepicker_handleMouseover() { 19668 if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) { 19669 $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" ); 19670 $( this ).addClass( "ui-state-hover" ); 19671 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 19672 $( this ).addClass( "ui-datepicker-prev-hover" ); 19673 } 19674 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 19675 $( this ).addClass( "ui-datepicker-next-hover" ); 19676 } 19677 } 19678} 19679 19680/* jQuery extend now ignores nulls! */ 19681function datepicker_extendRemove( target, props ) { 19682 $.extend( target, props ); 19683 for ( var name in props ) { 19684 if ( props[ name ] == null ) { 19685 target[ name ] = props[ name ]; 19686 } 19687 } 19688 return target; 19689} 19690 19691/* Invoke the datepicker functionality. 19692 @param options string - a command, optionally followed by additional parameters or 19693 Object - settings for attaching new datepicker functionality 19694 @return jQuery object */ 19695$.fn.datepicker = function( options ) { 19696 19697 /* Verify an empty collection wasn't passed - Fixes #6976 */ 19698 if ( !this.length ) { 19699 return this; 19700 } 19701 19702 /* Initialise the date picker. */ 19703 if ( !$.datepicker.initialized ) { 19704 $( document ).on( "mousedown", $.datepicker._checkExternalClick ); 19705 $.datepicker.initialized = true; 19706 } 19707 19708 /* Append datepicker main container to body if not exist. */ 19709 if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) { 19710 $( "body" ).append( $.datepicker.dpDiv ); 19711 } 19712 19713 var otherArgs = Array.prototype.slice.call( arguments, 1 ); 19714 if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) { 19715 return $.datepicker[ "_" + options + "Datepicker" ]. 19716 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 19717 } 19718 if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) { 19719 return $.datepicker[ "_" + options + "Datepicker" ]. 19720 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 19721 } 19722 return this.each( function() { 19723 if ( typeof options === "string" ) { 19724 $.datepicker[ "_" + options + "Datepicker" ] 19725 .apply( $.datepicker, [ this ].concat( otherArgs ) ); 19726 } else { 19727 $.datepicker._attachDatepicker( this, options ); 19728 } 19729 } ); 19730}; 19731 19732$.datepicker = new Datepicker(); // singleton instance 19733$.datepicker.initialized = false; 19734$.datepicker.uuid = new Date().getTime(); 19735$.datepicker.version = "1.1
vendor: 7,560 bytes, lines 19735-20024
197353.1"; 19736 19737var widgetsDatepicker = $.datepicker; 19738 19739 19740 19741// This file is deprecated 19742var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); 19743 19744/*! 19745 * jQuery UI Mouse 1.13.1 19746 * http://jqueryui.com 19747 * 19748 * Copyright jQuery Foundation and other contributors 19749 * Released under the MIT license. 19750 * http://jquery.org/license 19751 */ 19752 19753//>>label: Mouse 19754//>>group: Widgets 19755//>>description: Abstracts mouse-based interactions to assist in creating certain widgets. 19756//>>docs: http://api.jqueryui.com/mouse/ 19757 19758 19759var mouseHandled = false; 19760$( document ).on( "mouseup", function() { 19761 mouseHandled = false; 19762} ); 19763 19764var widgetsMouse = $.widget( "ui.mouse", { 19765 version: "1.13.1", 19766 options: { 19767 cancel: "input, textarea, button, select, option", 19768 distance: 1, 19769 delay: 0 19770 }, 19771 _mouseInit: function() { 19772 var that = this; 19773 19774 this.element 19775 .on( "mousedown." + this.widgetName, function( event ) { 19776 return that._mouseDown( event ); 19777 } ) 19778 .on( "click." + this.widgetName, function( event ) { 19779 if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) { 19780 $.removeData( event.target, that.widgetName + ".preventClickEvent" ); 19781 event.stopImmediatePropagation(); 19782 return false; 19783 } 19784 } ); 19785 19786 this.started = false; 19787 }, 19788 19789 // TODO: make sure destroying one instance of mouse doesn't mess with 19790 // other instances of mouse 19791 _mouseDestroy: function() { 19792 this.element.off( "." + this.widgetName ); 19793 if ( this._mouseMoveDelegate ) { 19794 this.document 19795 .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) 19796 .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); 19797 } 19798 }, 19799 19800 _mouseDown: function( event ) { 19801 19802 // don't let more than one widget handle mouseStart 19803 if ( mouseHandled ) { 19804 return; 19805 } 19806 19807 this._mouseMoved = false; 19808 19809 // We may have missed mouseup (out of window) 19810 if ( this._mouseStarted ) { 19811 this._mouseUp( event ); 19812 } 19813 19814 this._mouseDownEvent = event; 19815 19816 var that = this, 19817 btnIsLeft = ( event.which === 1 ), 19818 19819 // event.target.nodeName works around a bug in IE 8 with 19820 // disabled inputs (#7620) 19821 elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ? 19822 $( event.target ).closest( this.options.cancel ).length : false ); 19823 if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) { 19824 return true; 19825 } 19826 19827 this.mouseDelayMet = !this.options.delay; 19828 if ( !this.mouseDelayMet ) { 19829 this._mouseDelayTimer = setTimeout( function() { 19830 that.mouseDelayMet = true; 19831 }, this.options.delay ); 19832 } 19833 19834 if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { 19835 this._mouseStarted = ( this._mouseStart( event ) !== false ); 19836 if ( !this._mouseStarted ) { 19837 event.preventDefault(); 19838 return true; 19839 } 19840 } 19841 19842 // Click event may never have fired (Gecko & Opera) 19843 if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) { 19844 $.removeData( event.target, this.widgetName + ".preventClickEvent" ); 19845 } 19846 19847 // These delegates are required to keep context 19848 this._mouseMoveDelegate = function( event ) { 19849 return that._mouseMove( event ); 19850 }; 19851 this._mouseUpDelegate = function( event ) { 19852 return that._mouseUp( event ); 19853 }; 19854 19855 this.document 19856 .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) 19857 .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); 19858 19859 event.preventDefault(); 19860 19861 mouseHandled = true; 19862 return true; 19863 }, 19864 19865 _mouseMove: function( event ) { 19866 19867 // Only check for mouseups outside the document if you've moved inside the document 19868 // at least once. This prevents the firing of mouseup in the case of IE<9, which will 19869 // fire a mousemove event if content is placed under the cursor. See #7778 19870 // Support: IE <9 19871 if ( this._mouseMoved ) { 19872 19873 // IE mouseup check - mouseup happened when mouse was out of window 19874 if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && 19875 !event.button ) { 19876 return this._mouseUp( event ); 19877 19878 // Iframe mouseup check - mouseup occurred in another document 19879 } else if ( !event.which ) { 19880 19881 // Support: Safari <=8 - 9 19882 // Safari sets which to 0 if you press any of the following keys 19883 // during a drag (#14461) 19884 if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || 19885 event.originalEvent.metaKey || event.originalEvent.shiftKey ) { 19886 this.ignoreMissingWhich = true; 19887 } else if ( !this.ignoreMissingWhich ) { 19888 return this._mouseUp( event ); 19889 } 19890 } 19891 } 19892 19893 if ( event.which || event.button ) { 19894 this._mouseMoved = true; 19895 } 19896 19897 if ( this._mouseStarted ) { 19898 this._mouseDrag( event ); 19899 return event.preventDefault(); 19900 } 19901 19902 if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { 19903 this._mouseStarted = 19904 ( this._mouseStart( this._mouseDownEvent, event ) !== false ); 19905 if ( this._mouseStarted ) { 19906 this._mouseDrag( event ); 19907 } else { 19908 this._mouseUp( event ); 19909 } 19910 } 19911 19912 return !this._mouseStarted; 19913 }, 19914 19915 _mouseUp: function( event ) { 19916 this.document 19917 .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) 19918 .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); 19919 19920 if ( this._mouseStarted ) { 19921 this._mouseStarted = false; 19922 19923 if ( event.target === this._mouseDownEvent.target ) { 19924 $.data( event.target, this.widgetName + ".preventClickEvent", true ); 19925 } 19926 19927 this._mouseStop( event ); 19928 } 19929 19930 if ( this._mouseDelayTimer ) { 19931 clearTimeout( this._mouseDelayTimer ); 19932 delete this._mouseDelayTimer; 19933 } 19934 19935 this.ignoreMissingWhich = false; 19936 mouseHandled = false; 19937 event.preventDefault(); 19938 }, 19939 19940 _mouseDistanceMet: function( event ) { 19941 return ( Math.max( 19942 Math.abs( this._mouseDownEvent.pageX - event.pageX ), 19943 Math.abs( this._mouseDownEvent.pageY - event.pageY ) 19944 ) >= this.options.distance 19945 ); 19946 }, 19947 19948 _mouseDelayMet: function( /* event */ ) { 19949 return this.mouseDelayMet; 19950 }, 19951 19952 // These are placeholder methods, to be overriden by extending plugin 19953 _mouseStart: function( /* event */ ) {}, 19954 _mouseDrag: function( /* event */ ) {}, 19955 _mouseStop: function( /* event */ ) {}, 19956 _mouseCapture: function( /* event */ ) { 19957 return true; 19958 } 19959} ); 19960 19961 19962 19963// $.ui.plugin is deprecated. Use $.widget() extensions instead. 19964var plugin = $.ui.plugin = { 19965 add: function( module, option, set ) { 19966 var i, 19967 proto = $.ui[ module ].prototype; 19968 for ( i in set ) { 19969 proto.plugins[ i ] = proto.plugins[ i ] || []; 19970 proto.plugins[ i ].push( [ option, set[ i ] ] ); 19971 } 19972 }, 19973 call: function( instance, name, args, allowDisconnected ) { 19974 var i, 19975 set = instance.plugins[ name ]; 19976 19977 if ( !set ) { 19978 return; 19979 } 19980 19981 if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || 19982 instance.element[ 0 ].parentNode.nodeType === 11 ) ) { 19983 return; 19984 } 19985 19986 for ( i = 0; i < set.length; i++ ) { 19987 if ( instance.options[ set[ i ][ 0 ] ] ) { 19988 set[ i ][ 1 ].apply( instance.element, args ); 19989 } 19990 } 19991 } 19992}; 19993 19994 19995 19996var safeBlur = $.ui.safeBlur = function( element ) { 19997 19998 // Support: IE9 - 10 only 19999 // If the <body> is blurred, IE will switch windows, see #9420 20000 if ( element && element.nodeName.toLowerCase() !== "body" ) { 20001 $( element ).trigger( "blur" ); 20002 } 20003}; 20004 20005 20006/*! 20007 * jQuery UI Draggable 1.13.1 20008 * http://jqueryui.com 20009 * 20010 * Copyright jQuery Foundation and other contributors 20011 * Released under the MIT license. 20012 * http://jquery.org/license 20013 */ 20014 20015//>>label: Draggable 20016//>>group: Interactions 20017//>>description: Enables dragging functionality for any element. 20018//>>docs: http://api.jqueryui.com/draggable/ 20019//>>demos: http://jqueryui.com/draggable/ 20020//>>css.structure: ../../themes/base/draggable.css 20021 20022 20023$.widget( "ui.draggable", $.ui.mouse, { 20024 version: "1.13.1
vendor: 8,684 bytes, lines 20024-20370
20024", 20025 widgetEventPrefix: "drag", 20026 options: { 20027 addClasses: true, 20028 appendTo: "parent", 20029 axis: false, 20030 connectToSortable: false, 20031 containment: false, 20032 cursor: "auto", 20033 cursorAt: false, 20034 grid: false, 20035 handle: false, 20036 helper: "original", 20037 iframeFix: false, 20038 opacity: false, 20039 refreshPositions: false, 20040 revert: false, 20041 revertDuration: 500, 20042 scope: "default", 20043 scroll: true, 20044 scrollSensitivity: 20, 20045 scrollSpeed: 20, 20046 snap: false, 20047 snapMode: "both", 20048 snapTolerance: 20, 20049 stack: false, 20050 zIndex: false, 20051 20052 // Callbacks 20053 drag: null, 20054 start: null, 20055 stop: null 20056 }, 20057 _create: function() { 20058 20059 if ( this.options.helper === "original" ) { 20060 this._setPositionRelative(); 20061 } 20062 if ( this.options.addClasses ) { 20063 this._addClass( "ui-draggable" ); 20064 } 20065 this._setHandleClassName(); 20066 20067 this._mouseInit(); 20068 }, 20069 20070 _setOption: function( key, value ) { 20071 this._super( key, value ); 20072 if ( key === "handle" ) { 20073 this._removeHandleClassName(); 20074 this._setHandleClassName(); 20075 } 20076 }, 20077 20078 _destroy: function() { 20079 if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { 20080 this.destroyOnClear = true; 20081 return; 20082 } 20083 this._removeHandleClassName(); 20084 this._mouseDestroy(); 20085 }, 20086 20087 _mouseCapture: function( event ) { 20088 var o = this.options; 20089 20090 // Among others, prevent a drag on a resizable-handle 20091 if ( this.helper || o.disabled || 20092 $( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) { 20093 return false; 20094 } 20095 20096 //Quit if we're not on a valid handle 20097 this.handle = this._getHandle( event ); 20098 if ( !this.handle ) { 20099 return false; 20100 } 20101 20102 this._blurActiveElement( event ); 20103 20104 this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix ); 20105 20106 return true; 20107 20108 }, 20109 20110 _blockFrames: function( selector ) { 20111 this.iframeBlocks = this.document.find( selector ).map( function() { 20112 var iframe = $( this ); 20113 20114 return $( "<div>" ) 20115 .css( "position", "absolute" ) 20116 .appendTo( iframe.parent() ) 20117 .outerWidth( iframe.outerWidth() ) 20118 .outerHeight( iframe.outerHeight() ) 20119 .offset( iframe.offset() )[ 0 ]; 20120 } ); 20121 }, 20122 20123 _unblockFrames: function() { 20124 if ( this.iframeBlocks ) { 20125 this.iframeBlocks.remove(); 20126 delete this.iframeBlocks; 20127 } 20128 }, 20129 20130 _blurActiveElement: function( event ) { 20131 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ), 20132 target = $( event.target ); 20133 20134 // Don't blur if the event occurred on an element that is within 20135 // the currently focused element 20136 // See #10527, #12472 20137 if ( target.closest( activeElement ).length ) { 20138 return; 20139 } 20140 20141 // Blur any element that currently has focus, see #4261 20142 $.ui.safeBlur( activeElement ); 20143 }, 20144 20145 _mouseStart: function( event ) { 20146 20147 var o = this.options; 20148 20149 //Create and append the visible helper 20150 this.helper = this._createHelper( event ); 20151 20152 this._addClass( this.helper, "ui-draggable-dragging" ); 20153 20154 //Cache the helper size 20155 this._cacheHelperProportions(); 20156 20157 //If ddmanager is used for droppables, set the global draggable 20158 if ( $.ui.ddmanager ) { 20159 $.ui.ddmanager.current = this; 20160 } 20161 20162 /* 20163 * - Position generation - 20164 * This block generates everything position related - it's the core of draggables. 20165 */ 20166 20167 //Cache the margins of the original element 20168 this._cacheMargins(); 20169 20170 //Store the helper's css position 20171 this.cssPosition = this.helper.css( "position" ); 20172 this.scrollParent = this.helper.scrollParent( true ); 20173 this.offsetParent = this.helper.offsetParent(); 20174 this.hasFixedAncestor = this.helper.parents().filter( function() { 20175 return $( this ).css( "position" ) === "fixed"; 20176 } ).length > 0; 20177 20178 //The element's absolute position on the page minus margins 20179 this.positionAbs = this.element.offset(); 20180 this._refreshOffsets( event ); 20181 20182 //Generate the original position 20183 this.originalPosition = this.position = this._generatePosition( event, false ); 20184 this.originalPageX = event.pageX; 20185 this.originalPageY = event.pageY; 20186 20187 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied 20188 if ( o.cursorAt ) { 20189 this._adjustOffsetFromHelper( o.cursorAt ); 20190 } 20191 20192 //Set a containment if given in the options 20193 this._setContainment(); 20194 20195 //Trigger event + callbacks 20196 if ( this._trigger( "start", event ) === false ) { 20197 this._clear(); 20198 return false; 20199 } 20200 20201 //Recache the helper size 20202 this._cacheHelperProportions(); 20203 20204 //Prepare the droppable offsets 20205 if ( $.ui.ddmanager && !o.dropBehaviour ) { 20206 $.ui.ddmanager.prepareOffsets( this, event ); 20207 } 20208 20209 // Execute the drag once - this causes the helper not to be visible before getting its 20210 // correct position 20211 this._mouseDrag( event, true ); 20212 20213 // If the ddmanager is used for droppables, inform the manager that dragging has started 20214 // (see #5003) 20215 if ( $.ui.ddmanager ) { 20216 $.ui.ddmanager.dragStart( this, event ); 20217 } 20218 20219 return true; 20220 }, 20221 20222 _refreshOffsets: function( event ) { 20223 this.offset = { 20224 top: this.positionAbs.top - this.margins.top, 20225 left: this.positionAbs.left - this.margins.left, 20226 scroll: false, 20227 parent: this._getParentOffset(), 20228 relative: this._getRelativeOffset() 20229 }; 20230 20231 this.offset.click = { 20232 left: event.pageX - this.offset.left, 20233 top: event.pageY - this.offset.top 20234 }; 20235 }, 20236 20237 _mouseDrag: function( event, noPropagation ) { 20238 20239 // reset any necessary cached properties (see #5009) 20240 if ( this.hasFixedAncestor ) { 20241 this.offset.parent = this._getParentOffset(); 20242 } 20243 20244 //Compute the helpers position 20245 this.position = this._generatePosition( event, true ); 20246 this.positionAbs = this._convertPositionTo( "absolute" ); 20247 20248 //Call plugins and callbacks and use the resulting position if something is returned 20249 if ( !noPropagation ) { 20250 var ui = this._uiHash(); 20251 if ( this._trigger( "drag", event, ui ) === false ) { 20252 this._mouseUp( new $.Event( "mouseup", event ) ); 20253 return false; 20254 } 20255 this.position = ui.position; 20256 } 20257 20258 this.helper[ 0 ].style.left = this.position.left + "px"; 20259 this.helper[ 0 ].style.top = this.position.top + "px"; 20260 20261 if ( $.ui.ddmanager ) { 20262 $.ui.ddmanager.drag( this, event ); 20263 } 20264 20265 return false; 20266 }, 20267 20268 _mouseStop: function( event ) { 20269 20270 //If we are using droppables, inform the manager about the drop 20271 var that = this, 20272 dropped = false; 20273 if ( $.ui.ddmanager && !this.options.dropBehaviour ) { 20274 dropped = $.ui.ddmanager.drop( this, event ); 20275 } 20276 20277 //if a drop comes from outside (a sortable) 20278 if ( this.dropped ) { 20279 dropped = this.dropped; 20280 this.dropped = false; 20281 } 20282 20283 if ( ( this.options.revert === "invalid" && !dropped ) || 20284 ( this.options.revert === "valid" && dropped ) || 20285 this.options.revert === true || ( typeof this.options.revert === "function" && 20286 this.options.revert.call( this.element, dropped ) ) 20287 ) { 20288 $( this.helper ).animate( 20289 this.originalPosition, 20290 parseInt( this.options.revertDuration, 10 ), 20291 function() { 20292 if ( that._trigger( "stop", event ) !== false ) { 20293 that._clear(); 20294 } 20295 } 20296 ); 20297 } else { 20298 if ( this._trigger( "stop", event ) !== false ) { 20299 this._clear(); 20300 } 20301 } 20302 20303 return false; 20304 }, 20305 20306 _mouseUp: function( event ) { 20307 this._unblockFrames(); 20308 20309 // If the ddmanager is used for droppables, inform the manager that dragging has stopped 20310 // (see #5003) 20311 if ( $.ui.ddmanager ) { 20312 $.ui.ddmanager.dragStop( this, event ); 20313 } 20314 20315 // Only need to focus if the event occurred on the draggable itself, see #10527 20316 if ( this.handleElement.is( event.target ) ) { 20317 20318 // The interaction is over; whether or not the click resulted in a drag, 20319 // focus the element 20320 this.element.trigger( "focus" ); 20321 } 20322 20323 return $.ui.mouse.prototype._mouseUp.call( this, event ); 20324 }, 20325 20326 cancel: function() { 20327 20328 if ( this.helper.is( ".ui-draggable-dragging" ) ) { 20329 this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) ); 20330 } else { 20331 this._clear(); 20332 } 20333 20334 return this; 20335 20336 }, 20337 20338 _getHandle: function( event ) { 20339 return this.options.handle ? 20340 !!$( event.target ).closest( this.element.find( this.options.handle ) ).length : 20341 true; 20342 }, 20343 20344 _setHandleClassName: function() { 20345 this.handleElement = this.options.handle ? 20346 this.element.find( this.options.handle ) : this.element; 20347 this._addClass( this.handleElement, "ui-draggable-handle" ); 20348 }, 20349 20350 _removeHandleClassName: function() { 20351 this._removeClass( this.handleElement, "ui-draggable-handle" ); 20352 }, 20353 20354 _createHelper: function( event ) { 20355 20356 var o = this.options, 20357 helperIsFunction = typeof o.helper === "function", 20358 helper = helperIsFunction ? 20359 $( o.helper.apply( this.element[ 0 ], [ event ] ) ) : 20360 ( o.helper === "clone" ? 20361 this.element.clone().removeAttr( "id" ) : 20362 this.element ); 20363 20364 if ( !helper.parents( "body" ).length ) { 20365 helper.appendTo( ( o.appendTo === "parent" ? 20366 this.element[ 0 ].parentNode : 20367 o.appendTo ) ); 20368 } 20369 20370 //
20370Http://bugs.jqueryui.com/ticket/9446 20371 // a helper function can return the original element 20372 // which wouldn't have been set to relative in _create 20373 if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) { 20374 this._setPositionRelative(); 20375 } 20376 20377 if ( helper[ 0 ] !== this.element[ 0 ] && 20378 !( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) { 20379 helper.css( "position", "absolute" ); 20380 } 20381 20382 return helper; 20383 20384 }, 20385 20386 _setPositionRelative: function() { 20387 if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) { 20388 this.element[ 0 ].style.position = "relative"; 20389 } 20390 }, 20391 20392 _adjustOffsetFromHelper: function( obj ) { 20393 if ( typeof obj === "string" ) { 20394 obj = obj.split( " " ); 20395 } 20396 if ( Array
vendor: 14,647 bytes, lines 20396-20876
20396.isArray( obj ) ) { 20397 obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 }; 20398 } 20399 if ( "left" in obj ) { 20400 this.offset.click.left = obj.left + this.margins.left; 20401 } 20402 if ( "right" in obj ) { 20403 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; 20404 } 20405 if ( "top" in obj ) { 20406 this.offset.click.top = obj.top + this.margins.top; 20407 } 20408 if ( "bottom" in obj ) { 20409 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; 20410 } 20411 }, 20412 20413 _isRootNode: function( element ) { 20414 return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ]; 20415 }, 20416 20417 _getParentOffset: function() { 20418 20419 //Get the offsetParent and cache its position 20420 var po = this.offsetParent.offset(), 20421 document = this.document[ 0 ]; 20422 20423 // This is a special case where we need to modify a offset calculated on start, since the 20424 // following happened: 20425 // 1. The position of the helper is absolute, so it's position is calculated based on the 20426 // next positioned parent 20427 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't 20428 // the document, which means that the scroll is included in the initial calculation of the 20429 // offset of the parent, and never recalculated upon drag 20430 if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document && 20431 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) { 20432 po.left += this.scrollParent.scrollLeft(); 20433 po.top += this.scrollParent.scrollTop(); 20434 } 20435 20436 if ( this._isRootNode( this.offsetParent[ 0 ] ) ) { 20437 po = { top: 0, left: 0 }; 20438 } 20439 20440 return { 20441 top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ), 20442 left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 ) 20443 }; 20444 20445 }, 20446 20447 _getRelativeOffset: function() { 20448 if ( this.cssPosition !== "relative" ) { 20449 return { top: 0, left: 0 }; 20450 } 20451 20452 var p = this.element.position(), 20453 scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ); 20454 20455 return { 20456 top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) + 20457 ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ), 20458 left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) + 20459 ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 ) 20460 }; 20461 20462 }, 20463 20464 _cacheMargins: function() { 20465 this.margins = { 20466 left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ), 20467 top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ), 20468 right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ), 20469 bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 ) 20470 }; 20471 }, 20472 20473 _cacheHelperProportions: function() { 20474 this.helperProportions = { 20475 width: this.helper.outerWidth(), 20476 height: this.helper.outerHeight() 20477 }; 20478 }, 20479 20480 _setContainment: function() { 20481 20482 var isUserScrollable, c, ce, 20483 o = this.options, 20484 document = this.document[ 0 ]; 20485 20486 this.relativeContainer = null; 20487 20488 if ( !o.containment ) { 20489 this.containment = null; 20490 return; 20491 } 20492 20493 if ( o.containment === "window" ) { 20494 this.containment = [ 20495 $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left, 20496 $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top, 20497 $( window ).scrollLeft() + $( window ).width() - 20498 this.helperProportions.width - this.margins.left, 20499 $( window ).scrollTop() + 20500 ( $( window ).height() || document.body.parentNode.scrollHeight ) - 20501 this.helperProportions.height - this.margins.top 20502 ]; 20503 return; 20504 } 20505 20506 if ( o.containment === "document" ) { 20507 this.containment = [ 20508 0, 20509 0, 20510 $( document ).width() - this.helperProportions.width - this.margins.left, 20511 ( $( document ).height() || document.body.parentNode.scrollHeight ) - 20512 this.helperProportions.height - this.margins.top 20513 ]; 20514 return; 20515 } 20516 20517 if ( o.containment.constructor === Array ) { 20518 this.containment = o.containment; 20519 return; 20520 } 20521 20522 if ( o.containment === "parent" ) { 20523 o.containment = this.helper[ 0 ].parentNode; 20524 } 20525 20526 c = $( o.containment ); 20527 ce = c[ 0 ]; 20528 20529 if ( !ce ) { 20530 return; 20531 } 20532 20533 isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) ); 20534 20535 this.containment = [ 20536 ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + 20537 ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ), 20538 ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + 20539 ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ), 20540 ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - 20541 ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - 20542 ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - 20543 this.helperProportions.width - 20544 this.margins.left - 20545 this.margins.right, 20546 ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - 20547 ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - 20548 ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - 20549 this.helperProportions.height - 20550 this.margins.top - 20551 this.margins.bottom 20552 ]; 20553 this.relativeContainer = c; 20554 }, 20555 20556 _convertPositionTo: function( d, pos ) { 20557 20558 if ( !pos ) { 20559 pos = this.position; 20560 } 20561 20562 var mod = d === "absolute" ? 1 : -1, 20563 scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ); 20564 20565 return { 20566 top: ( 20567 20568 // The absolute mouse position 20569 pos.top + 20570 20571 // Only for relative positioned nodes: Relative offset from element to offset parent 20572 this.offset.relative.top * mod + 20573 20574 // The offsetParent's offset without borders (offset + border) 20575 this.offset.parent.top * mod - 20576 ( ( this.cssPosition === "fixed" ? 20577 -this.offset.scroll.top : 20578 ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod ) 20579 ), 20580 left: ( 20581 20582 // The absolute mouse position 20583 pos.left + 20584 20585 // Only for relative positioned nodes: Relative offset from element to offset parent 20586 this.offset.relative.left * mod + 20587 20588 // The offsetParent's offset without borders (offset + border) 20589 this.offset.parent.left * mod - 20590 ( ( this.cssPosition === "fixed" ? 20591 -this.offset.scroll.left : 20592 ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod ) 20593 ) 20594 }; 20595 20596 }, 20597 20598 _generatePosition: function( event, constrainPosition ) { 20599 20600 var containment, co, top, left, 20601 o = this.options, 20602 scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ), 20603 pageX = event.pageX, 20604 pageY = event.pageY; 20605 20606 // Cache the scroll 20607 if ( !scrollIsRootNode || !this.offset.scroll ) { 20608 this.offset.scroll = { 20609 top: this.scrollParent.scrollTop(), 20610 left: this.scrollParent.scrollLeft() 20611 }; 20612 } 20613 20614 /* 20615 * - Position constraining - 20616 * Constrain the position to a mix of grid, containment. 20617 */ 20618 20619 // If we are not dragging yet, we won't check for options 20620 if ( constrainPosition ) { 20621 if ( this.containment ) { 20622 if ( this.relativeContainer ) { 20623 co = this.relativeContainer.offset(); 20624 containment = [ 20625 this.containment[ 0 ] + co.left, 20626 this.containment[ 1 ] + co.top, 20627 this.containment[ 2 ] + co.left, 20628 this.containment[ 3 ] + co.top 20629 ]; 20630 } else { 20631 containment = this.containment; 20632 } 20633 20634 if ( event.pageX - this.offset.click.left < containment[ 0 ] ) { 20635 pageX = containment[ 0 ] + this.offset.click.left; 20636 } 20637 if ( event.pageY - this.offset.click.top < containment[ 1 ] ) { 20638 pageY = containment[ 1 ] + this.offset.click.top; 20639 } 20640 if ( event.pageX - this.offset.click.left > containment[ 2 ] ) { 20641 pageX = containment[ 2 ] + this.offset.click.left; 20642 } 20643 if ( event.pageY - this.offset.click.top > containment[ 3 ] ) { 20644 pageY = containment[ 3 ] + this.offset.click.top; 20645 } 20646 } 20647 20648 if ( o.grid ) { 20649 20650 //Check for grid elements set to 0 to prevent divide by 0 error causing invalid 20651 // argument errors in IE (see ticket #6950) 20652 top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY - 20653 this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY; 20654 pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] || 20655 top - this.offset.click.top > containment[ 3 ] ) ? 20656 top : 20657 ( ( top - this.offset.click.top >= containment[ 1 ] ) ? 20658 top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top; 20659 20660 left = o.grid[ 0 ] ? this.originalPageX + 20661 Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] : 20662 this.originalPageX; 20663 pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] || 20664 left - this.offset.click.left > containment[ 2 ] ) ? 20665 left : 20666 ( ( left - this.offset.click.left >= containment[ 0 ] ) ? 20667 left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left; 20668 } 20669 20670 if ( o.axis === "y" ) { 20671 pageX = this.originalPageX; 20672 } 20673 20674 if ( o.axis === "x" ) { 20675 pageY = this.originalPageY; 20676 } 20677 } 20678 20679 return { 20680 top: ( 20681 20682 // The absolute mouse position 20683 pageY - 20684 20685 // Click offset (relative to the element) 20686 this.offset.click.top - 20687 20688 // Only for relative positioned nodes: Relative offset from element to offset parent 20689 this.offset.relative.top - 20690 20691 // The offsetParent's offset without borders (offset + border) 20692 this.offset.parent.top + 20693 ( this.cssPosition === "fixed" ? 20694 -this.offset.scroll.top : 20695 ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) 20696 ), 20697 left: ( 20698 20699 // The absolute mouse position 20700 pageX - 20701 20702 // Click offset (relative to the element) 20703 this.offset.click.left - 20704 20705 // Only for relative positioned nodes: Relative offset from element to offset parent 20706 this.offset.relative.left - 20707 20708 // The offsetParent's offset without borders (offset + border) 20709 this.offset.parent.left + 20710 ( this.cssPosition === "fixed" ? 20711 -this.offset.scroll.left : 20712 ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) 20713 ) 20714 }; 20715 20716 }, 20717 20718 _clear: function() { 20719 this._removeClass( this.helper, "ui-draggable-dragging" ); 20720 if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) { 20721 this.helper.remove(); 20722 } 20723 this.helper = null; 20724 this.cancelHelperRemoval = false; 20725 if ( this.destroyOnClear ) { 20726 this.destroy(); 20727 } 20728 }, 20729 20730 // From now on bulk stuff - mainly helpers 20731 20732 _trigger: function( type, event, ui ) { 20733 ui = ui || this._uiHash(); 20734 $.ui.plugin.call( this, type, [ event, ui, this ], true ); 20735 20736 // Absolute position and offset (see #6884 ) have to be recalculated after plugins 20737 if ( /^(drag|start|stop)/.test( type ) ) { 20738 this.positionAbs = this._convertPositionTo( "absolute" ); 20739 ui.offset = this.positionAbs; 20740 } 20741 return $.Widget.prototype._trigger.call( this, type, event, ui ); 20742 }, 20743 20744 plugins: {}, 20745 20746 _uiHash: function() { 20747 return { 20748 helper: this.helper, 20749 position: this.position, 20750 originalPosition: this.originalPosition, 20751 offset: this.positionAbs 20752 }; 20753 } 20754 20755} ); 20756 20757$.ui.plugin.add( "draggable", "connectToSortable", { 20758 start: function( event, ui, draggable ) { 20759 var uiSortable = $.extend( {}, ui, { 20760 item: draggable.element 20761 } ); 20762 20763 draggable.sortables = []; 20764 $( draggable.options.connectToSortable ).each( function() { 20765 var sortable = $( this ).sortable( "instance" ); 20766 20767 if ( sortable && !sortable.options.disabled ) { 20768 draggable.sortables.push( sortable ); 20769 20770 // RefreshPositions is called at drag start to refresh the containerCache 20771 // which is used in drag. This ensures it's initialized and synchronized 20772 // with any changes that might have happened on the page since initialization. 20773 sortable.refreshPositions(); 20774 sortable._trigger( "activate", event, uiSortable ); 20775 } 20776 } ); 20777 }, 20778 stop: function( event, ui, draggable ) { 20779 var uiSortable = $.extend( {}, ui, { 20780 item: draggable.element 20781 } ); 20782 20783 draggable.cancelHelperRemoval = false; 20784 20785 $.each( draggable.sortables, function() { 20786 var sortable = this; 20787 20788 if ( sortable.isOver ) { 20789 sortable.isOver = 0; 20790 20791 // Allow this sortable to handle removing the helper 20792 draggable.cancelHelperRemoval = true; 20793 sortable.cancelHelperRemoval = false; 20794 20795 // Use _storedCSS To restore properties in the sortable, 20796 // as this also handles revert (#9675) since the draggable 20797 // may have modified them in unexpected ways (#8809) 20798 sortable._storedCSS = { 20799 position: sortable.placeholder.css( "position" ), 20800 top: sortable.placeholder.css( "top" ), 20801 left: sortable.placeholder.css( "left" ) 20802 }; 20803 20804 sortable._mouseStop( event ); 20805 20806 // Once drag has ended, the sortable should return to using 20807 // its original helper, not the shared helper from draggable 20808 sortable.options.helper = sortable.options._helper; 20809 } else { 20810 20811 // Prevent this Sortable from removing the helper. 20812 // However, don't set the draggable to remove the helper 20813 // either as another connected Sortable may yet handle the removal. 20814 sortable.cancelHelperRemoval = true; 20815 20816 sortable._trigger( "deactivate", event, uiSortable ); 20817 } 20818 } ); 20819 }, 20820 drag: function( event, ui, draggable ) { 20821 $.each( draggable.sortables, function() { 20822 var innermostIntersecting = false, 20823 sortable = this; 20824 20825 // Copy over variables that sortable's _intersectsWith uses 20826 sortable.positionAbs = draggable.positionAbs; 20827 sortable.helperProportions = draggable.helperProportions; 20828 sortable.offset.click = draggable.offset.click; 20829 20830 if ( sortable._intersectsWith( sortable.containerCache ) ) { 20831 innermostIntersecting = true; 20832 20833 $.each( draggable.sortables, function() { 20834 20835 // Copy over variables that sortable's _intersectsWith uses 20836 this.positionAbs = draggable.positionAbs; 20837 this.helperProportions = draggable.helperProportions; 20838 this.offset.click = draggable.offset.click; 20839 20840 if ( this !== sortable && 20841 this._intersectsWith( this.containerCache ) && 20842 $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) { 20843 innermostIntersecting = false; 20844 } 20845 20846 return innermostIntersecting; 20847 } ); 20848 } 20849 20850 if ( innermostIntersecting ) { 20851 20852 // If it intersects, we use a little isOver variable and set it once, 20853 // so that the move-in stuff gets fired only once. 20854 if ( !sortable.isOver ) { 20855 sortable.isOver = 1; 20856 20857 // Store draggable's parent in case we need to reappend to it later. 20858 draggable._parent = ui.helper.parent(); 20859 20860 sortable.currentItem = ui.helper 20861 .appendTo( sortable.element ) 20862 .data( "ui-sortable-item", true ); 20863 20864 // Store helper option to later restore it 20865 sortable.options._helper = sortable.options.helper; 20866 20867 sortable.options.helper = function() { 20868 return ui.helper[ 0 ]; 20869 }; 20870 20871 // Fire the start events of the sortable with our passed browser event, 20872 // and our own helper (so it doesn't create a new one) 20873 event.target = sortable.currentItem[ 0 ]; 20874 sortable._mouseCapture( event, true ); 20875 sortable._mouseStart( event, true, true ); 20876
vendor: 10,634 bytes, lines 20877-21242
20877 // Because the browser event is way off the new appended portlet, 20878 // modify necessary variables to reflect the changes 20879 sortable.offset.click.top = draggable.offset.click.top; 20880 sortable.offset.click.left = draggable.offset.click.left; 20881 sortable.offset.parent.left -= draggable.offset.parent.left - 20882 sortable.offset.parent.left; 20883 sortable.offset.parent.top -= draggable.offset.parent.top - 20884 sortable.offset.parent.top; 20885 20886 draggable._trigger( "toSortable", event ); 20887 20888 // Inform draggable that the helper is in a valid drop zone, 20889 // used solely in the revert option to handle "valid/invalid". 20890 draggable.dropped = sortable.element; 20891 20892 // Need to refreshPositions of all sortables in the case that 20893 // adding to one sortable changes the location of the other sortables (#9675) 20894 $.each( draggable.sortables, function() { 20895 this.refreshPositions(); 20896 } ); 20897 20898 // Hack so receive/update callbacks work (mostly) 20899 draggable.currentItem = draggable.element; 20900 sortable.fromOutside = draggable; 20901 } 20902 20903 if ( sortable.currentItem ) { 20904 sortable._mouseDrag( event ); 20905 20906 // Copy the sortable's position because the draggable's can potentially reflect 20907 // a relative position, while sortable is always absolute, which the dragged 20908 // element has now become. (#8809) 20909 ui.position = sortable.position; 20910 } 20911 } else { 20912 20913 // If it doesn't intersect with the sortable, and it intersected before, 20914 // we fake the drag stop of the sortable, but make sure it doesn't remove 20915 // the helper by using cancelHelperRemoval. 20916 if ( sortable.isOver ) { 20917 20918 sortable.isOver = 0; 20919 sortable.cancelHelperRemoval = true; 20920 20921 // Calling sortable's mouseStop would trigger a revert, 20922 // so revert must be temporarily false until after mouseStop is called. 20923 sortable.options._revert = sortable.options.revert; 20924 sortable.options.revert = false; 20925 20926 sortable._trigger( "out", event, sortable._uiHash( sortable ) ); 20927 sortable._mouseStop( event, true ); 20928 20929 // Restore sortable behaviors that were modfied 20930 // when the draggable entered the sortable area (#9481) 20931 sortable.options.revert = sortable.options._revert; 20932 sortable.options.helper = sortable.options._helper; 20933 20934 if ( sortable.placeholder ) { 20935 sortable.placeholder.remove(); 20936 } 20937 20938 // Restore and recalculate the draggable's offset considering the sortable 20939 // may have modified them in unexpected ways. (#8809, #10669) 20940 ui.helper.appendTo( draggable._parent ); 20941 draggable._refreshOffsets( event ); 20942 ui.position = draggable._generatePosition( event, true ); 20943 20944 draggable._trigger( "fromSortable", event ); 20945 20946 // Inform draggable that the helper is no longer in a valid drop zone 20947 draggable.dropped = false; 20948 20949 // Need to refreshPositions of all sortables just in case removing 20950 // from one sortable changes the location of other sortables (#9675) 20951 $.each( draggable.sortables, function() { 20952 this.refreshPositions(); 20953 } ); 20954 } 20955 } 20956 } ); 20957 } 20958} ); 20959 20960$.ui.plugin.add( "draggable", "cursor", { 20961 start: function( event, ui, instance ) { 20962 var t = $( "body" ), 20963 o = instance.options; 20964 20965 if ( t.css( "cursor" ) ) { 20966 o._cursor = t.css( "cursor" ); 20967 } 20968 t.css( "cursor", o.cursor ); 20969 }, 20970 stop: function( event, ui, instance ) { 20971 var o = instance.options; 20972 if ( o._cursor ) { 20973 $( "body" ).css( "cursor", o._cursor ); 20974 } 20975 } 20976} ); 20977 20978$.ui.plugin.add( "draggable", "opacity", { 20979 start: function( event, ui, instance ) { 20980 var t = $( ui.helper ), 20981 o = instance.options; 20982 if ( t.css( "opacity" ) ) { 20983 o._opacity = t.css( "opacity" ); 20984 } 20985 t.css( "opacity", o.opacity ); 20986 }, 20987 stop: function( event, ui, instance ) { 20988 var o = instance.options; 20989 if ( o._opacity ) { 20990 $( ui.helper ).css( "opacity", o._opacity ); 20991 } 20992 } 20993} ); 20994 20995$.ui.plugin.add( "draggable", "scroll", { 20996 start: function( event, ui, i ) { 20997 if ( !i.scrollParentNotHidden ) { 20998 i.scrollParentNotHidden = i.helper.scrollParent( false ); 20999 } 21000 21001 if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && 21002 i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) { 21003 i.overflowOffset = i.scrollParentNotHidden.offset(); 21004 } 21005 }, 21006 drag: function( event, ui, i ) { 21007 21008 var o = i.options, 21009 scrolled = false, 21010 scrollParent = i.scrollParentNotHidden[ 0 ], 21011 document = i.document[ 0 ]; 21012 21013 if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) { 21014 if ( !o.axis || o.axis !== "x" ) { 21015 if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < 21016 o.scrollSensitivity ) { 21017 scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed; 21018 } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) { 21019 scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed; 21020 } 21021 } 21022 21023 if ( !o.axis || o.axis !== "y" ) { 21024 if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < 21025 o.scrollSensitivity ) { 21026 scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed; 21027 } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) { 21028 scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed; 21029 } 21030 } 21031 21032 } else { 21033 21034 if ( !o.axis || o.axis !== "x" ) { 21035 if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) { 21036 scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed ); 21037 } else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) < 21038 o.scrollSensitivity ) { 21039 scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed ); 21040 } 21041 } 21042 21043 if ( !o.axis || o.axis !== "y" ) { 21044 if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) { 21045 scrolled = $( document ).scrollLeft( 21046 $( document ).scrollLeft() - o.scrollSpeed 21047 ); 21048 } else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) < 21049 o.scrollSensitivity ) { 21050 scrolled = $( document ).scrollLeft( 21051 $( document ).scrollLeft() + o.scrollSpeed 21052 ); 21053 } 21054 } 21055 21056 } 21057 21058 if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) { 21059 $.ui.ddmanager.prepareOffsets( i, event ); 21060 } 21061 21062 } 21063} ); 21064 21065$.ui.plugin.add( "draggable", "snap", { 21066 start: function( event, ui, i ) { 21067 21068 var o = i.options; 21069 21070 i.snapElements = []; 21071 21072 $( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap ) 21073 .each( function() { 21074 var $t = $( this ), 21075 $o = $t.offset(); 21076 if ( this !== i.element[ 0 ] ) { 21077 i.snapElements.push( { 21078 item: this, 21079 width: $t.outerWidth(), height: $t.outerHeight(), 21080 top: $o.top, left: $o.left 21081 } ); 21082 } 21083 } ); 21084 21085 }, 21086 drag: function( event, ui, inst ) { 21087 21088 var ts, bs, ls, rs, l, r, t, b, i, first, 21089 o = inst.options, 21090 d = o.snapTolerance, 21091 x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, 21092 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; 21093 21094 for ( i = inst.snapElements.length - 1; i >= 0; i-- ) { 21095 21096 l = inst.snapElements[ i ].left - inst.margins.left; 21097 r = l + inst.snapElements[ i ].width; 21098 t = inst.snapElements[ i ].top - inst.margins.top; 21099 b = t + inst.snapElements[ i ].height; 21100 21101 if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || 21102 !$.contains( inst.snapElements[ i ].item.ownerDocument, 21103 inst.snapElements[ i ].item ) ) { 21104 if ( inst.snapElements[ i ].snapping ) { 21105 if ( inst.options.snap.release ) { 21106 inst.options.snap.release.call( 21107 inst.element, 21108 event, 21109 $.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } ) 21110 ); 21111 } 21112 } 21113 inst.snapElements[ i ].snapping = false; 21114 continue; 21115 } 21116 21117 if ( o.snapMode !== "inner" ) { 21118 ts = Math.abs( t - y2 ) <= d; 21119 bs = Math.abs( b - y1 ) <= d; 21120 ls = Math.abs( l - x2 ) <= d; 21121 rs = Math.abs( r - x1 ) <= d; 21122 if ( ts ) { 21123 ui.position.top = inst._convertPositionTo( "relative", { 21124 top: t - inst.helperProportions.height, 21125 left: 0 21126 } ).top; 21127 } 21128 if ( bs ) { 21129 ui.position.top = inst._convertPositionTo( "relative", { 21130 top: b, 21131 left: 0 21132 } ).top; 21133 } 21134 if ( ls ) { 21135 ui.position.left = inst._convertPositionTo( "relative", { 21136 top: 0, 21137 left: l - inst.helperProportions.width 21138 } ).left; 21139 } 21140 if ( rs ) { 21141 ui.position.left = inst._convertPositionTo( "relative", { 21142 top: 0, 21143 left: r 21144 } ).left; 21145 } 21146 } 21147 21148 first = ( ts || bs || ls || rs ); 21149 21150 if ( o.snapMode !== "outer" ) { 21151 ts = Math.abs( t - y1 ) <= d; 21152 bs = Math.abs( b - y2 ) <= d; 21153 ls = Math.abs( l - x1 ) <= d; 21154 rs = Math.abs( r - x2 ) <= d; 21155 if ( ts ) { 21156 ui.position.top = inst._convertPositionTo( "relative", { 21157 top: t, 21158 left: 0 21159 } ).top; 21160 } 21161 if ( bs ) { 21162 ui.position.top = inst._convertPositionTo( "relative", { 21163 top: b - inst.helperProportions.height, 21164 left: 0 21165 } ).top; 21166 } 21167 if ( ls ) { 21168 ui.position.left = inst._convertPositionTo( "relative", { 21169 top: 0, 21170 left: l 21171 } ).left; 21172 } 21173 if ( rs ) { 21174 ui.position.left = inst._convertPositionTo( "relative", { 21175 top: 0, 21176 left: r - inst.helperProportions.width 21177 } ).left; 21178 } 21179 } 21180 21181 if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) { 21182 if ( inst.options.snap.snap ) { 21183 inst.options.snap.snap.call( 21184 inst.element, 21185 event, 21186 $.extend( inst._uiHash(), { 21187 snapItem: inst.snapElements[ i ].item 21188 } ) ); 21189 } 21190 } 21191 inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first ); 21192 21193 } 21194 21195 } 21196} ); 21197 21198$.ui.plugin.add( "draggable", "stack", { 21199 start: function( event, ui, instance ) { 21200 var min, 21201 o = instance.options, 21202 group = $.makeArray( $( o.stack ) ).sort( function( a, b ) { 21203 return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) - 21204 ( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 ); 21205 } ); 21206 21207 if ( !group.length ) { 21208 return; 21209 } 21210 21211 min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0; 21212 $( group ).each( function( i ) { 21213 $( this ).css( "zIndex", min + i ); 21214 } ); 21215 this.css( "zIndex", ( min + group.length ) ); 21216 } 21217} ); 21218 21219$.ui.plugin.add( "draggable", "zIndex", { 21220 start: function( event, ui, instance ) { 21221 var t = $( ui.helper ), 21222 o = instance.options; 21223 21224 if ( t.css( "zIndex" ) ) { 21225 o._zIndex = t.css( "zIndex" ); 21226 } 21227 t.css( "zIndex", o.zIndex ); 21228 }, 21229 stop: function( event, ui, instance ) { 21230 var o = instance.options; 21231 21232 if ( o._zIndex ) { 21233 $( ui.helper ).css( "zIndex", o._zIndex ); 21234 } 21235 } 21236} ); 21237 21238var widgetsDraggable = $.ui.draggable; 21239 21240 21241/*! 21242 * jQuery UI Resizable 1.13.
212421 21243 * http://jqueryui.com 21244 * 21245 * Copyright jQuery Foundation and other contributors 21246 * Released under the MIT license. 21247 * http://jquery.org/license 21248 */ 21249 21250//>>label: Resizable 21251//>>group: Interactions 21252//>>description: Enables resize functionality for any element. 21253//>>docs: http://api.jqueryui.com/resizable/ 21254//>>demos: http://jqueryui.com/resizable/ 21255//>>css.structure: ../../themes/base/core.css 21256//>>css.structure: ../../themes/base/resizable.css 21257//>>css.theme: ../../themes/base/theme.css 21258 21259 21260$.widget( "ui.resizable", $.ui.mouse, { 21261 version: "1.13.1
vendor: 11,739 bytes, lines 21261-21754
21261", 21262 widgetEventPrefix: "resize", 21263 options: { 21264 alsoResize: false, 21265 animate: false, 21266 animateDuration: "slow", 21267 animateEasing: "swing", 21268 aspectRatio: false, 21269 autoHide: false, 21270 classes: { 21271 "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se" 21272 }, 21273 containment: false, 21274 ghost: false, 21275 grid: false, 21276 handles: "e,s,se", 21277 helper: false, 21278 maxHeight: null, 21279 maxWidth: null, 21280 minHeight: 10, 21281 minWidth: 10, 21282 21283 // See #7960 21284 zIndex: 90, 21285 21286 // Callbacks 21287 resize: null, 21288 start: null, 21289 stop: null 21290 }, 21291 21292 _num: function( value ) { 21293 return parseFloat( value ) || 0; 21294 }, 21295 21296 _isNumber: function( value ) { 21297 return !isNaN( parseFloat( value ) ); 21298 }, 21299 21300 _hasScroll: function( el, a ) { 21301 21302 if ( $( el ).css( "overflow" ) === "hidden" ) { 21303 return false; 21304 } 21305 21306 var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", 21307 has = false; 21308 21309 if ( el[ scroll ] > 0 ) { 21310 return true; 21311 } 21312 21313 // TODO: determine which cases actually cause this to happen 21314 // if the element doesn't have the scroll set, see if it's possible to 21315 // set the scroll 21316 try { 21317 el[ scroll ] = 1; 21318 has = ( el[ scroll ] > 0 ); 21319 el[ scroll ] = 0; 21320 } catch ( e ) { 21321 21322 // `el` might be a string, then setting `scroll` will throw 21323 // an error in strict mode; ignore it. 21324 } 21325 return has; 21326 }, 21327 21328 _create: function() { 21329 21330 var margins, 21331 o = this.options, 21332 that = this; 21333 this._addClass( "ui-resizable" ); 21334 21335 $.extend( this, { 21336 _aspectRatio: !!( o.aspectRatio ), 21337 aspectRatio: o.aspectRatio, 21338 originalElement: this.element, 21339 _proportionallyResizeElements: [], 21340 _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null 21341 } ); 21342 21343 // Wrap the element if it cannot hold child nodes 21344 if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) { 21345 21346 this.element.wrap( 21347 $( "<div class='ui-wrapper'></div>" ).css( { 21348 overflow: "hidden", 21349 position: this.element.css( "position" ), 21350 width: this.element.outerWidth(), 21351 height: this.element.outerHeight(), 21352 top: this.element.css( "top" ), 21353 left: this.element.css( "left" ) 21354 } ) 21355 ); 21356 21357 this.element = this.element.parent().data( 21358 "ui-resizable", this.element.resizable( "instance" ) 21359 ); 21360 21361 this.elementIsWrapper = true; 21362 21363 margins = { 21364 marginTop: this.originalElement.css( "marginTop" ), 21365 marginRight: this.originalElement.css( "marginRight" ), 21366 marginBottom: this.originalElement.css( "marginBottom" ), 21367 marginLeft: this.originalElement.css( "marginLeft" ) 21368 }; 21369 21370 this.element.css( margins ); 21371 this.originalElement.css( "margin", 0 ); 21372 21373 // support: Safari 21374 // Prevent Safari textarea resize 21375 this.originalResizeStyle = this.originalElement.css( "resize" ); 21376 this.originalElement.css( "resize", "none" ); 21377 21378 this._proportionallyResizeElements.push( this.originalElement.css( { 21379 position: "static", 21380 zoom: 1, 21381 display: "block" 21382 } ) ); 21383 21384 // Support: IE9 21385 // avoid IE jump (hard set the margin) 21386 this.originalElement.css( margins ); 21387 21388 this._proportionallyResize(); 21389 } 21390 21391 this._setupHandles(); 21392 21393 if ( o.autoHide ) { 21394 $( this.element ) 21395 .on( "mouseenter", function() { 21396 if ( o.disabled ) { 21397 return; 21398 } 21399 that._removeClass( "ui-resizable-autohide" ); 21400 that._handles.show(); 21401 } ) 21402 .on( "mouseleave", function() { 21403 if ( o.disabled ) { 21404 return; 21405 } 21406 if ( !that.resizing ) { 21407 that._addClass( "ui-resizable-autohide" ); 21408 that._handles.hide(); 21409 } 21410 } ); 21411 } 21412 21413 this._mouseInit(); 21414 }, 21415 21416 _destroy: function() { 21417 21418 this._mouseDestroy(); 21419 this._addedHandles.remove(); 21420 21421 var wrapper, 21422 _destroy = function( exp ) { 21423 $( exp ) 21424 .removeData( "resizable" ) 21425 .removeData( "ui-resizable" ) 21426 .off( ".resizable" ); 21427 }; 21428 21429 // TODO: Unwrap at same DOM position 21430 if ( this.elementIsWrapper ) { 21431 _destroy( this.element ); 21432 wrapper = this.element; 21433 this.originalElement.css( { 21434 position: wrapper.css( "position" ), 21435 width: wrapper.outerWidth(), 21436 height: wrapper.outerHeight(), 21437 top: wrapper.css( "top" ), 21438 left: wrapper.css( "left" ) 21439 } ).insertAfter( wrapper ); 21440 wrapper.remove(); 21441 } 21442 21443 this.originalElement.css( "resize", this.originalResizeStyle ); 21444 _destroy( this.originalElement ); 21445 21446 return this; 21447 }, 21448 21449 _setOption: function( key, value ) { 21450 this._super( key, value ); 21451 21452 switch ( key ) { 21453 case "handles": 21454 this._removeHandles(); 21455 this._setupHandles(); 21456 break; 21457 case "aspectRatio": 21458 this._aspectRatio = !!value; 21459 break; 21460 default: 21461 break; 21462 } 21463 }, 21464 21465 _setupHandles: function() { 21466 var o = this.options, handle, i, n, hname, axis, that = this; 21467 this.handles = o.handles || 21468 ( !$( ".ui-resizable-handle", this.element ).length ? 21469 "e,s,se" : { 21470 n: ".ui-resizable-n", 21471 e: ".ui-resizable-e", 21472 s: ".ui-resizable-s", 21473 w: ".ui-resizable-w", 21474 se: ".ui-resizable-se", 21475 sw: ".ui-resizable-sw", 21476 ne: ".ui-resizable-ne", 21477 nw: ".ui-resizable-nw" 21478 } ); 21479 21480 this._handles = $(); 21481 this._addedHandles = $(); 21482 if ( this.handles.constructor === String ) { 21483 21484 if ( this.handles === "all" ) { 21485 this.handles = "n,e,s,w,se,sw,ne,nw"; 21486 } 21487 21488 n = this.handles.split( "," ); 21489 this.handles = {}; 21490 21491 for ( i = 0; i < n.length; i++ ) { 21492 21493 handle = String.prototype.trim.call( n[ i ] ); 21494 hname = "ui-resizable-" + handle; 21495 axis = $( "<div>" ); 21496 this._addClass( axis, "ui-resizable-handle " + hname ); 21497 21498 axis.css( { zIndex: o.zIndex } ); 21499 21500 this.handles[ handle ] = ".ui-resizable-" + handle; 21501 if ( !this.element.children( this.handles[ handle ] ).length ) { 21502 this.element.append( axis ); 21503 this._addedHandles = this._addedHandles.add( axis ); 21504 } 21505 } 21506 21507 } 21508 21509 this._renderAxis = function( target ) { 21510 21511 var i, axis, padPos, padWrapper; 21512 21513 target = target || this.element; 21514 21515 for ( i in this.handles ) { 21516 21517 if ( this.handles[ i ].constructor === String ) { 21518 this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show(); 21519 } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) { 21520 this.handles[ i ] = $( this.handles[ i ] ); 21521 this._on( this.handles[ i ], { "mousedown": that._mouseDown } ); 21522 } 21523 21524 if ( this.elementIsWrapper && 21525 this.originalElement[ 0 ] 21526 .nodeName 21527 .match( /^(textarea|input|select|button)$/i ) ) { 21528 axis = $( this.handles[ i ], this.element ); 21529 21530 padWrapper = /sw|ne|nw|se|n|s/.test( i ) ? 21531 axis.outerHeight() : 21532 axis.outerWidth(); 21533 21534 padPos = [ "padding", 21535 /ne|nw|n/.test( i ) ? "Top" : 21536 /se|sw|s/.test( i ) ? "Bottom" : 21537 /^e$/.test( i ) ? "Right" : "Left" ].join( "" ); 21538 21539 target.css( padPos, padWrapper ); 21540 21541 this._proportionallyResize(); 21542 } 21543 21544 this._handles = this._handles.add( this.handles[ i ] ); 21545 } 21546 }; 21547 21548 // TODO: make renderAxis a prototype function 21549 this._renderAxis( this.element ); 21550 21551 this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) ); 21552 this._handles.disableSelection(); 21553 21554 this._handles.on( "mouseover", function() { 21555 if ( !that.resizing ) { 21556 if ( this.className ) { 21557 axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i ); 21558 } 21559 that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se"; 21560 } 21561 } ); 21562 21563 if ( o.autoHide ) { 21564 this._handles.hide(); 21565 this._addClass( "ui-resizable-autohide" ); 21566 } 21567 }, 21568 21569 _removeHandles: function() { 21570 this._addedHandles.remove(); 21571 }, 21572 21573 _mouseCapture: function( event ) { 21574 var i, handle, 21575 capture = false; 21576 21577 for ( i in this.handles ) { 21578 handle = $( this.handles[ i ] )[ 0 ]; 21579 if ( handle === event.target || $.contains( handle, event.target ) ) { 21580 capture = true; 21581 } 21582 } 21583 21584 return !this.options.disabled && capture; 21585 }, 21586 21587 _mouseStart: function( event ) { 21588 21589 var curleft, curtop, cursor, 21590 o = this.options, 21591 el = this.element; 21592 21593 this.resizing = true; 21594 21595 this._renderProxy(); 21596 21597 curleft = this._num( this.helper.css( "left" ) ); 21598 curtop = this._num( this.helper.css( "top" ) ); 21599 21600 if ( o.containment ) { 21601 curleft += $( o.containment ).scrollLeft() || 0; 21602 curtop += $( o.containment ).scrollTop() || 0; 21603 } 21604 21605 this.offset = this.helper.offset(); 21606 this.position = { left: curleft, top: curtop }; 21607 21608 this.size = this._helper ? { 21609 width: this.helper.width(), 21610 height: this.helper.height() 21611 } : { 21612 width: el.width(), 21613 height: el.height() 21614 }; 21615 21616 this.originalSize = this._helper ? { 21617 width: el.outerWidth(), 21618 height: el.outerHeight() 21619 } : { 21620 width: el.width(), 21621 height: el.height() 21622 }; 21623 21624 this.sizeDiff = { 21625 width: el.outerWidth() - el.width(), 21626 height: el.outerHeight() - el.height() 21627 }; 21628 21629 this.originalPosition = { left: curleft, top: curtop }; 21630 this.originalMousePosition = { left: event.pageX, top: event.pageY }; 21631 21632 this.aspectRatio = ( typeof o.aspectRatio === "number" ) ? 21633 o.aspectRatio : 21634 ( ( this.originalSize.width / this.originalSize.height ) || 1 ); 21635 21636 cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" ); 21637 $( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor ); 21638 21639 this._addClass( "ui-resizable-resizing" ); 21640 this._propagate( "start", event ); 21641 return true; 21642 }, 21643 21644 _mouseDrag: function( event ) { 21645 21646 var data, props, 21647 smp = this.originalMousePosition, 21648 a = this.axis, 21649 dx = ( event.pageX - smp.left ) || 0, 21650 dy = ( event.pageY - smp.top ) || 0, 21651 trigger = this._change[ a ]; 21652 21653 this._updatePrevProperties(); 21654 21655 if ( !trigger ) { 21656 return false; 21657 } 21658 21659 data = trigger.apply( this, [ event, dx, dy ] ); 21660 21661 this._updateVirtualBoundaries( event.shiftKey ); 21662 if ( this._aspectRatio || event.shiftKey ) { 21663 data = this._updateRatio( data, event ); 21664 } 21665 21666 data = this._respectSize( data, event ); 21667 21668 this._updateCache( data ); 21669 21670 this._propagate( "resize", event ); 21671 21672 props = this._applyChanges(); 21673 21674 if ( !this._helper && this._proportionallyResizeElements.length ) { 21675 this._proportionallyResize(); 21676 } 21677 21678 if ( !$.isEmptyObject( props ) ) { 21679 this._updatePrevProperties(); 21680 this._trigger( "resize", event, this.ui() ); 21681 this._applyChanges(); 21682 } 21683 21684 return false; 21685 }, 21686 21687 _mouseStop: function( event ) { 21688 21689 this.resizing = false; 21690 var pr, ista, soffseth, soffsetw, s, left, top, 21691 o = this.options, that = this; 21692 21693 if ( this._helper ) { 21694 21695 pr = this._proportionallyResizeElements; 21696 ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ); 21697 soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height; 21698 soffsetw = ista ? 0 : that.sizeDiff.width; 21699 21700 s = { 21701 width: ( that.helper.width() - soffsetw ), 21702 height: ( that.helper.height() - soffseth ) 21703 }; 21704 left = ( parseFloat( that.element.css( "left" ) ) + 21705 ( that.position.left - that.originalPosition.left ) ) || null; 21706 top = ( parseFloat( that.element.css( "top" ) ) + 21707 ( that.position.top - that.originalPosition.top ) ) || null; 21708 21709 if ( !o.animate ) { 21710 this.element.css( $.extend( s, { top: top, left: left } ) ); 21711 } 21712 21713 that.helper.height( that.size.height ); 21714 that.helper.width( that.size.width ); 21715 21716 if ( this._helper && !o.animate ) { 21717 this._proportionallyResize(); 21718 } 21719 } 21720 21721 $( "body" ).css( "cursor", "auto" ); 21722 21723 this._removeClass( "ui-resizable-resizing" ); 21724 21725 this._propagate( "stop", event ); 21726 21727 if ( this._helper ) { 21728 this.helper.remove(); 21729 } 21730 21731 return false; 21732 21733 }, 21734 21735 _updatePrevProperties: function() { 21736 this.prevPosition = { 21737 top: this.position.top, 21738 left: this.position.left 21739 }; 21740 this.prevSize = { 21741 width: this.size.width, 21742 height: this.size.height 21743 }; 21744 }, 21745 21746 _applyChanges: function() { 21747 var props = {}; 21748 21749 if ( this.position.top !== this.prevPosition.top ) { 21750 props.top = this.position.top + "px"; 21751 } 21752 if ( this.position.left !== this.prevPosition.left ) { 21753 props.left = this.position.left + "px"; 21754 }
vendor: 9,533 bytes, lines 21755-22122
21755 if ( this.size.width !== this.prevSize.width ) { 21756 props.width = this.size.width + "px"; 21757 } 21758 if ( this.size.height !== this.prevSize.height ) { 21759 props.height = this.size.height + "px"; 21760 } 21761 21762 this.helper.css( props ); 21763 21764 return props; 21765 }, 21766 21767 _updateVirtualBoundaries: function( forceAspectRatio ) { 21768 var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b, 21769 o = this.options; 21770 21771 b = { 21772 minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0, 21773 maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity, 21774 minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0, 21775 maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity 21776 }; 21777 21778 if ( this._aspectRatio || forceAspectRatio ) { 21779 pMinWidth = b.minHeight * this.aspectRatio; 21780 pMinHeight = b.minWidth / this.aspectRatio; 21781 pMaxWidth = b.maxHeight * this.aspectRatio; 21782 pMaxHeight = b.maxWidth / this.aspectRatio; 21783 21784 if ( pMinWidth > b.minWidth ) { 21785 b.minWidth = pMinWidth; 21786 } 21787 if ( pMinHeight > b.minHeight ) { 21788 b.minHeight = pMinHeight; 21789 } 21790 if ( pMaxWidth < b.maxWidth ) { 21791 b.maxWidth = pMaxWidth; 21792 } 21793 if ( pMaxHeight < b.maxHeight ) { 21794 b.maxHeight = pMaxHeight; 21795 } 21796 } 21797 this._vBoundaries = b; 21798 }, 21799 21800 _updateCache: function( data ) { 21801 this.offset = this.helper.offset(); 21802 if ( this._isNumber( data.left ) ) { 21803 this.position.left = data.left; 21804 } 21805 if ( this._isNumber( data.top ) ) { 21806 this.position.top = data.top; 21807 } 21808 if ( this._isNumber( data.height ) ) { 21809 this.size.height = data.height; 21810 } 21811 if ( this._isNumber( data.width ) ) { 21812 this.size.width = data.width; 21813 } 21814 }, 21815 21816 _updateRatio: function( data ) { 21817 21818 var cpos = this.position, 21819 csize = this.size, 21820 a = this.axis; 21821 21822 if ( this._isNumber( data.height ) ) { 21823 data.width = ( data.height * this.aspectRatio ); 21824 } else if ( this._isNumber( data.width ) ) { 21825 data.height = ( data.width / this.aspectRatio ); 21826 } 21827 21828 if ( a === "sw" ) { 21829 data.left = cpos.left + ( csize.width - data.width ); 21830 data.top = null; 21831 } 21832 if ( a === "nw" ) { 21833 data.top = cpos.top + ( csize.height - data.height ); 21834 data.left = cpos.left + ( csize.width - data.width ); 21835 } 21836 21837 return data; 21838 }, 21839 21840 _respectSize: function( data ) { 21841 21842 var o = this._vBoundaries, 21843 a = this.axis, 21844 ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ), 21845 ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ), 21846 isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ), 21847 isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ), 21848 dw = this.originalPosition.left + this.originalSize.width, 21849 dh = this.originalPosition.top + this.originalSize.height, 21850 cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a ); 21851 if ( isminw ) { 21852 data.width = o.minWidth; 21853 } 21854 if ( isminh ) { 21855 data.height = o.minHeight; 21856 } 21857 if ( ismaxw ) { 21858 data.width = o.maxWidth; 21859 } 21860 if ( ismaxh ) { 21861 data.height = o.maxHeight; 21862 } 21863 21864 if ( isminw && cw ) { 21865 data.left = dw - o.minWidth; 21866 } 21867 if ( ismaxw && cw ) { 21868 data.left = dw - o.maxWidth; 21869 } 21870 if ( isminh && ch ) { 21871 data.top = dh - o.minHeight; 21872 } 21873 if ( ismaxh && ch ) { 21874 data.top = dh - o.maxHeight; 21875 } 21876 21877 // Fixing jump error on top/left - bug #2330 21878 if ( !data.width && !data.height && !data.left && data.top ) { 21879 data.top = null; 21880 } else if ( !data.width && !data.height && !data.top && data.left ) { 21881 data.left = null; 21882 } 21883 21884 return data; 21885 }, 21886 21887 _getPaddingPlusBorderDimensions: function( element ) { 21888 var i = 0, 21889 widths = [], 21890 borders = [ 21891 element.css( "borderTopWidth" ), 21892 element.css( "borderRightWidth" ), 21893 element.css( "borderBottomWidth" ), 21894 element.css( "borderLeftWidth" ) 21895 ], 21896 paddings = [ 21897 element.css( "paddingTop" ), 21898 element.css( "paddingRight" ), 21899 element.css( "paddingBottom" ), 21900 element.css( "paddingLeft" ) 21901 ]; 21902 21903 for ( ; i < 4; i++ ) { 21904 widths[ i ] = ( parseFloat( borders[ i ] ) || 0 ); 21905 widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 ); 21906 } 21907 21908 return { 21909 height: widths[ 0 ] + widths[ 2 ], 21910 width: widths[ 1 ] + widths[ 3 ] 21911 }; 21912 }, 21913 21914 _proportionallyResize: function() { 21915 21916 if ( !this._proportionallyResizeElements.length ) { 21917 return; 21918 } 21919 21920 var prel, 21921 i = 0, 21922 element = this.helper || this.element; 21923 21924 for ( ; i < this._proportionallyResizeElements.length; i++ ) { 21925 21926 prel = this._proportionallyResizeElements[ i ]; 21927 21928 // TODO: Seems like a bug to cache this.outerDimensions 21929 // considering that we are in a loop. 21930 if ( !this.outerDimensions ) { 21931 this.outerDimensions = this._getPaddingPlusBorderDimensions( prel ); 21932 } 21933 21934 prel.css( { 21935 height: ( element.height() - this.outerDimensions.height ) || 0, 21936 width: ( element.width() - this.outerDimensions.width ) || 0 21937 } ); 21938 21939 } 21940 21941 }, 21942 21943 _renderProxy: function() { 21944 21945 var el = this.element, o = this.options; 21946 this.elementOffset = el.offset(); 21947 21948 if ( this._helper ) { 21949 21950 this.helper = this.helper || $( "<div></div>" ).css( { overflow: "hidden" } ); 21951 21952 this._addClass( this.helper, this._helper ); 21953 this.helper.css( { 21954 width: this.element.outerWidth(), 21955 height: this.element.outerHeight(), 21956 position: "absolute", 21957 left: this.elementOffset.left + "px", 21958 top: this.elementOffset.top + "px", 21959 zIndex: ++o.zIndex //TODO: Don't modify option 21960 } ); 21961 21962 this.helper 21963 .appendTo( "body" ) 21964 .disableSelection(); 21965 21966 } else { 21967 this.helper = this.element; 21968 } 21969 21970 }, 21971 21972 _change: { 21973 e: function( event, dx ) { 21974 return { width: this.originalSize.width + dx }; 21975 }, 21976 w: function( event, dx ) { 21977 var cs = this.originalSize, sp = this.originalPosition; 21978 return { left: sp.left + dx, width: cs.width - dx }; 21979 }, 21980 n: function( event, dx, dy ) { 21981 var cs = this.originalSize, sp = this.originalPosition; 21982 return { top: sp.top + dy, height: cs.height - dy }; 21983 }, 21984 s: function( event, dx, dy ) { 21985 return { height: this.originalSize.height + dy }; 21986 }, 21987 se: function( event, dx, dy ) { 21988 return $.extend( this._change.s.apply( this, arguments ), 21989 this._change.e.apply( this, [ event, dx, dy ] ) ); 21990 }, 21991 sw: function( event, dx, dy ) { 21992 return $.extend( this._change.s.apply( this, arguments ), 21993 this._change.w.apply( this, [ event, dx, dy ] ) ); 21994 }, 21995 ne: function( event, dx, dy ) { 21996 return $.extend( this._change.n.apply( this, arguments ), 21997 this._change.e.apply( this, [ event, dx, dy ] ) ); 21998 }, 21999 nw: function( event, dx, dy ) { 22000 return $.extend( this._change.n.apply( this, arguments ), 22001 this._change.w.apply( this, [ event, dx, dy ] ) ); 22002 } 22003 }, 22004 22005 _propagate: function( n, event ) { 22006 $.ui.plugin.call( this, n, [ event, this.ui() ] ); 22007 if ( n !== "resize" ) { 22008 this._trigger( n, event, this.ui() ); 22009 } 22010 }, 22011 22012 plugins: {}, 22013 22014 ui: function() { 22015 return { 22016 originalElement: this.originalElement, 22017 element: this.element, 22018 helper: this.helper, 22019 position: this.position, 22020 size: this.size, 22021 originalSize: this.originalSize, 22022 originalPosition: this.originalPosition 22023 }; 22024 } 22025 22026} ); 22027 22028/* 22029 * Resizable Extensions 22030 */ 22031 22032$.ui.plugin.add( "resizable", "animate", { 22033 22034 stop: function( event ) { 22035 var that = $( this ).resizable( "instance" ), 22036 o = that.options, 22037 pr = that._proportionallyResizeElements, 22038 ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ), 22039 soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height, 22040 soffsetw = ista ? 0 : that.sizeDiff.width, 22041 style = { 22042 width: ( that.size.width - soffsetw ), 22043 height: ( that.size.height - soffseth ) 22044 }, 22045 left = ( parseFloat( that.element.css( "left" ) ) + 22046 ( that.position.left - that.originalPosition.left ) ) || null, 22047 top = ( parseFloat( that.element.css( "top" ) ) + 22048 ( that.position.top - that.originalPosition.top ) ) || null; 22049 22050 that.element.animate( 22051 $.extend( style, top && left ? { top: top, left: left } : {} ), { 22052 duration: o.animateDuration, 22053 easing: o.animateEasing, 22054 step: function() { 22055 22056 var data = { 22057 width: parseFloat( that.element.css( "width" ) ), 22058 height: parseFloat( that.element.css( "height" ) ), 22059 top: parseFloat( that.element.css( "top" ) ), 22060 left: parseFloat( that.element.css( "left" ) ) 22061 }; 22062 22063 if ( pr && pr.length ) { 22064 $( pr[ 0 ] ).css( { width: data.width, height: data.height } ); 22065 } 22066 22067 // Propagating resize, and updating values for each animation step 22068 that._updateCache( data ); 22069 that._propagate( "resize", event ); 22070 22071 } 22072 } 22073 ); 22074 } 22075 22076} ); 22077 22078$.ui.plugin.add( "resizable", "containment", { 22079 22080 start: function() { 22081 var element, p, co, ch, cw, width, height, 22082 that = $( this ).resizable( "instance" ), 22083 o = that.options, 22084 el = that.element, 22085 oc = o.containment, 22086 ce = ( oc instanceof $ ) ? 22087 oc.get( 0 ) : 22088 ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc; 22089 22090 if ( !ce ) { 22091 return; 22092 } 22093 22094 that.containerElement = $( ce ); 22095 22096 if ( /document/.test( oc ) || oc === document ) { 22097 that.containerOffset = { 22098 left: 0, 22099 top: 0 22100 }; 22101 that.containerPosition = { 22102 left: 0, 22103 top: 0 22104 }; 22105 22106 that.parentData = { 22107 element: $( document ), 22108 left: 0, 22109 top: 0, 22110 width: $( document ).width(), 22111 height: $( document ).height() || document.body.parentNode.scrollHeight 22112 }; 22113 } else { 22114 element = $( ce ); 22115 p = []; 22116 $( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) { 22117 p[ i ] = that._num( element.css( "padding" + name ) ); 22118 } ); 22119 22120 that.containerOffset = element.offset(); 22121 that.containerPosition = element.position(); 22122 that.containerSize = {
vendor: 5,871 bytes, lines 22123-22347
22123 height: ( element.innerHeight() - p[ 3 ] ), 22124 width: ( element.innerWidth() - p[ 1 ] ) 22125 }; 22126 22127 co = that.containerOffset; 22128 ch = that.containerSize.height; 22129 cw = that.containerSize.width; 22130 width = ( that._hasScroll( ce, "left" ) ? ce.scrollWidth : cw ); 22131 height = ( that._hasScroll( ce ) ? ce.scrollHeight : ch ); 22132 22133 that.parentData = { 22134 element: ce, 22135 left: co.left, 22136 top: co.top, 22137 width: width, 22138 height: height 22139 }; 22140 } 22141 }, 22142 22143 resize: function( event ) { 22144 var woset, hoset, isParent, isOffsetRelative, 22145 that = $( this ).resizable( "instance" ), 22146 o = that.options, 22147 co = that.containerOffset, 22148 cp = that.position, 22149 pRatio = that._aspectRatio || event.shiftKey, 22150 cop = { 22151 top: 0, 22152 left: 0 22153 }, 22154 ce = that.containerElement, 22155 continueResize = true; 22156 22157 if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) { 22158 cop = co; 22159 } 22160 22161 if ( cp.left < ( that._helper ? co.left : 0 ) ) { 22162 that.size.width = that.size.width + 22163 ( that._helper ? 22164 ( that.position.left - co.left ) : 22165 ( that.position.left - cop.left ) ); 22166 22167 if ( pRatio ) { 22168 that.size.height = that.size.width / that.aspectRatio; 22169 continueResize = false; 22170 } 22171 that.position.left = o.helper ? co.left : 0; 22172 } 22173 22174 if ( cp.top < ( that._helper ? co.top : 0 ) ) { 22175 that.size.height = that.size.height + 22176 ( that._helper ? 22177 ( that.position.top - co.top ) : 22178 that.position.top ); 22179 22180 if ( pRatio ) { 22181 that.size.width = that.size.height * that.aspectRatio; 22182 continueResize = false; 22183 } 22184 that.position.top = that._helper ? co.top : 0; 22185 } 22186 22187 isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 ); 22188 isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) ); 22189 22190 if ( isParent && isOffsetRelative ) { 22191 that.offset.left = that.parentData.left + that.position.left; 22192 that.offset.top = that.parentData.top + that.position.top; 22193 } else { 22194 that.offset.left = that.element.offset().left; 22195 that.offset.top = that.element.offset().top; 22196 } 22197 22198 woset = Math.abs( that.sizeDiff.width + 22199 ( that._helper ? 22200 that.offset.left - cop.left : 22201 ( that.offset.left - co.left ) ) ); 22202 22203 hoset = Math.abs( that.sizeDiff.height + 22204 ( that._helper ? 22205 that.offset.top - cop.top : 22206 ( that.offset.top - co.top ) ) ); 22207 22208 if ( woset + that.size.width >= that.parentData.width ) { 22209 that.size.width = that.parentData.width - woset; 22210 if ( pRatio ) { 22211 that.size.height = that.size.width / that.aspectRatio; 22212 continueResize = false; 22213 } 22214 } 22215 22216 if ( hoset + that.size.height >= that.parentData.height ) { 22217 that.size.height = that.parentData.height - hoset; 22218 if ( pRatio ) { 22219 that.size.width = that.size.height * that.aspectRatio; 22220 continueResize = false; 22221 } 22222 } 22223 22224 if ( !continueResize ) { 22225 that.position.left = that.prevPosition.left; 22226 that.position.top = that.prevPosition.top; 22227 that.size.width = that.prevSize.width; 22228 that.size.height = that.prevSize.height; 22229 } 22230 }, 22231 22232 stop: function() { 22233 var that = $( this ).resizable( "instance" ), 22234 o = that.options, 22235 co = that.containerOffset, 22236 cop = that.containerPosition, 22237 ce = that.containerElement, 22238 helper = $( that.helper ), 22239 ho = helper.offset(), 22240 w = helper.outerWidth() - that.sizeDiff.width, 22241 h = helper.outerHeight() - that.sizeDiff.height; 22242 22243 if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) { 22244 $( this ).css( { 22245 left: ho.left - cop.left - co.left, 22246 width: w, 22247 height: h 22248 } ); 22249 } 22250 22251 if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) { 22252 $( this ).css( { 22253 left: ho.left - cop.left - co.left, 22254 width: w, 22255 height: h 22256 } ); 22257 } 22258 } 22259} ); 22260 22261$.ui.plugin.add( "resizable", "alsoResize", { 22262 22263 start: function() { 22264 var that = $( this ).resizable( "instance" ), 22265 o = that.options; 22266 22267 $( o.alsoResize ).each( function() { 22268 var el = $( this ); 22269 el.data( "ui-resizable-alsoresize", { 22270 width: parseFloat( el.width() ), height: parseFloat( el.height() ), 22271 left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) ) 22272 } ); 22273 } ); 22274 }, 22275 22276 resize: function( event, ui ) { 22277 var that = $( this ).resizable( "instance" ), 22278 o = that.options, 22279 os = that.originalSize, 22280 op = that.originalPosition, 22281 delta = { 22282 height: ( that.size.height - os.height ) || 0, 22283 width: ( that.size.width - os.width ) || 0, 22284 top: ( that.position.top - op.top ) || 0, 22285 left: ( that.position.left - op.left ) || 0 22286 }; 22287 22288 $( o.alsoResize ).each( function() { 22289 var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {}, 22290 css = el.parents( ui.originalElement[ 0 ] ).length ? 22291 [ "width", "height" ] : 22292 [ "width", "height", "top", "left" ]; 22293 22294 $.each( css, function( i, prop ) { 22295 var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 ); 22296 if ( sum && sum >= 0 ) { 22297 style[ prop ] = sum || null; 22298 } 22299 } ); 22300 22301 el.css( style ); 22302 } ); 22303 }, 22304 22305 stop: function() { 22306 $( this ).removeData( "ui-resizable-alsoresize" ); 22307 } 22308} ); 22309 22310$.ui.plugin.add( "resizable", "ghost", { 22311 22312 start: function() { 22313 22314 var that = $( this ).resizable( "instance" ), cs = that.size; 22315 22316 that.ghost = that.originalElement.clone(); 22317 that.ghost.css( { 22318 opacity: 0.25, 22319 display: "block", 22320 position: "relative", 22321 height: cs.height, 22322 width: cs.width, 22323 margin: 0, 22324 left: 0, 22325 top: 0 22326 } ); 22327 22328 that._addClass( that.ghost, "ui-resizable-ghost" ); 22329 22330 // DEPRECATED 22331 // TODO: remove after 1.12 22332 if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) { 22333 22334 // Ghost option 22335 that.ghost.addClass( this.options.ghost ); 22336 } 22337 22338 that.ghost.appendTo( that.helper ); 22339 22340 }, 22341 22342 resize: function() { 22343 var that = $( this ).resizable( "instance" ); 22344 if ( that.ghost ) { 22345 that.ghost.css( { 22346 position: "relative", 22347 height: that.size.height,
vendor: 2,863 bytes, lines 22348-22459
22348 width: that.size.width 22349 } ); 22350 } 22351 }, 22352 22353 stop: function() { 22354 var that = $( this ).resizable( "instance" ); 22355 if ( that.ghost && that.helper ) { 22356 that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) ); 22357 } 22358 } 22359 22360} ); 22361 22362$.ui.plugin.add( "resizable", "grid", { 22363 22364 resize: function() { 22365 var outerDimensions, 22366 that = $( this ).resizable( "instance" ), 22367 o = that.options, 22368 cs = that.size, 22369 os = that.originalSize, 22370 op = that.originalPosition, 22371 a = that.axis, 22372 grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid, 22373 gridX = ( grid[ 0 ] || 1 ), 22374 gridY = ( grid[ 1 ] || 1 ), 22375 ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX, 22376 oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY, 22377 newWidth = os.width + ox, 22378 newHeight = os.height + oy, 22379 isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ), 22380 isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ), 22381 isMinWidth = o.minWidth && ( o.minWidth > newWidth ), 22382 isMinHeight = o.minHeight && ( o.minHeight > newHeight ); 22383 22384 o.grid = grid; 22385 22386 if ( isMinWidth ) { 22387 newWidth += gridX; 22388 } 22389 if ( isMinHeight ) { 22390 newHeight += gridY; 22391 } 22392 if ( isMaxWidth ) { 22393 newWidth -= gridX; 22394 } 22395 if ( isMaxHeight ) { 22396 newHeight -= gridY; 22397 } 22398 22399 if ( /^(se|s|e)$/.test( a ) ) { 22400 that.size.width = newWidth; 22401 that.size.height = newHeight; 22402 } else if ( /^(ne)$/.test( a ) ) { 22403 that.size.width = newWidth; 22404 that.size.height = newHeight; 22405 that.position.top = op.top - oy; 22406 } else if ( /^(sw)$/.test( a ) ) { 22407 that.size.width = newWidth; 22408 that.size.height = newHeight; 22409 that.position.left = op.left - ox; 22410 } else { 22411 if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) { 22412 outerDimensions = that._getPaddingPlusBorderDimensions( this ); 22413 } 22414 22415 if ( newHeight - gridY > 0 ) { 22416 that.size.height = newHeight; 22417 that.position.top = op.top - oy; 22418 } else { 22419 newHeight = gridY - outerDimensions.height; 22420 that.size.height = newHeight; 22421 that.position.top = op.top + os.height - newHeight; 22422 } 22423 if ( newWidth - gridX > 0 ) { 22424 that.size.width = newWidth; 22425 that.position.left = op.left - ox; 22426 } else { 22427 newWidth = gridX - outerDimensions.width; 22428 that.size.width = newWidth; 22429 that.position.left = op.left + os.width - newWidth; 22430 } 22431 } 22432 } 22433 22434} ); 22435 22436var widgetsResizable = $.ui.resizable; 22437 22438 22439/*! 22440 * jQuery UI Dialog 1.13.1 22441 * http://jqueryui.com 22442 * 22443 * Copyright jQuery Foundation and other contributors 22444 * Released under the MIT license. 22445 * http://jquery.org/license 22446 */ 22447 22448//>>label: Dialog 22449//>>group: Widgets 22450//>>description: Displays customizable dialog windows. 22451//>>docs: http://api.jqueryui.com/dialog/ 22452//>>demos: http://jqueryui.com/dialog/ 22453//>>css.structure: ../../themes/base/core.css 22454//>>css.structure: ../../themes/base/dialog.css 22455//>>css.theme: ../../themes/base/theme.css 22456 22457 22458$.widget( "ui.dialog", { 22459 version: "1.13.1
vendor: 20,928 bytes, lines 22459-23293
22459", 22460 options: { 22461 appendTo: "body", 22462 autoOpen: true, 22463 buttons: [], 22464 classes: { 22465 "ui-dialog": "ui-corner-all", 22466 "ui-dialog-titlebar": "ui-corner-all" 22467 }, 22468 closeOnEscape: true, 22469 closeText: "Close", 22470 draggable: true, 22471 hide: null, 22472 height: "auto", 22473 maxHeight: null, 22474 maxWidth: null, 22475 minHeight: 150, 22476 minWidth: 150, 22477 modal: false, 22478 position: { 22479 my: "center", 22480 at: "center", 22481 of: window, 22482 collision: "fit", 22483 22484 // Ensure the titlebar is always visible 22485 using: function( pos ) { 22486 var topOffset = $( this ).css( pos ).offset().top; 22487 if ( topOffset < 0 ) { 22488 $( this ).css( "top", pos.top - topOffset ); 22489 } 22490 } 22491 }, 22492 resizable: true, 22493 show: null, 22494 title: null, 22495 width: 300, 22496 22497 // Callbacks 22498 beforeClose: null, 22499 close: null, 22500 drag: null, 22501 dragStart: null, 22502 dragStop: null, 22503 focus: null, 22504 open: null, 22505 resize: null, 22506 resizeStart: null, 22507 resizeStop: null 22508 }, 22509 22510 sizeRelatedOptions: { 22511 buttons: true, 22512 height: true, 22513 maxHeight: true, 22514 maxWidth: true, 22515 minHeight: true, 22516 minWidth: true, 22517 width: true 22518 }, 22519 22520 resizableRelatedOptions: { 22521 maxHeight: true, 22522 maxWidth: true, 22523 minHeight: true, 22524 minWidth: true 22525 }, 22526 22527 _create: function() { 22528 this.originalCss = { 22529 display: this.element[ 0 ].style.display, 22530 width: this.element[ 0 ].style.width, 22531 minHeight: this.element[ 0 ].style.minHeight, 22532 maxHeight: this.element[ 0 ].style.maxHeight, 22533 height: this.element[ 0 ].style.height 22534 }; 22535 this.originalPosition = { 22536 parent: this.element.parent(), 22537 index: this.element.parent().children().index( this.element ) 22538 }; 22539 this.originalTitle = this.element.attr( "title" ); 22540 if ( this.options.title == null && this.originalTitle != null ) { 22541 this.options.title = this.originalTitle; 22542 } 22543 22544 // Dialogs can't be disabled 22545 if ( this.options.disabled ) { 22546 this.options.disabled = false; 22547 } 22548 22549 this._createWrapper(); 22550 22551 this.element 22552 .show() 22553 .removeAttr( "title" ) 22554 .appendTo( this.uiDialog ); 22555 22556 this._addClass( "ui-dialog-content", "ui-widget-content" ); 22557 22558 this._createTitlebar(); 22559 this._createButtonPane(); 22560 22561 if ( this.options.draggable && $.fn.draggable ) { 22562 this._makeDraggable(); 22563 } 22564 if ( this.options.resizable && $.fn.resizable ) { 22565 this._makeResizable(); 22566 } 22567 22568 this._isOpen = false; 22569 22570 this._trackFocus(); 22571 }, 22572 22573 _init: function() { 22574 if ( this.options.autoOpen ) { 22575 this.open(); 22576 } 22577 }, 22578 22579 _appendTo: function() { 22580 var element = this.options.appendTo; 22581 if ( element && ( element.jquery || element.nodeType ) ) { 22582 return $( element ); 22583 } 22584 return this.document.find( element || "body" ).eq( 0 ); 22585 }, 22586 22587 _destroy: function() { 22588 var next, 22589 originalPosition = this.originalPosition; 22590 22591 this._untrackInstance(); 22592 this._destroyOverlay(); 22593 22594 this.element 22595 .removeUniqueId() 22596 .css( this.originalCss ) 22597 22598 // Without detaching first, the following becomes really slow 22599 .detach(); 22600 22601 this.uiDialog.remove(); 22602 22603 if ( this.originalTitle ) { 22604 this.element.attr( "title", this.originalTitle ); 22605 } 22606 22607 next = originalPosition.parent.children().eq( originalPosition.index ); 22608 22609 // Don't try to place the dialog next to itself (#8613) 22610 if ( next.length && next[ 0 ] !== this.element[ 0 ] ) { 22611 next.before( this.element ); 22612 } else { 22613 originalPosition.parent.append( this.element ); 22614 } 22615 }, 22616 22617 widget: function() { 22618 return this.uiDialog; 22619 }, 22620 22621 disable: $.noop, 22622 enable: $.noop, 22623 22624 close: function( event ) { 22625 var that = this; 22626 22627 if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) { 22628 return; 22629 } 22630 22631 this._isOpen = false; 22632 this._focusedElement = null; 22633 this._destroyOverlay(); 22634 this._untrackInstance(); 22635 22636 if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) { 22637 22638 // Hiding a focused element doesn't trigger blur in WebKit 22639 // so in case we have nothing to focus on, explicitly blur the active element 22640 // https://bugs.webkit.org/show_bug.cgi?id=47182 22641 $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) ); 22642 } 22643 22644 this._hide( this.uiDialog, this.options.hide, function() { 22645 that._trigger( "close", event ); 22646 } ); 22647 }, 22648 22649 isOpen: function() { 22650 return this._isOpen; 22651 }, 22652 22653 moveToTop: function() { 22654 this._moveToTop(); 22655 }, 22656 22657 _moveToTop: function( event, silent ) { 22658 var moved = false, 22659 zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() { 22660 return +$( this ).css( "z-index" ); 22661 } ).get(), 22662 zIndexMax = Math.max.apply( null, zIndices ); 22663 22664 if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) { 22665 this.uiDialog.css( "z-index", zIndexMax + 1 ); 22666 moved = true; 22667 } 22668 22669 if ( moved && !silent ) { 22670 this._trigger( "focus", event ); 22671 } 22672 return moved; 22673 }, 22674 22675 open: function() { 22676 var that = this; 22677 if ( this._isOpen ) { 22678 if ( this._moveToTop() ) { 22679 this._focusTabbable(); 22680 } 22681 return; 22682 } 22683 22684 this._isOpen = true; 22685 this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) ); 22686 22687 this._size(); 22688 this._position(); 22689 this._createOverlay(); 22690 this._moveToTop( null, true ); 22691 22692 // Ensure the overlay is moved to the top with the dialog, but only when 22693 // opening. The overlay shouldn't move after the dialog is open so that 22694 // modeless dialogs opened after the modal dialog stack properly. 22695 if ( this.overlay ) { 22696 this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 ); 22697 } 22698 22699 this._show( this.uiDialog, this.options.show, function() { 22700 that._focusTabbable(); 22701 that._trigger( "focus" ); 22702 } ); 22703 22704 // Track the dialog immediately upon opening in case a focus event 22705 // somehow occurs outside of the dialog before an element inside the 22706 // dialog is focused (#10152) 22707 this._makeFocusTarget(); 22708 22709 this._trigger( "open" ); 22710 }, 22711 22712 _focusTabbable: function() { 22713 22714 // Set focus to the first match: 22715 // 1. An element that was focused previously 22716 // 2. First element inside the dialog matching [autofocus] 22717 // 3. Tabbable element inside the content element 22718 // 4. Tabbable element inside the buttonpane 22719 // 5. The close button 22720 // 6. The dialog itself 22721 var hasFocus = this._focusedElement; 22722 if ( !hasFocus ) { 22723 hasFocus = this.element.find( "[autofocus]" ); 22724 } 22725 if ( !hasFocus.length ) { 22726 hasFocus = this.element.find( ":tabbable" ); 22727 } 22728 if ( !hasFocus.length ) { 22729 hasFocus = this.uiDialogButtonPane.find( ":tabbable" ); 22730 } 22731 if ( !hasFocus.length ) { 22732 hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" ); 22733 } 22734 if ( !hasFocus.length ) { 22735 hasFocus = this.uiDialog; 22736 } 22737 hasFocus.eq( 0 ).trigger( "focus" ); 22738 }, 22739 22740 _restoreTabbableFocus: function() { 22741 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ), 22742 isActive = this.uiDialog[ 0 ] === activeElement || 22743 $.contains( this.uiDialog[ 0 ], activeElement ); 22744 if ( !isActive ) { 22745 this._focusTabbable(); 22746 } 22747 }, 22748 22749 _keepFocus: function( event ) { 22750 event.preventDefault(); 22751 this._restoreTabbableFocus(); 22752 22753 // support: IE 22754 // IE <= 8 doesn't prevent moving focus even with event.preventDefault() 22755 // so we check again later 22756 this._delay( this._restoreTabbableFocus ); 22757 }, 22758 22759 _createWrapper: function() { 22760 this.uiDialog = $( "<div>" ) 22761 .hide() 22762 .attr( { 22763 22764 // Setting tabIndex makes the div focusable 22765 tabIndex: -1, 22766 role: "dialog" 22767 } ) 22768 .appendTo( this._appendTo() ); 22769 22770 this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" ); 22771 this._on( this.uiDialog, { 22772 keydown: function( event ) { 22773 if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && 22774 event.keyCode === $.ui.keyCode.ESCAPE ) { 22775 event.preventDefault(); 22776 this.close( event ); 22777 return; 22778 } 22779 22780 // Prevent tabbing out of dialogs 22781 if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) { 22782 return; 22783 } 22784 var tabbables = this.uiDialog.find( ":tabbable" ), 22785 first = tabbables.first(), 22786 last = tabbables.last(); 22787 22788 if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) && 22789 !event.shiftKey ) { 22790 this._delay( function() { 22791 first.trigger( "focus" ); 22792 } ); 22793 event.preventDefault(); 22794 } else if ( ( event.target === first[ 0 ] || 22795 event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) { 22796 this._delay( function() { 22797 last.trigger( "focus" ); 22798 } ); 22799 event.preventDefault(); 22800 } 22801 }, 22802 mousedown: function( event ) { 22803 if ( this._moveToTop( event ) ) { 22804 this._focusTabbable(); 22805 } 22806 } 22807 } ); 22808 22809 // We assume that any existing aria-describedby attribute means 22810 // that the dialog content is marked up properly 22811 // otherwise we brute force the content as the description 22812 if ( !this.element.find( "[aria-describedby]" ).length ) { 22813 this.uiDialog.attr( { 22814 "aria-describedby": this.element.uniqueId().attr( "id" ) 22815 } ); 22816 } 22817 }, 22818 22819 _createTitlebar: function() { 22820 var uiDialogTitle; 22821 22822 this.uiDialogTitlebar = $( "<div>" ); 22823 this._addClass( this.uiDialogTitlebar, 22824 "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" ); 22825 this._on( this.uiDialogTitlebar, { 22826 mousedown: function( event ) { 22827 22828 // Don't prevent click on close button (#8838) 22829 // Focusing a dialog that is partially scrolled out of view 22830 // causes the browser to scroll it into view, preventing the click event 22831 if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) { 22832 22833 // Dialog isn't getting focus when dragging (#8063) 22834 this.uiDialog.trigger( "focus" ); 22835 } 22836 } 22837 } ); 22838 22839 // Support: IE 22840 // Use type="button" to prevent enter keypresses in textboxes from closing the 22841 // dialog in IE (#9312) 22842 this.uiDialogTitlebarClose = $( "<button type='button'></button>" ) 22843 .button( { 22844 label: $( "<a>" ).text( this.options.closeText ).html(), 22845 icon: "ui-icon-closethick", 22846 showLabel: false 22847 } ) 22848 .appendTo( this.uiDialogTitlebar ); 22849 22850 this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" ); 22851 this._on( this.uiDialogTitlebarClose, { 22852 click: function( event ) { 22853 event.preventDefault(); 22854 this.close( event ); 22855 } 22856 } ); 22857 22858 uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar ); 22859 this._addClass( uiDialogTitle, "ui-dialog-title" ); 22860 this._title( uiDialogTitle ); 22861 22862 this.uiDialogTitlebar.prependTo( this.uiDialog ); 22863 22864 this.uiDialog.attr( { 22865 "aria-labelledby": uiDialogTitle.attr( "id" ) 22866 } ); 22867 }, 22868 22869 _title: function( title ) { 22870 if ( this.options.title ) { 22871 title.text( this.options.title ); 22872 } else { 22873 title.html( " " ); 22874 } 22875 }, 22876 22877 _createButtonPane: function() { 22878 this.uiDialogButtonPane = $( "<div>" ); 22879 this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane", 22880 "ui-widget-content ui-helper-clearfix" ); 22881 22882 this.uiButtonSet = $( "<div>" ) 22883 .appendTo( this.uiDialogButtonPane ); 22884 this._addClass( this.uiButtonSet, "ui-dialog-buttonset" ); 22885 22886 this._createButtons(); 22887 }, 22888 22889 _createButtons: function() { 22890 var that = this, 22891 buttons = this.options.buttons; 22892 22893 // If we already have a button pane, remove it 22894 this.uiDialogButtonPane.remove(); 22895 this.uiButtonSet.empty(); 22896 22897 if ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) { 22898 this._removeClass( this.uiDialog, "ui-dialog-buttons" ); 22899 return; 22900 } 22901 22902 $.each( buttons, function( name, props ) { 22903 var click, buttonOptions; 22904 props = typeof props === "function" ? 22905 { click: props, text: name } : 22906 props; 22907 22908 // Default to a non-submitting button 22909 props = $.extend( { type: "button" }, props ); 22910 22911 // Change the context for the click callback to be the main element 22912 click = props.click; 22913 buttonOptions = { 22914 icon: props.icon, 22915 iconPosition: props.iconPosition, 22916 showLabel: props.showLabel, 22917 22918 // Deprecated options 22919 icons: props.icons, 22920 text: props.text 22921 }; 22922 22923 delete props.click; 22924 delete props.icon; 22925 delete props.iconPosition; 22926 delete props.showLabel; 22927 22928 // Deprecated options 22929 delete props.icons; 22930 if ( typeof props.text === "boolean" ) { 22931 delete props.text; 22932 } 22933 22934 $( "<button></button>", props ) 22935 .button( buttonOptions ) 22936 .appendTo( that.uiButtonSet ) 22937 .on( "click", function() { 22938 click.apply( that.element[ 0 ], arguments ); 22939 } ); 22940 } ); 22941 this._addClass( this.uiDialog, "ui-dialog-buttons" ); 22942 this.uiDialogButtonPane.appendTo( this.uiDialog ); 22943 }, 22944 22945 _makeDraggable: function() { 22946 var that = this, 22947 options = this.options; 22948 22949 function filteredUi( ui ) { 22950 return { 22951 position: ui.position, 22952 offset: ui.offset 22953 }; 22954 } 22955 22956 this.uiDialog.draggable( { 22957 cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", 22958 handle: ".ui-dialog-titlebar", 22959 containment: "document", 22960 start: function( event, ui ) { 22961 that._addClass( $( this ), "ui-dialog-dragging" ); 22962 that._blockFrames(); 22963 that._trigger( "dragStart", event, filteredUi( ui ) ); 22964 }, 22965 drag: function( event, ui ) { 22966 that._trigger( "drag", event, filteredUi( ui ) ); 22967 }, 22968 stop: function( event, ui ) { 22969 var left = ui.offset.left - that.document.scrollLeft(), 22970 top = ui.offset.top - that.document.scrollTop(); 22971 22972 options.position = { 22973 my: "left top", 22974 at: "left" + ( left >= 0 ? "+" : "" ) + left + " " + 22975 "top" + ( top >= 0 ? "+" : "" ) + top, 22976 of: that.window 22977 }; 22978 that._removeClass( $( this ), "ui-dialog-dragging" ); 22979 that._unblockFrames(); 22980 that._trigger( "dragStop", event, filteredUi( ui ) ); 22981 } 22982 } ); 22983 }, 22984 22985 _makeResizable: function() { 22986 var that = this, 22987 options = this.options, 22988 handles = options.resizable, 22989 22990 // .ui-resizable has position: relative defined in the stylesheet 22991 // but dialogs have to use absolute or fixed positioning 22992 position = this.uiDialog.css( "position" ), 22993 resizeHandles = typeof handles === "string" ? 22994 handles : 22995 "n,e,s,w,se,sw,ne,nw"; 22996 22997 function filteredUi( ui ) { 22998 return { 22999 originalPosition: ui.originalPosition, 23000 originalSize: ui.originalSize, 23001 position: ui.position, 23002 size: ui.size 23003 }; 23004 } 23005 23006 this.uiDialog.resizable( { 23007 cancel: ".ui-dialog-content", 23008 containment: "document", 23009 alsoResize: this.element, 23010 maxWidth: options.maxWidth, 23011 maxHeight: options.maxHeight, 23012 minWidth: options.minWidth, 23013 minHeight: this._minHeight(), 23014 handles: resizeHandles, 23015 start: function( event, ui ) { 23016 that._addClass( $( this ), "ui-dialog-resizing" ); 23017 that._blockFrames(); 23018 that._trigger( "resizeStart", event, filteredUi( ui ) ); 23019 }, 23020 resize: function( event, ui ) { 23021 that._trigger( "resize", event, filteredUi( ui ) ); 23022 }, 23023 stop: function( event, ui ) { 23024 var offset = that.uiDialog.offset(), 23025 left = offset.left - that.document.scrollLeft(), 23026 top = offset.top - that.document.scrollTop(); 23027 23028 options.height = that.uiDialog.height(); 23029 options.width = that.uiDialog.width(); 23030 options.position = { 23031 my: "left top", 23032 at: "left" + ( left >= 0 ? "+" : "" ) + left + " " + 23033 "top" + ( top >= 0 ? "+" : "" ) + top, 23034 of: that.window 23035 }; 23036 that._removeClass( $( this ), "ui-dialog-resizing" ); 23037 that._unblockFrames(); 23038 that._trigger( "resizeStop", event, filteredUi( ui ) ); 23039 } 23040 } ) 23041 .css( "position", position ); 23042 }, 23043 23044 _trackFocus: function() { 23045 this._on( this.widget(), { 23046 focusin: function( event ) { 23047 this._makeFocusTarget(); 23048 this._focusedElement = $( event.target ); 23049 } 23050 } ); 23051 }, 23052 23053 _makeFocusTarget: function() { 23054 this._untrackInstance(); 23055 this._trackingInstances().unshift( this ); 23056 }, 23057 23058 _untrackInstance: function() { 23059 var instances = this._trackingInstances(), 23060 exists = $.inArray( this, instances ); 23061 if ( exists !== -1 ) { 23062 instances.splice( exists, 1 ); 23063 } 23064 }, 23065 23066 _trackingInstances: function() { 23067 var instances = this.document.data( "ui-dialog-instances" ); 23068 if ( !instances ) { 23069 instances = []; 23070 this.document.data( "ui-dialog-instances", instances ); 23071 } 23072 return instances; 23073 }, 23074 23075 _minHeight: function() { 23076 var options = this.options; 23077 23078 return options.height === "auto" ? 23079 options.minHeight : 23080 Math.min( options.minHeight, options.height ); 23081 }, 23082 23083 _position: function() { 23084 23085 // Need to show the dialog to get the actual offset in the position plugin 23086 var isVisible = this.uiDialog.is( ":visible" ); 23087 if ( !isVisible ) { 23088 this.uiDialog.show(); 23089 } 23090 this.uiDialog.position( this.options.position ); 23091 if ( !isVisible ) { 23092 this.uiDialog.hide(); 23093 } 23094 }, 23095 23096 _setOptions: function( options ) { 23097 var that = this, 23098 resize = false, 23099 resizableOptions = {}; 23100 23101 $.each( options, function( key, value ) { 23102 that._setOption( key, value ); 23103 23104 if ( key in that.sizeRelatedOptions ) { 23105 resize = true; 23106 } 23107 if ( key in that.resizableRelatedOptions ) { 23108 resizableOptions[ key ] = value; 23109 } 23110 } ); 23111 23112 if ( resize ) { 23113 this._size(); 23114 this._position(); 23115 } 23116 if ( this.uiDialog.is( ":data(ui-resizable)" ) ) { 23117 this.uiDialog.resizable( "option", resizableOptions ); 23118 } 23119 }, 23120 23121 _setOption: function( key, value ) { 23122 var isDraggable, isResizable, 23123 uiDialog = this.uiDialog; 23124 23125 if ( key === "disabled" ) { 23126 return; 23127 } 23128 23129 this._super( key, value ); 23130 23131 if ( key === "appendTo" ) { 23132 this.uiDialog.appendTo( this._appendTo() ); 23133 } 23134 23135 if ( key === "buttons" ) { 23136 this._createButtons(); 23137 } 23138 23139 if ( key === "closeText" ) { 23140 this.uiDialogTitlebarClose.button( { 23141 23142 // Ensure that we always pass a string 23143 label: $( "<a>" ).text( "" + this.options.closeText ).html() 23144 } ); 23145 } 23146 23147 if ( key === "draggable" ) { 23148 isDraggable = uiDialog.is( ":data(ui-draggable)" ); 23149 if ( isDraggable && !value ) { 23150 uiDialog.draggable( "destroy" ); 23151 } 23152 23153 if ( !isDraggable && value ) { 23154 this._makeDraggable(); 23155 } 23156 } 23157 23158 if ( key === "position" ) { 23159 this._position(); 23160 } 23161 23162 if ( key === "resizable" ) { 23163 23164 // currently resizable, becoming non-resizable 23165 isResizable = uiDialog.is( ":data(ui-resizable)" ); 23166 if ( isResizable && !value ) { 23167 uiDialog.resizable( "destroy" ); 23168 } 23169 23170 // Currently resizable, changing handles 23171 if ( isResizable && typeof value === "string" ) { 23172 uiDialog.resizable( "option", "handles", value ); 23173 } 23174 23175 // Currently non-resizable, becoming resizable 23176 if ( !isResizable && value !== false ) { 23177 this._makeResizable(); 23178 } 23179 } 23180 23181 if ( key === "title" ) { 23182 this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) ); 23183 } 23184 }, 23185 23186 _size: function() { 23187 23188 // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content 23189 // divs will both have width and height set, so we need to reset them 23190 var nonContentHeight, minContentHeight, maxContentHeight, 23191 options = this.options; 23192 23193 // Reset content sizing 23194 this.element.show().css( { 23195 width: "auto", 23196 minHeight: 0, 23197 maxHeight: "none", 23198 height: 0 23199 } ); 23200 23201 if ( options.minWidth > options.width ) { 23202 options.width = options.minWidth; 23203 } 23204 23205 // Reset wrapper sizing 23206 // determine the height of all the non-content elements 23207 nonContentHeight = this.uiDialog.css( { 23208 height: "auto", 23209 width: options.width 23210 } ) 23211 .outerHeight(); 23212 minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); 23213 maxContentHeight = typeof options.maxHeight === "number" ? 23214 Math.max( 0, options.maxHeight - nonContentHeight ) : 23215 "none"; 23216 23217 if ( options.height === "auto" ) { 23218 this.element.css( { 23219 minHeight: minContentHeight, 23220 maxHeight: maxContentHeight, 23221 height: "auto" 23222 } ); 23223 } else { 23224 this.element.height( Math.max( 0, options.height - nonContentHeight ) ); 23225 } 23226 23227 if ( this.uiDialog.is( ":data(ui-resizable)" ) ) { 23228 this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); 23229 } 23230 }, 23231 23232 _blockFrames: function() { 23233 this.iframeBlocks = this.document.find( "iframe" ).map( function() { 23234 var iframe = $( this ); 23235 23236 return $( "<div>" ) 23237 .css( { 23238 position: "absolute", 23239 width: iframe.outerWidth(), 23240 height: iframe.outerHeight() 23241 } ) 23242 .appendTo( iframe.parent() ) 23243 .offset( iframe.offset() )[ 0 ]; 23244 } ); 23245 }, 23246 23247 _unblockFrames: function() { 23248 if ( this.iframeBlocks ) { 23249 this.iframeBlocks.remove(); 23250 delete this.iframeBlocks; 23251 } 23252 }, 23253 23254 _allowInteraction: function( event ) { 23255 if ( $( event.target ).closest( ".ui-dialog" ).length ) { 23256 return true; 23257 } 23258 23259 // TODO: Remove hack when datepicker implements 23260 // the .ui-front logic (#8989) 23261 return !!$( event.target ).closest( ".ui-datepicker" ).length; 23262 }, 23263 23264 _createOverlay: function() { 23265 if ( !this.options.modal ) { 23266 return; 23267 } 23268 23269 var jqMinor = $.fn.jquery.substring( 0, 4 ); 23270 23271 // We use a delay in case the overlay is created from an 23272 // event that we're going to be cancelling (#2804) 23273 var isOpening = true; 23274 this._delay( function() { 23275 isOpening = false; 23276 } ); 23277 23278 if ( !this.document.data( "ui-dialog-overlays" ) ) { 23279 23280 // Prevent use of anchors and inputs 23281 // This doesn't use `_on()` because it is a shared event handler 23282 // across all open modal dialogs. 23283 this.document.on( "focusin.ui-dialog", function( event ) { 23284 if ( isOpening ) { 23285 return; 23286 } 23287 23288 var instance = this._trackingInstances()[ 0 ]; 23289 if ( !instance._allowInteraction( event ) ) { 23290 event.preventDefault(); 23291 instance._focusTabbable(); 23292 23293 // Support: jQuery >=3.4 <3.
vendor: 2,204 bytes, lines 23293-23381
232936 only 23294 // Focus re-triggering in jQuery 3.4/3.5 makes the original element 23295 // have its focus event propagated last, breaking the re-targeting. 23296 // Trigger focus in a delay in addition if needed to avoid the issue 23297 // See https://github.com/jquery/jquery/issues/4382 23298 if ( jqMinor === "3.4." || jqMinor === "3.5." ) { 23299 instance._delay( instance._restoreTabbableFocus ); 23300 } 23301 } 23302 }.bind( this ) ); 23303 } 23304 23305 this.overlay = $( "<div>" ) 23306 .appendTo( this._appendTo() ); 23307 23308 this._addClass( this.overlay, null, "ui-widget-overlay ui-front" ); 23309 this._on( this.overlay, { 23310 mousedown: "_keepFocus" 23311 } ); 23312 this.document.data( "ui-dialog-overlays", 23313 ( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 ); 23314 }, 23315 23316 _destroyOverlay: function() { 23317 if ( !this.options.modal ) { 23318 return; 23319 } 23320 23321 if ( this.overlay ) { 23322 var overlays = this.document.data( "ui-dialog-overlays" ) - 1; 23323 23324 if ( !overlays ) { 23325 this.document.off( "focusin.ui-dialog" ); 23326 this.document.removeData( "ui-dialog-overlays" ); 23327 } else { 23328 this.document.data( "ui-dialog-overlays", overlays ); 23329 } 23330 23331 this.overlay.remove(); 23332 this.overlay = null; 23333 } 23334 } 23335} ); 23336 23337// DEPRECATED 23338// TODO: switch return back to widget declaration at top of file when this is removed 23339if ( $.uiBackCompat !== false ) { 23340 23341 // Backcompat for dialogClass option 23342 $.widget( "ui.dialog", $.ui.dialog, { 23343 options: { 23344 dialogClass: "" 23345 }, 23346 _createWrapper: function() { 23347 this._super(); 23348 this.uiDialog.addClass( this.options.dialogClass ); 23349 }, 23350 _setOption: function( key, value ) { 23351 if ( key === "dialogClass" ) { 23352 this.uiDialog 23353 .removeClass( this.options.dialogClass ) 23354 .addClass( value ); 23355 } 23356 this._superApply( arguments ); 23357 } 23358 } ); 23359} 23360 23361var widgetsDialog = $.ui.dialog; 23362 23363 23364/*! 23365 * jQuery UI Droppable 1.13.1 23366 * http://jqueryui.com 23367 * 23368 * Copyright jQuery Foundation and other contributors 23369 * Released under the MIT license. 23370 * http://jquery.org/license 23371 */ 23372 23373//>>label: Droppable 23374//>>group: Interactions 23375//>>description: Enables drop targets for draggable elements. 23376//>>docs: http://api.jqueryui.com/droppable/ 23377//>>demos: http://jqueryui.com/droppable/ 23378 23379 23380$.widget( "ui.droppable", { 23381 version: "1.13.1
vendor: 11,311 bytes, lines 23381-23809
23381", 23382 widgetEventPrefix: "drop", 23383 options: { 23384 accept: "*", 23385 addClasses: true, 23386 greedy: false, 23387 scope: "default", 23388 tolerance: "intersect", 23389 23390 // Callbacks 23391 activate: null, 23392 deactivate: null, 23393 drop: null, 23394 out: null, 23395 over: null 23396 }, 23397 _create: function() { 23398 23399 var proportions, 23400 o = this.options, 23401 accept = o.accept; 23402 23403 this.isover = false; 23404 this.isout = true; 23405 23406 this.accept = typeof accept === "function" ? accept : function( d ) { 23407 return d.is( accept ); 23408 }; 23409 23410 this.proportions = function( /* valueToWrite */ ) { 23411 if ( arguments.length ) { 23412 23413 // Store the droppable's proportions 23414 proportions = arguments[ 0 ]; 23415 } else { 23416 23417 // Retrieve or derive the droppable's proportions 23418 return proportions ? 23419 proportions : 23420 proportions = { 23421 width: this.element[ 0 ].offsetWidth, 23422 height: this.element[ 0 ].offsetHeight 23423 }; 23424 } 23425 }; 23426 23427 this._addToManager( o.scope ); 23428 23429 if ( o.addClasses ) { 23430 this._addClass( "ui-droppable" ); 23431 } 23432 23433 }, 23434 23435 _addToManager: function( scope ) { 23436 23437 // Add the reference and positions to the manager 23438 $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || []; 23439 $.ui.ddmanager.droppables[ scope ].push( this ); 23440 }, 23441 23442 _splice: function( drop ) { 23443 var i = 0; 23444 for ( ; i < drop.length; i++ ) { 23445 if ( drop[ i ] === this ) { 23446 drop.splice( i, 1 ); 23447 } 23448 } 23449 }, 23450 23451 _destroy: function() { 23452 var drop = $.ui.ddmanager.droppables[ this.options.scope ]; 23453 23454 this._splice( drop ); 23455 }, 23456 23457 _setOption: function( key, value ) { 23458 23459 if ( key === "accept" ) { 23460 this.accept = typeof value === "function" ? value : function( d ) { 23461 return d.is( value ); 23462 }; 23463 } else if ( key === "scope" ) { 23464 var drop = $.ui.ddmanager.droppables[ this.options.scope ]; 23465 23466 this._splice( drop ); 23467 this._addToManager( value ); 23468 } 23469 23470 this._super( key, value ); 23471 }, 23472 23473 _activate: function( event ) { 23474 var draggable = $.ui.ddmanager.current; 23475 23476 this._addActiveClass(); 23477 if ( draggable ) { 23478 this._trigger( "activate", event, this.ui( draggable ) ); 23479 } 23480 }, 23481 23482 _deactivate: function( event ) { 23483 var draggable = $.ui.ddmanager.current; 23484 23485 this._removeActiveClass(); 23486 if ( draggable ) { 23487 this._trigger( "deactivate", event, this.ui( draggable ) ); 23488 } 23489 }, 23490 23491 _over: function( event ) { 23492 23493 var draggable = $.ui.ddmanager.current; 23494 23495 // Bail if draggable and droppable are same element 23496 if ( !draggable || ( draggable.currentItem || 23497 draggable.element )[ 0 ] === this.element[ 0 ] ) { 23498 return; 23499 } 23500 23501 if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || 23502 draggable.element ) ) ) { 23503 this._addHoverClass(); 23504 this._trigger( "over", event, this.ui( draggable ) ); 23505 } 23506 23507 }, 23508 23509 _out: function( event ) { 23510 23511 var draggable = $.ui.ddmanager.current; 23512 23513 // Bail if draggable and droppable are same element 23514 if ( !draggable || ( draggable.currentItem || 23515 draggable.element )[ 0 ] === this.element[ 0 ] ) { 23516 return; 23517 } 23518 23519 if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || 23520 draggable.element ) ) ) { 23521 this._removeHoverClass(); 23522 this._trigger( "out", event, this.ui( draggable ) ); 23523 } 23524 23525 }, 23526 23527 _drop: function( event, custom ) { 23528 23529 var draggable = custom || $.ui.ddmanager.current, 23530 childrenIntersection = false; 23531 23532 // Bail if draggable and droppable are same element 23533 if ( !draggable || ( draggable.currentItem || 23534 draggable.element )[ 0 ] === this.element[ 0 ] ) { 23535 return false; 23536 } 23537 23538 this.element 23539 .find( ":data(ui-droppable)" ) 23540 .not( ".ui-draggable-dragging" ) 23541 .each( function() { 23542 var inst = $( this ).droppable( "instance" ); 23543 if ( 23544 inst.options.greedy && 23545 !inst.options.disabled && 23546 inst.options.scope === draggable.options.scope && 23547 inst.accept.call( 23548 inst.element[ 0 ], ( draggable.currentItem || draggable.element ) 23549 ) && 23550 $.ui.intersect( 23551 draggable, 23552 $.extend( inst, { offset: inst.element.offset() } ), 23553 inst.options.tolerance, event 23554 ) 23555 ) { 23556 childrenIntersection = true; 23557 return false; 23558 } 23559 } ); 23560 if ( childrenIntersection ) { 23561 return false; 23562 } 23563 23564 if ( this.accept.call( this.element[ 0 ], 23565 ( draggable.currentItem || draggable.element ) ) ) { 23566 this._removeActiveClass(); 23567 this._removeHoverClass(); 23568 23569 this._trigger( "drop", event, this.ui( draggable ) ); 23570 return this.element; 23571 } 23572 23573 return false; 23574 23575 }, 23576 23577 ui: function( c ) { 23578 return { 23579 draggable: ( c.currentItem || c.element ), 23580 helper: c.helper, 23581 position: c.position, 23582 offset: c.positionAbs 23583 }; 23584 }, 23585 23586 // Extension points just to make backcompat sane and avoid duplicating logic 23587 // TODO: Remove in 1.14 along with call to it below 23588 _addHoverClass: function() { 23589 this._addClass( "ui-droppable-hover" ); 23590 }, 23591 23592 _removeHoverClass: function() { 23593 this._removeClass( "ui-droppable-hover" ); 23594 }, 23595 23596 _addActiveClass: function() { 23597 this._addClass( "ui-droppable-active" ); 23598 }, 23599 23600 _removeActiveClass: function() { 23601 this._removeClass( "ui-droppable-active" ); 23602 } 23603} ); 23604 23605$.ui.intersect = ( function() { 23606 function isOverAxis( x, reference, size ) { 23607 return ( x >= reference ) && ( x < ( reference + size ) ); 23608 } 23609 23610 return function( draggable, droppable, toleranceMode, event ) { 23611 23612 if ( !droppable.offset ) { 23613 return false; 23614 } 23615 23616 var x1 = ( draggable.positionAbs || 23617 draggable.position.absolute ).left + draggable.margins.left, 23618 y1 = ( draggable.positionAbs || 23619 draggable.position.absolute ).top + draggable.margins.top, 23620 x2 = x1 + draggable.helperProportions.width, 23621 y2 = y1 + draggable.helperProportions.height, 23622 l = droppable.offset.left, 23623 t = droppable.offset.top, 23624 r = l + droppable.proportions().width, 23625 b = t + droppable.proportions().height; 23626 23627 switch ( toleranceMode ) { 23628 case "fit": 23629 return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b ); 23630 case "intersect": 23631 return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half 23632 x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half 23633 t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half 23634 y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half 23635 case "pointer": 23636 return isOverAxis( event.pageY, t, droppable.proportions().height ) && 23637 isOverAxis( event.pageX, l, droppable.proportions().width ); 23638 case "touch": 23639 return ( 23640 ( y1 >= t && y1 <= b ) || // Top edge touching 23641 ( y2 >= t && y2 <= b ) || // Bottom edge touching 23642 ( y1 < t && y2 > b ) // Surrounded vertically 23643 ) && ( 23644 ( x1 >= l && x1 <= r ) || // Left edge touching 23645 ( x2 >= l && x2 <= r ) || // Right edge touching 23646 ( x1 < l && x2 > r ) // Surrounded horizontally 23647 ); 23648 default: 23649 return false; 23650 } 23651 }; 23652} )(); 23653 23654/* 23655 This manager tracks offsets of draggables and droppables 23656*/ 23657$.ui.ddmanager = { 23658 current: null, 23659 droppables: { "default": [] }, 23660 prepareOffsets: function( t, event ) { 23661 23662 var i, j, 23663 m = $.ui.ddmanager.droppables[ t.options.scope ] || [], 23664 type = event ? event.type : null, // workaround for #2317 23665 list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack(); 23666 23667 droppablesLoop: for ( i = 0; i < m.length; i++ ) { 23668 23669 // No disabled and non-accepted 23670 if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], 23671 ( t.currentItem || t.element ) ) ) ) { 23672 continue; 23673 } 23674 23675 // Filter out elements in the current dragged item 23676 for ( j = 0; j < list.length; j++ ) { 23677 if ( list[ j ] === m[ i ].element[ 0 ] ) { 23678 m[ i ].proportions().height = 0; 23679 continue droppablesLoop; 23680 } 23681 } 23682 23683 m[ i ].visible = m[ i ].element.css( "display" ) !== "none"; 23684 if ( !m[ i ].visible ) { 23685 continue; 23686 } 23687 23688 // Activate the droppable if used directly from draggables 23689 if ( type === "mousedown" ) { 23690 m[ i ]._activate.call( m[ i ], event ); 23691 } 23692 23693 m[ i ].offset = m[ i ].element.offset(); 23694 m[ i ].proportions( { 23695 width: m[ i ].element[ 0 ].offsetWidth, 23696 height: m[ i ].element[ 0 ].offsetHeight 23697 } ); 23698 23699 } 23700 23701 }, 23702 drop: function( draggable, event ) { 23703 23704 var dropped = false; 23705 23706 // Create a copy of the droppables in case the list changes during the drop (#9116) 23707 $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() { 23708 23709 if ( !this.options ) { 23710 return; 23711 } 23712 if ( !this.options.disabled && this.visible && 23713 $.ui.intersect( draggable, this, this.options.tolerance, event ) ) { 23714 dropped = this._drop.call( this, event ) || dropped; 23715 } 23716 23717 if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], 23718 ( draggable.currentItem || draggable.element ) ) ) { 23719 this.isout = true; 23720 this.isover = false; 23721 this._deactivate.call( this, event ); 23722 } 23723 23724 } ); 23725 return dropped; 23726 23727 }, 23728 dragStart: function( draggable, event ) { 23729 23730 // Listen for scrolling so that if the dragging causes scrolling the position of the 23731 // droppables can be recalculated (see #5003) 23732 draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() { 23733 if ( !draggable.options.refreshPositions ) { 23734 $.ui.ddmanager.prepareOffsets( draggable, event ); 23735 } 23736 } ); 23737 }, 23738 drag: function( draggable, event ) { 23739 23740 // If you have a highly dynamic page, you might try this option. It renders positions 23741 // every time you move the mouse. 23742 if ( draggable.options.refreshPositions ) { 23743 $.ui.ddmanager.prepareOffsets( draggable, event ); 23744 } 23745 23746 // Run through all droppables and check their positions based on specific tolerance options 23747 $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() { 23748 23749 if ( this.options.disabled || this.greedyChild || !this.visible ) { 23750 return; 23751 } 23752 23753 var parentInstance, scope, parent, 23754 intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ), 23755 c = !intersects && this.isover ? 23756 "isout" : 23757 ( intersects && !this.isover ? "isover" : null ); 23758 if ( !c ) { 23759 return; 23760 } 23761 23762 if ( this.options.greedy ) { 23763 23764 // find droppable parents with same scope 23765 scope = this.options.scope; 23766 parent = this.element.parents( ":data(ui-droppable)" ).filter( function() { 23767 return $( this ).droppable( "instance" ).options.scope === scope; 23768 } ); 23769 23770 if ( parent.length ) { 23771 parentInstance = $( parent[ 0 ] ).droppable( "instance" ); 23772 parentInstance.greedyChild = ( c === "isover" ); 23773 } 23774 } 23775 23776 // We just moved into a greedy child 23777 if ( parentInstance && c === "isover" ) { 23778 parentInstance.isover = false; 23779 parentInstance.isout = true; 23780 parentInstance._out.call( parentInstance, event ); 23781 } 23782 23783 this[ c ] = true; 23784 this[ c === "isout" ? "isover" : "isout" ] = false; 23785 this[ c === "isover" ? "_over" : "_out" ].call( this, event ); 23786 23787 // We just moved out of a greedy child 23788 if ( parentInstance && c === "isout" ) { 23789 parentInstance.isout = false; 23790 parentInstance.isover = true; 23791 parentInstance._over.call( parentInstance, event ); 23792 } 23793 } ); 23794 23795 }, 23796 dragStop: function( draggable, event ) { 23797 draggable.element.parentsUntil( "body" ).off( "scroll.droppable" ); 23798 23799 // Call prepareOffsets one final time since IE does not fire return scroll events when 23800 // overflow was caused by drag (see #5003) 23801 if ( !draggable.options.refreshPositions ) { 23802 $.ui.ddmanager.prepareOffsets( draggable, event ); 23803 } 23804 } 23805}; 23806 23807// DEPRECATED 23808// TODO: switch return back to widget declaration at top of file when this is removed 23809if ( $.uiBackCompat
23809!== false ) { 23810 23811 // Backcompat for activeClass and hoverClass options 23812 $.widget( "ui.droppable", $.ui.droppable, { 23813 options: { 23814 hoverClass: false, 23815 activeClass: false 23816 }, 23817 _addActiveClass: function() { 23818 this._super(); 23819 if ( this.options.activeClass ) { 23820 this.element.addClass( this.options.activeClass ); 23821 } 23822 }, 23823 _removeActiveClass: function() { 23824 this._super(); 23825 if ( this.options.activeClass ) { 23826 this.element.removeClass( this.options.activeClass ); 23827 } 23828 }, 23829 _addHoverClass: function() { 23830 this._super(); 23831 if ( this.options.hoverClass ) { 23832 this.element.addClass( this.options.hoverClass ); 23833 } 23834 }, 23835 _removeHoverClass: function() { 23836 this._super(); 23837 if ( this.options.hoverClass ) { 23838 this.element.removeClass( this.options.hoverClass ); 23839 } 23840 } 23841 } ); 23842} 23843 23844var widgetsDroppable = $.ui.droppable; 23845 23846 23847/*! 23848 * jQuery UI Progressbar 1.13.1 23849 * http://jqueryui.com 23850 * 23851 * Copyright jQuery Foundation and other contributors 23852 * Released under the MIT license. 23853 * http://jquery.org/license 23854 */ 23855 23856//>>label: Progressbar 23857//>>group: Widgets 23858/* eslint-disable max-len */ 23859//>>
vendor: 4,217 bytes, lines 23859-24028
23859description: Displays a status indicator for loading state, standard percentage, and other progress indicators. 23860/* eslint-enable max-len */ 23861//>>docs: http://api.jqueryui.com/progressbar/ 23862//>>demos: http://jqueryui.com/progressbar/ 23863//>>css.structure: ../../themes/base/core.css 23864//>>css.structure: ../../themes/base/progressbar.css 23865//>>css.theme: ../../themes/base/theme.css 23866 23867 23868var widgetsProgressbar = $.widget( "ui.progressbar", { 23869 version: "1.13.1", 23870 options: { 23871 classes: { 23872 "ui-progressbar": "ui-corner-all", 23873 "ui-progressbar-value": "ui-corner-left", 23874 "ui-progressbar-complete": "ui-corner-right" 23875 }, 23876 max: 100, 23877 value: 0, 23878 23879 change: null, 23880 complete: null 23881 }, 23882 23883 min: 0, 23884 23885 _create: function() { 23886 23887 // Constrain initial value 23888 this.oldValue = this.options.value = this._constrainedValue(); 23889 23890 this.element.attr( { 23891 23892 // Only set static values; aria-valuenow and aria-valuemax are 23893 // set inside _refreshValue() 23894 role: "progressbar", 23895 "aria-valuemin": this.min 23896 } ); 23897 this._addClass( "ui-progressbar", "ui-widget ui-widget-content" ); 23898 23899 this.valueDiv = $( "<div>" ).appendTo( this.element ); 23900 this._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" ); 23901 this._refreshValue(); 23902 }, 23903 23904 _destroy: function() { 23905 this.element.removeAttr( "role aria-valuemin aria-valuemax aria-valuenow" ); 23906 23907 this.valueDiv.remove(); 23908 }, 23909 23910 value: function( newValue ) { 23911 if ( newValue === undefined ) { 23912 return this.options.value; 23913 } 23914 23915 this.options.value = this._constrainedValue( newValue ); 23916 this._refreshValue(); 23917 }, 23918 23919 _constrainedValue: function( newValue ) { 23920 if ( newValue === undefined ) { 23921 newValue = this.options.value; 23922 } 23923 23924 this.indeterminate = newValue === false; 23925 23926 // Sanitize value 23927 if ( typeof newValue !== "number" ) { 23928 newValue = 0; 23929 } 23930 23931 return this.indeterminate ? false : 23932 Math.min( this.options.max, Math.max( this.min, newValue ) ); 23933 }, 23934 23935 _setOptions: function( options ) { 23936 23937 // Ensure "value" option is set after other values (like max) 23938 var value = options.value; 23939 delete options.value; 23940 23941 this._super( options ); 23942 23943 this.options.value = this._constrainedValue( value ); 23944 this._refreshValue(); 23945 }, 23946 23947 _setOption: function( key, value ) { 23948 if ( key === "max" ) { 23949 23950 // Don't allow a max less than min 23951 value = Math.max( this.min, value ); 23952 } 23953 this._super( key, value ); 23954 }, 23955 23956 _setOptionDisabled: function( value ) { 23957 this._super( value ); 23958 23959 this.element.attr( "aria-disabled", value ); 23960 this._toggleClass( null, "ui-state-disabled", !!value ); 23961 }, 23962 23963 _percentage: function() { 23964 return this.indeterminate ? 23965 100 : 23966 100 * ( this.options.value - this.min ) / ( this.options.max - this.min ); 23967 }, 23968 23969 _refreshValue: function() { 23970 var value = this.options.value, 23971 percentage = this._percentage(); 23972 23973 this.valueDiv 23974 .toggle( this.indeterminate || value > this.min ) 23975 .width( percentage.toFixed( 0 ) + "%" ); 23976 23977 this 23978 ._toggleClass( this.valueDiv, "ui-progressbar-complete", null, 23979 value === this.options.max ) 23980 ._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate ); 23981 23982 if ( this.indeterminate ) { 23983 this.element.removeAttr( "aria-valuenow" ); 23984 if ( !this.overlayDiv ) { 23985 this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv ); 23986 this._addClass( this.overlayDiv, "ui-progressbar-overlay" ); 23987 } 23988 } else { 23989 this.element.attr( { 23990 "aria-valuemax": this.options.max, 23991 "aria-valuenow": value 23992 } ); 23993 if ( this.overlayDiv ) { 23994 this.overlayDiv.remove(); 23995 this.overlayDiv = null; 23996 } 23997 } 23998 23999 if ( this.oldValue !== value ) { 24000 this.oldValue = value; 24001 this._trigger( "change" ); 24002 } 24003 if ( value === this.options.max ) { 24004 this._trigger( "complete" ); 24005 } 24006 } 24007} ); 24008 24009 24010/*! 24011 * jQuery UI Selectable 1.13.1 24012 * http://jqueryui.com 24013 * 24014 * Copyright jQuery Foundation and other contributors 24015 * Released under the MIT license. 24016 * http://jquery.org/license 24017 */ 24018 24019//>>label: Selectable 24020//>>group: Interactions 24021//>>description: Allows groups of elements to be selected with the mouse. 24022//>>docs: http://api.jqueryui.com/selectable/ 24023//>>demos: http://jqueryui.com/selectable/ 24024//>>css.structure: ../../themes/base/selectable.css 24025 24026 24027var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, { 24028 version: "1.13.1
vendor: 7,325 bytes, lines 24028-24309
24028", 24029 options: { 24030 appendTo: "body", 24031 autoRefresh: true, 24032 distance: 0, 24033 filter: "*", 24034 tolerance: "touch", 24035 24036 // Callbacks 24037 selected: null, 24038 selecting: null, 24039 start: null, 24040 stop: null, 24041 unselected: null, 24042 unselecting: null 24043 }, 24044 _create: function() { 24045 var that = this; 24046 24047 this._addClass( "ui-selectable" ); 24048 24049 this.dragged = false; 24050 24051 // Cache selectee children based on filter 24052 this.refresh = function() { 24053 that.elementPos = $( that.element[ 0 ] ).offset(); 24054 that.selectees = $( that.options.filter, that.element[ 0 ] ); 24055 that._addClass( that.selectees, "ui-selectee" ); 24056 that.selectees.each( function() { 24057 var $this = $( this ), 24058 selecteeOffset = $this.offset(), 24059 pos = { 24060 left: selecteeOffset.left - that.elementPos.left, 24061 top: selecteeOffset.top - that.elementPos.top 24062 }; 24063 $.data( this, "selectable-item", { 24064 element: this, 24065 $element: $this, 24066 left: pos.left, 24067 top: pos.top, 24068 right: pos.left + $this.outerWidth(), 24069 bottom: pos.top + $this.outerHeight(), 24070 startselected: false, 24071 selected: $this.hasClass( "ui-selected" ), 24072 selecting: $this.hasClass( "ui-selecting" ), 24073 unselecting: $this.hasClass( "ui-unselecting" ) 24074 } ); 24075 } ); 24076 }; 24077 this.refresh(); 24078 24079 this._mouseInit(); 24080 24081 this.helper = $( "<div>" ); 24082 this._addClass( this.helper, "ui-selectable-helper" ); 24083 }, 24084 24085 _destroy: function() { 24086 this.selectees.removeData( "selectable-item" ); 24087 this._mouseDestroy(); 24088 }, 24089 24090 _mouseStart: function( event ) { 24091 var that = this, 24092 options = this.options; 24093 24094 this.opos = [ event.pageX, event.pageY ]; 24095 this.elementPos = $( this.element[ 0 ] ).offset(); 24096 24097 if ( this.options.disabled ) { 24098 return; 24099 } 24100 24101 this.selectees = $( options.filter, this.element[ 0 ] ); 24102 24103 this._trigger( "start", event ); 24104 24105 $( options.appendTo ).append( this.helper ); 24106 24107 // position helper (lasso) 24108 this.helper.css( { 24109 "left": event.pageX, 24110 "top": event.pageY, 24111 "width": 0, 24112 "height": 0 24113 } ); 24114 24115 if ( options.autoRefresh ) { 24116 this.refresh(); 24117 } 24118 24119 this.selectees.filter( ".ui-selected" ).each( function() { 24120 var selectee = $.data( this, "selectable-item" ); 24121 selectee.startselected = true; 24122 if ( !event.metaKey && !event.ctrlKey ) { 24123 that._removeClass( selectee.$element, "ui-selected" ); 24124 selectee.selected = false; 24125 that._addClass( selectee.$element, "ui-unselecting" ); 24126 selectee.unselecting = true; 24127 24128 // selectable UNSELECTING callback 24129 that._trigger( "unselecting", event, { 24130 unselecting: selectee.element 24131 } ); 24132 } 24133 } ); 24134 24135 $( event.target ).parents().addBack().each( function() { 24136 var doSelect, 24137 selectee = $.data( this, "selectable-item" ); 24138 if ( selectee ) { 24139 doSelect = ( !event.metaKey && !event.ctrlKey ) || 24140 !selectee.$element.hasClass( "ui-selected" ); 24141 that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" ) 24142 ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" ); 24143 selectee.unselecting = !doSelect; 24144 selectee.selecting = doSelect; 24145 selectee.selected = doSelect; 24146 24147 // selectable (UN)SELECTING callback 24148 if ( doSelect ) { 24149 that._trigger( "selecting", event, { 24150 selecting: selectee.element 24151 } ); 24152 } else { 24153 that._trigger( "unselecting", event, { 24154 unselecting: selectee.element 24155 } ); 24156 } 24157 return false; 24158 } 24159 } ); 24160 24161 }, 24162 24163 _mouseDrag: function( event ) { 24164 24165 this.dragged = true; 24166 24167 if ( this.options.disabled ) { 24168 return; 24169 } 24170 24171 var tmp, 24172 that = this, 24173 options = this.options, 24174 x1 = this.opos[ 0 ], 24175 y1 = this.opos[ 1 ], 24176 x2 = event.pageX, 24177 y2 = event.pageY; 24178 24179 if ( x1 > x2 ) { 24180 tmp = x2; x2 = x1; x1 = tmp; 24181 } 24182 if ( y1 > y2 ) { 24183 tmp = y2; y2 = y1; y1 = tmp; 24184 } 24185 this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } ); 24186 24187 this.selectees.each( function() { 24188 var selectee = $.data( this, "selectable-item" ), 24189 hit = false, 24190 offset = {}; 24191 24192 //prevent helper from being selected if appendTo: selectable 24193 if ( !selectee || selectee.element === that.element[ 0 ] ) { 24194 return; 24195 } 24196 24197 offset.left = selectee.left + that.elementPos.left; 24198 offset.right = selectee.right + that.elementPos.left; 24199 offset.top = selectee.top + that.elementPos.top; 24200 offset.bottom = selectee.bottom + that.elementPos.top; 24201 24202 if ( options.tolerance === "touch" ) { 24203 hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 || 24204 offset.bottom < y1 ) ); 24205 } else if ( options.tolerance === "fit" ) { 24206 hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 && 24207 offset.bottom < y2 ); 24208 } 24209 24210 if ( hit ) { 24211 24212 // SELECT 24213 if ( selectee.selected ) { 24214 that._removeClass( selectee.$element, "ui-selected" ); 24215 selectee.selected = false; 24216 } 24217 if ( selectee.unselecting ) { 24218 that._removeClass( selectee.$element, "ui-unselecting" ); 24219 selectee.unselecting = false; 24220 } 24221 if ( !selectee.selecting ) { 24222 that._addClass( selectee.$element, "ui-selecting" ); 24223 selectee.selecting = true; 24224 24225 // selectable SELECTING callback 24226 that._trigger( "selecting", event, { 24227 selecting: selectee.element 24228 } ); 24229 } 24230 } else { 24231 24232 // UNSELECT 24233 if ( selectee.selecting ) { 24234 if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) { 24235 that._removeClass( selectee.$element, "ui-selecting" ); 24236 selectee.selecting = false; 24237 that._addClass( selectee.$element, "ui-selected" ); 24238 selectee.selected = true; 24239 } else { 24240 that._removeClass( selectee.$element, "ui-selecting" ); 24241 selectee.selecting = false; 24242 if ( selectee.startselected ) { 24243 that._addClass( selectee.$element, "ui-unselecting" ); 24244 selectee.unselecting = true; 24245 } 24246 24247 // selectable UNSELECTING callback 24248 that._trigger( "unselecting", event, { 24249 unselecting: selectee.element 24250 } ); 24251 } 24252 } 24253 if ( selectee.selected ) { 24254 if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) { 24255 that._removeClass( selectee.$element, "ui-selected" ); 24256 selectee.selected = false; 24257 24258 that._addClass( selectee.$element, "ui-unselecting" ); 24259 selectee.unselecting = true; 24260 24261 // selectable UNSELECTING callback 24262 that._trigger( "unselecting", event, { 24263 unselecting: selectee.element 24264 } ); 24265 } 24266 } 24267 } 24268 } ); 24269 24270 return false; 24271 }, 24272 24273 _mouseStop: function( event ) { 24274 var that = this; 24275 24276 this.dragged = false; 24277 24278 $( ".ui-unselecting", this.element[ 0 ] ).each( function() { 24279 var selectee = $.data( this, "selectable-item" ); 24280 that._removeClass( selectee.$element, "ui-unselecting" ); 24281 selectee.unselecting = false; 24282 selectee.startselected = false; 24283 that._trigger( "unselected", event, { 24284 unselected: selectee.element 24285 } ); 24286 } ); 24287 $( ".ui-selecting", this.element[ 0 ] ).each( function() { 24288 var selectee = $.data( this, "selectable-item" ); 24289 that._removeClass( selectee.$element, "ui-selecting" ) 24290 ._addClass( selectee.$element, "ui-selected" ); 24291 selectee.selecting = false; 24292 selectee.selected = true; 24293 selectee.startselected = true; 24294 that._trigger( "selected", event, { 24295 selected: selectee.element 24296 } ); 24297 } ); 24298 this._trigger( "stop", event ); 24299 24300 this.helper.remove(); 24301 24302 return false; 24303 } 24304 24305} ); 24306 24307 24308/*! 24309 * jQuery UI Selectmenu 1.1
vendor: 1,951 bytes, lines 24309-24385
243093.1 24310 * http://jqueryui.com 24311 * 24312 * Copyright jQuery Foundation and other contributors 24313 * Released under the MIT license. 24314 * http://jquery.org/license 24315 */ 24316 24317//>>label: Selectmenu 24318//>>group: Widgets 24319/* eslint-disable max-len */ 24320//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select. 24321/* eslint-enable max-len */ 24322//>>docs: http://api.jqueryui.com/selectmenu/ 24323//>>demos: http://jqueryui.com/selectmenu/ 24324//>>css.structure: ../../themes/base/core.css 24325//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css 24326//>>css.theme: ../../themes/base/theme.css 24327 24328 24329var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, { 24330 version: "1.13.1", 24331 defaultElement: "<select>", 24332 options: { 24333 appendTo: null, 24334 classes: { 24335 "ui-selectmenu-button-open": "ui-corner-top", 24336 "ui-selectmenu-button-closed": "ui-corner-all" 24337 }, 24338 disabled: null, 24339 icons: { 24340 button: "ui-icon-triangle-1-s" 24341 }, 24342 position: { 24343 my: "left top", 24344 at: "left bottom", 24345 collision: "none" 24346 }, 24347 width: false, 24348 24349 // Callbacks 24350 change: null, 24351 close: null, 24352 focus: null, 24353 open: null, 24354 select: null 24355 }, 24356 24357 _create: function() { 24358 var selectmenuId = this.element.uniqueId().attr( "id" ); 24359 this.ids = { 24360 element: selectmenuId, 24361 button: selectmenuId + "-button", 24362 menu: selectmenuId + "-menu" 24363 }; 24364 24365 this._drawButton(); 24366 this._drawMenu(); 24367 this._bindFormResetHandler(); 24368 24369 this._rendered = false; 24370 this.menuItems = $(); 24371 }, 24372 24373 _drawButton: function() { 24374 var icon, 24375 that = this, 24376 item = this._parseOption( 24377 this.element.find( "option:selected" ), 24378 this.element[ 0 ].selectedIndex 24379 ); 24380 24381 // Associate existing label with the new button 24382 this.labels = this.element.labels().attr( "for", this.ids.button ); 24383 this._on( this.labels, { 24384 click: function( event ) { 24385 this.button.trigger( "focus"
vendor: 7,703 bytes, lines 24385-24713
24385); 24386 event.preventDefault(); 24387 } 24388 } ); 24389 24390 // Hide original select element 24391 this.element.hide(); 24392 24393 // Create button 24394 this.button = $( "<span>", { 24395 tabindex: this.options.disabled ? -1 : 0, 24396 id: this.ids.button, 24397 role: "combobox", 24398 "aria-expanded": "false", 24399 "aria-autocomplete": "list", 24400 "aria-owns": this.ids.menu, 24401 "aria-haspopup": "true", 24402 title: this.element.attr( "title" ) 24403 } ) 24404 .insertAfter( this.element ); 24405 24406 this._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed", 24407 "ui-button ui-widget" ); 24408 24409 icon = $( "<span>" ).appendTo( this.button ); 24410 this._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button ); 24411 this.buttonItem = this._renderButtonItem( item ) 24412 .appendTo( this.button ); 24413 24414 if ( this.options.width !== false ) { 24415 this._resizeButton(); 24416 } 24417 24418 this._on( this.button, this._buttonEvents ); 24419 this.button.one( "focusin", function() { 24420 24421 // Delay rendering the menu items until the button receives focus. 24422 // The menu may have already been rendered via a programmatic open. 24423 if ( !that._rendered ) { 24424 that._refreshMenu(); 24425 } 24426 } ); 24427 }, 24428 24429 _drawMenu: function() { 24430 var that = this; 24431 24432 // Create menu 24433 this.menu = $( "<ul>", { 24434 "aria-hidden": "true", 24435 "aria-labelledby": this.ids.button, 24436 id: this.ids.menu 24437 } ); 24438 24439 // Wrap menu 24440 this.menuWrap = $( "<div>" ).append( this.menu ); 24441 this._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" ); 24442 this.menuWrap.appendTo( this._appendTo() ); 24443 24444 // Initialize menu widget 24445 this.menuInstance = this.menu 24446 .menu( { 24447 classes: { 24448 "ui-menu": "ui-corner-bottom" 24449 }, 24450 role: "listbox", 24451 select: function( event, ui ) { 24452 event.preventDefault(); 24453 24454 // Support: IE8 24455 // If the item was selected via a click, the text selection 24456 // will be destroyed in IE 24457 that._setSelection(); 24458 24459 that._select( ui.item.data( "ui-selectmenu-item" ), event ); 24460 }, 24461 focus: function( event, ui ) { 24462 var item = ui.item.data( "ui-selectmenu-item" ); 24463 24464 // Prevent inital focus from firing and check if its a newly focused item 24465 if ( that.focusIndex != null && item.index !== that.focusIndex ) { 24466 that._trigger( "focus", event, { item: item } ); 24467 if ( !that.isOpen ) { 24468 that._select( item, event ); 24469 } 24470 } 24471 that.focusIndex = item.index; 24472 24473 that.button.attr( "aria-activedescendant", 24474 that.menuItems.eq( item.index ).attr( "id" ) ); 24475 } 24476 } ) 24477 .menu( "instance" ); 24478 24479 // Don't close the menu on mouseleave 24480 this.menuInstance._off( this.menu, "mouseleave" ); 24481 24482 // Cancel the menu's collapseAll on document click 24483 this.menuInstance._closeOnDocumentClick = function() { 24484 return false; 24485 }; 24486 24487 // Selects often contain empty items, but never contain dividers 24488 this.menuInstance._isDivider = function() { 24489 return false; 24490 }; 24491 }, 24492 24493 refresh: function() { 24494 this._refreshMenu(); 24495 this.buttonItem.replaceWith( 24496 this.buttonItem = this._renderButtonItem( 24497 24498 // Fall back to an empty object in case there are no options 24499 this._getSelectedItem().data( "ui-selectmenu-item" ) || {} 24500 ) 24501 ); 24502 if ( this.options.width === null ) { 24503 this._resizeButton(); 24504 } 24505 }, 24506 24507 _refreshMenu: function() { 24508 var item, 24509 options = this.element.find( "option" ); 24510 24511 this.menu.empty(); 24512 24513 this._parseOptions( options ); 24514 this._renderMenu( this.menu, this.items ); 24515 24516 this.menuInstance.refresh(); 24517 this.menuItems = this.menu.find( "li" ) 24518 .not( ".ui-selectmenu-optgroup" ) 24519 .find( ".ui-menu-item-wrapper" ); 24520 24521 this._rendered = true; 24522 24523 if ( !options.length ) { 24524 return; 24525 } 24526 24527 item = this._getSelectedItem(); 24528 24529 // Update the menu to have the correct item focused 24530 this.menuInstance.focus( null, item ); 24531 this._setAria( item.data( "ui-selectmenu-item" ) ); 24532 24533 // Set disabled state 24534 this._setOption( "disabled", this.element.prop( "disabled" ) ); 24535 }, 24536 24537 open: function( event ) { 24538 if ( this.options.disabled ) { 24539 return; 24540 } 24541 24542 // If this is the first time the menu is being opened, render the items 24543 if ( !this._rendered ) { 24544 this._refreshMenu(); 24545 } else { 24546 24547 // Menu clears focus on close, reset focus to selected item 24548 this._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" ); 24549 this.menuInstance.focus( null, this._getSelectedItem() ); 24550 } 24551 24552 // If there are no options, don't open the menu 24553 if ( !this.menuItems.length ) { 24554 return; 24555 } 24556 24557 this.isOpen = true; 24558 this._toggleAttr(); 24559 this._resizeMenu(); 24560 this._position(); 24561 24562 this._on( this.document, this._documentClick ); 24563 24564 this._trigger( "open", event ); 24565 }, 24566 24567 _position: function() { 24568 this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) ); 24569 }, 24570 24571 close: function( event ) { 24572 if ( !this.isOpen ) { 24573 return; 24574 } 24575 24576 this.isOpen = false; 24577 this._toggleAttr(); 24578 24579 this.range = null; 24580 this._off( this.document ); 24581 24582 this._trigger( "close", event ); 24583 }, 24584 24585 widget: function() { 24586 return this.button; 24587 }, 24588 24589 menuWidget: function() { 24590 return this.menu; 24591 }, 24592 24593 _renderButtonItem: function( item ) { 24594 var buttonItem = $( "<span>" ); 24595 24596 this._setText( buttonItem, item.label ); 24597 this._addClass( buttonItem, "ui-selectmenu-text" ); 24598 24599 return buttonItem; 24600 }, 24601 24602 _renderMenu: function( ul, items ) { 24603 var that = this, 24604 currentOptgroup = ""; 24605 24606 $.each( items, function( index, item ) { 24607 var li; 24608 24609 if ( item.optgroup !== currentOptgroup ) { 24610 li = $( "<li>", { 24611 text: item.optgroup 24612 } ); 24613 that._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" + 24614 ( item.element.parent( "optgroup" ).prop( "disabled" ) ? 24615 " ui-state-disabled" : 24616 "" ) ); 24617 24618 li.appendTo( ul ); 24619 24620 currentOptgroup = item.optgroup; 24621 } 24622 24623 that._renderItemData( ul, item ); 24624 } ); 24625 }, 24626 24627 _renderItemData: function( ul, item ) { 24628 return this._renderItem( ul, item ).data( "ui-selectmenu-item", item ); 24629 }, 24630 24631 _renderItem: function( ul, item ) { 24632 var li = $( "<li>" ), 24633 wrapper = $( "<div>", { 24634 title: item.element.attr( "title" ) 24635 } ); 24636 24637 if ( item.disabled ) { 24638 this._addClass( li, null, "ui-state-disabled" ); 24639 } 24640 this._setText( wrapper, item.label ); 24641 24642 return li.append( wrapper ).appendTo( ul ); 24643 }, 24644 24645 _setText: function( element, value ) { 24646 if ( value ) { 24647 element.text( value ); 24648 } else { 24649 element.html( " " ); 24650 } 24651 }, 24652 24653 _move: function( direction, event ) { 24654 var item, next, 24655 filter = ".ui-menu-item"; 24656 24657 if ( this.isOpen ) { 24658 item = this.menuItems.eq( this.focusIndex ).parent( "li" ); 24659 } else { 24660 item = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" ); 24661 filter += ":not(.ui-state-disabled)"; 24662 } 24663 24664 if ( direction === "first" || direction === "last" ) { 24665 next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 ); 24666 } else { 24667 next = item[ direction + "All" ]( filter ).eq( 0 ); 24668 } 24669 24670 if ( next.length ) { 24671 this.menuInstance.focus( event, next ); 24672 } 24673 }, 24674 24675 _getSelectedItem: function() { 24676 return this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" ); 24677 }, 24678 24679 _toggle: function( event ) { 24680 this[ this.isOpen ? "close" : "open" ]( event ); 24681 }, 24682 24683 _setSelection: function() { 24684 var selection; 24685 24686 if ( !this.range ) { 24687 return; 24688 } 24689 24690 if ( window.getSelection ) { 24691 selection = window.getSelection(); 24692 selection.removeAllRanges(); 24693 selection.addRange( this.range ); 24694 24695 // Support: IE8 24696 } else { 24697 this.range.select(); 24698 } 24699 24700 // Support: IE 24701 // Setting the text selection kills the button focus in IE, but 24702 // restoring the focus doesn't kill the selection. 24703 this.button.focus(); 24704 }, 24705 24706 _documentClick: { 24707 mousedown: function( event ) { 24708 if ( !this.isOpen ) { 24709 return; 24710 } 24711 24712 if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + 24713
24713$
vendor: 5,493 bytes, lines 24713-24944
24713.escapeSelector( this.ids.button ) ).length ) { 24714 this.close( event ); 24715 } 24716 } 24717 }, 24718 24719 _buttonEvents: { 24720 24721 // Prevent text selection from being reset when interacting with the selectmenu (#10144) 24722 mousedown: function() { 24723 var selection; 24724 24725 if ( window.getSelection ) { 24726 selection = window.getSelection(); 24727 if ( selection.rangeCount ) { 24728 this.range = selection.getRangeAt( 0 ); 24729 } 24730 24731 // Support: IE8 24732 } else { 24733 this.range = document.selection.createRange(); 24734 } 24735 }, 24736 24737 click: function( event ) { 24738 this._setSelection(); 24739 this._toggle( event ); 24740 }, 24741 24742 keydown: function( event ) { 24743 var preventDefault = true; 24744 switch ( event.keyCode ) { 24745 case $.ui.keyCode.TAB: 24746 case $.ui.keyCode.ESCAPE: 24747 this.close( event ); 24748 preventDefault = false; 24749 break; 24750 case $.ui.keyCode.ENTER: 24751 if ( this.isOpen ) { 24752 this._selectFocusedItem( event ); 24753 } 24754 break; 24755 case $.ui.keyCode.UP: 24756 if ( event.altKey ) { 24757 this._toggle( event ); 24758 } else { 24759 this._move( "prev", event ); 24760 } 24761 break; 24762 case $.ui.keyCode.DOWN: 24763 if ( event.altKey ) { 24764 this._toggle( event ); 24765 } else { 24766 this._move( "next", event ); 24767 } 24768 break; 24769 case $.ui.keyCode.SPACE: 24770 if ( this.isOpen ) { 24771 this._selectFocusedItem( event ); 24772 } else { 24773 this._toggle( event ); 24774 } 24775 break; 24776 case $.ui.keyCode.LEFT: 24777 this._move( "prev", event ); 24778 break; 24779 case $.ui.keyCode.RIGHT: 24780 this._move( "next", event ); 24781 break; 24782 case $.ui.keyCode.HOME: 24783 case $.ui.keyCode.PAGE_UP: 24784 this._move( "first", event ); 24785 break; 24786 case $.ui.keyCode.END: 24787 case $.ui.keyCode.PAGE_DOWN: 24788 this._move( "last", event ); 24789 break; 24790 default: 24791 this.menu.trigger( event ); 24792 preventDefault = false; 24793 } 24794 24795 if ( preventDefault ) { 24796 event.preventDefault(); 24797 } 24798 } 24799 }, 24800 24801 _selectFocusedItem: function( event ) { 24802 var item = this.menuItems.eq( this.focusIndex ).parent( "li" ); 24803 if ( !item.hasClass( "ui-state-disabled" ) ) { 24804 this._select( item.data( "ui-selectmenu-item" ), event ); 24805 } 24806 }, 24807 24808 _select: function( item, event ) { 24809 var oldIndex = this.element[ 0 ].selectedIndex; 24810 24811 // Change native select element 24812 this.element[ 0 ].selectedIndex = item.index; 24813 this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) ); 24814 this._setAria( item ); 24815 this._trigger( "select", event, { item: item } ); 24816 24817 if ( item.index !== oldIndex ) { 24818 this._trigger( "change", event, { item: item } ); 24819 } 24820 24821 this.close( event ); 24822 }, 24823 24824 _setAria: function( item ) { 24825 var id = this.menuItems.eq( item.index ).attr( "id" ); 24826 24827 this.button.attr( { 24828 "aria-labelledby": id, 24829 "aria-activedescendant": id 24830 } ); 24831 this.menu.attr( "aria-activedescendant", id ); 24832 }, 24833 24834 _setOption: function( key, value ) { 24835 if ( key === "icons" ) { 24836 var icon = this.button.find( "span.ui-icon" ); 24837 this._removeClass( icon, null, this.options.icons.button ) 24838 ._addClass( icon, null, value.button ); 24839 } 24840 24841 this._super( key, value ); 24842 24843 if ( key === "appendTo" ) { 24844 this.menuWrap.appendTo( this._appendTo() ); 24845 } 24846 24847 if ( key === "width" ) { 24848 this._resizeButton(); 24849 } 24850 }, 24851 24852 _setOptionDisabled: function( value ) { 24853 this._super( value ); 24854 24855 this.menuInstance.option( "disabled", value ); 24856 this.button.attr( "aria-disabled", value ); 24857 this._toggleClass( this.button, null, "ui-state-disabled", value ); 24858 24859 this.element.prop( "disabled", value ); 24860 if ( value ) { 24861 this.button.attr( "tabindex", -1 ); 24862 this.close(); 24863 } else { 24864 this.button.attr( "tabindex", 0 ); 24865 } 24866 }, 24867 24868 _appendTo: function() { 24869 var element = this.options.appendTo; 24870 24871 if ( element ) { 24872 element = element.jquery || element.nodeType ? 24873 $( element ) : 24874 this.document.find( element ).eq( 0 ); 24875 } 24876 24877 if ( !element || !element[ 0 ] ) { 24878 element = this.element.closest( ".ui-front, dialog" ); 24879 } 24880 24881 if ( !element.length ) { 24882 element = this.document[ 0 ].body; 24883 } 24884 24885 return element; 24886 }, 24887 24888 _toggleAttr: function() { 24889 this.button.attr( "aria-expanded", this.isOpen ); 24890 24891 // We can't use two _toggleClass() calls here, because we need to make sure 24892 // we always remove classes first and add them second, otherwise if both classes have the 24893 // same theme class, it will be removed after we add it. 24894 this._removeClass( this.button, "ui-selectmenu-button-" + 24895 ( this.isOpen ? "closed" : "open" ) ) 24896 ._addClass( this.button, "ui-selectmenu-button-" + 24897 ( this.isOpen ? "open" : "closed" ) ) 24898 ._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen ); 24899 24900 this.menu.attr( "aria-hidden", !this.isOpen ); 24901 }, 24902 24903 _resizeButton: function() { 24904 var width = this.options.width; 24905 24906 // For `width: false`, just remove inline style and stop 24907 if ( width === false ) { 24908 this.button.css( "width", "" ); 24909 return; 24910 } 24911 24912 // For `width: null`, match the width of the original element 24913 if ( width === null ) { 24914 width = this.element.show().outerWidth(); 24915 this.element.hide(); 24916 } 24917 24918 this.button.outerWidth( width ); 24919 }, 24920 24921 _resizeMenu: function() { 24922 this.menu.outerWidth( Math.max( 24923 this.button.outerWidth(), 24924 24925 // Support: IE10 24926 // IE10 wraps long text (possibly a rounding bug) 24927 // so we add 1px to avoid the wrapping 24928 this.menu.width( "" ).outerWidth() + 1 24929 ) ); 24930 }, 24931 24932 _getCreateOptions: function() { 24933 var options = this._super(); 24934 24935 options.disabled = this.element.prop( "disabled" ); 24936 24937 return options; 24938 }, 24939 24940 _parseOptions: function( options ) { 24941 var that = this, 24942 data = []; 24943 options.each( function( index, item ) { 24944
vendor: 3,668 bytes, lines 24944-25094
24944if ( item.hidden ) { 24945 return; 24946 } 24947 24948 data.push( that._parseOption( $( item ), index ) ); 24949 } ); 24950 this.items = data; 24951 }, 24952 24953 _parseOption: function( option, index ) { 24954 var optgroup = option.parent( "optgroup" ); 24955 24956 return { 24957 element: option, 24958 index: index, 24959 value: option.val(), 24960 label: option.text(), 24961 optgroup: optgroup.attr( "label" ) || "", 24962 disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" ) 24963 }; 24964 }, 24965 24966 _destroy: function() { 24967 this._unbindFormResetHandler(); 24968 this.menuWrap.remove(); 24969 this.button.remove(); 24970 this.element.show(); 24971 this.element.removeUniqueId(); 24972 this.labels.attr( "for", this.ids.element ); 24973 } 24974} ] ); 24975 24976 24977/*! 24978 * jQuery UI Slider 1.13.1 24979 * http://jqueryui.com 24980 * 24981 * Copyright jQuery Foundation and other contributors 24982 * Released under the MIT license. 24983 * http://jquery.org/license 24984 */ 24985 24986//>>label: Slider 24987//>>group: Widgets 24988//>>description: Displays a flexible slider with ranges and accessibility via keyboard. 24989//>>docs: http://api.jqueryui.com/slider/ 24990//>>demos: http://jqueryui.com/slider/ 24991//>>css.structure: ../../themes/base/core.css 24992//>>css.structure: ../../themes/base/slider.css 24993//>>css.theme: ../../themes/base/theme.css 24994 24995 24996var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, { 24997 version: "1.13.1", 24998 widgetEventPrefix: "slide", 24999 25000 options: { 25001 animate: false, 25002 classes: { 25003 "ui-slider": "ui-corner-all", 25004 "ui-slider-handle": "ui-corner-all", 25005 25006 // Note: ui-widget-header isn't the most fittingly semantic framework class for this 25007 // element, but worked best visually with a variety of themes 25008 "ui-slider-range": "ui-corner-all ui-widget-header" 25009 }, 25010 distance: 0, 25011 max: 100, 25012 min: 0, 25013 orientation: "horizontal", 25014 range: false, 25015 step: 1, 25016 value: 0, 25017 values: null, 25018 25019 // Callbacks 25020 change: null, 25021 slide: null, 25022 start: null, 25023 stop: null 25024 }, 25025 25026 // Number of pages in a slider 25027 // (how many times can you page up/down to go through the whole range) 25028 numPages: 5, 25029 25030 _create: function() { 25031 this._keySliding = false; 25032 this._mouseSliding = false; 25033 this._animateOff = true; 25034 this._handleIndex = null; 25035 this._detectOrientation(); 25036 this._mouseInit(); 25037 this._calculateNewMax(); 25038 25039 this._addClass( "ui-slider ui-slider-" + this.orientation, 25040 "ui-widget ui-widget-content" ); 25041 25042 this._refresh(); 25043 25044 this._animateOff = false; 25045 }, 25046 25047 _refresh: function() { 25048 this._createRange(); 25049 this._createHandles(); 25050 this._setupEvents(); 25051 this._refreshValue(); 25052 }, 25053 25054 _createHandles: function() { 25055 var i, handleCount, 25056 options = this.options, 25057 existingHandles = this.element.find( ".ui-slider-handle" ), 25058 handle = "<span tabindex='0'></span>", 25059 handles = []; 25060 25061 handleCount = ( options.values && options.values.length ) || 1; 25062 25063 if ( existingHandles.length > handleCount ) { 25064 existingHandles.slice( handleCount ).remove(); 25065 existingHandles = existingHandles.slice( 0, handleCount ); 25066 } 25067 25068 for ( i = existingHandles.length; i < handleCount; i++ ) { 25069 handles.push( handle ); 25070 } 25071 25072 this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) ); 25073 25074 this._addClass( this.handles, "ui-slider-handle", "ui-state-default" ); 25075 25076 this.handle = this.handles.eq( 0 ); 25077 25078 this.handles.each( function( i ) { 25079 $( this ) 25080 .data( "ui-slider-handle-index", i ) 25081 .attr( "tabIndex", 0 ); 25082 } ); 25083 }, 25084 25085 _createRange: function() { 25086 var options = this.options; 25087 25088 if ( options.range ) { 25089 if ( options.range === true ) { 25090 if ( !options.values ) { 25091 options.values = [ this._valueMin(), this._valueMin() ]; 25092 } else if ( options.values.length && options.values.length !== 2 ) { 25093 options.values = [ options.values[ 0 ], options.values[ 0 ] ]; 25094 } else if ( Array
vendor: 6,343 bytes, lines 25094-25340
25094.isArray( options.values ) ) { 25095 options.values = options.values.slice( 0 ); 25096 } 25097 } 25098 25099 if ( !this.range || !this.range.length ) { 25100 this.range = $( "<div>" ) 25101 .appendTo( this.element ); 25102 25103 this._addClass( this.range, "ui-slider-range" ); 25104 } else { 25105 this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" ); 25106 25107 // Handle range switching from true to min/max 25108 this.range.css( { 25109 "left": "", 25110 "bottom": "" 25111 } ); 25112 } 25113 if ( options.range === "min" || options.range === "max" ) { 25114 this._addClass( this.range, "ui-slider-range-" + options.range ); 25115 } 25116 } else { 25117 if ( this.range ) { 25118 this.range.remove(); 25119 } 25120 this.range = null; 25121 } 25122 }, 25123 25124 _setupEvents: function() { 25125 this._off( this.handles ); 25126 this._on( this.handles, this._handleEvents ); 25127 this._hoverable( this.handles ); 25128 this._focusable( this.handles ); 25129 }, 25130 25131 _destroy: function() { 25132 this.handles.remove(); 25133 if ( this.range ) { 25134 this.range.remove(); 25135 } 25136 25137 this._mouseDestroy(); 25138 }, 25139 25140 _mouseCapture: function( event ) { 25141 var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, 25142 that = this, 25143 o = this.options; 25144 25145 if ( o.disabled ) { 25146 return false; 25147 } 25148 25149 this.elementSize = { 25150 width: this.element.outerWidth(), 25151 height: this.element.outerHeight() 25152 }; 25153 this.elementOffset = this.element.offset(); 25154 25155 position = { x: event.pageX, y: event.pageY }; 25156 normValue = this._normValueFromMouse( position ); 25157 distance = this._valueMax() - this._valueMin() + 1; 25158 this.handles.each( function( i ) { 25159 var thisDistance = Math.abs( normValue - that.values( i ) ); 25160 if ( ( distance > thisDistance ) || 25161 ( distance === thisDistance && 25162 ( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) { 25163 distance = thisDistance; 25164 closestHandle = $( this ); 25165 index = i; 25166 } 25167 } ); 25168 25169 allowed = this._start( event, index ); 25170 if ( allowed === false ) { 25171 return false; 25172 } 25173 this._mouseSliding = true; 25174 25175 this._handleIndex = index; 25176 25177 this._addClass( closestHandle, null, "ui-state-active" ); 25178 closestHandle.trigger( "focus" ); 25179 25180 offset = closestHandle.offset(); 25181 mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" ); 25182 this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { 25183 left: event.pageX - offset.left - ( closestHandle.width() / 2 ), 25184 top: event.pageY - offset.top - 25185 ( closestHandle.height() / 2 ) - 25186 ( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) - 25187 ( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) + 25188 ( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 ) 25189 }; 25190 25191 if ( !this.handles.hasClass( "ui-state-hover" ) ) { 25192 this._slide( event, index, normValue ); 25193 } 25194 this._animateOff = true; 25195 return true; 25196 }, 25197 25198 _mouseStart: function() { 25199 return true; 25200 }, 25201 25202 _mouseDrag: function( event ) { 25203 var position = { x: event.pageX, y: event.pageY }, 25204 normValue = this._normValueFromMouse( position ); 25205 25206 this._slide( event, this._handleIndex, normValue ); 25207 25208 return false; 25209 }, 25210 25211 _mouseStop: function( event ) { 25212 this._removeClass( this.handles, null, "ui-state-active" ); 25213 this._mouseSliding = false; 25214 25215 this._stop( event, this._handleIndex ); 25216 this._change( event, this._handleIndex ); 25217 25218 this._handleIndex = null; 25219 this._clickOffset = null; 25220 this._animateOff = false; 25221 25222 return false; 25223 }, 25224 25225 _detectOrientation: function() { 25226 this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; 25227 }, 25228 25229 _normValueFromMouse: function( position ) { 25230 var pixelTotal, 25231 pixelMouse, 25232 percentMouse, 25233 valueTotal, 25234 valueMouse; 25235 25236 if ( this.orientation === "horizontal" ) { 25237 pixelTotal = this.elementSize.width; 25238 pixelMouse = position.x - this.elementOffset.left - 25239 ( this._clickOffset ? this._clickOffset.left : 0 ); 25240 } else { 25241 pixelTotal = this.elementSize.height; 25242 pixelMouse = position.y - this.elementOffset.top - 25243 ( this._clickOffset ? this._clickOffset.top : 0 ); 25244 } 25245 25246 percentMouse = ( pixelMouse / pixelTotal ); 25247 if ( percentMouse > 1 ) { 25248 percentMouse = 1; 25249 } 25250 if ( percentMouse < 0 ) { 25251 percentMouse = 0; 25252 } 25253 if ( this.orientation === "vertical" ) { 25254 percentMouse = 1 - percentMouse; 25255 } 25256 25257 valueTotal = this._valueMax() - this._valueMin(); 25258 valueMouse = this._valueMin() + percentMouse * valueTotal; 25259 25260 return this._trimAlignValue( valueMouse ); 25261 }, 25262 25263 _uiHash: function( index, value, values ) { 25264 var uiHash = { 25265 handle: this.handles[ index ], 25266 handleIndex: index, 25267 value: value !== undefined ? value : this.value() 25268 }; 25269 25270 if ( this._hasMultipleValues() ) { 25271 uiHash.value = value !== undefined ? value : this.values( index ); 25272 uiHash.values = values || this.values(); 25273 } 25274 25275 return uiHash; 25276 }, 25277 25278 _hasMultipleValues: function() { 25279 return this.options.values && this.options.values.length; 25280 }, 25281 25282 _start: function( event, index ) { 25283 return this._trigger( "start", event, this._uiHash( index ) ); 25284 }, 25285 25286 _slide: function( event, index, newVal ) { 25287 var allowed, otherVal, 25288 currentValue = this.value(), 25289 newValues = this.values(); 25290 25291 if ( this._hasMultipleValues() ) { 25292 otherVal = this.values( index ? 0 : 1 ); 25293 currentValue = this.values( index ); 25294 25295 if ( this.options.values.length === 2 && this.options.range === true ) { 25296 newVal = index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal ); 25297 } 25298 25299 newValues[ index ] = newVal; 25300 } 25301 25302 if ( newVal === currentValue ) { 25303 return; 25304 } 25305 25306 allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) ); 25307 25308 // A slide can be canceled by returning false from the slide callback 25309 if ( allowed === false ) { 25310 return; 25311 } 25312 25313 if ( this._hasMultipleValues() ) { 25314 this.values( index, newVal ); 25315 } else { 25316 this.value( newVal ); 25317 } 25318 }, 25319 25320 _stop: function( event, index ) { 25321 this._trigger( "stop", event, this._uiHash( index ) ); 25322 }, 25323 25324 _change: function( event, index ) { 25325 if ( !this._keySliding && !this._mouseSliding ) { 25326 25327 //store the last changed value index for reference when handles overlap 25328 this._lastChangedValue = index; 25329 this._trigger( "change", event, this._uiHash( index ) ); 25330 } 25331 }, 25332 25333 value: function( newValue ) { 25334 if ( arguments.length ) { 25335 this.options.value = this._trimAlignValue( newValue ); 25336 this._refreshValue(); 25337 this._change( null, 0 ); 25338 return; 25339 } 25340
vendor: 4,358 bytes, lines 25341-25513
25341 return this._value(); 25342 }, 25343 25344 values: function( index, newValue ) { 25345 var vals, 25346 newValues, 25347 i; 25348 25349 if ( arguments.length > 1 ) { 25350 this.options.values[ index ] = this._trimAlignValue( newValue ); 25351 this._refreshValue(); 25352 this._change( null, index ); 25353 return; 25354 } 25355 25356 if ( arguments.length ) { 25357 if ( Array.isArray( arguments[ 0 ] ) ) { 25358 vals = this.options.values; 25359 newValues = arguments[ 0 ]; 25360 for ( i = 0; i < vals.length; i += 1 ) { 25361 vals[ i ] = this._trimAlignValue( newValues[ i ] ); 25362 this._change( null, i ); 25363 } 25364 this._refreshValue(); 25365 } else { 25366 if ( this._hasMultipleValues() ) { 25367 return this._values( index ); 25368 } else { 25369 return this.value(); 25370 } 25371 } 25372 } else { 25373 return this._values(); 25374 } 25375 }, 25376 25377 _setOption: function( key, value ) { 25378 var i, 25379 valsLength = 0; 25380 25381 if ( key === "range" && this.options.range === true ) { 25382 if ( value === "min" ) { 25383 this.options.value = this._values( 0 ); 25384 this.options.values = null; 25385 } else if ( value === "max" ) { 25386 this.options.value = this._values( this.options.values.length - 1 ); 25387 this.options.values = null; 25388 } 25389 } 25390 25391 if ( Array.isArray( this.options.values ) ) { 25392 valsLength = this.options.values.length; 25393 } 25394 25395 this._super( key, value ); 25396 25397 switch ( key ) { 25398 case "orientation": 25399 this._detectOrientation(); 25400 this._removeClass( "ui-slider-horizontal ui-slider-vertical" ) 25401 ._addClass( "ui-slider-" + this.orientation ); 25402 this._refreshValue(); 25403 if ( this.options.range ) { 25404 this._refreshRange( value ); 25405 } 25406 25407 // Reset positioning from previous orientation 25408 this.handles.css( value === "horizontal" ? "bottom" : "left", "" ); 25409 break; 25410 case "value": 25411 this._animateOff = true; 25412 this._refreshValue(); 25413 this._change( null, 0 ); 25414 this._animateOff = false; 25415 break; 25416 case "values": 25417 this._animateOff = true; 25418 this._refreshValue(); 25419 25420 // Start from the last handle to prevent unreachable handles (#9046) 25421 for ( i = valsLength - 1; i >= 0; i-- ) { 25422 this._change( null, i ); 25423 } 25424 this._animateOff = false; 25425 break; 25426 case "step": 25427 case "min": 25428 case "max": 25429 this._animateOff = true; 25430 this._calculateNewMax(); 25431 this._refreshValue(); 25432 this._animateOff = false; 25433 break; 25434 case "range": 25435 this._animateOff = true; 25436 this._refresh(); 25437 this._animateOff = false; 25438 break; 25439 } 25440 }, 25441 25442 _setOptionDisabled: function( value ) { 25443 this._super( value ); 25444 25445 this._toggleClass( null, "ui-state-disabled", !!value ); 25446 }, 25447 25448 //internal value getter 25449 // _value() returns value trimmed by min and max, aligned by step 25450 _value: function() { 25451 var val = this.options.value; 25452 val = this._trimAlignValue( val ); 25453 25454 return val; 25455 }, 25456 25457 //internal values getter 25458 // _values() returns array of values trimmed by min and max, aligned by step 25459 // _values( index ) returns single value trimmed by min and max, aligned by step 25460 _values: function( index ) { 25461 var val, 25462 vals, 25463 i; 25464 25465 if ( arguments.length ) { 25466 val = this.options.values[ index ]; 25467 val = this._trimAlignValue( val ); 25468 25469 return val; 25470 } else if ( this._hasMultipleValues() ) { 25471 25472 // .slice() creates a copy of the array 25473 // this copy gets trimmed by min and max and then returned 25474 vals = this.options.values.slice(); 25475 for ( i = 0; i < vals.length; i += 1 ) { 25476 vals[ i ] = this._trimAlignValue( vals[ i ] ); 25477 } 25478 25479 return vals; 25480 } else { 25481 return []; 25482 } 25483 }, 25484 25485 // Returns the step-aligned value that val is closest to, between (inclusive) min and max 25486 _trimAlignValue: function( val ) { 25487 if ( val <= this._valueMin() ) { 25488 return this._valueMin(); 25489 } 25490 if ( val >= this._valueMax() ) { 25491 return this._valueMax(); 25492 } 25493 var step = ( this.options.step > 0 ) ? this.options.step : 1, 25494 valModStep = ( val - this._valueMin() ) % step, 25495 alignValue = val - valModStep; 25496 25497 if ( Math.abs( valModStep ) * 2 >= step ) { 25498 alignValue += ( valModStep > 0 ) ? step : ( -step ); 25499 } 25500 25501 // Since JavaScript has problems with large floats, round 25502 // the final value to 5 digits after the decimal point (see #4124) 25503 return parseFloat( alignValue.toFixed( 5 ) ); 25504 }, 25505 25506 _calculateNewMax: function() { 25507 var max = this.options.max, 25508 min = this._valueMin(), 25509 step = this.options.step, 25510 aboveMin = Math.round( ( max - min ) / step ) * step; 25511 max = aboveMin + min; 25512 if ( max > this.options.max ) { 25513
vendor: 5,594 bytes, lines 25514-25713
25514 //If max is not divisible by step, rounding off may increase its value 25515 max -= step; 25516 } 25517 this.max = parseFloat( max.toFixed( this._precision() ) ); 25518 }, 25519 25520 _precision: function() { 25521 var precision = this._precisionOf( this.options.step ); 25522 if ( this.options.min !== null ) { 25523 precision = Math.max( precision, this._precisionOf( this.options.min ) ); 25524 } 25525 return precision; 25526 }, 25527 25528 _precisionOf: function( num ) { 25529 var str = num.toString(), 25530 decimal = str.indexOf( "." ); 25531 return decimal === -1 ? 0 : str.length - decimal - 1; 25532 }, 25533 25534 _valueMin: function() { 25535 return this.options.min; 25536 }, 25537 25538 _valueMax: function() { 25539 return this.max; 25540 }, 25541 25542 _refreshRange: function( orientation ) { 25543 if ( orientation === "vertical" ) { 25544 this.range.css( { "width": "", "left": "" } ); 25545 } 25546 if ( orientation === "horizontal" ) { 25547 this.range.css( { "height": "", "bottom": "" } ); 25548 } 25549 }, 25550 25551 _refreshValue: function() { 25552 var lastValPercent, valPercent, value, valueMin, valueMax, 25553 oRange = this.options.range, 25554 o = this.options, 25555 that = this, 25556 animate = ( !this._animateOff ) ? o.animate : false, 25557 _set = {}; 25558 25559 if ( this._hasMultipleValues() ) { 25560 this.handles.each( function( i ) { 25561 valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() - 25562 that._valueMin() ) * 100; 25563 _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; 25564 $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); 25565 if ( that.options.range === true ) { 25566 if ( that.orientation === "horizontal" ) { 25567 if ( i === 0 ) { 25568 that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 25569 left: valPercent + "%" 25570 }, o.animate ); 25571 } 25572 if ( i === 1 ) { 25573 that.range[ animate ? "animate" : "css" ]( { 25574 width: ( valPercent - lastValPercent ) + "%" 25575 }, { 25576 queue: false, 25577 duration: o.animate 25578 } ); 25579 } 25580 } else { 25581 if ( i === 0 ) { 25582 that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 25583 bottom: ( valPercent ) + "%" 25584 }, o.animate ); 25585 } 25586 if ( i === 1 ) { 25587 that.range[ animate ? "animate" : "css" ]( { 25588 height: ( valPercent - lastValPercent ) + "%" 25589 }, { 25590 queue: false, 25591 duration: o.animate 25592 } ); 25593 } 25594 } 25595 } 25596 lastValPercent = valPercent; 25597 } ); 25598 } else { 25599 value = this.value(); 25600 valueMin = this._valueMin(); 25601 valueMax = this._valueMax(); 25602 valPercent = ( valueMax !== valueMin ) ? 25603 ( value - valueMin ) / ( valueMax - valueMin ) * 100 : 25604 0; 25605 _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; 25606 this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); 25607 25608 if ( oRange === "min" && this.orientation === "horizontal" ) { 25609 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 25610 width: valPercent + "%" 25611 }, o.animate ); 25612 } 25613 if ( oRange === "max" && this.orientation === "horizontal" ) { 25614 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 25615 width: ( 100 - valPercent ) + "%" 25616 }, o.animate ); 25617 } 25618 if ( oRange === "min" && this.orientation === "vertical" ) { 25619 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 25620 height: valPercent + "%" 25621 }, o.animate ); 25622 } 25623 if ( oRange === "max" && this.orientation === "vertical" ) { 25624 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 25625 height: ( 100 - valPercent ) + "%" 25626 }, o.animate ); 25627 } 25628 } 25629 }, 25630 25631 _handleEvents: { 25632 keydown: function( event ) { 25633 var allowed, curVal, newVal, step, 25634 index = $( event.target ).data( "ui-slider-handle-index" ); 25635 25636 switch ( event.keyCode ) { 25637 case $.ui.keyCode.HOME: 25638 case $.ui.keyCode.END: 25639 case $.ui.keyCode.PAGE_UP: 25640 case $.ui.keyCode.PAGE_DOWN: 25641 case $.ui.keyCode.UP: 25642 case $.ui.keyCode.RIGHT: 25643 case $.ui.keyCode.DOWN: 25644 case $.ui.keyCode.LEFT: 25645 event.preventDefault(); 25646 if ( !this._keySliding ) { 25647 this._keySliding = true; 25648 this._addClass( $( event.target ), null, "ui-state-active" ); 25649 allowed = this._start( event, index ); 25650 if ( allowed === false ) { 25651 return; 25652 } 25653 } 25654 break; 25655 } 25656 25657 step = this.options.step; 25658 if ( this._hasMultipleValues() ) { 25659 curVal = newVal = this.values( index ); 25660 } else { 25661 curVal = newVal = this.value(); 25662 } 25663 25664 switch ( event.keyCode ) { 25665 case $.ui.keyCode.HOME: 25666 newVal = this._valueMin(); 25667 break; 25668 case $.ui.keyCode.END: 25669 newVal = this._valueMax(); 25670 break; 25671 case $.ui.keyCode.PAGE_UP: 25672 newVal = this._trimAlignValue( 25673 curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages ) 25674 ); 25675 break; 25676 case $.ui.keyCode.PAGE_DOWN: 25677 newVal = this._trimAlignValue( 25678 curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) ); 25679 break; 25680 case $.ui.keyCode.UP: 25681 case $.ui.keyCode.RIGHT: 25682 if ( curVal === this._valueMax() ) { 25683 return; 25684 } 25685 newVal = this._trimAlignValue( curVal + step ); 25686 break; 25687 case $.ui.keyCode.DOWN: 25688 case $.ui.keyCode.LEFT: 25689 if ( curVal === this._valueMin() ) { 25690 return; 25691 } 25692 newVal = this._trimAlignValue( curVal - step ); 25693 break; 25694 } 25695 25696 this._slide( event, index, newVal ); 25697 }, 25698 keyup: function( event ) { 25699 var index = $( event.target ).data( "ui-slider-handle-index" ); 25700 25701 if ( this._keySliding ) { 25702 this._keySliding = false; 25703 this._stop( event, index ); 25704 this._change( event, index ); 25705 this._removeClass( $( event.target ), null, "ui-state-active" ); 25706 } 25707 } 25708 } 25709} ); 25710 25711 25712/*! 25713 * jQuery UI Sortable 1.1
257133.1 25714 * http://jqueryui.com 25715 * 25716 * Copyright jQuery Foundation and other contributors 25717 * Released under the MIT license. 25718 * http://jquery.org/license 25719 */ 25720 25721//>>label: Sortable 25722//>>group: Interactions 25723//>>description: Enables items in a list to be sorted using the mouse. 25724//>>docs: http://api.jqueryui.com/sortable/ 25725//>>demos: http://jqueryui.com/sortable/ 25726//>>css.structure: ../../themes/base/sortable.css 25727 25728 25729var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, { 25730 version: "1.13.1
vendor: 7,925 bytes, lines 25730-26049
25730", 25731 widgetEventPrefix: "sort", 25732 ready: false, 25733 options: { 25734 appendTo: "parent", 25735 axis: false, 25736 connectWith: false, 25737 containment: false, 25738 cursor: "auto", 25739 cursorAt: false, 25740 dropOnEmpty: true, 25741 forcePlaceholderSize: false, 25742 forceHelperSize: false, 25743 grid: false, 25744 handle: false, 25745 helper: "original", 25746 items: "> *", 25747 opacity: false, 25748 placeholder: false, 25749 revert: false, 25750 scroll: true, 25751 scrollSensitivity: 20, 25752 scrollSpeed: 20, 25753 scope: "default", 25754 tolerance: "intersect", 25755 zIndex: 1000, 25756 25757 // Callbacks 25758 activate: null, 25759 beforeStop: null, 25760 change: null, 25761 deactivate: null, 25762 out: null, 25763 over: null, 25764 receive: null, 25765 remove: null, 25766 sort: null, 25767 start: null, 25768 stop: null, 25769 update: null 25770 }, 25771 25772 _isOverAxis: function( x, reference, size ) { 25773 return ( x >= reference ) && ( x < ( reference + size ) ); 25774 }, 25775 25776 _isFloating: function( item ) { 25777 return ( /left|right/ ).test( item.css( "float" ) ) || 25778 ( /inline|table-cell/ ).test( item.css( "display" ) ); 25779 }, 25780 25781 _create: function() { 25782 this.containerCache = {}; 25783 this._addClass( "ui-sortable" ); 25784 25785 //Get the items 25786 this.refresh(); 25787 25788 //Let's determine the parent's offset 25789 this.offset = this.element.offset(); 25790 25791 //Initialize mouse events for interaction 25792 this._mouseInit(); 25793 25794 this._setHandleClassName(); 25795 25796 //We're ready to go 25797 this.ready = true; 25798 25799 }, 25800 25801 _setOption: function( key, value ) { 25802 this._super( key, value ); 25803 25804 if ( key === "handle" ) { 25805 this._setHandleClassName(); 25806 } 25807 }, 25808 25809 _setHandleClassName: function() { 25810 var that = this; 25811 this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" ); 25812 $.each( this.items, function() { 25813 that._addClass( 25814 this.instance.options.handle ? 25815 this.item.find( this.instance.options.handle ) : 25816 this.item, 25817 "ui-sortable-handle" 25818 ); 25819 } ); 25820 }, 25821 25822 _destroy: function() { 25823 this._mouseDestroy(); 25824 25825 for ( var i = this.items.length - 1; i >= 0; i-- ) { 25826 this.items[ i ].item.removeData( this.widgetName + "-item" ); 25827 } 25828 25829 return this; 25830 }, 25831 25832 _mouseCapture: function( event, overrideHandle ) { 25833 var currentItem = null, 25834 validHandle = false, 25835 that = this; 25836 25837 if ( this.reverting ) { 25838 return false; 25839 } 25840 25841 if ( this.options.disabled || this.options.type === "static" ) { 25842 return false; 25843 } 25844 25845 //We have to refresh the items data once first 25846 this._refreshItems( event ); 25847 25848 //Find out if the clicked node (or one of its parents) is a actual item in this.items 25849 $( event.target ).parents().each( function() { 25850 if ( $.data( this, that.widgetName + "-item" ) === that ) { 25851 currentItem = $( this ); 25852 return false; 25853 } 25854 } ); 25855 if ( $.data( event.target, that.widgetName + "-item" ) === that ) { 25856 currentItem = $( event.target ); 25857 } 25858 25859 if ( !currentItem ) { 25860 return false; 25861 } 25862 if ( this.options.handle && !overrideHandle ) { 25863 $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() { 25864 if ( this === event.target ) { 25865 validHandle = true; 25866 } 25867 } ); 25868 if ( !validHandle ) { 25869 return false; 25870 } 25871 } 25872 25873 this.currentItem = currentItem; 25874 this._removeCurrentsFromItems(); 25875 return true; 25876 25877 }, 25878 25879 _mouseStart: function( event, overrideHandle, noActivation ) { 25880 25881 var i, body, 25882 o = this.options; 25883 25884 this.currentContainer = this; 25885 25886 //We only need to call refreshPositions, because the refreshItems call has been moved to 25887 // mouseCapture 25888 this.refreshPositions(); 25889 25890 //Prepare the dragged items parent 25891 this.appendTo = $( o.appendTo !== "parent" ? 25892 o.appendTo : 25893 this.currentItem.parent() ); 25894 25895 //Create and append the visible helper 25896 this.helper = this._createHelper( event ); 25897 25898 //Cache the helper size 25899 this._cacheHelperProportions(); 25900 25901 /* 25902 * - Position generation - 25903 * This block generates everything position related - it's the core of draggables. 25904 */ 25905 25906 //Cache the margins of the original element 25907 this._cacheMargins(); 25908 25909 //The element's absolute position on the page minus margins 25910 this.offset = this.currentItem.offset(); 25911 this.offset = { 25912 top: this.offset.top - this.margins.top, 25913 left: this.offset.left - this.margins.left 25914 }; 25915 25916 $.extend( this.offset, { 25917 click: { //Where the click happened, relative to the element 25918 left: event.pageX - this.offset.left, 25919 top: event.pageY - this.offset.top 25920 }, 25921 25922 // This is a relative to absolute position minus the actual position calculation - 25923 // only used for relative positioned helper 25924 relative: this._getRelativeOffset() 25925 } ); 25926 25927 // After we get the helper offset, but before we get the parent offset we can 25928 // change the helper's position to absolute 25929 // TODO: Still need to figure out a way to make relative sorting possible 25930 this.helper.css( "position", "absolute" ); 25931 this.cssPosition = this.helper.css( "position" ); 25932 25933 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied 25934 if ( o.cursorAt ) { 25935 this._adjustOffsetFromHelper( o.cursorAt ); 25936 } 25937 25938 //Cache the former DOM position 25939 this.domPosition = { 25940 prev: this.currentItem.prev()[ 0 ], 25941 parent: this.currentItem.parent()[ 0 ] 25942 }; 25943 25944 // If the helper is not the original, hide the original so it's not playing any role during 25945 // the drag, won't cause anything bad this way 25946 if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { 25947 this.currentItem.hide(); 25948 } 25949 25950 //Create the placeholder 25951 this._createPlaceholder(); 25952 25953 //Get the next scrolling parent 25954 this.scrollParent = this.placeholder.scrollParent(); 25955 25956 $.extend( this.offset, { 25957 parent: this._getParentOffset() 25958 } ); 25959 25960 //Set a containment if given in the options 25961 if ( o.containment ) { 25962 this._setContainment(); 25963 } 25964 25965 if ( o.cursor && o.cursor !== "auto" ) { // cursor option 25966 body = this.document.find( "body" ); 25967 25968 // Support: IE 25969 this.storedCursor = body.css( "cursor" ); 25970 body.css( "cursor", o.cursor ); 25971 25972 this.storedStylesheet = 25973 $( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body ); 25974 } 25975 25976 // We need to make sure to grab the zIndex before setting the 25977 // opacity, because setting the opacity to anything lower than 1 25978 // causes the zIndex to change from "auto" to 0. 25979 if ( o.zIndex ) { // zIndex option 25980 if ( this.helper.css( "zIndex" ) ) { 25981 this._storedZIndex = this.helper.css( "zIndex" ); 25982 } 25983 this.helper.css( "zIndex", o.zIndex ); 25984 } 25985 25986 if ( o.opacity ) { // opacity option 25987 if ( this.helper.css( "opacity" ) ) { 25988 this._storedOpacity = this.helper.css( "opacity" ); 25989 } 25990 this.helper.css( "opacity", o.opacity ); 25991 } 25992 25993 //Prepare scrolling 25994 if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && 25995 this.scrollParent[ 0 ].tagName !== "HTML" ) { 25996 this.overflowOffset = this.scrollParent.offset(); 25997 } 25998 25999 //Call callbacks 26000 this._trigger( "start", event, this._uiHash() ); 26001 26002 //Recache the helper size 26003 if ( !this._preserveHelperProportions ) { 26004 this._cacheHelperProportions(); 26005 } 26006 26007 //Post "activate" events to possible containers 26008 if ( !noActivation ) { 26009 for ( i = this.containers.length - 1; i >= 0; i-- ) { 26010 this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); 26011 } 26012 } 26013 26014 //Prepare possible droppables 26015 if ( $.ui.ddmanager ) { 26016 $.ui.ddmanager.current = this; 26017 } 26018 26019 if ( $.ui.ddmanager && !o.dropBehaviour ) { 26020 $.ui.ddmanager.prepareOffsets( this, event ); 26021 } 26022 26023 this.dragging = true; 26024 26025 this._addClass( this.helper, "ui-sortable-helper" ); 26026 26027 //Move the helper, if needed 26028 if ( !this.helper.parent().is( this.appendTo ) ) { 26029 this.helper.detach().appendTo( this.appendTo ); 26030 26031 //Update position 26032 this.offset.parent = this._getParentOffset(); 26033 } 26034 26035 //Generate the original position 26036 this.position = this.originalPosition = this._generatePosition( event ); 26037 this.originalPageX = event.pageX; 26038 this.originalPageY = event.pageY; 26039 this.lastPositionAbs = this.positionAbs = this._convertPositionTo( "absolute" ); 26040 26041 this._mouseDrag( event ); 26042 26043 return true; 26044 26045 }, 26046 26047 _scroll: function( event ) { 26048 var o = this.options, 26049 scrolled = false;
vendor: 4,489 bytes, lines 26050-26192
26050 26051 if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && 26052 this.scrollParent[ 0 ].tagName !== "HTML" ) { 26053 26054 if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) - 26055 event.pageY < o.scrollSensitivity ) { 26056 this.scrollParent[ 0 ].scrollTop = 26057 scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed; 26058 } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) { 26059 this.scrollParent[ 0 ].scrollTop = 26060 scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed; 26061 } 26062 26063 if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) - 26064 event.pageX < o.scrollSensitivity ) { 26065 this.scrollParent[ 0 ].scrollLeft = scrolled = 26066 this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed; 26067 } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) { 26068 this.scrollParent[ 0 ].scrollLeft = scrolled = 26069 this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed; 26070 } 26071 26072 } else { 26073 26074 if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) { 26075 scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed ); 26076 } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) < 26077 o.scrollSensitivity ) { 26078 scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed ); 26079 } 26080 26081 if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) { 26082 scrolled = this.document.scrollLeft( 26083 this.document.scrollLeft() - o.scrollSpeed 26084 ); 26085 } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) < 26086 o.scrollSensitivity ) { 26087 scrolled = this.document.scrollLeft( 26088 this.document.scrollLeft() + o.scrollSpeed 26089 ); 26090 } 26091 26092 } 26093 26094 return scrolled; 26095 }, 26096 26097 _mouseDrag: function( event ) { 26098 var i, item, itemElement, intersection, 26099 o = this.options; 26100 26101 //Compute the helpers position 26102 this.position = this._generatePosition( event ); 26103 this.positionAbs = this._convertPositionTo( "absolute" ); 26104 26105 //Set the helper position 26106 if ( !this.options.axis || this.options.axis !== "y" ) { 26107 this.helper[ 0 ].style.left = this.position.left + "px"; 26108 } 26109 if ( !this.options.axis || this.options.axis !== "x" ) { 26110 this.helper[ 0 ].style.top = this.position.top + "px"; 26111 } 26112 26113 //Do scrolling 26114 if ( o.scroll ) { 26115 if ( this._scroll( event ) !== false ) { 26116 26117 //Update item positions used in position checks 26118 this._refreshItemPositions( true ); 26119 26120 if ( $.ui.ddmanager && !o.dropBehaviour ) { 26121 $.ui.ddmanager.prepareOffsets( this, event ); 26122 } 26123 } 26124 } 26125 26126 this.dragDirection = { 26127 vertical: this._getDragVerticalDirection(), 26128 horizontal: this._getDragHorizontalDirection() 26129 }; 26130 26131 //Rearrange 26132 for ( i = this.items.length - 1; i >= 0; i-- ) { 26133 26134 //Cache variables and intersection, continue if no intersection 26135 item = this.items[ i ]; 26136 itemElement = item.item[ 0 ]; 26137 intersection = this._intersectsWithPointer( item ); 26138 if ( !intersection ) { 26139 continue; 26140 } 26141 26142 // Only put the placeholder inside the current Container, skip all 26143 // items from other containers. This works because when moving 26144 // an item from one container to another the 26145 // currentContainer is switched before the placeholder is moved. 26146 // 26147 // Without this, moving items in "sub-sortables" can cause 26148 // the placeholder to jitter between the outer and inner container. 26149 if ( item.instance !== this.currentContainer ) { 26150 continue; 26151 } 26152 26153 // Cannot intersect with itself 26154 // no useless actions that have been done before 26155 // no action if the item moved is the parent of the item checked 26156 if ( itemElement !== this.currentItem[ 0 ] && 26157 this.placeholder[ intersection === 1 ? 26158 "next" : "prev" ]()[ 0 ] !== itemElement && 26159 !$.contains( this.placeholder[ 0 ], itemElement ) && 26160 ( this.options.type === "semi-dynamic" ? 26161 !$.contains( this.element[ 0 ], itemElement ) : 26162 true 26163 ) 26164 ) { 26165 26166 this.direction = intersection === 1 ? "down" : "up"; 26167 26168 if ( this.options.tolerance === "pointer" || 26169 this._intersectsWithSides( item ) ) { 26170 this._rearrange( event, item ); 26171 } else { 26172 break; 26173 } 26174 26175 this._trigger( "change", event, this._uiHash() ); 26176 break; 26177 } 26178 } 26179 26180 //Post events to containers 26181 this._contactContainers( event ); 26182 26183 //Interconnect with droppables 26184 if ( $.ui.ddmanager ) { 26185 $.ui.ddmanager.drag( this, event ); 26186 } 26187 26188 //Call callbacks 26189 this._trigger( "sort", event, this._uiHash() ); 26190 26191 this.lastPositionAbs = this.positionAbs; 26192 return false;
vendor: 5,063 bytes, lines 26193-26382
26193 26194 }, 26195 26196 _mouseStop: function( event, noPropagation ) { 26197 26198 if ( !event ) { 26199 return; 26200 } 26201 26202 //If we are using droppables, inform the manager about the drop 26203 if ( $.ui.ddmanager && !this.options.dropBehaviour ) { 26204 $.ui.ddmanager.drop( this, event ); 26205 } 26206 26207 if ( this.options.revert ) { 26208 var that = this, 26209 cur = this.placeholder.offset(), 26210 axis = this.options.axis, 26211 animation = {}; 26212 26213 if ( !axis || axis === "x" ) { 26214 animation.left = cur.left - this.offset.parent.left - this.margins.left + 26215 ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? 26216 0 : 26217 this.offsetParent[ 0 ].scrollLeft 26218 ); 26219 } 26220 if ( !axis || axis === "y" ) { 26221 animation.top = cur.top - this.offset.parent.top - this.margins.top + 26222 ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? 26223 0 : 26224 this.offsetParent[ 0 ].scrollTop 26225 ); 26226 } 26227 this.reverting = true; 26228 $( this.helper ).animate( 26229 animation, 26230 parseInt( this.options.revert, 10 ) || 500, 26231 function() { 26232 that._clear( event ); 26233 } 26234 ); 26235 } else { 26236 this._clear( event, noPropagation ); 26237 } 26238 26239 return false; 26240 26241 }, 26242 26243 cancel: function() { 26244 26245 if ( this.dragging ) { 26246 26247 this._mouseUp( new $.Event( "mouseup", { target: null } ) ); 26248 26249 if ( this.options.helper === "original" ) { 26250 this.currentItem.css( this._storedCSS ); 26251 this._removeClass( this.currentItem, "ui-sortable-helper" ); 26252 } else { 26253 this.currentItem.show(); 26254 } 26255 26256 //Post deactivating events to containers 26257 for ( var i = this.containers.length - 1; i >= 0; i-- ) { 26258 this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) ); 26259 if ( this.containers[ i ].containerCache.over ) { 26260 this.containers[ i ]._trigger( "out", null, this._uiHash( this ) ); 26261 this.containers[ i ].containerCache.over = 0; 26262 } 26263 } 26264 26265 } 26266 26267 if ( this.placeholder ) { 26268 26269 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, 26270 // it unbinds ALL events from the original node! 26271 if ( this.placeholder[ 0 ].parentNode ) { 26272 this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); 26273 } 26274 if ( this.options.helper !== "original" && this.helper && 26275 this.helper[ 0 ].parentNode ) { 26276 this.helper.remove(); 26277 } 26278 26279 $.extend( this, { 26280 helper: null, 26281 dragging: false, 26282 reverting: false, 26283 _noFinalSort: null 26284 } ); 26285 26286 if ( this.domPosition.prev ) { 26287 $( this.domPosition.prev ).after( this.currentItem ); 26288 } else { 26289 $( this.domPosition.parent ).prepend( this.currentItem ); 26290 } 26291 } 26292 26293 return this; 26294 26295 }, 26296 26297 serialize: function( o ) { 26298 26299 var items = this._getItemsAsjQuery( o && o.connected ), 26300 str = []; 26301 o = o || {}; 26302 26303 $( items ).each( function() { 26304 var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" ) 26305 .match( o.expression || ( /(.+)[\-=_](.+)/ ) ); 26306 if ( res ) { 26307 str.push( 26308 ( o.key || res[ 1 ] + "[]" ) + 26309 "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) ); 26310 } 26311 } ); 26312 26313 if ( !str.length && o.key ) { 26314 str.push( o.key + "=" ); 26315 } 26316 26317 return str.join( "&" ); 26318 26319 }, 26320 26321 toArray: function( o ) { 26322 26323 var items = this._getItemsAsjQuery( o && o.connected ), 26324 ret = []; 26325 26326 o = o || {}; 26327 26328 items.each( function() { 26329 ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" ); 26330 } ); 26331 return ret; 26332 26333 }, 26334 26335 /* Be careful with the following core functions */ 26336 _intersectsWith: function( item ) { 26337 26338 var x1 = this.positionAbs.left, 26339 x2 = x1 + this.helperProportions.width, 26340 y1 = this.positionAbs.top, 26341 y2 = y1 + this.helperProportions.height, 26342 l = item.left, 26343 r = l + item.width, 26344 t = item.top, 26345 b = t + item.height, 26346 dyClick = this.offset.click.top, 26347 dxClick = this.offset.click.left, 26348 isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && 26349 ( y1 + dyClick ) < b ), 26350 isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && 26351 ( x1 + dxClick ) < r ), 26352 isOverElement = isOverElementHeight && isOverElementWidth; 26353 26354 if ( this.options.tolerance === "pointer" || 26355 this.options.forcePointerForContainers || 26356 ( this.options.tolerance !== "pointer" && 26357 this.helperProportions[ this.floating ? "width" : "height" ] > 26358 item[ this.floating ? "width" : "height" ] ) 26359 ) { 26360 return isOverElement; 26361 } else { 26362 26363 return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half 26364 x2 - ( this.helperProportions.width / 2 ) < r && // Left Half 26365 t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half 26366 y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half 26367 26368 } 26369 }, 26370 26371 _intersectsWithPointer: function( item ) { 26372 var verticalDirection, horizontalDirection, 26373 isOverElementHeight = ( this.options.axis === "x" ) || 26374 this._isOverAxis( 26375 this.positionAbs.top + this.offset.click.top, item.top, item.height ), 26376 isOverElementWidth = ( this.options.axis === "y" ) || 26377 this._isOverAxis( 26378 this.positionAbs.left + this.offset.click.left, item.left, item.width ), 26379 isOverElement = isOverElementHeight && isOverElementWidth; 26380 26381 if ( !isOverElement ) { 26382 return false;
vendor: 8,518 bytes, lines 26383-26657
26383 } 26384 26385 verticalDirection = this.dragDirection.vertical; 26386 horizontalDirection = this.dragDirection.horizontal; 26387 26388 return this.floating ? 26389 ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) : 26390 ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) ); 26391 26392 }, 26393 26394 _intersectsWithSides: function( item ) { 26395 26396 var isOverBottomHalf = this._isOverAxis( this.positionAbs.top + 26397 this.offset.click.top, item.top + ( item.height / 2 ), item.height ), 26398 isOverRightHalf = this._isOverAxis( this.positionAbs.left + 26399 this.offset.click.left, item.left + ( item.width / 2 ), item.width ), 26400 verticalDirection = this.dragDirection.vertical, 26401 horizontalDirection = this.dragDirection.horizontal; 26402 26403 if ( this.floating && horizontalDirection ) { 26404 return ( ( horizontalDirection === "right" && isOverRightHalf ) || 26405 ( horizontalDirection === "left" && !isOverRightHalf ) ); 26406 } else { 26407 return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) || 26408 ( verticalDirection === "up" && !isOverBottomHalf ) ); 26409 } 26410 26411 }, 26412 26413 _getDragVerticalDirection: function() { 26414 var delta = this.positionAbs.top - this.lastPositionAbs.top; 26415 return delta !== 0 && ( delta > 0 ? "down" : "up" ); 26416 }, 26417 26418 _getDragHorizontalDirection: function() { 26419 var delta = this.positionAbs.left - this.lastPositionAbs.left; 26420 return delta !== 0 && ( delta > 0 ? "right" : "left" ); 26421 }, 26422 26423 refresh: function( event ) { 26424 this._refreshItems( event ); 26425 this._setHandleClassName(); 26426 this.refreshPositions(); 26427 return this; 26428 }, 26429 26430 _connectWith: function() { 26431 var options = this.options; 26432 return options.connectWith.constructor === String ? 26433 [ options.connectWith ] : 26434 options.connectWith; 26435 }, 26436 26437 _getItemsAsjQuery: function( connected ) { 26438 26439 var i, j, cur, inst, 26440 items = [], 26441 queries = [], 26442 connectWith = this._connectWith(); 26443 26444 if ( connectWith && connected ) { 26445 for ( i = connectWith.length - 1; i >= 0; i-- ) { 26446 cur = $( connectWith[ i ], this.document[ 0 ] ); 26447 for ( j = cur.length - 1; j >= 0; j-- ) { 26448 inst = $.data( cur[ j ], this.widgetFullName ); 26449 if ( inst && inst !== this && !inst.options.disabled ) { 26450 queries.push( [ typeof inst.options.items === "function" ? 26451 inst.options.items.call( inst.element ) : 26452 $( inst.options.items, inst.element ) 26453 .not( ".ui-sortable-helper" ) 26454 .not( ".ui-sortable-placeholder" ), inst ] ); 26455 } 26456 } 26457 } 26458 } 26459 26460 queries.push( [ typeof this.options.items === "function" ? 26461 this.options.items 26462 .call( this.element, null, { options: this.options, item: this.currentItem } ) : 26463 $( this.options.items, this.element ) 26464 .not( ".ui-sortable-helper" ) 26465 .not( ".ui-sortable-placeholder" ), this ] ); 26466 26467 function addItems() { 26468 items.push( this ); 26469 } 26470 for ( i = queries.length - 1; i >= 0; i-- ) { 26471 queries[ i ][ 0 ].each( addItems ); 26472 } 26473 26474 return $( items ); 26475 26476 }, 26477 26478 _removeCurrentsFromItems: function() { 26479 26480 var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" ); 26481 26482 this.items = $.grep( this.items, function( item ) { 26483 for ( var j = 0; j < list.length; j++ ) { 26484 if ( list[ j ] === item.item[ 0 ] ) { 26485 return false; 26486 } 26487 } 26488 return true; 26489 } ); 26490 26491 }, 26492 26493 _refreshItems: function( event ) { 26494 26495 this.items = []; 26496 this.containers = [ this ]; 26497 26498 var i, j, cur, inst, targetData, _queries, item, queriesLength, 26499 items = this.items, 26500 queries = [ [ typeof this.options.items === "function" ? 26501 this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) : 26502 $( this.options.items, this.element ), this ] ], 26503 connectWith = this._connectWith(); 26504 26505 //Shouldn't be run the first time through due to massive slow-down 26506 if ( connectWith && this.ready ) { 26507 for ( i = connectWith.length - 1; i >= 0; i-- ) { 26508 cur = $( connectWith[ i ], this.document[ 0 ] ); 26509 for ( j = cur.length - 1; j >= 0; j-- ) { 26510 inst = $.data( cur[ j ], this.widgetFullName ); 26511 if ( inst && inst !== this && !inst.options.disabled ) { 26512 queries.push( [ typeof inst.options.items === "function" ? 26513 inst.options.items 26514 .call( inst.element[ 0 ], event, { item: this.currentItem } ) : 26515 $( inst.options.items, inst.element ), inst ] ); 26516 this.containers.push( inst ); 26517 } 26518 } 26519 } 26520 } 26521 26522 for ( i = queries.length - 1; i >= 0; i-- ) { 26523 targetData = queries[ i ][ 1 ]; 26524 _queries = queries[ i ][ 0 ]; 26525 26526 for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) { 26527 item = $( _queries[ j ] ); 26528 26529 // Data for target checking (mouse manager) 26530 item.data( this.widgetName + "-item", targetData ); 26531 26532 items.push( { 26533 item: item, 26534 instance: targetData, 26535 width: 0, height: 0, 26536 left: 0, top: 0 26537 } ); 26538 } 26539 } 26540 26541 }, 26542 26543 _refreshItemPositions: function( fast ) { 26544 var i, item, t, p; 26545 26546 for ( i = this.items.length - 1; i >= 0; i-- ) { 26547 item = this.items[ i ]; 26548 26549 //We ignore calculating positions of all connected containers when we're not over them 26550 if ( this.currentContainer && item.instance !== this.currentContainer && 26551 item.item[ 0 ] !== this.currentItem[ 0 ] ) { 26552 continue; 26553 } 26554 26555 t = this.options.toleranceElement ? 26556 $( this.options.toleranceElement, item.item ) : 26557 item.item; 26558 26559 if ( !fast ) { 26560 item.width = t.outerWidth(); 26561 item.height = t.outerHeight(); 26562 } 26563 26564 p = t.offset(); 26565 item.left = p.left; 26566 item.top = p.top; 26567 } 26568 }, 26569 26570 refreshPositions: function( fast ) { 26571 26572 // Determine whether items are being displayed horizontally 26573 this.floating = this.items.length ? 26574 this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) : 26575 false; 26576 26577 // This has to be redone because due to the item being moved out/into the offsetParent, 26578 // the offsetParent's position will change 26579 if ( this.offsetParent && this.helper ) { 26580 this.offset.parent = this._getParentOffset(); 26581 } 26582 26583 this._refreshItemPositions( fast ); 26584 26585 var i, p; 26586 26587 if ( this.options.custom && this.options.custom.refreshContainers ) { 26588 this.options.custom.refreshContainers.call( this ); 26589 } else { 26590 for ( i = this.containers.length - 1; i >= 0; i-- ) { 26591 p = this.containers[ i ].element.offset(); 26592 this.containers[ i ].containerCache.left = p.left; 26593 this.containers[ i ].containerCache.top = p.top; 26594 this.containers[ i ].containerCache.width = 26595 this.containers[ i ].element.outerWidth(); 26596 this.containers[ i ].containerCache.height = 26597 this.containers[ i ].element.outerHeight(); 26598 } 26599 } 26600 26601 return this; 26602 }, 26603 26604 _createPlaceholder: function( that ) { 26605 that = that || this; 26606 var className, nodeName, 26607 o = that.options; 26608 26609 if ( !o.placeholder || o.placeholder.constructor === String ) { 26610 className = o.placeholder; 26611 nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(); 26612 o.placeholder = { 26613 element: function() { 26614 26615 var element = $( "<" + nodeName + ">", that.document[ 0 ] ); 26616 26617 that._addClass( element, "ui-sortable-placeholder", 26618 className || that.currentItem[ 0 ].className ) 26619 ._removeClass( element, "ui-sortable-helper" ); 26620 26621 if ( nodeName === "tbody" ) { 26622 that._createTrPlaceholder( 26623 that.currentItem.find( "tr" ).eq( 0 ), 26624 $( "<tr>", that.document[ 0 ] ).appendTo( element ) 26625 ); 26626 } else if ( nodeName === "tr" ) { 26627 that._createTrPlaceholder( that.currentItem, element ); 26628 } else if ( nodeName === "img" ) { 26629 element.attr( "src", that.currentItem.attr( "src" ) ); 26630 } 26631 26632 if ( !className ) { 26633 element.css( "visibility", "hidden" ); 26634 } 26635 26636 return element; 26637 }, 26638 update: function( container, p ) { 26639 26640 // 1. If a className is set as 'placeholder option, we don't force sizes - 26641 // the class is responsible for that 26642 // 2. The option 'forcePlaceholderSize can be enabled to force it even if a 26643 // class name is specified 26644 if ( className && !o.forcePlaceholderSize ) { 26645 return; 26646 } 26647 26648 // If the element doesn't have a actual height or width by itself (without 26649 // styles coming from a stylesheet), it receives the inline height and width 26650 // from the dragged item. Or, if it's a tbody or tr, it's going to have a height 26651 // anyway since we're populating them with <td>s above, but they're unlikely to 26652 // be the correct height on their own if the row heights are dynamic, so we'll 26653 // always assign the height of the dragged item given forcePlaceholderSize 26654 // is true. 26655 if ( !p.height() || ( o.forcePlaceholderSize && 26656 ( nodeName === "tbody" || nodeName === "tr" ) ) ) { 26657 p.height(
vendor: 10,145 bytes, lines 26658-26965
26658 that.currentItem.innerHeight() - 26659 parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) - 26660 parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) ); 26661 } 26662 if ( !p.width() ) { 26663 p.width( 26664 that.currentItem.innerWidth() - 26665 parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) - 26666 parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) ); 26667 } 26668 } 26669 }; 26670 } 26671 26672 //Create the placeholder 26673 that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) ); 26674 26675 //Append it after the actual current item 26676 that.currentItem.after( that.placeholder ); 26677 26678 //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) 26679 o.placeholder.update( that, that.placeholder ); 26680 26681 }, 26682 26683 _createTrPlaceholder: function( sourceTr, targetTr ) { 26684 var that = this; 26685 26686 sourceTr.children().each( function() { 26687 $( "<td> </td>", that.document[ 0 ] ) 26688 .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) 26689 .appendTo( targetTr ); 26690 } ); 26691 }, 26692 26693 _contactContainers: function( event ) { 26694 var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, 26695 floating, axis, 26696 innermostContainer = null, 26697 innermostIndex = null; 26698 26699 // Get innermost container that intersects with item 26700 for ( i = this.containers.length - 1; i >= 0; i-- ) { 26701 26702 // Never consider a container that's located within the item itself 26703 if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) { 26704 continue; 26705 } 26706 26707 if ( this._intersectsWith( this.containers[ i ].containerCache ) ) { 26708 26709 // If we've already found a container and it's more "inner" than this, then continue 26710 if ( innermostContainer && 26711 $.contains( 26712 this.containers[ i ].element[ 0 ], 26713 innermostContainer.element[ 0 ] ) ) { 26714 continue; 26715 } 26716 26717 innermostContainer = this.containers[ i ]; 26718 innermostIndex = i; 26719 26720 } else { 26721 26722 // container doesn't intersect. trigger "out" event if necessary 26723 if ( this.containers[ i ].containerCache.over ) { 26724 this.containers[ i ]._trigger( "out", event, this._uiHash( this ) ); 26725 this.containers[ i ].containerCache.over = 0; 26726 } 26727 } 26728 26729 } 26730 26731 // If no intersecting containers found, return 26732 if ( !innermostContainer ) { 26733 return; 26734 } 26735 26736 // Move the item into the container if it's not there already 26737 if ( this.containers.length === 1 ) { 26738 if ( !this.containers[ innermostIndex ].containerCache.over ) { 26739 this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); 26740 this.containers[ innermostIndex ].containerCache.over = 1; 26741 } 26742 } else { 26743 26744 // When entering a new container, we will find the item with the least distance and 26745 // append our item near it 26746 dist = 10000; 26747 itemWithLeastDistance = null; 26748 floating = innermostContainer.floating || this._isFloating( this.currentItem ); 26749 posProperty = floating ? "left" : "top"; 26750 sizeProperty = floating ? "width" : "height"; 26751 axis = floating ? "pageX" : "pageY"; 26752 26753 for ( j = this.items.length - 1; j >= 0; j-- ) { 26754 if ( !$.contains( 26755 this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] ) 26756 ) { 26757 continue; 26758 } 26759 if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) { 26760 continue; 26761 } 26762 26763 cur = this.items[ j ].item.offset()[ posProperty ]; 26764 nearBottom = false; 26765 if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) { 26766 nearBottom = true; 26767 } 26768 26769 if ( Math.abs( event[ axis ] - cur ) < dist ) { 26770 dist = Math.abs( event[ axis ] - cur ); 26771 itemWithLeastDistance = this.items[ j ]; 26772 this.direction = nearBottom ? "up" : "down"; 26773 } 26774 } 26775 26776 //Check if dropOnEmpty is enabled 26777 if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) { 26778 return; 26779 } 26780 26781 if ( this.currentContainer === this.containers[ innermostIndex ] ) { 26782 if ( !this.currentContainer.containerCache.over ) { 26783 this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() ); 26784 this.currentContainer.containerCache.over = 1; 26785 } 26786 return; 26787 } 26788 26789 if ( itemWithLeastDistance ) { 26790 this._rearrange( event, itemWithLeastDistance, null, true ); 26791 } else { 26792 this._rearrange( event, null, this.containers[ innermostIndex ].element, true ); 26793 } 26794 this._trigger( "change", event, this._uiHash() ); 26795 this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) ); 26796 this.currentContainer = this.containers[ innermostIndex ]; 26797 26798 //Update the placeholder 26799 this.options.placeholder.update( this.currentContainer, this.placeholder ); 26800 26801 //Update scrollParent 26802 this.scrollParent = this.placeholder.scrollParent(); 26803 26804 //Update overflowOffset 26805 if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && 26806 this.scrollParent[ 0 ].tagName !== "HTML" ) { 26807 this.overflowOffset = this.scrollParent.offset(); 26808 } 26809 26810 this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); 26811 this.containers[ innermostIndex ].containerCache.over = 1; 26812 } 26813 26814 }, 26815 26816 _createHelper: function( event ) { 26817 26818 var o = this.options, 26819 helper = typeof o.helper === "function" ? 26820 $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) : 26821 ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem ); 26822 26823 //Add the helper to the DOM if that didn't happen already 26824 if ( !helper.parents( "body" ).length ) { 26825 this.appendTo[ 0 ].appendChild( helper[ 0 ] ); 26826 } 26827 26828 if ( helper[ 0 ] === this.currentItem[ 0 ] ) { 26829 this._storedCSS = { 26830 width: this.currentItem[ 0 ].style.width, 26831 height: this.currentItem[ 0 ].style.height, 26832 position: this.currentItem.css( "position" ), 26833 top: this.currentItem.css( "top" ), 26834 left: this.currentItem.css( "left" ) 26835 }; 26836 } 26837 26838 if ( !helper[ 0 ].style.width || o.forceHelperSize ) { 26839 helper.width( this.currentItem.width() ); 26840 } 26841 if ( !helper[ 0 ].style.height || o.forceHelperSize ) { 26842 helper.height( this.currentItem.height() ); 26843 } 26844 26845 return helper; 26846 26847 }, 26848 26849 _adjustOffsetFromHelper: function( obj ) { 26850 if ( typeof obj === "string" ) { 26851 obj = obj.split( " " ); 26852 } 26853 if ( Array.isArray( obj ) ) { 26854 obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 }; 26855 } 26856 if ( "left" in obj ) { 26857 this.offset.click.left = obj.left + this.margins.left; 26858 } 26859 if ( "right" in obj ) { 26860 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; 26861 } 26862 if ( "top" in obj ) { 26863 this.offset.click.top = obj.top + this.margins.top; 26864 } 26865 if ( "bottom" in obj ) { 26866 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; 26867 } 26868 }, 26869 26870 _getParentOffset: function() { 26871 26872 //Get the offsetParent and cache its position 26873 this.offsetParent = this.helper.offsetParent(); 26874 var po = this.offsetParent.offset(); 26875 26876 // This is a special case where we need to modify a offset calculated on start, since the 26877 // following happened: 26878 // 1. The position of the helper is absolute, so it's position is calculated based on the 26879 // next positioned parent 26880 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't 26881 // the document, which means that the scroll is included in the initial calculation of the 26882 // offset of the parent, and never recalculated upon drag 26883 if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] && 26884 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) { 26885 po.left += this.scrollParent.scrollLeft(); 26886 po.top += this.scrollParent.scrollTop(); 26887 } 26888 26889 // This needs to be actually done for all browsers, since pageX/pageY includes this 26890 // information with an ugly IE fix 26891 if ( this.offsetParent[ 0 ] === this.document[ 0 ].body || 26892 ( this.offsetParent[ 0 ].tagName && 26893 this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) { 26894 po = { top: 0, left: 0 }; 26895 } 26896 26897 return { 26898 top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ), 26899 left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 ) 26900 }; 26901 26902 }, 26903 26904 _getRelativeOffset: function() { 26905 26906 if ( this.cssPosition === "relative" ) { 26907 var p = this.currentItem.position(); 26908 return { 26909 top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) + 26910 this.scrollParent.scrollTop(), 26911 left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) + 26912 this.scrollParent.scrollLeft() 26913 }; 26914 } else { 26915 return { top: 0, left: 0 }; 26916 } 26917 26918 }, 26919 26920 _cacheMargins: function() { 26921 this.margins = { 26922 left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ), 26923 top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 ) 26924 }; 26925 }, 26926 26927 _cacheHelperProportions: function() { 26928 this.helperProportions = { 26929 width: this.helper.outerWidth(), 26930 height: this.helper.outerHeight() 26931 }; 26932 }, 26933 26934 _setContainment: function() { 26935 26936 var ce, co, over, 26937 o = this.options; 26938 if ( o.containment === "parent" ) { 26939 o.containment = this.helper[ 0 ].parentNode; 26940 } 26941 if ( o.containment === "document" || o.containment === "window" ) { 26942 this.containment = [ 26943 0 - this.offset.relative.left - this.offset.parent.left, 26944 0 - this.offset.relative.top - this.offset.parent.top, 26945 o.containment === "document" ? 26946 this.document.width() : 26947 this.window.width() - this.helperProportions.width - this.margins.left, 26948 ( o.containment === "document" ? 26949 ( this.document.height() || document.body.parentNode.scrollHeight ) : 26950 this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight 26951 ) - this.helperProportions.height - this.margins.top 26952 ]; 26953 } 26954 26955 if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) { 26956 ce = $( o.containment )[ 0 ]; 26957 co = $( o.containment ).offset(); 26958 over = ( $( ce ).css( "overflow" ) !== "hidden" ); 26959 26960 this.containment = [ 26961 co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) + 26962 ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left, 26963 co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) + 26964 ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top, 26965 co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth )
vendor: 1,747 bytes, lines 26965-27017
26965: ce.offsetWidth ) - 26966 ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) - 26967 ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) - 26968 this.helperProportions.width - this.margins.left, 26969 co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - 26970 ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) - 26971 ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) - 26972 this.helperProportions.height - this.margins.top 26973 ]; 26974 } 26975 26976 }, 26977 26978 _convertPositionTo: function( d, pos ) { 26979 26980 if ( !pos ) { 26981 pos = this.position; 26982 } 26983 var mod = d === "absolute" ? 1 : -1, 26984 scroll = this.cssPosition === "absolute" && 26985 !( this.scrollParent[ 0 ] !== this.document[ 0 ] && 26986 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? 26987 this.offsetParent : 26988 this.scrollParent, 26989 scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); 26990 26991 return { 26992 top: ( 26993 26994 // The absolute mouse position 26995 pos.top + 26996 26997 // Only for relative positioned nodes: Relative offset from element to offset parent 26998 this.offset.relative.top * mod + 26999 27000 // The offsetParent's offset without borders (offset + border) 27001 this.offset.parent.top * mod - 27002 ( ( this.cssPosition === "fixed" ? 27003 -this.scrollParent.scrollTop() : 27004 ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod ) 27005 ), 27006 left: ( 27007 27008 // The absolute mouse position 27009 pos.left + 27010 27011 // Only for relative positioned nodes: Relative offset from element to offset parent 27012 this.offset.relative.left * mod + 27013 27014 // The offsetParent's offset without borders (offset + border) 27015 this.offset.parent.left * mod - 27016 ( ( this.cssPosition === "fixed" ? 27017 -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
vendor: 4,632 bytes, lines 27018-27161
27018 scroll.scrollLeft() ) * mod ) 27019 ) 27020 }; 27021 27022 }, 27023 27024 _generatePosition: function( event ) { 27025 27026 var top, left, 27027 o = this.options, 27028 pageX = event.pageX, 27029 pageY = event.pageY, 27030 scroll = this.cssPosition === "absolute" && 27031 !( this.scrollParent[ 0 ] !== this.document[ 0 ] && 27032 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? 27033 this.offsetParent : 27034 this.scrollParent, 27035 scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); 27036 27037 // This is another very weird special case that only happens for relative elements: 27038 // 1. If the css position is relative 27039 // 2. and the scroll parent is the document or similar to the offset parent 27040 // we have to refresh the relative offset during the scroll so there are no jumps 27041 if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] && 27042 this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) { 27043 this.offset.relative = this._getRelativeOffset(); 27044 } 27045 27046 /* 27047 * - Position constraining - 27048 * Constrain the position to a mix of grid, containment. 27049 */ 27050 27051 if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options 27052 27053 if ( this.containment ) { 27054 if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) { 27055 pageX = this.containment[ 0 ] + this.offset.click.left; 27056 } 27057 if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) { 27058 pageY = this.containment[ 1 ] + this.offset.click.top; 27059 } 27060 if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) { 27061 pageX = this.containment[ 2 ] + this.offset.click.left; 27062 } 27063 if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) { 27064 pageY = this.containment[ 3 ] + this.offset.click.top; 27065 } 27066 } 27067 27068 if ( o.grid ) { 27069 top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) / 27070 o.grid[ 1 ] ) * o.grid[ 1 ]; 27071 pageY = this.containment ? 27072 ( ( top - this.offset.click.top >= this.containment[ 1 ] && 27073 top - this.offset.click.top <= this.containment[ 3 ] ) ? 27074 top : 27075 ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ? 27076 top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : 27077 top; 27078 27079 left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) / 27080 o.grid[ 0 ] ) * o.grid[ 0 ]; 27081 pageX = this.containment ? 27082 ( ( left - this.offset.click.left >= this.containment[ 0 ] && 27083 left - this.offset.click.left <= this.containment[ 2 ] ) ? 27084 left : 27085 ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ? 27086 left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : 27087 left; 27088 } 27089 27090 } 27091 27092 return { 27093 top: ( 27094 27095 // The absolute mouse position 27096 pageY - 27097 27098 // Click offset (relative to the element) 27099 this.offset.click.top - 27100 27101 // Only for relative positioned nodes: Relative offset from element to offset parent 27102 this.offset.relative.top - 27103 27104 // The offsetParent's offset without borders (offset + border) 27105 this.offset.parent.top + 27106 ( ( this.cssPosition === "fixed" ? 27107 -this.scrollParent.scrollTop() : 27108 ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) ) 27109 ), 27110 left: ( 27111 27112 // The absolute mouse position 27113 pageX - 27114 27115 // Click offset (relative to the element) 27116 this.offset.click.left - 27117 27118 // Only for relative positioned nodes: Relative offset from element to offset parent 27119 this.offset.relative.left - 27120 27121 // The offsetParent's offset without borders (offset + border) 27122 this.offset.parent.left + 27123 ( ( this.cssPosition === "fixed" ? 27124 -this.scrollParent.scrollLeft() : 27125 scrollIsRootNode ? 0 : scroll.scrollLeft() ) ) 27126 ) 27127 }; 27128 27129 }, 27130 27131 _rearrange: function( event, i, a, hardRefresh ) { 27132 27133 if ( a ) { 27134 a[ 0 ].appendChild( this.placeholder[ 0 ] ); 27135 } else { 27136 i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ], 27137 ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) ); 27138 } 27139 27140 //Various things done here to improve the performance: 27141 // 1. we create a setTimeout, that calls refreshPositions 27142 // 2. on the instance, we have a counter variable, that get's higher after every append 27143 // 3. on the local scope, we copy the counter variable, and check in the timeout, 27144 // if it's still the same 27145 // 4. this lets only the last addition to the timeout stack through 27146 this.counter = this.counter ? ++this.counter : 1; 27147 var counter = this.counter; 27148 27149 this._delay( function() { 27150 if ( counter === this.counter ) { 27151 27152 //Precompute after each DOM insertion, NOT on mousemove 27153 this.refreshPositions( !hardRefresh ); 27154 } 27155 } ); 27156 27157 }, 27158 27159 _clear: function( event, noPropagation ) { 27160 27161 this.reverting = false;
vendor: 4,281 bytes, lines 27162-27306
27162 27163 // We delay all events that have to be triggered to after the point where the placeholder 27164 // has been removed and everything else normalized again 27165 var i, 27166 delayedTriggers = []; 27167 27168 // We first have to update the dom position of the actual currentItem 27169 // Note: don't do it if the current item is already removed (by a user), or it gets 27170 // reappended (see #4088) 27171 if ( !this._noFinalSort && this.currentItem.parent().length ) { 27172 this.placeholder.before( this.currentItem ); 27173 } 27174 this._noFinalSort = null; 27175 27176 if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) { 27177 for ( i in this._storedCSS ) { 27178 if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) { 27179 this._storedCSS[ i ] = ""; 27180 } 27181 } 27182 this.currentItem.css( this._storedCSS ); 27183 this._removeClass( this.currentItem, "ui-sortable-helper" ); 27184 } else { 27185 this.currentItem.show(); 27186 } 27187 27188 if ( this.fromOutside && !noPropagation ) { 27189 delayedTriggers.push( function( event ) { 27190 this._trigger( "receive", event, this._uiHash( this.fromOutside ) ); 27191 } ); 27192 } 27193 if ( ( this.fromOutside || 27194 this.domPosition.prev !== 27195 this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] || 27196 this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) { 27197 27198 // Trigger update callback if the DOM position has changed 27199 delayedTriggers.push( function( event ) { 27200 this._trigger( "update", event, this._uiHash() ); 27201 } ); 27202 } 27203 27204 // Check if the items Container has Changed and trigger appropriate 27205 // events. 27206 if ( this !== this.currentContainer ) { 27207 if ( !noPropagation ) { 27208 delayedTriggers.push( function( event ) { 27209 this._trigger( "remove", event, this._uiHash() ); 27210 } ); 27211 delayedTriggers.push( ( function( c ) { 27212 return function( event ) { 27213 c._trigger( "receive", event, this._uiHash( this ) ); 27214 }; 27215 } ).call( this, this.currentContainer ) ); 27216 delayedTriggers.push( ( function( c ) { 27217 return function( event ) { 27218 c._trigger( "update", event, this._uiHash( this ) ); 27219 }; 27220 } ).call( this, this.currentContainer ) ); 27221 } 27222 } 27223 27224 //Post events to containers 27225 function delayEvent( type, instance, container ) { 27226 return function( event ) { 27227 container._trigger( type, event, instance._uiHash( instance ) ); 27228 }; 27229 } 27230 for ( i = this.containers.length - 1; i >= 0; i-- ) { 27231 if ( !noPropagation ) { 27232 delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) ); 27233 } 27234 if ( this.containers[ i ].containerCache.over ) { 27235 delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) ); 27236 this.containers[ i ].containerCache.over = 0; 27237 } 27238 } 27239 27240 //Do what was originally in plugins 27241 if ( this.storedCursor ) { 27242 this.document.find( "body" ).css( "cursor", this.storedCursor ); 27243 this.storedStylesheet.remove(); 27244 } 27245 if ( this._storedOpacity ) { 27246 this.helper.css( "opacity", this._storedOpacity ); 27247 } 27248 if ( this._storedZIndex ) { 27249 this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex ); 27250 } 27251 27252 this.dragging = false; 27253 27254 if ( !noPropagation ) { 27255 this._trigger( "beforeStop", event, this._uiHash() ); 27256 } 27257 27258 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, 27259 // it unbinds ALL events from the original node! 27260 this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); 27261 27262 if ( !this.cancelHelperRemoval ) { 27263 if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { 27264 this.helper.remove(); 27265 } 27266 this.helper = null; 27267 } 27268 27269 if ( !noPropagation ) { 27270 for ( i = 0; i < delayedTriggers.length; i++ ) { 27271 27272 // Trigger all delayed events 27273 delayedTriggers[ i ].call( this, event ); 27274 } 27275 this._trigger( "stop", event, this._uiHash() ); 27276 } 27277 27278 this.fromOutside = false; 27279 return !this.cancelHelperRemoval; 27280 27281 }, 27282 27283 _trigger: function() { 27284 if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) { 27285 this.cancel(); 27286 } 27287 }, 27288 27289 _uiHash: function( _inst ) { 27290 var inst = _inst || this; 27291 return { 27292 helper: inst.helper, 27293 placeholder: inst.placeholder || $( [] ), 27294 position: inst.position, 27295 originalPosition: inst.originalPosition, 27296 offset: inst.positionAbs, 27297 item: inst.currentItem, 27298 sender: _inst ? _inst.element : null 27299 }; 27300 } 27301 27302} ); 27303 27304 27305/*! 27306 * jQuery UI Spinner 1.1
273063.1 27307 * http://jqueryui.com 27308 * 27309 * Copyright jQuery Foundation and other contributors 27310 * Released under the MIT license. 27311 * http://jquery.org/license 27312 */ 27313 27314//>>label: Spinner 27315//>>group: Widgets 27316//>>description: Displays buttons to easily input numbers via the keyboard or mouse. 27317//>>docs: http://api.jqueryui.com/spinner/ 27318//>>demos: http://jqueryui.com/spinner/ 27319//>>css.structure: ../../themes/base/core.css 27320//>>css.structure: ../../themes/base/spinner.css 27321//>>css.theme: ../../themes/base/theme.css 27322 27323 27324function spinnerModifier( fn ) { 27325 return function() { 27326 var previous = this.element.val(); 27327 fn.apply( this, arguments ); 27328 this._refresh(); 27329 if ( previous !== this.element.val() ) { 27330 this._trigger( "change" ); 27331 } 27332 }; 27333} 27334 27335$.widget( "ui.spinner", { 27336 version: "1.13.1
vendor: 13,310 bytes, lines 27336-27867
27336", 27337 defaultElement: "<input>", 27338 widgetEventPrefix: "spin", 27339 options: { 27340 classes: { 27341 "ui-spinner": "ui-corner-all", 27342 "ui-spinner-down": "ui-corner-br", 27343 "ui-spinner-up": "ui-corner-tr" 27344 }, 27345 culture: null, 27346 icons: { 27347 down: "ui-icon-triangle-1-s", 27348 up: "ui-icon-triangle-1-n" 27349 }, 27350 incremental: true, 27351 max: null, 27352 min: null, 27353 numberFormat: null, 27354 page: 10, 27355 step: 1, 27356 27357 change: null, 27358 spin: null, 27359 start: null, 27360 stop: null 27361 }, 27362 27363 _create: function() { 27364 27365 // handle string values that need to be parsed 27366 this._setOption( "max", this.options.max ); 27367 this._setOption( "min", this.options.min ); 27368 this._setOption( "step", this.options.step ); 27369 27370 // Only format if there is a value, prevents the field from being marked 27371 // as invalid in Firefox, see #9573. 27372 if ( this.value() !== "" ) { 27373 27374 // Format the value, but don't constrain. 27375 this._value( this.element.val(), true ); 27376 } 27377 27378 this._draw(); 27379 this._on( this._events ); 27380 this._refresh(); 27381 27382 // Turning off autocomplete prevents the browser from remembering the 27383 // value when navigating through history, so we re-enable autocomplete 27384 // if the page is unloaded before the widget is destroyed. #7790 27385 this._on( this.window, { 27386 beforeunload: function() { 27387 this.element.removeAttr( "autocomplete" ); 27388 } 27389 } ); 27390 }, 27391 27392 _getCreateOptions: function() { 27393 var options = this._super(); 27394 var element = this.element; 27395 27396 $.each( [ "min", "max", "step" ], function( i, option ) { 27397 var value = element.attr( option ); 27398 if ( value != null && value.length ) { 27399 options[ option ] = value; 27400 } 27401 } ); 27402 27403 return options; 27404 }, 27405 27406 _events: { 27407 keydown: function( event ) { 27408 if ( this._start( event ) && this._keydown( event ) ) { 27409 event.preventDefault(); 27410 } 27411 }, 27412 keyup: "_stop", 27413 focus: function() { 27414 this.previous = this.element.val(); 27415 }, 27416 blur: function( event ) { 27417 if ( this.cancelBlur ) { 27418 delete this.cancelBlur; 27419 return; 27420 } 27421 27422 this._stop(); 27423 this._refresh(); 27424 if ( this.previous !== this.element.val() ) { 27425 this._trigger( "change", event ); 27426 } 27427 }, 27428 mousewheel: function( event, delta ) { 27429 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ); 27430 var isActive = this.element[ 0 ] === activeElement; 27431 27432 if ( !isActive || !delta ) { 27433 return; 27434 } 27435 27436 if ( !this.spinning && !this._start( event ) ) { 27437 return false; 27438 } 27439 27440 this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event ); 27441 clearTimeout( this.mousewheelTimer ); 27442 this.mousewheelTimer = this._delay( function() { 27443 if ( this.spinning ) { 27444 this._stop( event ); 27445 } 27446 }, 100 ); 27447 event.preventDefault(); 27448 }, 27449 "mousedown .ui-spinner-button": function( event ) { 27450 var previous; 27451 27452 // We never want the buttons to have focus; whenever the user is 27453 // interacting with the spinner, the focus should be on the input. 27454 // If the input is focused then this.previous is properly set from 27455 // when the input first received focus. If the input is not focused 27456 // then we need to set this.previous based on the value before spinning. 27457 previous = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ? 27458 this.previous : this.element.val(); 27459 function checkFocus() { 27460 var isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ); 27461 if ( !isActive ) { 27462 this.element.trigger( "focus" ); 27463 this.previous = previous; 27464 27465 // support: IE 27466 // IE sets focus asynchronously, so we need to check if focus 27467 // moved off of the input because the user clicked on the button. 27468 this._delay( function() { 27469 this.previous = previous; 27470 } ); 27471 } 27472 } 27473 27474 // Ensure focus is on (or stays on) the text field 27475 event.preventDefault(); 27476 checkFocus.call( this ); 27477 27478 // Support: IE 27479 // IE doesn't prevent moving focus even with event.preventDefault() 27480 // so we set a flag to know when we should ignore the blur event 27481 // and check (again) if focus moved off of the input. 27482 this.cancelBlur = true; 27483 this._delay( function() { 27484 delete this.cancelBlur; 27485 checkFocus.call( this ); 27486 } ); 27487 27488 if ( this._start( event ) === false ) { 27489 return; 27490 } 27491 27492 this._repeat( null, $( event.currentTarget ) 27493 .hasClass( "ui-spinner-up" ) ? 1 : -1, event ); 27494 }, 27495 "mouseup .ui-spinner-button": "_stop", 27496 "mouseenter .ui-spinner-button": function( event ) { 27497 27498 // button will add ui-state-active if mouse was down while mouseleave and kept down 27499 if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) { 27500 return; 27501 } 27502 27503 if ( this._start( event ) === false ) { 27504 return false; 27505 } 27506 this._repeat( null, $( event.currentTarget ) 27507 .hasClass( "ui-spinner-up" ) ? 1 : -1, event ); 27508 }, 27509 27510 // TODO: do we really want to consider this a stop? 27511 // shouldn't we just stop the repeater and wait until mouseup before 27512 // we trigger the stop event? 27513 "mouseleave .ui-spinner-button": "_stop" 27514 }, 27515 27516 // Support mobile enhanced option and make backcompat more sane 27517 _enhance: function() { 27518 this.uiSpinner = this.element 27519 .attr( "autocomplete", "off" ) 27520 .wrap( "<span>" ) 27521 .parent() 27522 27523 // Add buttons 27524 .append( 27525 "<a></a><a></a>" 27526 ); 27527 }, 27528 27529 _draw: function() { 27530 this._enhance(); 27531 27532 this._addClass( this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content" ); 27533 this._addClass( "ui-spinner-input" ); 27534 27535 this.element.attr( "role", "spinbutton" ); 27536 27537 // Button bindings 27538 this.buttons = this.uiSpinner.children( "a" ) 27539 .attr( "tabIndex", -1 ) 27540 .attr( "aria-hidden", true ) 27541 .button( { 27542 classes: { 27543 "ui-button": "" 27544 } 27545 } ); 27546 27547 // TODO: Right now button does not support classes this is already updated in button PR 27548 this._removeClass( this.buttons, "ui-corner-all" ); 27549 27550 this._addClass( this.buttons.first(), "ui-spinner-button ui-spinner-up" ); 27551 this._addClass( this.buttons.last(), "ui-spinner-button ui-spinner-down" ); 27552 this.buttons.first().button( { 27553 "icon": this.options.icons.up, 27554 "showLabel": false 27555 } ); 27556 this.buttons.last().button( { 27557 "icon": this.options.icons.down, 27558 "showLabel": false 27559 } ); 27560 27561 // IE 6 doesn't understand height: 50% for the buttons 27562 // unless the wrapper has an explicit height 27563 if ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) && 27564 this.uiSpinner.height() > 0 ) { 27565 this.uiSpinner.height( this.uiSpinner.height() ); 27566 } 27567 }, 27568 27569 _keydown: function( event ) { 27570 var options = this.options, 27571 keyCode = $.ui.keyCode; 27572 27573 switch ( event.keyCode ) { 27574 case keyCode.UP: 27575 this._repeat( null, 1, event ); 27576 return true; 27577 case keyCode.DOWN: 27578 this._repeat( null, -1, event ); 27579 return true; 27580 case keyCode.PAGE_UP: 27581 this._repeat( null, options.page, event ); 27582 return true; 27583 case keyCode.PAGE_DOWN: 27584 this._repeat( null, -options.page, event ); 27585 return true; 27586 } 27587 27588 return false; 27589 }, 27590 27591 _start: function( event ) { 27592 if ( !this.spinning && this._trigger( "start", event ) === false ) { 27593 return false; 27594 } 27595 27596 if ( !this.counter ) { 27597 this.counter = 1; 27598 } 27599 this.spinning = true; 27600 return true; 27601 }, 27602 27603 _repeat: function( i, steps, event ) { 27604 i = i || 500; 27605 27606 clearTimeout( this.timer ); 27607 this.timer = this._delay( function() { 27608 this._repeat( 40, steps, event ); 27609 }, i ); 27610 27611 this._spin( steps * this.options.step, event ); 27612 }, 27613 27614 _spin: function( step, event ) { 27615 var value = this.value() || 0; 27616 27617 if ( !this.counter ) { 27618 this.counter = 1; 27619 } 27620 27621 value = this._adjustValue( value + step * this._increment( this.counter ) ); 27622 27623 if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false ) { 27624 this._value( value ); 27625 this.counter++; 27626 } 27627 }, 27628 27629 _increment: function( i ) { 27630 var incremental = this.options.incremental; 27631 27632 if ( incremental ) { 27633 return typeof incremental === "function" ? 27634 incremental( i ) : 27635 Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 ); 27636 } 27637 27638 return 1; 27639 }, 27640 27641 _precision: function() { 27642 var precision = this._precisionOf( this.options.step ); 27643 if ( this.options.min !== null ) { 27644 precision = Math.max( precision, this._precisionOf( this.options.min ) ); 27645 } 27646 return precision; 27647 }, 27648 27649 _precisionOf: function( num ) { 27650 var str = num.toString(), 27651 decimal = str.indexOf( "." ); 27652 return decimal === -1 ? 0 : str.length - decimal - 1; 27653 }, 27654 27655 _adjustValue: function( value ) { 27656 var base, aboveMin, 27657 options = this.options; 27658 27659 // Make sure we're at a valid step 27660 // - find out where we are relative to the base (min or 0) 27661 base = options.min !== null ? options.min : 0; 27662 aboveMin = value - base; 27663 27664 // - round to the nearest step 27665 aboveMin = Math.round( aboveMin / options.step ) * options.step; 27666 27667 // - rounding is based on 0, so adjust back to our base 27668 value = base + aboveMin; 27669 27670 // Fix precision from bad JS floating point math 27671 value = parseFloat( value.toFixed( this._precision() ) ); 27672 27673 // Clamp the value 27674 if ( options.max !== null && value > options.max ) { 27675 return options.max; 27676 } 27677 if ( options.min !== null && value < options.min ) { 27678 return options.min; 27679 } 27680 27681 return value; 27682 }, 27683 27684 _stop: function( event ) { 27685 if ( !this.spinning ) { 27686 return; 27687 } 27688 27689 clearTimeout( this.timer ); 27690 clearTimeout( this.mousewheelTimer ); 27691 this.counter = 0; 27692 this.spinning = false; 27693 this._trigger( "stop", event ); 27694 }, 27695 27696 _setOption: function( key, value ) { 27697 var prevValue, first, last; 27698 27699 if ( key === "culture" || key === "numberFormat" ) { 27700 prevValue = this._parse( this.element.val() ); 27701 this.options[ key ] = value; 27702 this.element.val( this._format( prevValue ) ); 27703 return; 27704 } 27705 27706 if ( key === "max" || key === "min" || key === "step" ) { 27707 if ( typeof value === "string" ) { 27708 value = this._parse( value ); 27709 } 27710 } 27711 if ( key === "icons" ) { 27712 first = this.buttons.first().find( ".ui-icon" ); 27713 this._removeClass( first, null, this.options.icons.up ); 27714 this._addClass( first, null, value.up ); 27715 last = this.buttons.last().find( ".ui-icon" ); 27716 this._removeClass( last, null, this.options.icons.down ); 27717 this._addClass( last, null, value.down ); 27718 } 27719 27720 this._super( key, value ); 27721 }, 27722 27723 _setOptionDisabled: function( value ) { 27724 this._super( value ); 27725 27726 this._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value ); 27727 this.element.prop( "disabled", !!value ); 27728 this.buttons.button( value ? "disable" : "enable" ); 27729 }, 27730 27731 _setOptions: spinnerModifier( function( options ) { 27732 this._super( options ); 27733 } ), 27734 27735 _parse: function( val ) { 27736 if ( typeof val === "string" && val !== "" ) { 27737 val = window.Globalize && this.options.numberFormat ? 27738 Globalize.parseFloat( val, 10, this.options.culture ) : +val; 27739 } 27740 return val === "" || isNaN( val ) ? null : val; 27741 }, 27742 27743 _format: function( value ) { 27744 if ( value === "" ) { 27745 return ""; 27746 } 27747 return window.Globalize && this.options.numberFormat ? 27748 Globalize.format( value, this.options.numberFormat, this.options.culture ) : 27749 value; 27750 }, 27751 27752 _refresh: function() { 27753 this.element.attr( { 27754 "aria-valuemin": this.options.min, 27755 "aria-valuemax": this.options.max, 27756 27757 // TODO: what should we do with values that can't be parsed? 27758 "aria-valuenow": this._parse( this.element.val() ) 27759 } ); 27760 }, 27761 27762 isValid: function() { 27763 var value = this.value(); 27764 27765 // Null is invalid 27766 if ( value === null ) { 27767 return false; 27768 } 27769 27770 // If value gets adjusted, it's invalid 27771 return value === this._adjustValue( value ); 27772 }, 27773 27774 // Update the value without triggering change 27775 _value: function( value, allowAny ) { 27776 var parsed; 27777 if ( value !== "" ) { 27778 parsed = this._parse( value ); 27779 if ( parsed !== null ) { 27780 if ( !allowAny ) { 27781 parsed = this._adjustValue( parsed ); 27782 } 27783 value = this._format( parsed ); 27784 } 27785 } 27786 this.element.val( value ); 27787 this._refresh(); 27788 }, 27789 27790 _destroy: function() { 27791 this.element 27792 .prop( "disabled", false ) 27793 .removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" ); 27794 27795 this.uiSpinner.replaceWith( this.element ); 27796 }, 27797 27798 stepUp: spinnerModifier( function( steps ) { 27799 this._stepUp( steps ); 27800 } ), 27801 _stepUp: function( steps ) { 27802 if ( this._start() ) { 27803 this._spin( ( steps || 1 ) * this.options.step ); 27804 this._stop(); 27805 } 27806 }, 27807 27808 stepDown: spinnerModifier( function( steps ) { 27809 this._stepDown( steps ); 27810 } ), 27811 _stepDown: function( steps ) { 27812 if ( this._start() ) { 27813 this._spin( ( steps || 1 ) * -this.options.step ); 27814 this._stop(); 27815 } 27816 }, 27817 27818 pageUp: spinnerModifier( function( pages ) { 27819 this._stepUp( ( pages || 1 ) * this.options.page ); 27820 } ), 27821 27822 pageDown: spinnerModifier( function( pages ) { 27823 this._stepDown( ( pages || 1 ) * this.options.page ); 27824 } ), 27825 27826 value: function( newVal ) { 27827 if ( !arguments.length ) { 27828 return this._parse( this.element.val() ); 27829 } 27830 spinnerModifier( this._value ).call( this, newVal ); 27831 }, 27832 27833 widget: function() { 27834 return this.uiSpinner; 27835 } 27836} ); 27837 27838// DEPRECATED 27839// TODO: switch return back to widget declaration at top of file when this is removed 27840if ( $.uiBackCompat !== false ) { 27841 27842 // Backcompat for spinner html extension points 27843 $.widget( "ui.spinner", $.ui.spinner, { 27844 _enhance: function() { 27845 this.uiSpinner = this.element 27846 .attr( "autocomplete", "off" ) 27847 .wrap( this._uiSpinnerHtml() ) 27848 .parent() 27849 27850 // Add buttons 27851 .append( this._buttonHtml() ); 27852 }, 27853 _uiSpinnerHtml: function() { 27854 return "<span>"; 27855 }, 27856 27857 _buttonHtml: function() { 27858 return "<a></a><a></a>"; 27859 } 27860 } ); 27861} 27862 27863var widgetsSpinner = $.ui.spinner; 27864 27865 27866/*! 27867 * jQuery UI Tabs 1.13.
278671 27868 * http://jqueryui.com 27869 * 27870 * Copyright jQuery Foundation and other contributors 27871 * Released under the MIT license. 27872 * http://jquery.org/license 27873 */ 27874 27875//>>label: Tabs 27876//>>group: Widgets 27877//>>description: Transforms a set of container elements into a tab structure. 27878//>>docs: http://api.jqueryui.com/tabs/ 27879//>>demos: http://jqueryui.com/tabs/ 27880//>>css.structure: ../../themes/base/core.css 27881//>>css.structure: ../../themes/base/tabs.css 27882//>>css.theme: ../../themes/base/theme.css 27883 27884 27885$.widget( "ui.tabs", { 27886 version: "1.13.1
vendor: 12,261 bytes, lines 27886-28353
27886", 27887 delay: 300, 27888 options: { 27889 active: null, 27890 classes: { 27891 "ui-tabs": "ui-corner-all", 27892 "ui-tabs-nav": "ui-corner-all", 27893 "ui-tabs-panel": "ui-corner-bottom", 27894 "ui-tabs-tab": "ui-corner-top" 27895 }, 27896 collapsible: false, 27897 event: "click", 27898 heightStyle: "content", 27899 hide: null, 27900 show: null, 27901 27902 // Callbacks 27903 activate: null, 27904 beforeActivate: null, 27905 beforeLoad: null, 27906 load: null 27907 }, 27908 27909 _isLocal: ( function() { 27910 var rhash = /#.*$/; 27911 27912 return function( anchor ) { 27913 var anchorUrl, locationUrl; 27914 27915 anchorUrl = anchor.href.replace( rhash, "" ); 27916 locationUrl = location.href.replace( rhash, "" ); 27917 27918 // Decoding may throw an error if the URL isn't UTF-8 (#9518) 27919 try { 27920 anchorUrl = decodeURIComponent( anchorUrl ); 27921 } catch ( error ) {} 27922 try { 27923 locationUrl = decodeURIComponent( locationUrl ); 27924 } catch ( error ) {} 27925 27926 return anchor.hash.length > 1 && anchorUrl === locationUrl; 27927 }; 27928 } )(), 27929 27930 _create: function() { 27931 var that = this, 27932 options = this.options; 27933 27934 this.running = false; 27935 27936 this._addClass( "ui-tabs", "ui-widget ui-widget-content" ); 27937 this._toggleClass( "ui-tabs-collapsible", null, options.collapsible ); 27938 27939 this._processTabs(); 27940 options.active = this._initialActive(); 27941 27942 // Take disabling tabs via class attribute from HTML 27943 // into account and update option properly. 27944 if ( Array.isArray( options.disabled ) ) { 27945 options.disabled = $.uniqueSort( options.disabled.concat( 27946 $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { 27947 return that.tabs.index( li ); 27948 } ) 27949 ) ).sort(); 27950 } 27951 27952 // Check for length avoids error when initializing empty list 27953 if ( this.options.active !== false && this.anchors.length ) { 27954 this.active = this._findActive( options.active ); 27955 } else { 27956 this.active = $(); 27957 } 27958 27959 this._refresh(); 27960 27961 if ( this.active.length ) { 27962 this.load( options.active ); 27963 } 27964 }, 27965 27966 _initialActive: function() { 27967 var active = this.options.active, 27968 collapsible = this.options.collapsible, 27969 locationHash = location.hash.substring( 1 ); 27970 27971 if ( active === null ) { 27972 27973 // check the fragment identifier in the URL 27974 if ( locationHash ) { 27975 this.tabs.each( function( i, tab ) { 27976 if ( $( tab ).attr( "aria-controls" ) === locationHash ) { 27977 active = i; 27978 return false; 27979 } 27980 } ); 27981 } 27982 27983 // Check for a tab marked active via a class 27984 if ( active === null ) { 27985 active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); 27986 } 27987 27988 // No active tab, set to false 27989 if ( active === null || active === -1 ) { 27990 active = this.tabs.length ? 0 : false; 27991 } 27992 } 27993 27994 // Handle numbers: negative, out of range 27995 if ( active !== false ) { 27996 active = this.tabs.index( this.tabs.eq( active ) ); 27997 if ( active === -1 ) { 27998 active = collapsible ? false : 0; 27999 } 28000 } 28001 28002 // Don't allow collapsible: false and active: false 28003 if ( !collapsible && active === false && this.anchors.length ) { 28004 active = 0; 28005 } 28006 28007 return active; 28008 }, 28009 28010 _getCreateEventData: function() { 28011 return { 28012 tab: this.active, 28013 panel: !this.active.length ? $() : this._getPanelForTab( this.active ) 28014 }; 28015 }, 28016 28017 _tabKeydown: function( event ) { 28018 var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ), 28019 selectedIndex = this.tabs.index( focusedTab ), 28020 goingForward = true; 28021 28022 if ( this._handlePageNav( event ) ) { 28023 return; 28024 } 28025 28026 switch ( event.keyCode ) { 28027 case $.ui.keyCode.RIGHT: 28028 case $.ui.keyCode.DOWN: 28029 selectedIndex++; 28030 break; 28031 case $.ui.keyCode.UP: 28032 case $.ui.keyCode.LEFT: 28033 goingForward = false; 28034 selectedIndex--; 28035 break; 28036 case $.ui.keyCode.END: 28037 selectedIndex = this.anchors.length - 1; 28038 break; 28039 case $.ui.keyCode.HOME: 28040 selectedIndex = 0; 28041 break; 28042 case $.ui.keyCode.SPACE: 28043 28044 // Activate only, no collapsing 28045 event.preventDefault(); 28046 clearTimeout( this.activating ); 28047 this._activate( selectedIndex ); 28048 return; 28049 case $.ui.keyCode.ENTER: 28050 28051 // Toggle (cancel delayed activation, allow collapsing) 28052 event.preventDefault(); 28053 clearTimeout( this.activating ); 28054 28055 // Determine if we should collapse or activate 28056 this._activate( selectedIndex === this.options.active ? false : selectedIndex ); 28057 return; 28058 default: 28059 return; 28060 } 28061 28062 // Focus the appropriate tab, based on which key was pressed 28063 event.preventDefault(); 28064 clearTimeout( this.activating ); 28065 selectedIndex = this._focusNextTab( selectedIndex, goingForward ); 28066 28067 // Navigating with control/command key will prevent automatic activation 28068 if ( !event.ctrlKey && !event.metaKey ) { 28069 28070 // Update aria-selected immediately so that AT think the tab is already selected. 28071 // Otherwise AT may confuse the user by stating that they need to activate the tab, 28072 // but the tab will already be activated by the time the announcement finishes. 28073 focusedTab.attr( "aria-selected", "false" ); 28074 this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); 28075 28076 this.activating = this._delay( function() { 28077 this.option( "active", selectedIndex ); 28078 }, this.delay ); 28079 } 28080 }, 28081 28082 _panelKeydown: function( event ) { 28083 if ( this._handlePageNav( event ) ) { 28084 return; 28085 } 28086 28087 // Ctrl+up moves focus to the current tab 28088 if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { 28089 event.preventDefault(); 28090 this.active.trigger( "focus" ); 28091 } 28092 }, 28093 28094 // Alt+page up/down moves focus to the previous/next tab (and activates) 28095 _handlePageNav: function( event ) { 28096 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { 28097 this._activate( this._focusNextTab( this.options.active - 1, false ) ); 28098 return true; 28099 } 28100 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { 28101 this._activate( this._focusNextTab( this.options.active + 1, true ) ); 28102 return true; 28103 } 28104 }, 28105 28106 _findNextTab: function( index, goingForward ) { 28107 var lastTabIndex = this.tabs.length - 1; 28108 28109 function constrain() { 28110 if ( index > lastTabIndex ) { 28111 index = 0; 28112 } 28113 if ( index < 0 ) { 28114 index = lastTabIndex; 28115 } 28116 return index; 28117 } 28118 28119 while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { 28120 index = goingForward ? index + 1 : index - 1; 28121 } 28122 28123 return index; 28124 }, 28125 28126 _focusNextTab: function( index, goingForward ) { 28127 index = this._findNextTab( index, goingForward ); 28128 this.tabs.eq( index ).trigger( "focus" ); 28129 return index; 28130 }, 28131 28132 _setOption: function( key, value ) { 28133 if ( key === "active" ) { 28134 28135 // _activate() will handle invalid values and update this.options 28136 this._activate( value ); 28137 return; 28138 } 28139 28140 this._super( key, value ); 28141 28142 if ( key === "collapsible" ) { 28143 this._toggleClass( "ui-tabs-collapsible", null, value ); 28144 28145 // Setting collapsible: false while collapsed; open first panel 28146 if ( !value && this.options.active === false ) { 28147 this._activate( 0 ); 28148 } 28149 } 28150 28151 if ( key === "event" ) { 28152 this._setupEvents( value ); 28153 } 28154 28155 if ( key === "heightStyle" ) { 28156 this._setupHeightStyle( value ); 28157 } 28158 }, 28159 28160 _sanitizeSelector: function( hash ) { 28161 return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; 28162 }, 28163 28164 refresh: function() { 28165 var options = this.options, 28166 lis = this.tablist.children( ":has(a[href])" ); 28167 28168 // Get disabled tabs from class attribute from HTML 28169 // this will get converted to a boolean if needed in _refresh() 28170 options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { 28171 return lis.index( tab ); 28172 } ); 28173 28174 this._processTabs(); 28175 28176 // Was collapsed or no tabs 28177 if ( options.active === false || !this.anchors.length ) { 28178 options.active = false; 28179 this.active = $(); 28180 28181 // was active, but active tab is gone 28182 } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { 28183 28184 // all remaining tabs are disabled 28185 if ( this.tabs.length === options.disabled.length ) { 28186 options.active = false; 28187 this.active = $(); 28188 28189 // activate previous tab 28190 } else { 28191 this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); 28192 } 28193 28194 // was active, active tab still exists 28195 } else { 28196 28197 // make sure active index is correct 28198 options.active = this.tabs.index( this.active ); 28199 } 28200 28201 this._refresh(); 28202 }, 28203 28204 _refresh: function() { 28205 this._setOptionDisabled( this.options.disabled ); 28206 this._setupEvents( this.options.event ); 28207 this._setupHeightStyle( this.options.heightStyle ); 28208 28209 this.tabs.not( this.active ).attr( { 28210 "aria-selected": "false", 28211 "aria-expanded": "false", 28212 tabIndex: -1 28213 } ); 28214 this.panels.not( this._getPanelForTab( this.active ) ) 28215 .hide() 28216 .attr( { 28217 "aria-hidden": "true" 28218 } ); 28219 28220 // Make sure one tab is in the tab order 28221 if ( !this.active.length ) { 28222 this.tabs.eq( 0 ).attr( "tabIndex", 0 ); 28223 } else { 28224 this.active 28225 .attr( { 28226 "aria-selected": "true", 28227 "aria-expanded": "true", 28228 tabIndex: 0 28229 } ); 28230 this._addClass( this.active, "ui-tabs-active", "ui-state-active" ); 28231 this._getPanelForTab( this.active ) 28232 .show() 28233 .attr( { 28234 "aria-hidden": "false" 28235 } ); 28236 } 28237 }, 28238 28239 _processTabs: function() { 28240 var that = this, 28241 prevTabs = this.tabs, 28242 prevAnchors = this.anchors, 28243 prevPanels = this.panels; 28244 28245 this.tablist = this._getList().attr( "role", "tablist" ); 28246 this._addClass( this.tablist, "ui-tabs-nav", 28247 "ui-helper-reset ui-helper-clearfix ui-widget-header" ); 28248 28249 // Prevent users from focusing disabled tabs via click 28250 this.tablist 28251 .on( "mousedown" + this.eventNamespace, "> li", function( event ) { 28252 if ( $( this ).is( ".ui-state-disabled" ) ) { 28253 event.preventDefault(); 28254 } 28255 } ) 28256 28257 // Support: IE <9 28258 // Preventing the default action in mousedown doesn't prevent IE 28259 // from focusing the element, so if the anchor gets focused, blur. 28260 // We don't have to worry about focusing the previously focused 28261 // element since clicking on a non-focusable element should focus 28262 // the body anyway. 28263 .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() { 28264 if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { 28265 this.blur(); 28266 } 28267 } ); 28268 28269 this.tabs = this.tablist.find( "> li:has(a[href])" ) 28270 .attr( { 28271 role: "tab", 28272 tabIndex: -1 28273 } ); 28274 this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" ); 28275 28276 this.anchors = this.tabs.map( function() { 28277 return $( "a", this )[ 0 ]; 28278 } ) 28279 .attr( { 28280 tabIndex: -1 28281 } ); 28282 this._addClass( this.anchors, "ui-tabs-anchor" ); 28283 28284 this.panels = $(); 28285 28286 this.anchors.each( function( i, anchor ) { 28287 var selector, panel, panelId, 28288 anchorId = $( anchor ).uniqueId().attr( "id" ), 28289 tab = $( anchor ).closest( "li" ), 28290 originalAriaControls = tab.attr( "aria-controls" ); 28291 28292 // Inline tab 28293 if ( that._isLocal( anchor ) ) { 28294 selector = anchor.hash; 28295 panelId = selector.substring( 1 ); 28296 panel = that.element.find( that._sanitizeSelector( selector ) ); 28297 28298 // remote tab 28299 } else { 28300 28301 // If the tab doesn't already have aria-controls, 28302 // generate an id by using a throw-away element 28303 panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id; 28304 selector = "#" + panelId; 28305 panel = that.element.find( selector ); 28306 if ( !panel.length ) { 28307 panel = that._createPanel( panelId ); 28308 panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); 28309 } 28310 panel.attr( "aria-live", "polite" ); 28311 } 28312 28313 if ( panel.length ) { 28314 that.panels = that.panels.add( panel ); 28315 } 28316 if ( originalAriaControls ) { 28317 tab.data( "ui-tabs-aria-controls", originalAriaControls ); 28318 } 28319 tab.attr( { 28320 "aria-controls": panelId, 28321 "aria-labelledby": anchorId 28322 } ); 28323 panel.attr( "aria-labelledby", anchorId ); 28324 } ); 28325 28326 this.panels.attr( "role", "tabpanel" ); 28327 this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" ); 28328 28329 // Avoid memory leaks (#10056) 28330 if ( prevTabs ) { 28331 this._off( prevTabs.not( this.tabs ) ); 28332 this._off( prevAnchors.not( this.anchors ) ); 28333 this._off( prevPanels.not( this.panels ) ); 28334 } 28335 }, 28336 28337 // Allow overriding how to find the list for rare usage scenarios (#7715) 28338 _getList: function() { 28339 return this.tablist || this.element.find( "ol, ul" ).eq( 0 ); 28340 }, 28341 28342 _createPanel: function( id ) { 28343 return $( "<div>" ) 28344 .attr( "id", id ) 28345 .data( "ui-tabs-destroy", true ); 28346 }, 28347 28348 _setOptionDisabled: function( disabled ) { 28349 var currentItem, li, i; 28350 28351 if ( Array.isArray( disabled ) ) { 28352 if ( !disabled.length ) { 28353 disabled = false;
vendor: 6,148 bytes, lines 28354-28582
28354 } else if ( disabled.length === this.anchors.length ) { 28355 disabled = true; 28356 } 28357 } 28358 28359 // Disable tabs 28360 for ( i = 0; ( li = this.tabs[ i ] ); i++ ) { 28361 currentItem = $( li ); 28362 if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { 28363 currentItem.attr( "aria-disabled", "true" ); 28364 this._addClass( currentItem, null, "ui-state-disabled" ); 28365 } else { 28366 currentItem.removeAttr( "aria-disabled" ); 28367 this._removeClass( currentItem, null, "ui-state-disabled" ); 28368 } 28369 } 28370 28371 this.options.disabled = disabled; 28372 28373 this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, 28374 disabled === true ); 28375 }, 28376 28377 _setupEvents: function( event ) { 28378 var events = {}; 28379 if ( event ) { 28380 $.each( event.split( " " ), function( index, eventName ) { 28381 events[ eventName ] = "_eventHandler"; 28382 } ); 28383 } 28384 28385 this._off( this.anchors.add( this.tabs ).add( this.panels ) ); 28386 28387 // Always prevent the default action, even when disabled 28388 this._on( true, this.anchors, { 28389 click: function( event ) { 28390 event.preventDefault(); 28391 } 28392 } ); 28393 this._on( this.anchors, events ); 28394 this._on( this.tabs, { keydown: "_tabKeydown" } ); 28395 this._on( this.panels, { keydown: "_panelKeydown" } ); 28396 28397 this._focusable( this.tabs ); 28398 this._hoverable( this.tabs ); 28399 }, 28400 28401 _setupHeightStyle: function( heightStyle ) { 28402 var maxHeight, 28403 parent = this.element.parent(); 28404 28405 if ( heightStyle === "fill" ) { 28406 maxHeight = parent.height(); 28407 maxHeight -= this.element.outerHeight() - this.element.height(); 28408 28409 this.element.siblings( ":visible" ).each( function() { 28410 var elem = $( this ), 28411 position = elem.css( "position" ); 28412 28413 if ( position === "absolute" || position === "fixed" ) { 28414 return; 28415 } 28416 maxHeight -= elem.outerHeight( true ); 28417 } ); 28418 28419 this.element.children().not( this.panels ).each( function() { 28420 maxHeight -= $( this ).outerHeight( true ); 28421 } ); 28422 28423 this.panels.each( function() { 28424 $( this ).height( Math.max( 0, maxHeight - 28425 $( this ).innerHeight() + $( this ).height() ) ); 28426 } ) 28427 .css( "overflow", "auto" ); 28428 } else if ( heightStyle === "auto" ) { 28429 maxHeight = 0; 28430 this.panels.each( function() { 28431 maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); 28432 } ).height( maxHeight ); 28433 } 28434 }, 28435 28436 _eventHandler: function( event ) { 28437 var options = this.options, 28438 active = this.active, 28439 anchor = $( event.currentTarget ), 28440 tab = anchor.closest( "li" ), 28441 clickedIsActive = tab[ 0 ] === active[ 0 ], 28442 collapsing = clickedIsActive && options.collapsible, 28443 toShow = collapsing ? $() : this._getPanelForTab( tab ), 28444 toHide = !active.length ? $() : this._getPanelForTab( active ), 28445 eventData = { 28446 oldTab: active, 28447 oldPanel: toHide, 28448 newTab: collapsing ? $() : tab, 28449 newPanel: toShow 28450 }; 28451 28452 event.preventDefault(); 28453 28454 if ( tab.hasClass( "ui-state-disabled" ) || 28455 28456 // tab is already loading 28457 tab.hasClass( "ui-tabs-loading" ) || 28458 28459 // can't switch durning an animation 28460 this.running || 28461 28462 // click on active header, but not collapsible 28463 ( clickedIsActive && !options.collapsible ) || 28464 28465 // allow canceling activation 28466 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { 28467 return; 28468 } 28469 28470 options.active = collapsing ? false : this.tabs.index( tab ); 28471 28472 this.active = clickedIsActive ? $() : tab; 28473 if ( this.xhr ) { 28474 this.xhr.abort(); 28475 } 28476 28477 if ( !toHide.length && !toShow.length ) { 28478 $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); 28479 } 28480 28481 if ( toShow.length ) { 28482 this.load( this.tabs.index( tab ), event ); 28483 } 28484 this._toggle( event, eventData ); 28485 }, 28486 28487 // Handles show/hide for selecting tabs 28488 _toggle: function( event, eventData ) { 28489 var that = this, 28490 toShow = eventData.newPanel, 28491 toHide = eventData.oldPanel; 28492 28493 this.running = true; 28494 28495 function complete() { 28496 that.running = false; 28497 that._trigger( "activate", event, eventData ); 28498 } 28499 28500 function show() { 28501 that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" ); 28502 28503 if ( toShow.length && that.options.show ) { 28504 that._show( toShow, that.options.show, complete ); 28505 } else { 28506 toShow.show(); 28507 complete(); 28508 } 28509 } 28510 28511 // Start out by hiding, then showing, then completing 28512 if ( toHide.length && this.options.hide ) { 28513 this._hide( toHide, this.options.hide, function() { 28514 that._removeClass( eventData.oldTab.closest( "li" ), 28515 "ui-tabs-active", "ui-state-active" ); 28516 show(); 28517 } ); 28518 } else { 28519 this._removeClass( eventData.oldTab.closest( "li" ), 28520 "ui-tabs-active", "ui-state-active" ); 28521 toHide.hide(); 28522 show(); 28523 } 28524 28525 toHide.attr( "aria-hidden", "true" ); 28526 eventData.oldTab.attr( { 28527 "aria-selected": "false", 28528 "aria-expanded": "false" 28529 } ); 28530 28531 // If we're switching tabs, remove the old tab from the tab order. 28532 // If we're opening from collapsed state, remove the previous tab from the tab order. 28533 // If we're collapsing, then keep the collapsing tab in the tab order. 28534 if ( toShow.length && toHide.length ) { 28535 eventData.oldTab.attr( "tabIndex", -1 ); 28536 } else if ( toShow.length ) { 28537 this.tabs.filter( function() { 28538 return $( this ).attr( "tabIndex" ) === 0; 28539 } ) 28540 .attr( "tabIndex", -1 ); 28541 } 28542 28543 toShow.attr( "aria-hidden", "false" ); 28544 eventData.newTab.attr( { 28545 "aria-selected": "true", 28546 "aria-expanded": "true", 28547 tabIndex: 0 28548 } ); 28549 }, 28550 28551 _activate: function( index ) { 28552 var anchor, 28553 active = this._findActive( index ); 28554 28555 // Trying to activate the already active panel 28556 if ( active[ 0 ] === this.active[ 0 ] ) { 28557 return; 28558 } 28559 28560 // Trying to collapse, simulate a click on the current active header 28561 if ( !active.length ) { 28562 active = this.active; 28563 } 28564 28565 anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; 28566 this._eventHandler( { 28567 target: anchor, 28568 currentTarget: anchor, 28569 preventDefault: $.noop 28570 } ); 28571 }, 28572 28573 _findActive: function( index ) { 28574 return index === false ? $() : this.tabs.eq( index ); 28575 }, 28576 28577 _getIndex: function( index ) { 28578 28579 // meta-function to give users option to provide a href string instead of a numerical index. 28580 if ( typeof index === "string" ) { 28581 index = this.anchors.index( this.anchors.filter( "[href$='" + 28582 $.
vendor: 4,911 bytes, lines 28582-28790
28582escapeSelector( index ) + "']" ) ); 28583 } 28584 28585 return index; 28586 }, 28587 28588 _destroy: function() { 28589 if ( this.xhr ) { 28590 this.xhr.abort(); 28591 } 28592 28593 this.tablist 28594 .removeAttr( "role" ) 28595 .off( this.eventNamespace ); 28596 28597 this.anchors 28598 .removeAttr( "role tabIndex" ) 28599 .removeUniqueId(); 28600 28601 this.tabs.add( this.panels ).each( function() { 28602 if ( $.data( this, "ui-tabs-destroy" ) ) { 28603 $( this ).remove(); 28604 } else { 28605 $( this ).removeAttr( "role tabIndex " + 28606 "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" ); 28607 } 28608 } ); 28609 28610 this.tabs.each( function() { 28611 var li = $( this ), 28612 prev = li.data( "ui-tabs-aria-controls" ); 28613 if ( prev ) { 28614 li 28615 .attr( "aria-controls", prev ) 28616 .removeData( "ui-tabs-aria-controls" ); 28617 } else { 28618 li.removeAttr( "aria-controls" ); 28619 } 28620 } ); 28621 28622 this.panels.show(); 28623 28624 if ( this.options.heightStyle !== "content" ) { 28625 this.panels.css( "height", "" ); 28626 } 28627 }, 28628 28629 enable: function( index ) { 28630 var disabled = this.options.disabled; 28631 if ( disabled === false ) { 28632 return; 28633 } 28634 28635 if ( index === undefined ) { 28636 disabled = false; 28637 } else { 28638 index = this._getIndex( index ); 28639 if ( Array.isArray( disabled ) ) { 28640 disabled = $.map( disabled, function( num ) { 28641 return num !== index ? num : null; 28642 } ); 28643 } else { 28644 disabled = $.map( this.tabs, function( li, num ) { 28645 return num !== index ? num : null; 28646 } ); 28647 } 28648 } 28649 this._setOptionDisabled( disabled ); 28650 }, 28651 28652 disable: function( index ) { 28653 var disabled = this.options.disabled; 28654 if ( disabled === true ) { 28655 return; 28656 } 28657 28658 if ( index === undefined ) { 28659 disabled = true; 28660 } else { 28661 index = this._getIndex( index ); 28662 if ( $.inArray( index, disabled ) !== -1 ) { 28663 return; 28664 } 28665 if ( Array.isArray( disabled ) ) { 28666 disabled = $.merge( [ index ], disabled ).sort(); 28667 } else { 28668 disabled = [ index ]; 28669 } 28670 } 28671 this._setOptionDisabled( disabled ); 28672 }, 28673 28674 load: function( index, event ) { 28675 index = this._getIndex( index ); 28676 var that = this, 28677 tab = this.tabs.eq( index ), 28678 anchor = tab.find( ".ui-tabs-anchor" ), 28679 panel = this._getPanelForTab( tab ), 28680 eventData = { 28681 tab: tab, 28682 panel: panel 28683 }, 28684 complete = function( jqXHR, status ) { 28685 if ( status === "abort" ) { 28686 that.panels.stop( false, true ); 28687 } 28688 28689 that._removeClass( tab, "ui-tabs-loading" ); 28690 panel.removeAttr( "aria-busy" ); 28691 28692 if ( jqXHR === that.xhr ) { 28693 delete that.xhr; 28694 } 28695 }; 28696 28697 // Not remote 28698 if ( this._isLocal( anchor[ 0 ] ) ) { 28699 return; 28700 } 28701 28702 this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); 28703 28704 // Support: jQuery <1.8 28705 // jQuery <1.8 returns false if the request is canceled in beforeSend, 28706 // but as of 1.8, $.ajax() always returns a jqXHR object. 28707 if ( this.xhr && this.xhr.statusText !== "canceled" ) { 28708 this._addClass( tab, "ui-tabs-loading" ); 28709 panel.attr( "aria-busy", "true" ); 28710 28711 this.xhr 28712 .done( function( response, status, jqXHR ) { 28713 28714 // support: jQuery <1.8 28715 // http://bugs.jquery.com/ticket/11778 28716 setTimeout( function() { 28717 panel.html( response ); 28718 that._trigger( "load", event, eventData ); 28719 28720 complete( jqXHR, status ); 28721 }, 1 ); 28722 } ) 28723 .fail( function( jqXHR, status ) { 28724 28725 // support: jQuery <1.8 28726 // http://bugs.jquery.com/ticket/11778 28727 setTimeout( function() { 28728 complete( jqXHR, status ); 28729 }, 1 ); 28730 } ); 28731 } 28732 }, 28733 28734 _ajaxSettings: function( anchor, event, eventData ) { 28735 var that = this; 28736 return { 28737 28738 // Support: IE <11 only 28739 // Strip any hash that exists to prevent errors with the Ajax request 28740 url: anchor.attr( "href" ).replace( /#.*$/, "" ), 28741 beforeSend: function( jqXHR, settings ) { 28742 return that._trigger( "beforeLoad", event, 28743 $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) ); 28744 } 28745 }; 28746 }, 28747 28748 _getPanelForTab: function( tab ) { 28749 var id = $( tab ).attr( "aria-controls" ); 28750 return this.element.find( this._sanitizeSelector( "#" + id ) ); 28751 } 28752} ); 28753 28754// DEPRECATED 28755// TODO: Switch return back to widget declaration at top of file when this is removed 28756if ( $.uiBackCompat !== false ) { 28757 28758 // Backcompat for ui-tab class (now ui-tabs-tab) 28759 $.widget( "ui.tabs", $.ui.tabs, { 28760 _processTabs: function() { 28761 this._superApply( arguments ); 28762 this._addClass( this.tabs, "ui-tab" ); 28763 } 28764 } ); 28765} 28766 28767var widgetsTabs = $.ui.tabs; 28768 28769 28770/*! 28771 * jQuery UI Tooltip 1.13.1 28772 * http://jqueryui.com 28773 * 28774 * Copyright jQuery Foundation and other contributors 28775 * Released under the MIT license. 28776 * http://jquery.org/license 28777 */ 28778 28779//>>label: Tooltip 28780//>>group: Widgets 28781//>>description: Shows additional information for any element on hover or focus. 28782//>>docs: http://api.jqueryui.com/tooltip/ 28783//>>demos: http://jqueryui.com/tooltip/ 28784//>>css.structure: ../../themes/base/core.css 28785//>>css.structure: ../../themes/base/tooltip.css 28786//>>css.theme: ../../themes/base/theme.css 28787 28788 28789$.widget( "ui.tooltip", { 28790 version: "1.13.1
vendor: 13,567 bytes, lines 28790-29278
28790", 28791 options: { 28792 classes: { 28793 "ui-tooltip": "ui-corner-all ui-widget-shadow" 28794 }, 28795 content: function() { 28796 var title = $( this ).attr( "title" ); 28797 28798 // Escape title, since we're going from an attribute to raw HTML 28799 return $( "<a>" ).text( title ).html(); 28800 }, 28801 hide: true, 28802 28803 // Disabled elements have inconsistent behavior across browsers (#8661) 28804 items: "[title]:not([disabled])", 28805 position: { 28806 my: "left top+15", 28807 at: "left bottom", 28808 collision: "flipfit flip" 28809 }, 28810 show: true, 28811 track: false, 28812 28813 // Callbacks 28814 close: null, 28815 open: null 28816 }, 28817 28818 _addDescribedBy: function( elem, id ) { 28819 var describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ); 28820 describedby.push( id ); 28821 elem 28822 .data( "ui-tooltip-id", id ) 28823 .attr( "aria-describedby", String.prototype.trim.call( describedby.join( " " ) ) ); 28824 }, 28825 28826 _removeDescribedBy: function( elem ) { 28827 var id = elem.data( "ui-tooltip-id" ), 28828 describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ), 28829 index = $.inArray( id, describedby ); 28830 28831 if ( index !== -1 ) { 28832 describedby.splice( index, 1 ); 28833 } 28834 28835 elem.removeData( "ui-tooltip-id" ); 28836 describedby = String.prototype.trim.call( describedby.join( " " ) ); 28837 if ( describedby ) { 28838 elem.attr( "aria-describedby", describedby ); 28839 } else { 28840 elem.removeAttr( "aria-describedby" ); 28841 } 28842 }, 28843 28844 _create: function() { 28845 this._on( { 28846 mouseover: "open", 28847 focusin: "open" 28848 } ); 28849 28850 // IDs of generated tooltips, needed for destroy 28851 this.tooltips = {}; 28852 28853 // IDs of parent tooltips where we removed the title attribute 28854 this.parents = {}; 28855 28856 // Append the aria-live region so tooltips announce correctly 28857 this.liveRegion = $( "<div>" ) 28858 .attr( { 28859 role: "log", 28860 "aria-live": "assertive", 28861 "aria-relevant": "additions" 28862 } ) 28863 .appendTo( this.document[ 0 ].body ); 28864 this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" ); 28865 28866 this.disabledTitles = $( [] ); 28867 }, 28868 28869 _setOption: function( key, value ) { 28870 var that = this; 28871 28872 this._super( key, value ); 28873 28874 if ( key === "content" ) { 28875 $.each( this.tooltips, function( id, tooltipData ) { 28876 that._updateContent( tooltipData.element ); 28877 } ); 28878 } 28879 }, 28880 28881 _setOptionDisabled: function( value ) { 28882 this[ value ? "_disable" : "_enable" ](); 28883 }, 28884 28885 _disable: function() { 28886 var that = this; 28887 28888 // Close open tooltips 28889 $.each( this.tooltips, function( id, tooltipData ) { 28890 var event = $.Event( "blur" ); 28891 event.target = event.currentTarget = tooltipData.element[ 0 ]; 28892 that.close( event, true ); 28893 } ); 28894 28895 // Remove title attributes to prevent native tooltips 28896 this.disabledTitles = this.disabledTitles.add( 28897 this.element.find( this.options.items ).addBack() 28898 .filter( function() { 28899 var element = $( this ); 28900 if ( element.is( "[title]" ) ) { 28901 return element 28902 .data( "ui-tooltip-title", element.attr( "title" ) ) 28903 .removeAttr( "title" ); 28904 } 28905 } ) 28906 ); 28907 }, 28908 28909 _enable: function() { 28910 28911 // restore title attributes 28912 this.disabledTitles.each( function() { 28913 var element = $( this ); 28914 if ( element.data( "ui-tooltip-title" ) ) { 28915 element.attr( "title", element.data( "ui-tooltip-title" ) ); 28916 } 28917 } ); 28918 this.disabledTitles = $( [] ); 28919 }, 28920 28921 open: function( event ) { 28922 var that = this, 28923 target = $( event ? event.target : this.element ) 28924 28925 // we need closest here due to mouseover bubbling, 28926 // but always pointing at the same event target 28927 .closest( this.options.items ); 28928 28929 // No element to show a tooltip for or the tooltip is already open 28930 if ( !target.length || target.data( "ui-tooltip-id" ) ) { 28931 return; 28932 } 28933 28934 if ( target.attr( "title" ) ) { 28935 target.data( "ui-tooltip-title", target.attr( "title" ) ); 28936 } 28937 28938 target.data( "ui-tooltip-open", true ); 28939 28940 // Kill parent tooltips, custom or native, for hover 28941 if ( event && event.type === "mouseover" ) { 28942 target.parents().each( function() { 28943 var parent = $( this ), 28944 blurEvent; 28945 if ( parent.data( "ui-tooltip-open" ) ) { 28946 blurEvent = $.Event( "blur" ); 28947 blurEvent.target = blurEvent.currentTarget = this; 28948 that.close( blurEvent, true ); 28949 } 28950 if ( parent.attr( "title" ) ) { 28951 parent.uniqueId(); 28952 that.parents[ this.id ] = { 28953 element: this, 28954 title: parent.attr( "title" ) 28955 }; 28956 parent.attr( "title", "" ); 28957 } 28958 } ); 28959 } 28960 28961 this._registerCloseHandlers( event, target ); 28962 this._updateContent( target, event ); 28963 }, 28964 28965 _updateContent: function( target, event ) { 28966 var content, 28967 contentOption = this.options.content, 28968 that = this, 28969 eventType = event ? event.type : null; 28970 28971 if ( typeof contentOption === "string" || contentOption.nodeType || 28972 contentOption.jquery ) { 28973 return this._open( event, target, contentOption ); 28974 } 28975 28976 content = contentOption.call( target[ 0 ], function( response ) { 28977 28978 // IE may instantly serve a cached response for ajax requests 28979 // delay this call to _open so the other call to _open runs first 28980 that._delay( function() { 28981 28982 // Ignore async response if tooltip was closed already 28983 if ( !target.data( "ui-tooltip-open" ) ) { 28984 return; 28985 } 28986 28987 // JQuery creates a special event for focusin when it doesn't 28988 // exist natively. To improve performance, the native event 28989 // object is reused and the type is changed. Therefore, we can't 28990 // rely on the type being correct after the event finished 28991 // bubbling, so we set it back to the previous value. (#8740) 28992 if ( event ) { 28993 event.type = eventType; 28994 } 28995 this._open( event, target, response ); 28996 } ); 28997 } ); 28998 if ( content ) { 28999 this._open( event, target, content ); 29000 } 29001 }, 29002 29003 _open: function( event, target, content ) { 29004 var tooltipData, tooltip, delayedShow, a11yContent, 29005 positionOption = $.extend( {}, this.options.position ); 29006 29007 if ( !content ) { 29008 return; 29009 } 29010 29011 // Content can be updated multiple times. If the tooltip already 29012 // exists, then just update the content and bail. 29013 tooltipData = this._find( target ); 29014 if ( tooltipData ) { 29015 tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content ); 29016 return; 29017 } 29018 29019 // If we have a title, clear it to prevent the native tooltip 29020 // we have to check first to avoid defining a title if none exists 29021 // (we don't want to cause an element to start matching [title]) 29022 // 29023 // We use removeAttr only for key events, to allow IE to export the correct 29024 // accessible attributes. For mouse events, set to empty string to avoid 29025 // native tooltip showing up (happens only when removing inside mouseover). 29026 if ( target.is( "[title]" ) ) { 29027 if ( event && event.type === "mouseover" ) { 29028 target.attr( "title", "" ); 29029 } else { 29030 target.removeAttr( "title" ); 29031 } 29032 } 29033 29034 tooltipData = this._tooltip( target ); 29035 tooltip = tooltipData.tooltip; 29036 this._addDescribedBy( target, tooltip.attr( "id" ) ); 29037 tooltip.find( ".ui-tooltip-content" ).html( content ); 29038 29039 // Support: Voiceover on OS X, JAWS on IE <= 9 29040 // JAWS announces deletions even when aria-relevant="additions" 29041 // Voiceover will sometimes re-read the entire log region's contents from the beginning 29042 this.liveRegion.children().hide(); 29043 a11yContent = $( "<div>" ).html( tooltip.find( ".ui-tooltip-content" ).html() ); 29044 a11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" ); 29045 a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" ); 29046 a11yContent.appendTo( this.liveRegion ); 29047 29048 function position( event ) { 29049 positionOption.of = event; 29050 if ( tooltip.is( ":hidden" ) ) { 29051 return; 29052 } 29053 tooltip.position( positionOption ); 29054 } 29055 if ( this.options.track && event && /^mouse/.test( event.type ) ) { 29056 this._on( this.document, { 29057 mousemove: position 29058 } ); 29059 29060 // trigger once to override element-relative positioning 29061 position( event ); 29062 } else { 29063 tooltip.position( $.extend( { 29064 of: target 29065 }, this.options.position ) ); 29066 } 29067 29068 tooltip.hide(); 29069 29070 this._show( tooltip, this.options.show ); 29071 29072 // Handle tracking tooltips that are shown with a delay (#8644). As soon 29073 // as the tooltip is visible, position the tooltip using the most recent 29074 // event. 29075 // Adds the check to add the timers only when both delay and track options are set (#14682) 29076 if ( this.options.track && this.options.show && this.options.show.delay ) { 29077 delayedShow = this.delayedShow = setInterval( function() { 29078 if ( tooltip.is( ":visible" ) ) { 29079 position( positionOption.of ); 29080 clearInterval( delayedShow ); 29081 } 29082 }, 13 ); 29083 } 29084 29085 this._trigger( "open", event, { tooltip: tooltip } ); 29086 }, 29087 29088 _registerCloseHandlers: function( event, target ) { 29089 var events = { 29090 keyup: function( event ) { 29091 if ( event.keyCode === $.ui.keyCode.ESCAPE ) { 29092 var fakeEvent = $.Event( event ); 29093 fakeEvent.currentTarget = target[ 0 ]; 29094 this.close( fakeEvent, true ); 29095 } 29096 } 29097 }; 29098 29099 // Only bind remove handler for delegated targets. Non-delegated 29100 // tooltips will handle this in destroy. 29101 if ( target[ 0 ] !== this.element[ 0 ] ) { 29102 events.remove = function() { 29103 var targetElement = this._find( target ); 29104 if ( targetElement ) { 29105 this._removeTooltip( targetElement.tooltip ); 29106 } 29107 }; 29108 } 29109 29110 if ( !event || event.type === "mouseover" ) { 29111 events.mouseleave = "close"; 29112 } 29113 if ( !event || event.type === "focusin" ) { 29114 events.focusout = "close"; 29115 } 29116 this._on( true, target, events ); 29117 }, 29118 29119 close: function( event ) { 29120 var tooltip, 29121 that = this, 29122 target = $( event ? event.currentTarget : this.element ), 29123 tooltipData = this._find( target ); 29124 29125 // The tooltip may already be closed 29126 if ( !tooltipData ) { 29127 29128 // We set ui-tooltip-open immediately upon open (in open()), but only set the 29129 // additional data once there's actually content to show (in _open()). So even if the 29130 // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in 29131 // the period between open() and _open(). 29132 target.removeData( "ui-tooltip-open" ); 29133 return; 29134 } 29135 29136 tooltip = tooltipData.tooltip; 29137 29138 // Disabling closes the tooltip, so we need to track when we're closing 29139 // to avoid an infinite loop in case the tooltip becomes disabled on close 29140 if ( tooltipData.closing ) { 29141 return; 29142 } 29143 29144 // Clear the interval for delayed tracking tooltips 29145 clearInterval( this.delayedShow ); 29146 29147 // Only set title if we had one before (see comment in _open()) 29148 // If the title attribute has changed since open(), don't restore 29149 if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) { 29150 target.attr( "title", target.data( "ui-tooltip-title" ) ); 29151 } 29152 29153 this._removeDescribedBy( target ); 29154 29155 tooltipData.hiding = true; 29156 tooltip.stop( true ); 29157 this._hide( tooltip, this.options.hide, function() { 29158 that._removeTooltip( $( this ) ); 29159 } ); 29160 29161 target.removeData( "ui-tooltip-open" ); 29162 this._off( target, "mouseleave focusout keyup" ); 29163 29164 // Remove 'remove' binding only on delegated targets 29165 if ( target[ 0 ] !== this.element[ 0 ] ) { 29166 this._off( target, "remove" ); 29167 } 29168 this._off( this.document, "mousemove" ); 29169 29170 if ( event && event.type === "mouseleave" ) { 29171 $.each( this.parents, function( id, parent ) { 29172 $( parent.element ).attr( "title", parent.title ); 29173 delete that.parents[ id ]; 29174 } ); 29175 } 29176 29177 tooltipData.closing = true; 29178 this._trigger( "close", event, { tooltip: tooltip } ); 29179 if ( !tooltipData.hiding ) { 29180 tooltipData.closing = false; 29181 } 29182 }, 29183 29184 _tooltip: function( element ) { 29185 var tooltip = $( "<div>" ).attr( "role", "tooltip" ), 29186 content = $( "<div>" ).appendTo( tooltip ), 29187 id = tooltip.uniqueId().attr( "id" ); 29188 29189 this._addClass( content, "ui-tooltip-content" ); 29190 this._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" ); 29191 29192 tooltip.appendTo( this._appendTo( element ) ); 29193 29194 return this.tooltips[ id ] = { 29195 element: element, 29196 tooltip: tooltip 29197 }; 29198 }, 29199 29200 _find: function( target ) { 29201 var id = target.data( "ui-tooltip-id" ); 29202 return id ? this.tooltips[ id ] : null; 29203 }, 29204 29205 _removeTooltip: function( tooltip ) { 29206 29207 // Clear the interval for delayed tracking tooltips 29208 clearInterval( this.delayedShow ); 29209 29210 tooltip.remove(); 29211 delete this.tooltips[ tooltip.attr( "id" ) ]; 29212 }, 29213 29214 _appendTo: function( target ) { 29215 var element = target.closest( ".ui-front, dialog" ); 29216 29217 if ( !element.length ) { 29218 element = this.document[ 0 ].body; 29219 } 29220 29221 return element; 29222 }, 29223 29224 _destroy: function() { 29225 var that = this; 29226 29227 // Close open tooltips 29228 $.each( this.tooltips, function( id, tooltipData ) { 29229 29230 // Delegate to close method to handle common cleanup 29231 var event = $.Event( "blur" ), 29232 element = tooltipData.element; 29233 event.target = event.currentTarget = element[ 0 ]; 29234 that.close( event, true ); 29235 29236 // Remove immediately; destroying an open tooltip doesn't use the 29237 // hide animation 29238 $( "#" + id ).remove(); 29239 29240 // Restore the title 29241 if ( element.data( "ui-tooltip-title" ) ) { 29242 29243 // If the title attribute has changed since open(), don't restore 29244 if ( !element.attr( "title" ) ) { 29245 element.attr( "title", element.data( "ui-tooltip-title" ) ); 29246 } 29247 element.removeData( "ui-tooltip-title" ); 29248 } 29249 } ); 29250 this.liveRegion.remove(); 29251 } 29252} ); 29253 29254// DEPRECATED 29255// TODO: Switch return back to widget declaration at top of file when this is removed 29256if ( $.uiBackCompat !== false ) { 29257 29258 // Backcompat for tooltipClass option 29259 $.widget( "ui.tooltip", $.ui.tooltip, { 29260 options: { 29261 tooltipClass: null 29262 }, 29263 _tooltip: function() { 29264 var tooltipData = this._superApply( arguments ); 29265 if ( this.options.tooltipClass ) { 29266 tooltipData.tooltip.addClass( this.options.tooltipClass ); 29267 } 29268 return tooltipData; 29269 } 29270 } ); 29271} 29272 29273var widgetsTooltip = $.ui.tooltip; 29274 29275 29276 29277 29278} );
29278
vendor: 10,254 bytes, lines 29279-29530
29279/*! 29280 * jQuery throttle / debounce - v1.1 - 3/7/2010 29281 * http://benalman.com/projects/jquery-throttle-debounce-plugin/ 29282 * 29283 * Copyright (c) 2010 "Cowboy" Ben Alman 29284 * Dual licensed under the MIT and GPL licenses. 29285 * http://benalman.com/about/license/ 29286 */ 29287 29288// Script: jQuery throttle / debounce: Sometimes, less is more! 29289// 29290// *Version: 1.1, Last updated: 3/7/2010* 29291// 29292// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/ 29293// GitHub - http://github.com/cowboy/jquery-throttle-debounce/ 29294// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js 29295// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb) 29296// 29297// About: License 29298// 29299// Copyright (c) 2010 "Cowboy" Ben Alman, 29300// Dual licensed under the MIT and GPL licenses. 29301// http://benalman.com/about/license/ 29302// 29303// About: Examples 29304// 29305// These working examples, complete with fully commented code, illustrate a few 29306// ways in which this plugin can be used. 29307// 29308// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/ 29309// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/ 29310// 29311// About: Support and Testing 29312// 29313// Information about what version or versions of jQuery this plugin has been 29314// tested with, what browsers it has been tested in, and where the unit tests 29315// reside (so you can test it yourself). 29316// 29317// jQuery Versions - none, 1.3.2, 1.4.2 29318// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1. 29319// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/ 29320// 29321// About: Release History 29322// 29323// 1.1 - (3/7/2010) Fixed a bug in <jQuery.throttle> where trailing callbacks 29324// executed later than they should. Reworked a fair amount of internal 29325// logic as well. 29326// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over 29327// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the 29328// no_trailing throttle parameter and debounce functionality. 29329// 29330// Topic: Note for non-jQuery users 29331// 29332// jQuery isn't actually required for this plugin, because nothing internal 29333// uses any jQuery methods or properties. jQuery is just used as a namespace 29334// under which these methods can exist. 29335// 29336// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist 29337// when this plugin is loaded, the method described below will be created in 29338// the `Cowboy` namespace. Usage will be exactly the same, but instead of 29339// $.method() or jQuery.method(), you'll need to use Cowboy.method(). 29340 29341(function(window,undefined){ 29342 '$:nomunge'; // Used by YUI compressor. 29343 29344 // Since jQuery really isn't required for this plugin, use `jQuery` as the 29345 // namespace only if it already exists, otherwise use the `Cowboy` namespace, 29346 // creating it if necessary. 29347 var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ), 29348 29349 // Internal method reference. 29350 jq_throttle; 29351 29352 // Method: jQuery.throttle 29353 // 29354 // Throttle execution of a function. Especially useful for rate limiting 29355 // execution of handlers on events like resize and scroll. If you want to 29356 // rate-limit execution of a function to a single time, see the 29357 // <jQuery.debounce> method. 29358 // 29359 // In this visualization, | is a throttled-function call and X is the actual 29360 // callback execution: 29361 // 29362 // > Throttled with `no_trailing` specified as false or unspecified: 29363 // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| 29364 // > X X X X X X X X X X X X 29365 // > 29366 // > Throttled with `no_trailing` specified as true: 29367 // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| 29368 // > X X X X X X X X X X 29369 // 29370 // Usage: 29371 // 29372 // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback ); 29373 // > 29374 // > jQuery('selector').bind( 'someevent', throttled ); 29375 // > jQuery('selector').unbind( 'someevent', throttled ); 29376 // 29377 // This also works in jQuery 1.4+: 29378 // 29379 // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) ); 29380 // > jQuery('selector').unbind( 'someevent', callback ); 29381 // 29382 // Arguments: 29383 // 29384 // delay - (Number) A zero-or-greater delay in milliseconds. For event 29385 // callbacks, values around 100 or 250 (or even higher) are most useful. 29386 // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is 29387 // true, callback will only execute every `delay` milliseconds while the 29388 // throttled-function is being called. If no_trailing is false or 29389 // unspecified, callback will be executed one final time after the last 29390 // throttled-function call. (After the throttled-function has not been 29391 // called for `delay` milliseconds, the internal counter is reset) 29392 // callback - (Function) A function to be executed after delay milliseconds. 29393 // The `this` context and all arguments are passed through, as-is, to 29394 // `callback` when the throttled-function is executed. 29395 // 29396 // Returns: 29397 // 29398 // (Function) A new, throttled, function. 29399 29400 $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) { 29401 // After wrapper has stopped being called, this timeout ensures that 29402 // `callback` is executed at the proper times in `throttle` and `end` 29403 // debounce modes. 29404 var timeout_id, 29405 29406 // Keep track of the last time `callback` was executed. 29407 last_exec = 0; 29408 29409 // `no_trailing` defaults to falsy. 29410 if ( typeof no_trailing !== 'boolean' ) { 29411 debounce_mode = callback; 29412 callback = no_trailing; 29413 no_trailing = undefined; 29414 } 29415 29416 // The `wrapper` function encapsulates all of the throttling / debouncing 29417 // functionality and when executed will limit the rate at which `callback` 29418 // is executed. 29419 function wrapper() { 29420 var that = this, 29421 elapsed = +new Date() - last_exec, 29422 args = arguments; 29423 29424 // Execute `callback` and update the `last_exec` timestamp. 29425 function exec() { 29426 last_exec = +new Date(); 29427 callback.apply( that, args ); 29428 }; 29429 29430 // If `debounce_mode` is true (at_begin) this is used to clear the flag 29431 // to allow future `callback` executions. 29432 function clear() { 29433 timeout_id = undefined; 29434 }; 29435 29436 if ( debounce_mode && !timeout_id ) { 29437 // Since `wrapper` is being called for the first time and 29438 // `debounce_mode` is true (at_begin), execute `callback`. 29439 exec(); 29440 } 29441 29442 // Clear any existing timeout. 29443 timeout_id && clearTimeout( timeout_id ); 29444 29445 if ( debounce_mode === undefined && elapsed > delay ) { 29446 // In throttle mode, if `delay` time has been exceeded, execute 29447 // `callback`. 29448 exec(); 29449 29450 } else if ( no_trailing !== true ) { 29451 // In trailing throttle mode, since `delay` time has not been 29452 // exceeded, schedule `callback` to execute `delay` ms after most 29453 // recent execution. 29454 // 29455 // If `debounce_mode` is true (at_begin), schedule `clear` to execute 29456 // after `delay` ms. 29457 // 29458 // If `debounce_mode` is false (at end), schedule `callback` to 29459 // execute after `delay` ms. 29460 timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay ); 29461 } 29462 }; 29463 29464 // Set the guid of `wrapper` function to the same of original callback, so 29465 // it can be removed in jQuery 1.4+ .unbind or .die by using the original 29466 // callback as a reference. 29467 if ( $.guid ) { 29468 wrapper.guid = callback.guid = callback.guid || $.guid++; 29469 } 29470 29471 // Return the wrapper function. 29472 return wrapper; 29473 }; 29474 29475 // Method: jQuery.debounce 29476 // 29477 // Debounce execution of a function. Debouncing, unlike throttling, 29478 // guarantees that a function is only executed a single time, either at the 29479 // very beginning of a series of calls, or at the very end. If you want to 29480 // simply rate-limit execution of a function, see the <jQuery.throttle> 29481 // method. 29482 // 29483 // In this visualization, | is a debounced-function call and X is the actual 29484 // callback execution: 29485 // 29486 // > Debounced with `at_begin` specified as false or unspecified: 29487 // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| 29488 // > X X 29489 // > 29490 // > Debounced with `at_begin` specified as true: 29491 // > ||||||||||||||||||||||||| (pause) ||||||||||||||||||||||||| 29492 // > X X 29493 // 29494 // Usage: 29495 // 29496 // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback ); 29497 // > 29498 // > jQuery('selector').bind( 'someevent', debounced ); 29499 // > jQuery('selector').unbind( 'someevent', debounced ); 29500 // 29501 // This also works in jQuery 1.4+: 29502 // 29503 // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) ); 29504 // > jQuery('selector').unbind( 'someevent', callback ); 29505 // 29506 // Arguments: 29507 // 29508 // delay - (Number) A zero-or-greater delay in milliseconds. For event 29509 // callbacks, values around 100 or 250 (or even higher) are most useful. 29510 // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or 29511 // unspecified, callback will only be executed `delay` milliseconds after 29512 // the last debounced-function call. If at_begin is true, callback will be 29513 // executed only at the first debounced-function call. (After the 29514 // throttled-function has not been called for `delay` milliseconds, the 29515 // internal counter is reset) 29516 // callback - (Function) A function to be executed after delay milliseconds. 29517 // The `this` context and all arguments are passed through, as-is, to 29518 // `callback` when the debounced-function is executed. 29519 // 29520 // Returns: 29521 // 29522 // (Function) A new, debounced, function. 29523 29524 $.debounce = function( delay, at_begin, callback ) { 29525 return callback === undefined 29526 ? jq_throttle( delay, at_begin, false ) 29527 : jq_throttle( delay, callback, at_begin !== false ); 29528 }; 29529 29530})(this);
29531 29532/*! 29533 * Bootstrap v4.1.3 (https://getbootstrap.com/) 29534 * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 29535 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 29536 */ 29537(function (global, factory) { 29538 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : 29539 typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : 29540 (factory((global.bootstrap = {}),global.jQuery)); 29541}(this, (function (exports,$) { 'use strict'; 29542 29543 $ = $ && $.hasOwnProperty('default') ? $['default'] : $; 29544 29545 function _defineProperties(target, props) { 29546 for (var i = 0; i < props.length; i++) { 29547 var descriptor = props[i]; 29548 descriptor.enumerable = descriptor.enumerable || false; 29549 descriptor.configurable = true; 29550 if ("value" in descriptor) descriptor.writable = true; 29551 Object.defineProperty(target, descriptor.key, descriptor); 29552 } 29553 } 29554 29555 function _createClass(Constructor, protoProps, staticProps) { 29556 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 29557 if (staticProps) _defineProperties(Constructor, staticProps); 29558 return Constructor; 29559 } 29560 29561 function _defineProperty(obj, key, value) { 29562 if (key in obj) { 29563 Object.defineProperty(obj, key, { 29564 value: value, 29565 enumerable: true, 29566 configurable: true, 29567 writable: true 29568 }); 29569 } else { 29570 obj[key] = value; 29571 } 29572 29573 return obj; 29574 } 29575 29576 function _objectSpread(target) { 29577 for (var i = 1; i < arguments.length; i++) { 29578 var source = arguments[i] != null ? arguments[i] : {}; 29579 var ownKeys = Object.keys(source); 29580 29581 if (typeof Object.getOwnPropertySymbols === 'function') { 29582 ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { 29583 return Object.getOwnPropertyDescriptor(source, sym).enumerable; 29584 })); 29585 } 29586 29587 ownKeys.forEach(function (key) { 29588 _defineProperty(target, key, source[key]); 29589 }); 29590 } 29591 29592 return target; 29593 } 29594 29595 function _inheritsLoose(subClass, superClass) { 29596 subClass.prototype = Object.create(superClass.prototype); 29597 subClass.prototype.constructor = subClass; 29598 subClass.__proto__ = superClass; 29599 } 29600 29601 /** 29602 * -------------------------------------------------------------------------- 29603 * Bootstrap (v4.1.3): util.js 29604 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 29605 * -------------------------------------------------------------------------- 29606 */ 29607 29608 var Util = function ($$$1) { 29609 /** 29610 * ------------------------------------------------------------------------ 29611 * Private TransitionEnd Helpers 29612 * ------------------------------------------------------------------------ 29613 */ 29614 var TRANSITION_END = 'transitionend'; 29615 var MAX_UID = 1000000; 29616 var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 29617 29618 function toType(obj) { 29619 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 29620 } 29621 29622 function getSpecialTransitionEndEvent() { 29623 return { 29624 bindType: TRANSITION_END, 29625 delegateType: TRANSITION_END, 29626 handle: function handle(event) { 29627 if ($$$1(event.target).is(this)) { 29628 return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params 29629 } 29630 29631 return undefined; // eslint-disable-line no-undefined 29632 } 29633 }; 29634 } 29635 29636 function transitionEndEmulator(duration) { 29637 var _this = this; 29638 29639 var called = false;
29640 $$$1(this).one(Util.TRANSITION_END, function () { 29641 called = true; 29642 }); 29643 setTimeout(function () { 29644 if (!called) { 29645 Util.triggerTransitionEnd(_this); 29646 } 29647 }, duration); 29648 return this; 29649 } 29650 29651 function setTransitionEndSupport() { 29652 $$$1.fn.emulateTransitionEnd = transitionEndEmulator; 29653 $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); 29654 } 29655 /** 29656 * -------------------------------------------------------------------------- 29657 * Public Util Api 29658 * -------------------------------------------------------------------------- 29659 */ 29660 29661 29662 var Util = { 29663 TRANSITION_END: 'bsTransitionEnd', 29664 getUID: function getUID(prefix) { 29665 do { 29666 // eslint-disable-next-line no-bitwise 29667 prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here 29668 } while (document.getElementById(prefix)); 29669 29670 return prefix; 29671 }, 29672 getSelectorFromElement: function getSelectorFromElement(element) { 29673 var selector = element.getAttribute('data-target'); 29674 29675 if (!selector || selector === '#') { 29676 selector = element.getAttribute('href') || ''; 29677 } 29678 29679 try { 29680 return document.querySelector(selector) ? selector : null; 29681 } catch (err) { 29682 return null; 29683 } 29684 }, 29685 getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { 29686 if (!element) { 29687 return 0; 29688 } // Get transition-duration of the element 29689 29690 29691 var transitionDuration = $$$1(element).css('transition-duration'); 29692 var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found 29693 29694 if (!floatTransitionDuration) { 29695 return 0; 29696 } // If multiple durations are defined, take the first 29697 29698 29699 transitionDuration = transitionDuration.split(',')[0]; 29700 return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; 29701 }, 29702 reflow: function reflow(element) { 29703 return element.offsetHeight; 29704 }, 29705 triggerTransitionEnd: function triggerTransitionEnd(element) { 29706 $$$1(element).trigger(TRANSITION_END); 29707 }, 29708 // TODO: Remove in v5 29709 supportsTransitionEnd: function supportsTransitionEnd() { 29710 return Boolean(TRANSITION_END); 29711 }, 29712 isElement: function isElement(obj) { 29713 return (obj[0] || obj).nodeType; 29714 }, 29715 typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { 29716 for (var property in configTypes) { 29717 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 29718 var expectedTypes = configTypes[property]; 29719 var value = config[property]; 29720 var valueType = value && Util.isElement(value) ? 'element' : toType(value); 29721 29722 if (!new RegExp(expectedTypes).test(valueType)) { 29723 throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); 29724 } 29725 } 29726 } 29727 } 29728 }; 29729 setTransitionEndSupport(); 29730 return Util; 29731 }($); 29732 29733 /** 29734 * -------------------------------------------------------------------------- 29735 * Bootstrap (v4.1.3): alert.js 29736 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 29737 * -------------------------------------------------------------------------- 29738 */ 29739 29740 var Alert = function ($$$1) { 29741 /** 29742 * ------------------------------------------------------------------------ 29743 * Constants 29744 * ------------------------------------------------------------------------ 29745 */ 29746 var NAME = 'alert'; 29747 var VERSION = '4.1.3'; 29748 var DATA_KEY = 'bs.alert'; 29749 var EVENT_KEY = "." + DATA_KEY; 29750 var DATA_API_KEY = '.data-api'; 29751 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 29752 var Selector = { 29753 DISMISS: '[data-dismiss="alert"]' 29754 }; 29755 var Event = { 29756 CLOSE: "close" + EVENT_KEY, 29757 CLOSED: "closed" + EVENT_KEY, 29758 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 29759 }; 29760 var ClassName = { 29761 ALERT: 'alert', 29762 FADE: 'fade', 29763 SHOW: 'show' 29764 /** 29765 * ------------------------------------------------------------------------ 29766 * Class Definition 29767 * ------------------------------------------------------------------------ 29768 */ 29769 29770 }; 29771 29772 var Alert = 29773 /*#__PURE__*/ 29774 function () { 29775 function Alert(element) { 29776 this._element = element; 29777 } // Getters 29778 29779 29780 var _proto = Alert.prototype; 29781 29782 // Public 29783 _proto.close = function close(element) { 29784 var rootElement = this._element; 29785 29786 if (element) { 29787 rootElement = this._getRootElement(element); 29788 } 29789 29790 var customEvent = this._triggerCloseEvent(rootElement); 29791 29792 if (customEvent.isDefaultPrevented()) { 29793 return; 29794 } 29795 29796 this._removeElement(rootElement); 29797 }; 29798 29799 _proto.dispose = function dispose() { 29800 $$$1.removeData(this._element, DATA_KEY); 29801 this._element = null; 29802 }; // Private 29803 29804 29805 _proto._getRootElement = function _getRootElement(element) { 29806 var selector = Util.getSelectorFromElement(element); 29807 var parent = false;
29808 29809 if (selector) { 29810 parent = document.querySelector(selector); 29811 } 29812 29813 if (!parent) { 29814 parent = $$$1(element).closest("." + ClassName.ALERT)[0]; 29815 } 29816 29817 return parent; 29818 }; 29819 29820 _proto._triggerCloseEvent = function _triggerCloseEvent(element) { 29821 var closeEvent = $$$1.Event(Event.CLOSE); 29822 $$$1(element).trigger(closeEvent); 29823 return closeEvent; 29824 }; 29825 29826 _proto._removeElement = function _removeElement(element) { 29827 var _this = this; 29828 29829 $$$1(element).removeClass(ClassName.SHOW); 29830 29831 if (!$$$1(element).hasClass(ClassName.FADE)) { 29832 this._destroyElement(element); 29833 29834 return; 29835 } 29836 29837 var transitionDuration = Util.getTransitionDurationFromElement(element); 29838 $$$1(element).one(Util.TRANSITION_END, function (event) { 29839 return _this._destroyElement(element, event); 29840 }).emulateTransitionEnd(transitionDuration); 29841 }; 29842 29843 _proto._destroyElement = function _destroyElement(element) { 29844 $$$1(element).detach().trigger(Event.CLOSED).remove(); 29845 }; // Static 29846 29847 29848 Alert._jQueryInterface = function _jQueryInterface(config) { 29849 return this.each(function () { 29850 var $element = $$$1(this); 29851 var data = $element.data(DATA_KEY); 29852 29853 if (!data) { 29854 data = new Alert(this); 29855 $element.data(DATA_KEY, data); 29856 } 29857 29858 if (config === 'close') { 29859 data[config](this); 29860 } 29861 }); 29862 }; 29863 29864 Alert._handleDismiss = function _handleDismiss(alertInstance) { 29865 return function (event) { 29866 if (event) { 29867 event.preventDefault(); 29868 } 29869 29870 alertInstance.close(this); 29871 }; 29872 }; 29873 29874 _createClass(Alert, null, [{ 29875 key: "VERSION", 29876 get: function get() { 29877 return VERSION; 29878 } 29879 }]); 29880 29881 return Alert; 29882 }(); 29883 /** 29884 * ------------------------------------------------------------------------ 29885 * Data Api implementation 29886 * ------------------------------------------------------------------------ 29887 */ 29888 29889 29890 $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); 29891 /** 29892 * ------------------------------------------------------------------------ 29893 * jQuery 29894 * ------------------------------------------------------------------------ 29895 */ 29896 29897 $$$1.fn[NAME] = Alert._jQueryInterface; 29898 $$$1.fn[NAME].Constructor = Alert; 29899 29900 $$$1.fn[NAME].noConflict = function () { 29901 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 29902 return Alert._jQueryInterface; 29903 }; 29904 29905 return Alert; 29906 }($); 29907 29908 /** 29909 * -------------------------------------------------------------------------- 29910 * Bootstrap (v4.1.3): button.js 29911 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 29912 * -------------------------------------------------------------------------- 29913 */ 29914 29915 var Button = function ($$$1) { 29916 /** 29917 * ------------------------------------------------------------------------ 29918 * Constants 29919 * ------------------------------------------------------------------------ 29920 */ 29921 var NAME = 'button'; 29922 var VERSION = '4.1.3'; 29923 var DATA_KEY = 'bs.button'; 29924 var EVENT_KEY = "." + DATA_KEY; 29925 var DATA_API_KEY = '.data-api'; 29926 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 29927 var ClassName = { 29928 ACTIVE: 'active', 29929 BUTTON: 'btn', 29930 FOCUS: 'focus' 29931 }; 29932 var Selector = { 29933 DATA_TOGGLE_CARROT: '[data-toggle^="button"]', 29934 DATA_TOGGLE: '[data-toggle="buttons"]', 29935 INPUT: 'input', 29936 ACTIVE: '.active', 29937 BUTTON: '.btn' 29938 }; 29939 var Event = { 29940 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, 29941 FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) 29942 /** 29943 * ------------------------------------------------------------------------ 29944 * Class Definition 29945 * ------------------------------------------------------------------------ 29946 */ 29947 29948 }; 29949 29950 var Button = 29951 /*#__PURE__*/ 29952 function () { 29953 function Button(element) { 29954 this._element = element; 29955 } // Getters 29956 29957 29958 var _proto = Button.prototype; 29959 29960 // Public
vendor: 5,671 bytes, lines 29961-30142
29961 _proto.toggle = function toggle() { 29962 var triggerChangeEvent = true; 29963 var addAriaPressed = true; 29964 var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; 29965 29966 if (rootElement) { 29967 var input = this._element.querySelector(Selector.INPUT); 29968 29969 if (input) { 29970 if (input.type === 'radio') { 29971 if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) { 29972 triggerChangeEvent = false; 29973 } else { 29974 var activeElement = rootElement.querySelector(Selector.ACTIVE); 29975 29976 if (activeElement) { 29977 $$$1(activeElement).removeClass(ClassName.ACTIVE); 29978 } 29979 } 29980 } 29981 29982 if (triggerChangeEvent) { 29983 if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { 29984 return; 29985 } 29986 29987 input.checked = !this._element.classList.contains(ClassName.ACTIVE); 29988 $$$1(input).trigger('change'); 29989 } 29990 29991 input.focus(); 29992 addAriaPressed = false; 29993 } 29994 } 29995 29996 if (addAriaPressed) { 29997 this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE)); 29998 } 29999 30000 if (triggerChangeEvent) { 30001 $$$1(this._element).toggleClass(ClassName.ACTIVE); 30002 } 30003 }; 30004 30005 _proto.dispose = function dispose() { 30006 $$$1.removeData(this._element, DATA_KEY); 30007 this._element = null; 30008 }; // Static 30009 30010 30011 Button._jQueryInterface = function _jQueryInterface(config) { 30012 return this.each(function () { 30013 var data = $$$1(this).data(DATA_KEY); 30014 30015 if (!data) { 30016 data = new Button(this); 30017 $$$1(this).data(DATA_KEY, data); 30018 } 30019 30020 if (config === 'toggle') { 30021 data[config](); 30022 } 30023 }); 30024 }; 30025 30026 _createClass(Button, null, [{ 30027 key: "VERSION", 30028 get: function get() { 30029 return VERSION; 30030 } 30031 }]); 30032 30033 return Button; 30034 }(); 30035 /** 30036 * ------------------------------------------------------------------------ 30037 * Data Api implementation 30038 * ------------------------------------------------------------------------ 30039 */ 30040 30041 30042 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { 30043 event.preventDefault(); 30044 var button = event.target; 30045 30046 if (!$$$1(button).hasClass(ClassName.BUTTON)) { 30047 button = $$$1(button).closest(Selector.BUTTON); 30048 } 30049 30050 Button._jQueryInterface.call($$$1(button), 'toggle'); 30051 }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { 30052 var button = $$$1(event.target).closest(Selector.BUTTON)[0]; 30053 $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); 30054 }); 30055 /** 30056 * ------------------------------------------------------------------------ 30057 * jQuery 30058 * ------------------------------------------------------------------------ 30059 */ 30060 30061 $$$1.fn[NAME] = Button._jQueryInterface; 30062 $$$1.fn[NAME].Constructor = Button; 30063 30064 $$$1.fn[NAME].noConflict = function () { 30065 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 30066 return Button._jQueryInterface; 30067 }; 30068 30069 return Button; 30070 }($); 30071 30072 /** 30073 * -------------------------------------------------------------------------- 30074 * Bootstrap (v4.1.3): carousel.js 30075 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 30076 * -------------------------------------------------------------------------- 30077 */ 30078 30079 var Carousel = function ($$$1) { 30080 /** 30081 * ------------------------------------------------------------------------ 30082 * Constants 30083 * ------------------------------------------------------------------------ 30084 */ 30085 var NAME = 'carousel'; 30086 var VERSION = '4.1.3'; 30087 var DATA_KEY = 'bs.carousel'; 30088 var EVENT_KEY = "." + DATA_KEY; 30089 var DATA_API_KEY = '.data-api'; 30090 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 30091 var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key 30092 30093 var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key 30094 30095 var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 30096 30097 var Default = { 30098 interval: 5000, 30099 keyboard: true, 30100 slide: false, 30101 pause: 'hover', 30102 wrap: true 30103 }; 30104 var DefaultType = { 30105 interval: '(number|boolean)', 30106 keyboard: 'boolean', 30107 slide: '(boolean|string)', 30108 pause: '(string|boolean)', 30109 wrap: 'boolean' 30110 }; 30111 var Direction = { 30112 NEXT: 'next', 30113 PREV: 'prev', 30114 LEFT: 'left', 30115 RIGHT: 'right' 30116 }; 30117 var Event = { 30118 SLIDE: "slide" + EVENT_KEY, 30119 SLID: "slid" + EVENT_KEY, 30120 KEYDOWN: "keydown" + EVENT_KEY, 30121 MOUSEENTER: "mouseenter" + EVENT_KEY, 30122 MOUSELEAVE: "mouseleave" + EVENT_KEY, 30123 TOUCHEND: "touchend" + EVENT_KEY, 30124 LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, 30125 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 30126 }; 30127 var ClassName = { 30128 CAROUSEL: 'carousel', 30129 ACTIVE: 'active', 30130 SLIDE: 'slide', 30131 RIGHT: 'carousel-item-right', 30132 LEFT: 'carousel-item-left', 30133 NEXT: 'carousel-item-next', 30134 PREV: 'carousel-item-prev', 30135 ITEM: 'carousel-item' 30136 }; 30137 var Selector = { 30138 ACTIVE: '.active', 30139 ACTIVE_ITEM: '.active.carousel-item', 30140 ITEM: '.carousel-item', 30141 NEXT_PREV: '.carousel-item-next, .carousel-item-prev', 30142 INDICATORS: '.carousel-indicators',
30143 DATA_SLIDE: '[data-slide], [data-slide-to]', 30144 DATA_RIDE: '[data-ride="carousel"]' 30145 /** 30146 * ------------------------------------------------------------------------ 30147 * Class Definition 30148 * ------------------------------------------------------------------------ 30149 */ 30150 30151 }; 30152 30153 var Carousel = 30154 /*#__PURE__*/ 30155 function () { 30156 function Carousel(element, config) { 30157 this._items = null; 30158 this._interval = null; 30159 this._activeElement = null; 30160 this._isPaused = false; 30161 this._isSliding = false; 30162 this.touchTimeout = null; 30163 this._config = this._getConfig(config); 30164 this._element = $$$1(element)[0]; 30165 this._indicatorsElement = this._element.querySelector(Selector.INDICATORS); 30166 30167 this._addEventListeners(); 30168 } // Getters 30169 30170 30171 var _proto = Carousel.prototype; 30172 30173 // Public 30174 _proto.next = function next() { 30175 if (!this._isSliding) { 30176 this._slide(Direction.NEXT); 30177 } 30178 }; 30179 30180 _proto.nextWhenVisible = function nextWhenVisible() { 30181 // Don't call next when the page isn't visible 30182 // or the carousel or its parent isn't visible 30183 if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { 30184 this.next(); 30185 } 30186 }; 30187 30188 _proto.prev = function prev() { 30189 if (!this._isSliding) { 30190 this._slide(Direction.PREV); 30191 } 30192 }; 30193 30194 _proto.pause = function pause(event) { 30195 if (!event) { 30196 this._isPaused = true; 30197 } 30198 30199 if (this._element.querySelector(Selector.NEXT_PREV)) { 30200 Util.triggerTransitionEnd(this._element); 30201 this.cycle(true); 30202 } 30203 30204 clearInterval(this._interval); 30205 this._interval = null; 30206 }; 30207 30208 _proto.cycle = function cycle(event) { 30209 if (!event) { 30210 this._isPaused = false; 30211 } 30212 30213 if (this._interval) { 30214 clearInterval(this._interval); 30215 this._interval = null; 30216 } 30217 30218 if (this._config.interval && !this._isPaused) { 30219 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 30220 } 30221 }; 30222 30223 _proto.to = function to(index) { 30224 var _this = this; 30225 30226 this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); 30227 30228 var activeIndex = this._getItemIndex(this._activeElement); 30229 30230 if (index > this._items.length - 1 || index < 0) { 30231 return; 30232 } 30233 30234 if (this._isSliding) { 30235 $$$1(this._element).one(Event.SLID, function () { 30236 return _this.to(index); 30237 }); 30238 return; 30239 } 30240 30241 if (activeIndex === index) { 30242 this.pause(); 30243 this.cycle(); 30244 return; 30245 } 30246 30247 var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; 30248 30249 this._slide(direction, this._items[index]); 30250 }; 30251 30252 _proto.dispose = function dispose() { 30253 $$$1(this._element).off(EVENT_KEY); 30254 $$$1.removeData(this._element, DATA_KEY); 30255 this._items = null; 30256 this._config = null; 30257 this._element = null; 30258 this._interval = null; 30259 this._isPaused = null; 30260 this._isSliding = null; 30261 this._activeElement = null; 30262 this._indicatorsElement = null; 30263 }; // Private 30264 30265 30266 _proto._getConfig = function _getConfig(config) { 30267 config = _objectSpread({}, Default, config); 30268 Util.typeCheckConfig(NAME, config, DefaultType); 30269 return config; 30270 }; 30271 30272 _proto._addEventListeners = function _addEventListeners() { 30273 var _this2 = this; 30274 30275 if (this._config.keyboard) { 30276 $$$1(this._element).on(Event.KEYDOWN, function (event) { 30277 return _this2._keydown(event); 30278 }); 30279 } 30280 30281 if (this._config.pause === 'hover') { 30282 $$$1(this._element).on(Event.MOUSEENTER, function (event) { 30283 return _this2.pause(event); 30284 }).on(Event.MOUSELEAVE, function (event) { 30285 return _this2.cycle(event); 30286 }); 30287 30288 if ('ontouchstart' in document.documentElement) {
30289 // If it's a touch-enabled device, mouseenter/leave are fired as 30290 // part of the mouse compatibility events on first tap - the carousel 30291 // would stop cycling until user tapped out of it; 30292 // here, we listen for touchend, explicitly pause the carousel 30293 // (as if it's the second time we tap on it, mouseenter compat event 30294 // is NOT fired) and after a timeout (to allow for mouse compatibility 30295 // events to fire) we explicitly restart cycling 30296 $$$1(this._element).on(Event.TOUCHEND, function () { 30297 _this2.pause(); 30298 30299 if (_this2.touchTimeout) { 30300 clearTimeout(_this2.touchTimeout); 30301 } 30302 30303 _this2.touchTimeout = setTimeout(function (event) { 30304 return _this2.cycle(event); 30305 }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); 30306 }); 30307 } 30308 } 30309 }; 30310 30311 _proto._keydown = function _keydown(event) { 30312 if (/input|textarea/i.test(event.target.tagName)) { 30313 return; 30314 } 30315 30316 switch (event.which) { 30317 case ARROW_LEFT_KEYCODE: 30318 event.preventDefault(); 30319 this.prev(); 30320 break; 30321 30322 case ARROW_RIGHT_KEYCODE: 30323 event.preventDefault(); 30324 this.next(); 30325 break; 30326 30327 default: 30328 } 30329 }; 30330 30331 _proto._getItemIndex = function _getItemIndex(element) { 30332 this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : []; 30333 return this._items.indexOf(element); 30334 }; 30335 30336 _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { 30337 var isNextDirection = direction === Direction.NEXT; 30338 var isPrevDirection = direction === Direction.PREV; 30339 30340 var activeIndex = this._getItemIndex(activeElement); 30341 30342 var lastItemIndex = this._items.length - 1; 30343 var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; 30344 30345 if (isGoingToWrap && !this._config.wrap) { 30346 return activeElement; 30347 } 30348 30349 var delta = direction === Direction.PREV ? -1 : 1; 30350 var itemIndex = (activeIndex + delta) % this._items.length; 30351 return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; 30352 }; 30353 30354 _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { 30355 var targetIndex = this._getItemIndex(relatedTarget); 30356 30357 var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)); 30358 30359 var slideEvent = $$$1.Event(Event.SLIDE, { 30360 relatedTarget: relatedTarget, 30361 direction: eventDirectionName, 30362 from: fromIndex, 30363 to: targetIndex 30364 }); 30365 $$$1(this._element).trigger(slideEvent); 30366 return slideEvent; 30367 }; 30368 30369 _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { 30370 if (this._indicatorsElement) { 30371 var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)); 30372 $$$1(indicators).removeClass(ClassName.ACTIVE); 30373 30374 var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; 30375 30376 if (nextIndicator) { 30377 $$$1(nextIndicator).addClass(ClassName.ACTIVE); 30378 } 30379 } 30380 }; 30381 30382 _proto._slide = function _slide(direction, element) { 30383 var _this3 = this; 30384 30385 var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); 30386 30387 var activeElementIndex = this._getItemIndex(activeElement); 30388 30389 var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); 30390 30391 var nextElementIndex = this._getItemIndex(nextElement); 30392 30393 var isCycling = Boolean(this._interval); 30394 var directionalClassName; 30395 var orderClassName; 30396 var eventDirectionName; 30397 30398 if (direction === Direction.NEXT) { 30399 directionalClassName = ClassName.LEFT; 30400 orderClassName = ClassName.NEXT; 30401 eventDirectionName = Direction.LEFT; 30402 } else { 30403 directionalClassName = ClassName.RIGHT; 30404 orderClassName = ClassName.PREV; 30405 eventDirectionName = Direction.RIGHT; 30406 } 30407 30408 if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { 30409 this._isSliding = false;
30410 return; 30411 } 30412 30413 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 30414 30415 if (slideEvent.isDefaultPrevented()) { 30416 return; 30417 } 30418 30419 if (!activeElement || !nextElement) { 30420 // Some weirdness is happening, so we bail 30421 return; 30422 } 30423 30424 this._isSliding = true; 30425 30426 if (isCycling) { 30427 this.pause(); 30428 } 30429 30430 this._setActiveIndicatorElement(nextElement); 30431 30432 var slidEvent = $$$1.Event(Event.SLID, { 30433 relatedTarget: nextElement, 30434 direction: eventDirectionName, 30435 from: activeElementIndex, 30436 to: nextElementIndex 30437 }); 30438 30439 if ($$$1(this._element).hasClass(ClassName.SLIDE)) { 30440 $$$1(nextElement).addClass(orderClassName); 30441 Util.reflow(nextElement); 30442 $$$1(activeElement).addClass(directionalClassName); 30443 $$$1(nextElement).addClass(directionalClassName); 30444 var transitionDuration = Util.getTransitionDurationFromElement(activeElement); 30445 $$$1(activeElement).one(Util.TRANSITION_END, function () { 30446 $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); 30447 $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); 30448 _this3._isSliding = false; 30449 setTimeout(function () { 30450 return $$$1(_this3._element).trigger(slidEvent); 30451 }, 0); 30452 }).emulateTransitionEnd(transitionDuration); 30453 } else { 30454 $$$1(activeElement).removeClass(ClassName.ACTIVE); 30455 $$$1(nextElement).addClass(ClassName.ACTIVE); 30456 this._isSliding = false; 30457 $$$1(this._element).trigger(slidEvent); 30458 } 30459 30460 if (isCycling) { 30461 this.cycle(); 30462 } 30463 }; // Static 30464 30465 30466 Carousel._jQueryInterface = function _jQueryInterface(config) { 30467 return this.each(function () { 30468 var data = $$$1(this).data(DATA_KEY); 30469 30470 var _config = _objectSpread({}, Default, $$$1(this).data()); 30471 30472 if (typeof config === 'object') { 30473 _config = _objectSpread({}, _config, config); 30474 } 30475 30476 var action = typeof config === 'string' ? config : _config.slide; 30477 30478 if (!data) { 30479 data = new Carousel(this, _config); 30480 $$$1(this).data(DATA_KEY, data); 30481 } 30482 30483 if (typeof config === 'number') { 30484 data.to(config); 30485 } else if (typeof action === 'string') { 30486 if (typeof data[action] === 'undefined') { 30487 throw new TypeError("No method named \"" + action + "\""); 30488 } 30489 30490 data[action](); 30491 } else if (_config.interval) { 30492 data.pause(); 30493 data.cycle(); 30494 } 30495 }); 30496 }; 30497 30498 Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { 30499 var selector = Util.getSelectorFromElement(this); 30500 30501 if (!selector) { 30502 return; 30503 } 30504 30505 var target = $$$1(selector)[0]; 30506 30507 if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { 30508 return; 30509 } 30510 30511 var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); 30512 30513 var slideIndex = this.getAttribute('data-slide-to'); 30514 30515 if (slideIndex) { 30516 config.interval = false; 30517 } 30518 30519 Carousel._jQueryInterface.call($$$1(target), config); 30520 30521 if (slideIndex) { 30522 $$$1(target).data(DATA_KEY).to(slideIndex); 30523 } 30524 30525 event.preventDefault(); 30526 }; 30527 30528 _createClass(Carousel, null, [{ 30529 key: "VERSION", 30530 get: function get() { 30531 return VERSION; 30532 } 30533 }, { 30534 key: "Default", 30535 get: function get() { 30536 return Default; 30537 } 30538 }]); 30539 30540 return Carousel; 30541 }(); 30542 /** 30543 * ------------------------------------------------------------------------ 30544 * Data Api implementation 30545 * ------------------------------------------------------------------------ 30546 */ 30547 30548 30549 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); 30550 $$$1(window).on(Event.LOAD_DATA_API, function () { 30551 var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)); 30552 30553 for (var i = 0, len = carousels.length; i < len; i++) { 30554 var $carousel = $$$1(carousels[i]); 30555
30556 Carousel._jQueryInterface.call($carousel, $carousel.data()); 30557 } 30558 }); 30559 /** 30560 * ------------------------------------------------------------------------ 30561 * jQuery 30562 * ------------------------------------------------------------------------ 30563 */ 30564 30565 $$$1.fn[NAME] = Carousel._jQueryInterface; 30566 $$$1.fn[NAME].Constructor = Carousel; 30567 30568 $$$1.fn[NAME].noConflict = function () { 30569 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 30570 return Carousel._jQueryInterface; 30571 }; 30572 30573 return Carousel; 30574 }($); 30575 30576 /** 30577 * -------------------------------------------------------------------------- 30578 * Bootstrap (v4.1.3): collapse.js 30579 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 30580 * -------------------------------------------------------------------------- 30581 */ 30582 30583 var Collapse = function ($$$1) { 30584 /** 30585 * ------------------------------------------------------------------------ 30586 * Constants 30587 * ------------------------------------------------------------------------ 30588 */ 30589 var NAME = 'collapse'; 30590 var VERSION = '4.1.3'; 30591 var DATA_KEY = 'bs.collapse'; 30592 var EVENT_KEY = "." + DATA_KEY; 30593 var DATA_API_KEY = '.data-api'; 30594 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 30595 var Default = { 30596 toggle: true, 30597 parent: '' 30598 }; 30599 var DefaultType = { 30600 toggle: 'boolean', 30601 parent: '(string|element)' 30602 }; 30603 var Event = { 30604 SHOW: "show" + EVENT_KEY, 30605 SHOWN: "shown" + EVENT_KEY, 30606 HIDE: "hide" + EVENT_KEY, 30607 HIDDEN: "hidden" + EVENT_KEY, 30608 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 30609 }; 30610 var ClassName = { 30611 SHOW: 'show', 30612 COLLAPSE: 'collapse', 30613 COLLAPSING: 'collapsing', 30614 COLLAPSED: 'collapsed' 30615 }; 30616 var Dimension = { 30617 WIDTH: 'width', 30618 HEIGHT: 'height' 30619 }; 30620 var Selector = { 30621 ACTIVES: '.show, .collapsing', 30622 DATA_TOGGLE: '[data-toggle="collapse"]' 30623 /** 30624 * ------------------------------------------------------------------------ 30625 * Class Definition 30626 * ------------------------------------------------------------------------ 30627 */ 30628 30629 }; 30630 30631 var Collapse = 30632 /*#__PURE__*/ 30633 function () { 30634 function Collapse(element, config) { 30635 this._isTransitioning = false; 30636 this._element = element; 30637 this._config = this._getConfig(config); 30638 this._triggerArray = $$$1.makeArray(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); 30639 var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); 30640 30641 for (var i = 0, len = toggleList.length; i < len; i++) { 30642 var elem = toggleList[i]; 30643 var selector = Util.getSelectorFromElement(elem); 30644 var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { 30645 return foundElem === element; 30646 }); 30647 30648 if (selector !== null && filterElement.length > 0) { 30649 this._selector = selector; 30650 30651 this._triggerArray.push(elem); 30652 } 30653 } 30654 30655 this._parent = this._config.parent ? this._getParent() : null; 30656 30657 if (!this._config.parent) { 30658 this._addAriaAndCollapsedClass(this._element, this._triggerArray); 30659 } 30660 30661 if (this._config.toggle) { 30662 this.toggle(); 30663 } 30664 } // Getters 30665 30666 30667 var _proto = Collapse.prototype; 30668 30669 // Public 30670 _proto.toggle = function toggle() { 30671 if ($$$1(this._element).hasClass(ClassName.SHOW)) { 30672 this.hide(); 30673 } else { 30674 this.show(); 30675 } 30676 }; 30677 30678 _proto.show = function show() { 30679 var _this = this; 30680 30681 if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { 30682 return; 30683 } 30684 30685 var actives; 30686 var activesData; 30687 30688 if (this._parent) { 30689 actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) { 30690 return elem.getAttribute('data-parent') === _this._config.parent; 30691 }); 30692 30693 if (actives.length === 0) { 30694 actives = null; 30695 } 30696 } 30697 30698 if (actives) { 30699 activesData = $$$1(actives).not(this._selector).data(DATA_KEY); 30700 30701 if (activesData && activesData._isTransitioning) { 30702 return; 30703 } 30704 } 30705 30706 var startEvent = $$$1.Event(Event.SHOW); 30707 $$$1(this._element).trigger(startEvent); 30708 30709 if (startEvent.isDefaultPrevented()) { 30710 return; 30711 } 30712 30713 if (actives) { 30714 Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); 30715 30716 if (!activesData) { 30717 $$$1(actives).data(DATA_KEY, null); 30718 } 30719 } 30720 30721 var dimension = this._getDimension(); 30722 30723 $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); 30724 this._element.style[dimension] = 0; 30725 30726 if (this._triggerArray.length) { 30727 $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); 30728 } 30729 30730 this.setTransitioning(true); 30731 30732 var complete = function complete() { 30733 $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); 30734 _this._element.style[dimension] = ''; 30735 30736 _this.setTransitioning(false); 30737 30738 $$$1(_this._element).trigger(Event.SHOWN); 30739 }; 30740 30741 var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 30742 var scrollSize = "scroll" + capitalizedDimension; 30743 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 30744 $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 30745 this._element.style[dimension] = this._element[scrollSize] + "px"; 30746 }; 30747 30748 _proto.hide = function hide() { 30749 var _this2 = this; 30750 30751 if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { 30752 return; 30753 } 30754 30755 var startEvent = $$$1.Event(Event.HIDE); 30756 $$$1(this._element).trigger(startEvent); 30757 30758 if (startEvent.isDefaultPrevented()) { 30759 return; 30760 } 30761 30762 var dimension = this._getDimension(); 30763 30764 this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; 30765 Util.reflow(this._element); 30766 $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); 30767 var triggerArrayLength = this._triggerArray.length; 30768 30769 if (triggerArrayLength > 0) { 30770 for (var i = 0; i < triggerArrayLength; i++) { 30771 var trigger = this._triggerArray[i]; 30772 var selector = Util.getSelectorFromElement(trigger); 30773 30774 if (selector !== null) { 30775 var $elem = $$$1([].slice.call(document.querySelectorAll(selector))); 30776 30777 if (!$elem.hasClass(ClassName.SHOW)) { 30778 $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); 30779 } 30780 } 30781 } 30782 } 30783 30784 this.setTransitioning(true); 30785 30786 var complete = function complete() { 30787 _this2.setTransitioning(false); 30788 30789 $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); 30790 }; 30791 30792 this._element.style[dimension] = ''; 30793 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 30794 $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 30795 }; 30796 30797 _proto.setTransitioning = function setTransitioning(isTransitioning) { 30798 this._isTransitioning = isTransitioning; 30799 }; 30800 30801 _proto.dispose = function dispose() { 30802 $$$1.removeData(this._element, DATA_KEY); 30803 this._config = null; 30804 this._parent = null; 30805 this._element = null; 30806 this._triggerArray = null; 30807 this._isTransitioning = null; 30808 }; // Private 30809 30810 30811 _proto._getConfig = function _getConfig(config) { 30812 config = _objectSpread({}, Default, config); 30813 config.toggle = Boolean(config.toggle); // Coerce string values 30814 30815 Util.typeCheckConfig(NAME, config, DefaultType); 30816 return config; 30817 }; 30818 30819 _proto._getDimension = function _getDimension() { 30820 var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); 30821 return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; 30822 }; 30823 30824 _proto._getParent = function _getParent() { 30825 var _this3 = this; 30826 30827 var parent = null; 30828 30829 if (Util.isElement(this._config.parent)) { 30830 parent = this._config.parent; // It's a jQuery object 30831 30832 if (typeof this._config.parent.jquery !== 'undefined') { 30833 parent = this._config.parent[0]; 30834 } 30835 } else { 30836 parent = document.querySelector(this._config.parent); 30837 } 30838 30839 var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; 30840 var children = [].slice.call(parent.querySelectorAll(selector)); 30841 $$$1(children).each(function (i, element) { 30842 _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); 30843 }); 30844 return parent; 30845 }; 30846 30847 _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { 30848 if (element) { 30849 var isOpen = $$$1(element).hasClass(ClassName.SHOW); 30850 30851 if (triggerArray.length) { 30852 $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); 30853 } 30854 } 30855 }; // Static 30856 30857 30858 Collapse._getTargetFromElement = function _getTargetFromElement(element) { 30859 var selector = Util.getSelectorFromElement(element); 30860 return selector ? document.querySelector(selector) : null; 30861 }; 30862 30863 Collapse._jQueryInterface = function _jQueryInterface(config) { 30864 return this.each(function () { 30865 var $this = $$$1(this); 30866 var data = $this.data(DATA_KEY); 30867 30868 var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); 30869 30870 if (!data && _config.toggle && /show|hide/.test(config)) { 30871 _config.toggle = false;
30872 } 30873 30874 if (!data) { 30875 data = new Collapse(this, _config); 30876 $this.data(DATA_KEY, data); 30877 } 30878 30879 if (typeof config === 'string') { 30880 if (typeof data[config] === 'undefined') { 30881 throw new TypeError("No method named \"" + config + "\""); 30882 } 30883 30884 data[config](); 30885 } 30886 }); 30887 }; 30888 30889 _createClass(Collapse, null, [{ 30890 key: "VERSION", 30891 get: function get() { 30892 return VERSION; 30893 } 30894 }, { 30895 key: "Default", 30896 get: function get() { 30897 return Default; 30898 } 30899 }]); 30900 30901 return Collapse; 30902 }(); 30903 /** 30904 * ------------------------------------------------------------------------ 30905 * Data Api implementation 30906 * ------------------------------------------------------------------------ 30907 */ 30908 30909 30910 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 30911 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 30912 if (event.currentTarget.tagName === 'A') { 30913 event.preventDefault(); 30914 } 30915 30916 var $trigger = $$$1(this); 30917 var selector = Util.getSelectorFromElement(this); 30918 var selectors = [].slice.call(document.querySelectorAll(selector)); 30919 $$$1(selectors).each(function () { 30920 var $target = $$$1(this); 30921 var data = $target.data(DATA_KEY); 30922 var config = data ? 'toggle' : $trigger.data(); 30923 30924 Collapse._jQueryInterface.call($target, config); 30925 }); 30926 }); 30927 /** 30928 * ------------------------------------------------------------------------ 30929 * jQuery 30930 * ------------------------------------------------------------------------ 30931 */ 30932 30933 $$$1.fn[NAME] = Collapse._jQueryInterface; 30934 $$$1.fn[NAME].Constructor = Collapse; 30935 30936 $$$1.fn[NAME].noConflict = function () { 30937 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 30938 return Collapse._jQueryInterface; 30939 }; 30940 30941 return Collapse; 30942 }($); 30943 30944 /**! 30945 * @fileOverview Kickass library to create and place poppers near their reference elements. 30946 * @version 1.14.3 30947 * @license 30948 * Copyright (c) 2016 Federico Zivolo and contributors 30949 * 30950 * Permission is hereby granted, free of charge, to any person obtaining a copy 30951 * of this software and associated documentation files (the "Software"), to deal 30952 * in the Software without restriction, including without limitation the rights 30953 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 30954 * copies of the Software, and to permit persons to whom the Software is 30955 * furnished to do so, subject to the following conditions: 30956 * 30957 * The above copyright notice and this permission notice shall be included in all 30958 * copies or substantial portions of the Software. 30959 * 30960 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30961 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 30962 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 30963 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 30964 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 30965 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30966 * SOFTWARE. 30967 */ 30968 var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; 30969 30970 var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; 30971 var timeoutDuration = 0; 30972 for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { 30973 if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { 30974 timeoutDuration = 1; 30975 break; 30976 } 30977 } 30978 30979 function microtaskDebounce(fn) { 30980 var called = false; 30981 return function () { 30982 if (called) { 30983 return; 30984 } 30985 called = true; 30986 window.Promise.resolve().then(function () { 30987 called = false; 30988 fn(); 30989 }); 30990 }; 30991 } 30992 30993 function taskDebounce(fn) { 30994 var scheduled = false; 30995 return function () { 30996 if (!scheduled) { 30997 scheduled = true; 30998 setTimeout(function () { 30999 scheduled = false;
vendor: 15,456 bytes, lines 31000-31482
31000 fn(); 31001 }, timeoutDuration); 31002 } 31003 }; 31004 } 31005 31006 var supportsMicroTasks = isBrowser && window.Promise; 31007 31008 /** 31009 * Create a debounced version of a method, that's asynchronously deferred 31010 * but called in the minimum time possible. 31011 * 31012 * @method 31013 * @memberof Popper.Utils 31014 * @argument {Function} fn 31015 * @returns {Function} 31016 */ 31017 var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; 31018 31019 /** 31020 * Check if the given variable is a function 31021 * @method 31022 * @memberof Popper.Utils 31023 * @argument {Any} functionToCheck - variable to check 31024 * @returns {Boolean} answer to: is a function? 31025 */ 31026 function isFunction(functionToCheck) { 31027 var getType = {}; 31028 return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 31029 } 31030 31031 /** 31032 * Get CSS computed property of the given element 31033 * @method 31034 * @memberof Popper.Utils 31035 * @argument {Eement} element 31036 * @argument {String} property 31037 */ 31038 function getStyleComputedProperty(element, property) { 31039 if (element.nodeType !== 1) { 31040 return []; 31041 } 31042 // NOTE: 1 DOM access here 31043 var css = getComputedStyle(element, null); 31044 return property ? css[property] : css; 31045 } 31046 31047 /** 31048 * Returns the parentNode or the host of the element 31049 * @method 31050 * @memberof Popper.Utils 31051 * @argument {Element} element 31052 * @returns {Element} parent 31053 */ 31054 function getParentNode(element) { 31055 if (element.nodeName === 'HTML') { 31056 return element; 31057 } 31058 return element.parentNode || element.host; 31059 } 31060 31061 /** 31062 * Returns the scrolling parent of the given element 31063 * @method 31064 * @memberof Popper.Utils 31065 * @argument {Element} element 31066 * @returns {Element} scroll parent 31067 */ 31068 function getScrollParent(element) { 31069 // Return body, `getScroll` will take care to get the correct `scrollTop` from it 31070 if (!element) { 31071 return document.body; 31072 } 31073 31074 switch (element.nodeName) { 31075 case 'HTML': 31076 case 'BODY': 31077 return element.ownerDocument.body; 31078 case '#document': 31079 return element.body; 31080 } 31081 31082 // Firefox want us to check `-x` and `-y` variations as well 31083 31084 var _getStyleComputedProp = getStyleComputedProperty(element), 31085 overflow = _getStyleComputedProp.overflow, 31086 overflowX = _getStyleComputedProp.overflowX, 31087 overflowY = _getStyleComputedProp.overflowY; 31088 31089 if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { 31090 return element; 31091 } 31092 31093 return getScrollParent(getParentNode(element)); 31094 } 31095 31096 var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); 31097 var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); 31098 31099 /** 31100 * Determines if the browser is Internet Explorer 31101 * @method 31102 * @memberof Popper.Utils 31103 * @param {Number} version to check 31104 * @returns {Boolean} isIE 31105 */ 31106 function isIE(version) { 31107 if (version === 11) { 31108 return isIE11; 31109 } 31110 if (version === 10) { 31111 return isIE10; 31112 } 31113 return isIE11 || isIE10; 31114 } 31115 31116 /** 31117 * Returns the offset parent of the given element 31118 * @method 31119 * @memberof Popper.Utils 31120 * @argument {Element} element 31121 * @returns {Element} offset parent 31122 */ 31123 function getOffsetParent(element) { 31124 if (!element) { 31125 return document.documentElement; 31126 } 31127 31128 var noOffsetParent = isIE(10) ? document.body : null; 31129 31130 // NOTE: 1 DOM access here 31131 var offsetParent = element.offsetParent; 31132 // Skip hidden elements which don't have an offsetParent 31133 while (offsetParent === noOffsetParent && element.nextElementSibling) { 31134 offsetParent = (element = element.nextElementSibling).offsetParent; 31135 } 31136 31137 var nodeName = offsetParent && offsetParent.nodeName; 31138 31139 if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { 31140 return element ? element.ownerDocument.documentElement : document.documentElement; 31141 } 31142 31143 // .offsetParent will return the closest TD or TABLE in case 31144 // no offsetParent is present, I hate this job... 31145 if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { 31146 return getOffsetParent(offsetParent); 31147 } 31148 31149 return offsetParent; 31150 } 31151 31152 function isOffsetContainer(element) { 31153 var nodeName = element.nodeName; 31154 31155 if (nodeName === 'BODY') { 31156 return false; 31157 } 31158 return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; 31159 } 31160 31161 /** 31162 * Finds the root node (document, shadowDOM root) of the given element 31163 * @method 31164 * @memberof Popper.Utils 31165 * @argument {Element} node 31166 * @returns {Element} root node 31167 */ 31168 function getRoot(node) { 31169 if (node.parentNode !== null) { 31170 return getRoot(node.parentNode); 31171 } 31172 31173 return node; 31174 } 31175 31176 /** 31177 * Finds the offset parent common to the two provided nodes 31178 * @method 31179 * @memberof Popper.Utils 31180 * @argument {Element} element1 31181 * @argument {Element} element2 31182 * @returns {Element} common offset parent 31183 */ 31184 function findCommonOffsetParent(element1, element2) { 31185 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 31186 if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { 31187 return document.documentElement; 31188 } 31189 31190 // Here we make sure to give as "start" the element that comes first in the DOM 31191 var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; 31192 var start = order ? element1 : element2; 31193 var end = order ? element2 : element1; 31194 31195 // Get common ancestor container 31196 var range = document.createRange(); 31197 range.setStart(start, 0); 31198 range.setEnd(end, 0); 31199 var commonAncestorContainer = range.commonAncestorContainer; 31200 31201 // Both nodes are inside #document 31202 31203 if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { 31204 if (isOffsetContainer(commonAncestorContainer)) { 31205 return commonAncestorContainer; 31206 } 31207 31208 return getOffsetParent(commonAncestorContainer); 31209 } 31210 31211 // one of the nodes is inside shadowDOM, find which one 31212 var element1root = getRoot(element1); 31213 if (element1root.host) { 31214 return findCommonOffsetParent(element1root.host, element2); 31215 } else { 31216 return findCommonOffsetParent(element1, getRoot(element2).host); 31217 } 31218 } 31219 31220 /** 31221 * Gets the scroll value of the given element in the given side (top and left) 31222 * @method 31223 * @memberof Popper.Utils 31224 * @argument {Element} element 31225 * @argument {String} side `top` or `left` 31226 * @returns {number} amount of scrolled pixels 31227 */ 31228 function getScroll(element) { 31229 var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; 31230 31231 var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; 31232 var nodeName = element.nodeName; 31233 31234 if (nodeName === 'BODY' || nodeName === 'HTML') { 31235 var html = element.ownerDocument.documentElement; 31236 var scrollingElement = element.ownerDocument.scrollingElement || html; 31237 return scrollingElement[upperSide]; 31238 } 31239 31240 return element[upperSide]; 31241 } 31242 31243 /* 31244 * Sum or subtract the element scroll values (left and top) from a given rect object 31245 * @method 31246 * @memberof Popper.Utils 31247 * @param {Object} rect - Rect object you want to change 31248 * @param {HTMLElement} element - The element from the function reads the scroll values 31249 * @param {Boolean} subtract - set to true if you want to subtract the scroll values 31250 * @return {Object} rect - The modifier rect object 31251 */ 31252 function includeScroll(rect, element) { 31253 var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 31254 31255 var scrollTop = getScroll(element, 'top'); 31256 var scrollLeft = getScroll(element, 'left'); 31257 var modifier = subtract ? -1 : 1; 31258 rect.top += scrollTop * modifier; 31259 rect.bottom += scrollTop * modifier; 31260 rect.left += scrollLeft * modifier; 31261 rect.right += scrollLeft * modifier; 31262 return rect; 31263 } 31264 31265 /* 31266 * Helper to detect borders of a given element 31267 * @method 31268 * @memberof Popper.Utils 31269 * @param {CSSStyleDeclaration} styles 31270 * Result of `getStyleComputedProperty` on the given element 31271 * @param {String} axis - `x` or `y` 31272 * @return {number} borders - The borders size of the given axis 31273 */ 31274 31275 function getBordersSize(styles, axis) { 31276 var sideA = axis === 'x' ? 'Left' : 'Top'; 31277 var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; 31278 31279 return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); 31280 } 31281 31282 function getSize(axis, body, html, computedStyle) { 31283 return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0); 31284 } 31285 31286 function getWindowSizes() { 31287 var body = document.body; 31288 var html = document.documentElement; 31289 var computedStyle = isIE(10) && getComputedStyle(html); 31290 31291 return { 31292 height: getSize('Height', body, html, computedStyle), 31293 width: getSize('Width', body, html, computedStyle) 31294 }; 31295 } 31296 31297 var classCallCheck = function (instance, Constructor) { 31298 if (!(instance instanceof Constructor)) { 31299 throw new TypeError("Cannot call a class as a function"); 31300 } 31301 }; 31302 31303 var createClass = function () { 31304 function defineProperties(target, props) { 31305 for (var i = 0; i < props.length; i++) { 31306 var descriptor = props[i]; 31307 descriptor.enumerable = descriptor.enumerable || false; 31308 descriptor.configurable = true; 31309 if ("value" in descriptor) descriptor.writable = true; 31310 Object.defineProperty(target, descriptor.key, descriptor); 31311 } 31312 } 31313 31314 return function (Constructor, protoProps, staticProps) { 31315 if (protoProps) defineProperties(Constructor.prototype, protoProps); 31316 if (staticProps) defineProperties(Constructor, staticProps); 31317 return Constructor; 31318 }; 31319 }(); 31320 31321 31322 31323 31324 31325 var defineProperty = function (obj, key, value) { 31326 if (key in obj) { 31327 Object.defineProperty(obj, key, { 31328 value: value, 31329 enumerable: true, 31330 configurable: true, 31331 writable: true 31332 }); 31333 } else { 31334 obj[key] = value; 31335 } 31336 31337 return obj; 31338 }; 31339 31340 var _extends = Object.assign || function (target) { 31341 for (var i = 1; i < arguments.length; i++) { 31342 var source = arguments[i]; 31343 31344 for (var key in source) { 31345 if (Object.prototype.hasOwnProperty.call(source, key)) { 31346 target[key] = source[key]; 31347 } 31348 } 31349 } 31350 31351 return target; 31352 }; 31353 31354 /** 31355 * Given element offsets, generate an output similar to getBoundingClientRect 31356 * @method 31357 * @memberof Popper.Utils 31358 * @argument {Object} offsets 31359 * @returns {Object} ClientRect like output 31360 */ 31361 function getClientRect(offsets) { 31362 return _extends({}, offsets, { 31363 right: offsets.left + offsets.width, 31364 bottom: offsets.top + offsets.height 31365 }); 31366 } 31367 31368 /** 31369 * Get bounding client rect of given element 31370 * @method 31371 * @memberof Popper.Utils 31372 * @param {HTMLElement} element 31373 * @return {Object} client rect 31374 */ 31375 function getBoundingClientRect(element) { 31376 var rect = {}; 31377 31378 // IE10 10 FIX: Please, don't ask, the element isn't 31379 // considered in DOM in some circumstances... 31380 // This isn't reproducible in IE10 compatibility mode of IE11 31381 try { 31382 if (isIE(10)) { 31383 rect = element.getBoundingClientRect(); 31384 var scrollTop = getScroll(element, 'top'); 31385 var scrollLeft = getScroll(element, 'left'); 31386 rect.top += scrollTop; 31387 rect.left += scrollLeft; 31388 rect.bottom += scrollTop; 31389 rect.right += scrollLeft; 31390 } else { 31391 rect = element.getBoundingClientRect(); 31392 } 31393 } catch (e) {} 31394 31395 var result = { 31396 left: rect.left, 31397 top: rect.top, 31398 width: rect.right - rect.left, 31399 height: rect.bottom - rect.top 31400 }; 31401 31402 // subtract scrollbar size from sizes 31403 var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {}; 31404 var width = sizes.width || element.clientWidth || result.right - result.left; 31405 var height = sizes.height || element.clientHeight || result.bottom - result.top; 31406 31407 var horizScrollbar = element.offsetWidth - width; 31408 var vertScrollbar = element.offsetHeight - height; 31409 31410 // if an hypothetical scrollbar is detected, we must be sure it's not a `border` 31411 // we make this check conditional for performance reasons 31412 if (horizScrollbar || vertScrollbar) { 31413 var styles = getStyleComputedProperty(element); 31414 horizScrollbar -= getBordersSize(styles, 'x'); 31415 vertScrollbar -= getBordersSize(styles, 'y'); 31416 31417 result.width -= horizScrollbar; 31418 result.height -= vertScrollbar; 31419 } 31420 31421 return getClientRect(result); 31422 } 31423 31424 function getOffsetRectRelativeToArbitraryNode(children, parent) { 31425 var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 31426 31427 var isIE10 = isIE(10); 31428 var isHTML = parent.nodeName === 'HTML'; 31429 var childrenRect = getBoundingClientRect(children); 31430 var parentRect = getBoundingClientRect(parent); 31431 var scrollParent = getScrollParent(children); 31432 31433 var styles = getStyleComputedProperty(parent); 31434 var borderTopWidth = parseFloat(styles.borderTopWidth, 10); 31435 var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); 31436 31437 // In cases where the parent is fixed, we must ignore negative scroll in offset calc 31438 if (fixedPosition && parent.nodeName === 'HTML') { 31439 parentRect.top = Math.max(parentRect.top, 0); 31440 parentRect.left = Math.max(parentRect.left, 0); 31441 } 31442 var offsets = getClientRect({ 31443 top: childrenRect.top - parentRect.top - borderTopWidth, 31444 left: childrenRect.left - parentRect.left - borderLeftWidth, 31445 width: childrenRect.width, 31446 height: childrenRect.height 31447 }); 31448 offsets.marginTop = 0; 31449 offsets.marginLeft = 0; 31450 31451 // Subtract margins of documentElement in case it's being used as parent 31452 // we do this only on HTML because it's the only element that behaves 31453 // differently when margins are applied to it. The margins are included in 31454 // the box of the documentElement, in the other cases not. 31455 if (!isIE10 && isHTML) { 31456 var marginTop = parseFloat(styles.marginTop, 10); 31457 var marginLeft = parseFloat(styles.marginLeft, 10); 31458 31459 offsets.top -= borderTopWidth - marginTop; 31460 offsets.bottom -= borderTopWidth - marginTop; 31461 offsets.left -= borderLeftWidth - marginLeft; 31462 offsets.right -= borderLeftWidth - marginLeft; 31463 31464 // Attach marginTop and marginLeft because in some circumstances we may need them 31465 offsets.marginTop = marginTop; 31466 offsets.marginLeft = marginLeft; 31467 } 31468 31469 if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { 31470 offsets = includeScroll(offsets, parent); 31471 } 31472 31473 return offsets; 31474 } 31475 31476 function getViewportOffsetRectRelativeToArtbitraryNode(element) { 31477 var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 31478 31479 var html = element.ownerDocument.documentElement; 31480 var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); 31481 var width = Math.max(html.clientWidth, window.innerWidth || 0); 31482 var height = Math.max(html.clientHeight, window.innerHeight || 0
vendor: 6,240 bytes, lines 31482-31674
31482); 31483 31484 var scrollTop = !excludeScroll ? getScroll(html) : 0; 31485 var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; 31486 31487 var offset = { 31488 top: scrollTop - relativeOffset.top + relativeOffset.marginTop, 31489 left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, 31490 width: width, 31491 height: height 31492 }; 31493 31494 return getClientRect(offset); 31495 } 31496 31497 /** 31498 * Check if the given element is fixed or is inside a fixed parent 31499 * @method 31500 * @memberof Popper.Utils 31501 * @argument {Element} element 31502 * @argument {Element} customContainer 31503 * @returns {Boolean} answer to "isFixed?" 31504 */ 31505 function isFixed(element) { 31506 var nodeName = element.nodeName; 31507 if (nodeName === 'BODY' || nodeName === 'HTML') { 31508 return false; 31509 } 31510 if (getStyleComputedProperty(element, 'position') === 'fixed') { 31511 return true; 31512 } 31513 return isFixed(getParentNode(element)); 31514 } 31515 31516 /** 31517 * Finds the first parent of an element that has a transformed property defined 31518 * @method 31519 * @memberof Popper.Utils 31520 * @argument {Element} element 31521 * @returns {Element} first transformed parent or documentElement 31522 */ 31523 31524 function getFixedPositionOffsetParent(element) { 31525 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 31526 if (!element || !element.parentElement || isIE()) { 31527 return document.documentElement; 31528 } 31529 var el = element.parentElement; 31530 while (el && getStyleComputedProperty(el, 'transform') === 'none') { 31531 el = el.parentElement; 31532 } 31533 return el || document.documentElement; 31534 } 31535 31536 /** 31537 * Computed the boundaries limits and return them 31538 * @method 31539 * @memberof Popper.Utils 31540 * @param {HTMLElement} popper 31541 * @param {HTMLElement} reference 31542 * @param {number} padding 31543 * @param {HTMLElement} boundariesElement - Element used to define the boundaries 31544 * @param {Boolean} fixedPosition - Is in fixed position mode 31545 * @returns {Object} Coordinates of the boundaries 31546 */ 31547 function getBoundaries(popper, reference, padding, boundariesElement) { 31548 var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; 31549 31550 // NOTE: 1 DOM access here 31551 31552 var boundaries = { top: 0, left: 0 }; 31553 var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); 31554 31555 // Handle viewport case 31556 if (boundariesElement === 'viewport') { 31557 boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); 31558 } else { 31559 // Handle other cases based on DOM element used as boundaries 31560 var boundariesNode = void 0; 31561 if (boundariesElement === 'scrollParent') { 31562 boundariesNode = getScrollParent(getParentNode(reference)); 31563 if (boundariesNode.nodeName === 'BODY') { 31564 boundariesNode = popper.ownerDocument.documentElement; 31565 } 31566 } else if (boundariesElement === 'window') { 31567 boundariesNode = popper.ownerDocument.documentElement; 31568 } else { 31569 boundariesNode = boundariesElement; 31570 } 31571 31572 var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); 31573 31574 // In case of HTML, we need a different computation 31575 if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { 31576 var _getWindowSizes = getWindowSizes(), 31577 height = _getWindowSizes.height, 31578 width = _getWindowSizes.width; 31579 31580 boundaries.top += offsets.top - offsets.marginTop; 31581 boundaries.bottom = height + offsets.top; 31582 boundaries.left += offsets.left - offsets.marginLeft; 31583 boundaries.right = width + offsets.left; 31584 } else { 31585 // for all the other DOM elements, this one is good 31586 boundaries = offsets; 31587 } 31588 } 31589 31590 // Add paddings 31591 boundaries.left += padding; 31592 boundaries.top += padding; 31593 boundaries.right -= padding; 31594 boundaries.bottom -= padding; 31595 31596 return boundaries; 31597 } 31598 31599 function getArea(_ref) { 31600 var width = _ref.width, 31601 height = _ref.height; 31602 31603 return width * height; 31604 } 31605 31606 /** 31607 * Utility used to transform the `auto` placement to the placement with more 31608 * available space. 31609 * @method 31610 * @memberof Popper.Utils 31611 * @argument {Object} data - The data object generated by update method 31612 * @argument {Object} options - Modifiers configuration and options 31613 * @returns {Object} The data object, properly modified 31614 */ 31615 function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { 31616 var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; 31617 31618 if (placement.indexOf('auto') === -1) { 31619 return placement; 31620 } 31621 31622 var boundaries = getBoundaries(popper, reference, padding, boundariesElement); 31623 31624 var rects = { 31625 top: { 31626 width: boundaries.width, 31627 height: refRect.top - boundaries.top 31628 }, 31629 right: { 31630 width: boundaries.right - refRect.right, 31631 height: boundaries.height 31632 }, 31633 bottom: { 31634 width: boundaries.width, 31635 height: boundaries.bottom - refRect.bottom 31636 }, 31637 left: { 31638 width: refRect.left - boundaries.left, 31639 height: boundaries.height 31640 } 31641 }; 31642 31643 var sortedAreas = Object.keys(rects).map(function (key) { 31644 return _extends({ 31645 key: key 31646 }, rects[key], { 31647 area: getArea(rects[key]) 31648 }); 31649 }).sort(function (a, b) { 31650 return b.area - a.area; 31651 }); 31652 31653 var filteredAreas = sortedAreas.filter(function (_ref2) { 31654 var width = _ref2.width, 31655 height = _ref2.height; 31656 return width >= popper.clientWidth && height >= popper.clientHeight; 31657 }); 31658 31659 var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; 31660 31661 var variation = placement.split('-')[1]; 31662 31663 return computedPlacement + (variation ? '-' + variation : ''); 31664 } 31665 31666 /** 31667 * Get offsets to the reference element 31668 * @method 31669 * @memberof Popper.Utils 31670 * @param {Object} state 31671 * @param {Element} popper - the popper element 31672 * @param {Element} reference - the reference element (the popper will be relative to this) 31673 * @param {Element} fixedPosition - is in fixed position mode 31674 * @returns {Object}
vendor: 4,557 bytes, lines 31674-31809
31674 An object containing the offsets which will be applied to the popper 31675 */ 31676 function getReferenceOffsets(state, popper, reference) { 31677 var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 31678 31679 var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); 31680 return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); 31681 } 31682 31683 /** 31684 * Get the outer sizes of the given element (offset size + margins) 31685 * @method 31686 * @memberof Popper.Utils 31687 * @argument {Element} element 31688 * @returns {Object} object containing width and height properties 31689 */ 31690 function getOuterSizes(element) { 31691 var styles = getComputedStyle(element); 31692 var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom); 31693 var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight); 31694 var result = { 31695 width: element.offsetWidth + y, 31696 height: element.offsetHeight + x 31697 }; 31698 return result; 31699 } 31700 31701 /** 31702 * Get the opposite placement of the given one 31703 * @method 31704 * @memberof Popper.Utils 31705 * @argument {String} placement 31706 * @returns {String} flipped placement 31707 */ 31708 function getOppositePlacement(placement) { 31709 var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; 31710 return placement.replace(/left|right|bottom|top/g, function (matched) { 31711 return hash[matched]; 31712 }); 31713 } 31714 31715 /** 31716 * Get offsets to the popper 31717 * @method 31718 * @memberof Popper.Utils 31719 * @param {Object} position - CSS position the Popper will get applied 31720 * @param {HTMLElement} popper - the popper element 31721 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) 31722 * @param {String} placement - one of the valid placement options 31723 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper 31724 */ 31725 function getPopperOffsets(popper, referenceOffsets, placement) { 31726 placement = placement.split('-')[0]; 31727 31728 // Get popper node sizes 31729 var popperRect = getOuterSizes(popper); 31730 31731 // Add position, width and height to our offsets object 31732 var popperOffsets = { 31733 width: popperRect.width, 31734 height: popperRect.height 31735 }; 31736 31737 // depending by the popper placement we have to compute its offsets slightly differently 31738 var isHoriz = ['right', 'left'].indexOf(placement) !== -1; 31739 var mainSide = isHoriz ? 'top' : 'left'; 31740 var secondarySide = isHoriz ? 'left' : 'top'; 31741 var measurement = isHoriz ? 'height' : 'width'; 31742 var secondaryMeasurement = !isHoriz ? 'height' : 'width'; 31743 31744 popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; 31745 if (placement === secondarySide) { 31746 popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; 31747 } else { 31748 popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; 31749 } 31750 31751 return popperOffsets; 31752 } 31753 31754 /** 31755 * Mimics the `find` method of Array 31756 * @method 31757 * @memberof Popper.Utils 31758 * @argument {Array} arr 31759 * @argument prop 31760 * @argument value 31761 * @returns index or -1 31762 */ 31763 function find(arr, check) { 31764 // use native find if supported 31765 if (Array.prototype.find) { 31766 return arr.find(check); 31767 } 31768 31769 // use `filter` to obtain the same behavior of `find` 31770 return arr.filter(check)[0]; 31771 } 31772 31773 /** 31774 * Return the index of the matching object 31775 * @method 31776 * @memberof Popper.Utils 31777 * @argument {Array} arr 31778 * @argument prop 31779 * @argument value 31780 * @returns index or -1 31781 */ 31782 function findIndex(arr, prop, value) { 31783 // use native findIndex if supported 31784 if (Array.prototype.findIndex) { 31785 return arr.findIndex(function (cur) { 31786 return cur[prop] === value; 31787 }); 31788 } 31789 31790 // use `find` + `indexOf` if `findIndex` isn't supported 31791 var match = find(arr, function (obj) { 31792 return obj[prop] === value; 31793 }); 31794 return arr.indexOf(match); 31795 } 31796 31797 /** 31798 * Loop trough the list of modifiers and run them in order, 31799 * each of them will then edit the data object. 31800 * @method 31801 * @memberof Popper.Utils 31802 * @param {dataObject} data 31803 * @param {Array} modifiers 31804 * @param {String} ends - Optional modifier name used as stopper 31805 * @returns {dataObject} 31806 */ 31807 function runModifiers(modifiers, data, ends) { 31808 var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); 31809
vendor: 7,019 bytes, lines 31810-32026
31810 modifiersToRun.forEach(function (modifier) { 31811 if (modifier['function']) { 31812 // eslint-disable-line dot-notation 31813 console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); 31814 } 31815 var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation 31816 if (modifier.enabled && isFunction(fn)) { 31817 // Add properties to offsets to make them a complete clientRect object 31818 // we do this before each modifier to make sure the previous one doesn't 31819 // mess with these values 31820 data.offsets.popper = getClientRect(data.offsets.popper); 31821 data.offsets.reference = getClientRect(data.offsets.reference); 31822 31823 data = fn(data, modifier); 31824 } 31825 }); 31826 31827 return data; 31828 } 31829 31830 /** 31831 * Updates the position of the popper, computing the new offsets and applying 31832 * the new style.<br /> 31833 * Prefer `scheduleUpdate` over `update` because of performance reasons. 31834 * @method 31835 * @memberof Popper 31836 */ 31837 function update() { 31838 // if popper is destroyed, don't perform any further update 31839 if (this.state.isDestroyed) { 31840 return; 31841 } 31842 31843 var data = { 31844 instance: this, 31845 styles: {}, 31846 arrowStyles: {}, 31847 attributes: {}, 31848 flipped: false, 31849 offsets: {} 31850 }; 31851 31852 // compute reference element offsets 31853 data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); 31854 31855 // compute auto placement, store placement inside the data object, 31856 // modifiers will be able to edit `placement` if needed 31857 // and refer to originalPlacement to know the original value 31858 data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); 31859 31860 // store the computed placement inside `originalPlacement` 31861 data.originalPlacement = data.placement; 31862 31863 data.positionFixed = this.options.positionFixed; 31864 31865 // compute the popper offsets 31866 data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); 31867 31868 data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; 31869 31870 // run the modifiers 31871 data = runModifiers(this.modifiers, data); 31872 31873 // the first `update` will call `onCreate` callback 31874 // the other ones will call `onUpdate` callback 31875 if (!this.state.isCreated) { 31876 this.state.isCreated = true; 31877 this.options.onCreate(data); 31878 } else { 31879 this.options.onUpdate(data); 31880 } 31881 } 31882 31883 /** 31884 * Helper used to know if the given modifier is enabled. 31885 * @method 31886 * @memberof Popper.Utils 31887 * @returns {Boolean} 31888 */ 31889 function isModifierEnabled(modifiers, modifierName) { 31890 return modifiers.some(function (_ref) { 31891 var name = _ref.name, 31892 enabled = _ref.enabled; 31893 return enabled && name === modifierName; 31894 }); 31895 } 31896 31897 /** 31898 * Get the prefixed supported property name 31899 * @method 31900 * @memberof Popper.Utils 31901 * @argument {String} property (camelCase) 31902 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) 31903 */ 31904 function getSupportedPropertyName(property) { 31905 var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; 31906 var upperProp = property.charAt(0).toUpperCase() + property.slice(1); 31907 31908 for (var i = 0; i < prefixes.length; i++) { 31909 var prefix = prefixes[i]; 31910 var toCheck = prefix ? '' + prefix + upperProp : property; 31911 if (typeof document.body.style[toCheck] !== 'undefined') { 31912 return toCheck; 31913 } 31914 } 31915 return null; 31916 } 31917 31918 /** 31919 * Destroy the popper 31920 * @method 31921 * @memberof Popper 31922 */ 31923 function destroy() { 31924 this.state.isDestroyed = true; 31925 31926 // touch DOM only if `applyStyle` modifier is enabled 31927 if (isModifierEnabled(this.modifiers, 'applyStyle')) { 31928 this.popper.removeAttribute('x-placement'); 31929 this.popper.style.position = ''; 31930 this.popper.style.top = ''; 31931 this.popper.style.left = ''; 31932 this.popper.style.right = ''; 31933 this.popper.style.bottom = ''; 31934 this.popper.style.willChange = ''; 31935 this.popper.style[getSupportedPropertyName('transform')] = ''; 31936 } 31937 31938 this.disableEventListeners(); 31939 31940 // remove the popper if user explicity asked for the deletion on destroy 31941 // do not use `remove` because IE11 doesn't support it 31942 if (this.options.removeOnDestroy) { 31943 this.popper.parentNode.removeChild(this.popper); 31944 } 31945 return this; 31946 } 31947 31948 /** 31949 * Get the window associated with the element 31950 * @argument {Element} element 31951 * @returns {Window} 31952 */ 31953 function getWindow(element) { 31954 var ownerDocument = element.ownerDocument; 31955 return ownerDocument ? ownerDocument.defaultView : window; 31956 } 31957 31958 function attachToScrollParents(scrollParent, event, callback, scrollParents) { 31959 var isBody = scrollParent.nodeName === 'BODY'; 31960 var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; 31961 target.addEventListener(event, callback, { passive: true }); 31962 31963 if (!isBody) { 31964 attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); 31965 } 31966 scrollParents.push(target); 31967 } 31968 31969 /** 31970 * Setup needed event listeners used to update the popper position 31971 * @method 31972 * @memberof Popper.Utils 31973 * @private 31974 */ 31975 function setupEventListeners(reference, options, state, updateBound) { 31976 // Resize event listener on window 31977 state.updateBound = updateBound; 31978 getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); 31979 31980 // Scroll event listener on scroll parents 31981 var scrollElement = getScrollParent(reference); 31982 attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); 31983 state.scrollElement = scrollElement; 31984 state.eventsEnabled = true; 31985 31986 return state; 31987 } 31988 31989 /** 31990 * It will add resize/scroll events and start recalculating 31991 * position of the popper element when they are triggered. 31992 * @method 31993 * @memberof Popper 31994 */ 31995 function enableEventListeners() { 31996 if (!this.state.eventsEnabled) { 31997 this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); 31998 } 31999 } 32000 32001 /** 32002 * Remove event listeners used to update the popper position 32003 * @method 32004 * @memberof Popper.Utils 32005 * @private 32006 */ 32007 function removeEventListeners(reference, state) { 32008 // Remove resize event listener on window 32009 getWindow(reference).removeEventListener('resize', state.updateBound); 32010 32011 // Remove scroll event listener on scroll parents 32012 state.scrollParents.forEach(function (target) { 32013 target.removeEventListener('scroll', state.updateBound); 32014 }); 32015 32016 // Reset state 32017 state.updateBound = null; 32018 state.scrollParents = []; 32019 state.scrollElement = null; 32020 state.eventsEnabled = false; 32021 return state; 32022 } 32023 32024 /** 32025 * It will remove resize/scroll events and won't recalculate popper position 32026 * when they are triggered. It also won't trigger onUpdate
vendor: 4,379 bytes, lines 32026-32145
32026 callback anymore, 32027 * unless you call `update` method manually. 32028 * @method 32029 * @memberof Popper 32030 */ 32031 function disableEventListeners() { 32032 if (this.state.eventsEnabled) { 32033 cancelAnimationFrame(this.scheduleUpdate); 32034 this.state = removeEventListeners(this.reference, this.state); 32035 } 32036 } 32037 32038 /** 32039 * Tells if a given input is a number 32040 * @method 32041 * @memberof Popper.Utils 32042 * @param {*} input to check 32043 * @return {Boolean} 32044 */ 32045 function isNumeric(n) { 32046 return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); 32047 } 32048 32049 /** 32050 * Set the style to the given popper 32051 * @method 32052 * @memberof Popper.Utils 32053 * @argument {Element} element - Element to apply the style to 32054 * @argument {Object} styles 32055 * Object with a list of properties and values which will be applied to the element 32056 */ 32057 function setStyles(element, styles) { 32058 Object.keys(styles).forEach(function (prop) { 32059 var unit = ''; 32060 // add unit if the value is numeric and is one of the following 32061 if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { 32062 unit = 'px'; 32063 } 32064 element.style[prop] = styles[prop] + unit; 32065 }); 32066 } 32067 32068 /** 32069 * Set the attributes to the given popper 32070 * @method 32071 * @memberof Popper.Utils 32072 * @argument {Element} element - Element to apply the attributes to 32073 * @argument {Object} styles 32074 * Object with a list of properties and values which will be applied to the element 32075 */ 32076 function setAttributes(element, attributes) { 32077 Object.keys(attributes).forEach(function (prop) { 32078 var value = attributes[prop]; 32079 if (value !== false) { 32080 element.setAttribute(prop, attributes[prop]); 32081 } else { 32082 element.removeAttribute(prop); 32083 } 32084 }); 32085 } 32086 32087 /** 32088 * @function 32089 * @memberof Modifiers 32090 * @argument {Object} data - The data object generated by `update` method 32091 * @argument {Object} data.styles - List of style properties - values to apply to popper element 32092 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element 32093 * @argument {Object} options - Modifiers configuration and options 32094 * @returns {Object} The same data object 32095 */ 32096 function applyStyle(data) { 32097 // any property present in `data.styles` will be applied to the popper, 32098 // in this way we can make the 3rd party modifiers add custom styles to it 32099 // Be aware, modifiers could override the properties defined in the previous 32100 // lines of this modifier! 32101 setStyles(data.instance.popper, data.styles); 32102 32103 // any property present in `data.attributes` will be applied to the popper, 32104 // they will be set as HTML attributes of the element 32105 setAttributes(data.instance.popper, data.attributes); 32106 32107 // if arrowElement is defined and arrowStyles has some properties 32108 if (data.arrowElement && Object.keys(data.arrowStyles).length) { 32109 setStyles(data.arrowElement, data.arrowStyles); 32110 } 32111 32112 return data; 32113 } 32114 32115 /** 32116 * Set the x-placement attribute before everything else because it could be used 32117 * to add margins to the popper margins needs to be calculated to get the 32118 * correct popper offsets. 32119 * @method 32120 * @memberof Popper.modifiers 32121 * @param {HTMLElement} reference - The reference element used to position the popper 32122 * @param {HTMLElement} popper - The HTML element used as popper 32123 * @param {Object} options - Popper.js options 32124 */ 32125 function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { 32126 // compute reference element offsets 32127 var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); 32128 32129 // compute auto placement, store placement inside the data object, 32130 // modifiers will be able to edit `placement` if needed 32131 // and refer to originalPlacement to know the original value 32132 var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); 32133 32134 popper.setAttribute('x-placement', placement); 32135 32136 // Apply `position` to popper before anything else because 32137 // without the position applied we can't guarantee correct computations 32138 setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); 32139 32140 return options; 32141 } 32142 32143 /** 32144 * @function 32145 * @memberof
32145Modifiers 32146 * @argument {Object} data - The data object generated by `update` method 32147 * @argument {Object} options - Modifiers configuration and options 32148 * @returns {Object} The data object, properly modified 32149 */ 32150 function computeStyle(data, options) { 32151 var x = options.x, 32152 y = options.y; 32153 var popper = data.offsets.popper; 32154 32155 // Remove this legacy support in Popper.js v2 32156 32157 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { 32158 return modifier.name === 'applyStyle'; 32159 }).gpuAcceleration; 32160 if (legacyGpuAccelerationOption !== undefined) { 32161 console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); 32162 } 32163 var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; 32164 32165 var offsetParent = getOffsetParent(data.instance.popper); 32166 var offsetParentRect = getBoundingClientRect(offsetParent); 32167 32168 // Styles 32169 var styles = { 32170 position: popper.position 32171 }; 32172 32173 // Avoid blurry text by using full pixel integers. 32174 // For pixel-perfect positioning, top/bottom prefers rounded 32175 // values, while left/right prefers floored values. 32176 var offsets = { 32177 left: Math.floor(popper.left), 32178 top: Math.round(popper.top), 32179 bottom: Math.round(popper.bottom), 32180 right: Math.floor(popper.right) 32181 }; 32182 32183 var sideA = x === 'bottom' ? 'top' : 'bottom'; 32184 var sideB = y === 'right' ? 'left' : 'right'; 32185 32186 // if gpuAcceleration is set to `true` and transform is supported, 32187 // we use `translate3d` to apply the position to the popper we 32188 // automatically use the supported prefixed version if needed 32189 var prefixedProperty = getSupportedPropertyName('transform'); 32190 32191 // now, let's make a step back and look at this code closely (wtf?) 32192 // If the content of the popper grows once it's been positioned, it 32193 // may happen that the popper gets misplaced because of the new content 32194 // overflowing its reference element 32195 // To avoid this problem, we provide two options (x and y), which allow 32196 // the consumer to define the offset origin. 32197 // If we position a popper on top of a reference element, we can set 32198 // `x` to `top` to make the popper grow towards its top instead of 32199 // its bottom. 32200 var left = void 0, 32201 top = void 0; 32202 if (sideA === 'bottom') { 32203 top = -offsetParentRect.height + offsets.bottom; 32204 } else { 32205 top = offsets.top; 32206 } 32207 if (sideB === 'right') { 32208 left = -offsetParentRect.width + offsets.right; 32209 } else { 32210 left = offsets.left; 32211 } 32212 if (gpuAcceleration && prefixedProperty) { 32213 styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; 32214 styles[sideA] = 0; 32215 styles[sideB] = 0; 32216 styles.willChange = 'transform'; 32217 } else { 32218 // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties 32219 var invertTop = sideA === 'bottom' ? -1 : 1; 32220 var invertLeft = sideB === 'right' ? -1 : 1; 32221 styles[sideA] = top * invertTop; 32222 styles[sideB] = left * invertLeft; 32223 styles.willChange = sideA + ', ' + sideB; 32224 } 32225 32226 // Attributes 32227 var attributes = { 32228 'x-placement': data.placement 32229 }; 32230 32231 // Update `data` attributes, styles and arrowStyles 32232 data.attributes = _extends({}, attributes, data.attributes); 32233 data.styles = _extends({}, styles, data.styles); 32234 data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); 32235 32236 return data; 32237 } 32238 32239 /** 32240 * Helper used to know if the given modifier depends from another one.<br /> 32241 * It checks if the needed modifier is listed and enabled. 32242 * @method 32243 * @memberof Popper.Utils 32244 * @param {Array} modifiers - list of modifiers 32245 * @param {String} requestingName - name of requesting modifier 32246 * @param {String} requestedName - name of requested modifier 32247 * @returns {Boolean} 32248 */ 32249 function isModifierRequired(modifiers, requestingName, requestedName) { 32250 var requesting = find(modifiers, function (_ref) { 32251 var name = _ref.name; 32252 return name === requestingName; 32253 }); 32254 32255 var isRequired = !!requesting && modifiers.some(function (modifier) {
vendor: 4,324 bytes, lines 32256-32375
32256 return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; 32257 }); 32258 32259 if (!isRequired) { 32260 var _requesting = '`' + requestingName + '`'; 32261 var requested = '`' + requestedName + '`'; 32262 console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); 32263 } 32264 return isRequired; 32265 } 32266 32267 /** 32268 * @function 32269 * @memberof Modifiers 32270 * @argument {Object} data - The data object generated by update method 32271 * @argument {Object} options - Modifiers configuration and options 32272 * @returns {Object} The data object, properly modified 32273 */ 32274 function arrow(data, options) { 32275 var _data$offsets$arrow; 32276 32277 // arrow depends on keepTogether in order to work 32278 if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { 32279 return data; 32280 } 32281 32282 var arrowElement = options.element; 32283 32284 // if arrowElement is a string, suppose it's a CSS selector 32285 if (typeof arrowElement === 'string') { 32286 arrowElement = data.instance.popper.querySelector(arrowElement); 32287 32288 // if arrowElement is not found, don't run the modifier 32289 if (!arrowElement) { 32290 return data; 32291 } 32292 } else { 32293 // if the arrowElement isn't a query selector we must check that the 32294 // provided DOM node is child of its popper node 32295 if (!data.instance.popper.contains(arrowElement)) { 32296 console.warn('WARNING: `arrow.element` must be child of its popper element!'); 32297 return data; 32298 } 32299 } 32300 32301 var placement = data.placement.split('-')[0]; 32302 var _data$offsets = data.offsets, 32303 popper = _data$offsets.popper, 32304 reference = _data$offsets.reference; 32305 32306 var isVertical = ['left', 'right'].indexOf(placement) !== -1; 32307 32308 var len = isVertical ? 'height' : 'width'; 32309 var sideCapitalized = isVertical ? 'Top' : 'Left'; 32310 var side = sideCapitalized.toLowerCase(); 32311 var altSide = isVertical ? 'left' : 'top'; 32312 var opSide = isVertical ? 'bottom' : 'right'; 32313 var arrowElementSize = getOuterSizes(arrowElement)[len]; 32314 32315 // 32316 // extends keepTogether behavior making sure the popper and its 32317 // reference have enough pixels in conjuction 32318 // 32319 32320 // top/left side 32321 if (reference[opSide] - arrowElementSize < popper[side]) { 32322 data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); 32323 } 32324 // bottom/right side 32325 if (reference[side] + arrowElementSize > popper[opSide]) { 32326 data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; 32327 } 32328 data.offsets.popper = getClientRect(data.offsets.popper); 32329 32330 // compute center of the popper 32331 var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; 32332 32333 // Compute the sideValue using the updated popper offsets 32334 // take popper margin in account because we don't have this info available 32335 var css = getStyleComputedProperty(data.instance.popper); 32336 var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); 32337 var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); 32338 var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; 32339 32340 // prevent arrowElement from being placed not contiguously to its popper 32341 sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); 32342 32343 data.arrowElement = arrowElement; 32344 data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); 32345 32346 return data; 32347 } 32348 32349 /** 32350 * Get the opposite placement variation of the given one 32351 * @method 32352 * @memberof Popper.Utils 32353 * @argument {String} placement variation 32354 * @returns {String} flipped placement variation 32355 */ 32356 function getOppositeVariation(variation) { 32357 if (variation === 'end') { 32358 return 'start'; 32359 } else if (variation === 'start') { 32360 return 'end'; 32361 } 32362 return variation; 32363 } 32364 32365 /** 32366 * List of accepted placements to use as values of the `placement` option.<br /> 32367 * Valid placements are: 32368 * - `auto` 32369 * - `top` 32370 * - `right` 32371 * - `bottom` 32372 * - `left` 32373 * 32374 * Each placement can have a variation from this list: 32375 * - `-start`
32376 * - `-end` 32377 * 32378 * Variations are interpreted easily if you think of them as the left to right 32379 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` 32380 * is right.<br /> 32381 * Vertically (`left` and `right`), `start` is top and `end` is bottom. 32382 * 32383 * Some valid examples are: 32384 * - `top-end` (on top of reference, right aligned) 32385 * - `right-start` (on right of reference, top aligned) 32386 * - `bottom` (on bottom, centered) 32387 * - `auto-right` (on the side with more space available, alignment depends by placement) 32388 * 32389 * @static 32390 * @type {Array} 32391 * @enum {String} 32392 * @readonly 32393 * @method placements 32394 * @memberof Popper 32395 */ 32396 var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; 32397 32398 // Get rid of `auto` `auto-start` and `auto-end` 32399 var validPlacements = placements.slice(3); 32400 32401 /** 32402 * Given an initial placement, returns all the subsequent placements 32403 * clockwise (or counter-clockwise). 32404 * 32405 * @method 32406 * @memberof Popper.Utils 32407 * @argument {String} placement - A valid placement (it accepts variations) 32408 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise 32409 * @returns {Array} placements including their variations 32410 */ 32411 function clockwise(placement) { 32412 var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 32413 32414 var index = validPlacements.indexOf(placement); 32415 var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); 32416 return counter ? arr.reverse() : arr; 32417 } 32418 32419 var BEHAVIORS = { 32420 FLIP: 'flip', 32421 CLOCKWISE: 'clockwise', 32422 COUNTERCLOCKWISE: 'counterclockwise' 32423 }; 32424 32425 /** 32426 * @function 32427 * @memberof Modifiers 32428 * @argument {Object} data - The data object generated by update method 32429 * @argument {Object} options - Modifiers configuration and options 32430 * @returns {Object} The data object, properly modified 32431 */ 32432 function flip(data, options) { 32433 // if `inner` modifier is enabled, we can't use the `flip` modifier 32434 if (isModifierEnabled(data.instance.modifiers, 'inner')) { 32435 return data; 32436 } 32437 32438 if (data.flipped && data.placement === data.originalPlacement) { 32439 // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides 32440 return data; 32441 } 32442 32443 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); 32444 32445 var placement = data.placement.split('-')[0]; 32446 var placementOpposite = getOppositePlacement(placement); 32447 var variation = data.placement.split('-')[1] || ''; 32448 32449 var flipOrder = []; 32450 32451 switch (options.behavior) { 32452 case BEHAVIORS.FLIP: 32453 flipOrder = [placement, placementOpposite]; 32454 break; 32455 case BEHAVIORS.CLOCKWISE: 32456 flipOrder = clockwise(placement); 32457 break; 32458 case BEHAVIORS.COUNTERCLOCKWISE: 32459 flipOrder = clockwise(placement, true); 32460 break; 32461 default: 32462 flipOrder = options.behavior; 32463 } 32464 32465 flipOrder.forEach(function (step, index) { 32466 if (placement !== step || flipOrder.length === index + 1) { 32467 return data; 32468 } 32469 32470 placement = data.placement.split('-')[0]; 32471 placementOpposite = getOppositePlacement(placement); 32472 32473 var popperOffsets = data.offsets.popper; 32474 var refOffsets = data.offsets.reference; 32475 32476 // using floor because the reference offsets may contain decimals we are not going to consider here 32477 var floor = Math.floor; 32478 var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); 32479 32480 var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); 32481 var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); 32482 var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); 32483 var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); 32484 32485 var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; 32486 32487 // flip the variation if required 32488 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 32489 var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom)
vendor: 15,391 bytes, lines 32489-32929
32489; 32490 32491 if (overlapsRef || overflowsBoundaries || flippedVariation) { 32492 // this boolean to detect any flip loop 32493 data.flipped = true; 32494 32495 if (overlapsRef || overflowsBoundaries) { 32496 placement = flipOrder[index + 1]; 32497 } 32498 32499 if (flippedVariation) { 32500 variation = getOppositeVariation(variation); 32501 } 32502 32503 data.placement = placement + (variation ? '-' + variation : ''); 32504 32505 // this object contains `position`, we want to preserve it along with 32506 // any additional property we may add in the future 32507 data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); 32508 32509 data = runModifiers(data.instance.modifiers, data, 'flip'); 32510 } 32511 }); 32512 return data; 32513 } 32514 32515 /** 32516 * @function 32517 * @memberof Modifiers 32518 * @argument {Object} data - The data object generated by update method 32519 * @argument {Object} options - Modifiers configuration and options 32520 * @returns {Object} The data object, properly modified 32521 */ 32522 function keepTogether(data) { 32523 var _data$offsets = data.offsets, 32524 popper = _data$offsets.popper, 32525 reference = _data$offsets.reference; 32526 32527 var placement = data.placement.split('-')[0]; 32528 var floor = Math.floor; 32529 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 32530 var side = isVertical ? 'right' : 'bottom'; 32531 var opSide = isVertical ? 'left' : 'top'; 32532 var measurement = isVertical ? 'width' : 'height'; 32533 32534 if (popper[side] < floor(reference[opSide])) { 32535 data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; 32536 } 32537 if (popper[opSide] > floor(reference[side])) { 32538 data.offsets.popper[opSide] = floor(reference[side]); 32539 } 32540 32541 return data; 32542 } 32543 32544 /** 32545 * Converts a string containing value + unit into a px value number 32546 * @function 32547 * @memberof {modifiers~offset} 32548 * @private 32549 * @argument {String} str - Value + unit string 32550 * @argument {String} measurement - `height` or `width` 32551 * @argument {Object} popperOffsets 32552 * @argument {Object} referenceOffsets 32553 * @returns {Number|String} 32554 * Value in pixels, or original string if no values were extracted 32555 */ 32556 function toValue(str, measurement, popperOffsets, referenceOffsets) { 32557 // separate value from unit 32558 var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); 32559 var value = +split[1]; 32560 var unit = split[2]; 32561 32562 // If it's not a number it's an operator, I guess 32563 if (!value) { 32564 return str; 32565 } 32566 32567 if (unit.indexOf('%') === 0) { 32568 var element = void 0; 32569 switch (unit) { 32570 case '%p': 32571 element = popperOffsets; 32572 break; 32573 case '%': 32574 case '%r': 32575 default: 32576 element = referenceOffsets; 32577 } 32578 32579 var rect = getClientRect(element); 32580 return rect[measurement] / 100 * value; 32581 } else if (unit === 'vh' || unit === 'vw') { 32582 // if is a vh or vw, we calculate the size based on the viewport 32583 var size = void 0; 32584 if (unit === 'vh') { 32585 size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 32586 } else { 32587 size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 32588 } 32589 return size / 100 * value; 32590 } else { 32591 // if is an explicit pixel unit, we get rid of the unit and keep the value 32592 // if is an implicit unit, it's px, and we return just the value 32593 return value; 32594 } 32595 } 32596 32597 /** 32598 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. 32599 * @function 32600 * @memberof {modifiers~offset} 32601 * @private 32602 * @argument {String} offset 32603 * @argument {Object} popperOffsets 32604 * @argument {Object} referenceOffsets 32605 * @argument {String} basePlacement 32606 * @returns {Array} a two cells array with x and y offsets in numbers 32607 */ 32608 function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { 32609 var offsets = [0, 0]; 32610 32611 // Use height if placement is left or right and index is 0 otherwise use width 32612 // in this way the first offset will use an axis and the second one 32613 // will use the other one 32614 var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; 32615 32616 // Split the offset string to obtain a list of values and operands 32617 // The regex addresses values with the plus or minus sign in front (+10, -20, etc) 32618 var fragments = offset.split(/(\+|\-)/).map(function (frag) { 32619 return frag.trim(); 32620 }); 32621 32622 // Detect if the offset string contains a pair of values or a single one 32623 // they could be separated by comma or space 32624 var divider = fragments.indexOf(find(fragments, function (frag) { 32625 return frag.search(/,|\s/) !== -1; 32626 })); 32627 32628 if (fragments[divider] && fragments[divider].indexOf(',') === -1) { 32629 console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); 32630 } 32631 32632 // If divider is found, we divide the list of values and operands to divide 32633 // them by ofset X and Y. 32634 var splitRegex = /\s*,\s*|\s+/; 32635 var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; 32636 32637 // Convert the values with units to absolute pixels to allow our computations 32638 ops = ops.map(function (op, index) { 32639 // Most of the units rely on the orientation of the popper 32640 var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; 32641 var mergeWithPrevious = false; 32642 return op 32643 // This aggregates any `+` or `-` sign that aren't considered operators 32644 // e.g.: 10 + +5 => [10, +, +5] 32645 .reduce(function (a, b) { 32646 if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { 32647 a[a.length - 1] = b; 32648 mergeWithPrevious = true; 32649 return a; 32650 } else if (mergeWithPrevious) { 32651 a[a.length - 1] += b; 32652 mergeWithPrevious = false; 32653 return a; 32654 } else { 32655 return a.concat(b); 32656 } 32657 }, []) 32658 // Here we convert the string values into number values (in px) 32659 .map(function (str) { 32660 return toValue(str, measurement, popperOffsets, referenceOffsets); 32661 }); 32662 }); 32663 32664 // Loop trough the offsets arrays and execute the operations 32665 ops.forEach(function (op, index) { 32666 op.forEach(function (frag, index2) { 32667 if (isNumeric(frag)) { 32668 offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); 32669 } 32670 }); 32671 }); 32672 return offsets; 32673 } 32674 32675 /** 32676 * @function 32677 * @memberof Modifiers 32678 * @argument {Object} data - The data object generated by update method 32679 * @argument {Object} options - Modifiers configuration and options 32680 * @argument {Number|String} options.offset=0 32681 * The offset value as described in the modifier description 32682 * @returns {Object} The data object, properly modified 32683 */ 32684 function offset(data, _ref) { 32685 var offset = _ref.offset; 32686 var placement = data.placement, 32687 _data$offsets = data.offsets, 32688 popper = _data$offsets.popper, 32689 reference = _data$offsets.reference; 32690 32691 var basePlacement = placement.split('-')[0]; 32692 32693 var offsets = void 0; 32694 if (isNumeric(+offset)) { 32695 offsets = [+offset, 0]; 32696 } else { 32697 offsets = parseOffset(offset, popper, reference, basePlacement); 32698 } 32699 32700 if (basePlacement === 'left') { 32701 popper.top += offsets[0]; 32702 popper.left -= offsets[1]; 32703 } else if (basePlacement === 'right') { 32704 popper.top += offsets[0]; 32705 popper.left += offsets[1]; 32706 } else if (basePlacement === 'top') { 32707 popper.left += offsets[0]; 32708 popper.top -= offsets[1]; 32709 } else if (basePlacement === 'bottom') { 32710 popper.left += offsets[0]; 32711 popper.top += offsets[1]; 32712 } 32713 32714 data.popper = popper; 32715 return data; 32716 } 32717 32718 /** 32719 * @function 32720 * @memberof Modifiers 32721 * @argument {Object} data - The data object generated by `update` method 32722 * @argument {Object} options - Modifiers configuration and options 32723 * @returns {Object} The data object, properly modified 32724 */ 32725 function preventOverflow(data, options) { 32726 var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); 32727 32728 // If offsetParent is the reference element, we really want to 32729 // go one step up and use the next offsetParent as reference to 32730 // avoid to make this modifier completely useless and look like broken 32731 if (data.instance.reference === boundariesElement) { 32732 boundariesElement = getOffsetParent(boundariesElement); 32733 } 32734 32735 // NOTE: DOM access here 32736 // resets the popper's position so that the document size can be calculated excluding 32737 // the size of the popper element itself 32738 var transformProp = getSupportedPropertyName('transform'); 32739 var popperStyles = data.instance.popper.style; // assignment to help minification 32740 var top = popperStyles.top, 32741 left = popperStyles.left, 32742 transform = popperStyles[transformProp]; 32743 32744 popperStyles.top = ''; 32745 popperStyles.left = ''; 32746 popperStyles[transformProp] = ''; 32747 32748 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); 32749 32750 // NOTE: DOM access here 32751 // restores the original style properties after the offsets have been computed 32752 popperStyles.top = top; 32753 popperStyles.left = left; 32754 popperStyles[transformProp] = transform; 32755 32756 options.boundaries = boundaries; 32757 32758 var order = options.priority; 32759 var popper = data.offsets.popper; 32760 32761 var check = { 32762 primary: function primary(placement) { 32763 var value = popper[placement]; 32764 if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { 32765 value = Math.max(popper[placement], boundaries[placement]); 32766 } 32767 return defineProperty({}, placement, value); 32768 }, 32769 secondary: function secondary(placement) { 32770 var mainSide = placement === 'right' ? 'left' : 'top'; 32771 var value = popper[mainSide]; 32772 if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { 32773 value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); 32774 } 32775 return defineProperty({}, mainSide, value); 32776 } 32777 }; 32778 32779 order.forEach(function (placement) { 32780 var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; 32781 popper = _extends({}, popper, check[side](placement)); 32782 }); 32783 32784 data.offsets.popper = popper; 32785 32786 return data; 32787 } 32788 32789 /** 32790 * @function 32791 * @memberof Modifiers 32792 * @argument {Object} data - The data object generated by `update` method 32793 * @argument {Object} options - Modifiers configuration and options 32794 * @returns {Object} The data object, properly modified 32795 */ 32796 function shift(data) { 32797 var placement = data.placement; 32798 var basePlacement = placement.split('-')[0]; 32799 var shiftvariation = placement.split('-')[1]; 32800 32801 // if shift shiftvariation is specified, run the modifier 32802 if (shiftvariation) { 32803 var _data$offsets = data.offsets, 32804 reference = _data$offsets.reference, 32805 popper = _data$offsets.popper; 32806 32807 var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; 32808 var side = isVertical ? 'left' : 'top'; 32809 var measurement = isVertical ? 'width' : 'height'; 32810 32811 var shiftOffsets = { 32812 start: defineProperty({}, side, reference[side]), 32813 end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) 32814 }; 32815 32816 data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); 32817 } 32818 32819 return data; 32820 } 32821 32822 /** 32823 * @function 32824 * @memberof Modifiers 32825 * @argument {Object} data - The data object generated by update method 32826 * @argument {Object} options - Modifiers configuration and options 32827 * @returns {Object} The data object, properly modified 32828 */ 32829 function hide(data) { 32830 if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { 32831 return data; 32832 } 32833 32834 var refRect = data.offsets.reference; 32835 var bound = find(data.instance.modifiers, function (modifier) { 32836 return modifier.name === 'preventOverflow'; 32837 }).boundaries; 32838 32839 if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { 32840 // Avoid unnecessary DOM access if visibility hasn't changed 32841 if (data.hide === true) { 32842 return data; 32843 } 32844 32845 data.hide = true; 32846 data.attributes['x-out-of-boundaries'] = ''; 32847 } else { 32848 // Avoid unnecessary DOM access if visibility hasn't changed 32849 if (data.hide === false) { 32850 return data; 32851 } 32852 32853 data.hide = false; 32854 data.attributes['x-out-of-boundaries'] = false; 32855 } 32856 32857 return data; 32858 } 32859 32860 /** 32861 * @function 32862 * @memberof Modifiers 32863 * @argument {Object} data - The data object generated by `update` method 32864 * @argument {Object} options - Modifiers configuration and options 32865 * @returns {Object} The data object, properly modified 32866 */ 32867 function inner(data) { 32868 var placement = data.placement; 32869 var basePlacement = placement.split('-')[0]; 32870 var _data$offsets = data.offsets, 32871 popper = _data$offsets.popper, 32872 reference = _data$offsets.reference; 32873 32874 var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; 32875 32876 var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; 32877 32878 popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); 32879 32880 data.placement = getOppositePlacement(placement); 32881 data.offsets.popper = getClientRect(popper); 32882 32883 return data; 32884 } 32885 32886 /** 32887 * Modifier function, each modifier can have a function of this type assigned 32888 * to its `fn` property.<br /> 32889 * These functions will be called on each update, this means that you must 32890 * make sure they are performant enough to avoid performance bottlenecks. 32891 * 32892 * @function ModifierFn 32893 * @argument {dataObject} data - The data object generated by `update` method 32894 * @argument {Object} options - Modifiers configuration and options 32895 * @returns {dataObject} The data object, properly modified 32896 */ 32897 32898 /** 32899 * Modifiers are plugins used to alter the behavior of your poppers.<br /> 32900 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities 32901 * needed by the library. 32902 * 32903 * Usually you don't want to override the `order`, `fn` and `onLoad` props. 32904 * All the other properties are configurations that could be tweaked. 32905 * @namespace modifiers 32906 */ 32907 var modifiers = { 32908 /** 32909 * Modifier used to shift the popper on the start or end of its reference 32910 * element.<br /> 32911 * It will read the variation of the `placement` property.<br /> 32912 * It can be one either `-end` or `-start`. 32913 * @memberof modifiers 32914 * @inner 32915 */ 32916 shift: { 32917 /** @prop {number} order=100 - Index used to define the order of execution */ 32918 order: 100, 32919 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 32920 enabled: true, 32921 /** @prop {ModifierFn} */ 32922 fn: shift 32923 }, 32924 32925 /** 32926 * The `offset` modifier can shift your popper on both its axis. 32927 * 32928 * It accepts the following units: 32929 * - `px` or unit
32929less, interpreted as pixels 32930 * - `%` or `%r`, percentage relative to the length of the reference element 32931 * - `%p`, percentage relative to the length of the popper element 32932 * - `vw`, CSS viewport width unit 32933 * - `vh`, CSS viewport height unit 32934 * 32935 * For length is intended the main axis relative to the placement of the popper.<br /> 32936 * This means that if the placement is `top` or `bottom`, the length will be the 32937 * `width`. In case of `left` or `right`, it will be the height. 32938 * 32939 * You can provide a single value (as `Number` or `String`), or a pair of values 32940 * as `String` divided by a comma or one (or more) white spaces.<br /> 32941 * The latter is a deprecated method because it leads to confusion and will be 32942 * removed in v2.<br /> 32943 * Additionally, it accepts additions and subtractions between different units. 32944 * Note that multiplications and divisions aren't supported. 32945 * 32946 * Valid examples are: 32947 * ``` 32948 * 10 32949 * '10%' 32950 * '10, 10' 32951 * '10%, 10' 32952 * '10 + 10%' 32953 * '10 - 5vh + 3%' 32954 * '-10px + 5vh, 5px - 6%' 32955 * ``` 32956 * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap 32957 * > with their reference element, unfortunately, you will have to disable the `flip` modifier. 32958 * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373) 32959 * 32960 * @memberof modifiers 32961 * @inner 32962 */ 32963 offset: { 32964 /** @prop {number} order=200 - Index used to define the order of execution */ 32965 order: 200, 32966 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 32967 enabled: true, 32968 /** @prop {ModifierFn} */ 32969 fn: offset, 32970 /** @prop {Number|String} offset=0 32971 * The offset value as described in the modifier description 32972 */ 32973 offset: 0 32974 }, 32975 32976 /** 32977 * Modifier used to prevent the popper from being positioned outside the boundary. 32978 * 32979 * An scenario exists where the reference itself is not within the boundaries.<br /> 32980 * We can say it has "escaped the boundaries" â or just "escaped".<br /> 32981 * In this case we need to decide whether the popper should either: 32982 * 32983 * - detach from the reference and remain "trapped" in the boundaries, or 32984 * - if it should ignore the boundary and "escape with its reference" 32985 * 32986 * When `escapeWithReference` is set to`true` and reference is completely 32987 * outside its boundaries, the popper will overflow (or completely leave) 32988 * the boundaries in order to remain attached to the edge of the reference. 32989 * 32990 * @memberof modifiers 32991 * @inner 32992 */ 32993 preventOverflow: { 32994 /** @prop {number} order=300 - Index used to define the order of execution */ 32995 order: 300, 32996 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 32997 enabled: true, 32998 /** @prop {ModifierFn} */ 32999 fn: preventOverflow, 33000 /** 33001 * @prop {Array} [priority=['left','right','top','bottom']] 33002 * Popper will try to prevent overflow following these priorities by default, 33003 * then, it could overflow on the left and on top of the `boundariesElement` 33004 */ 33005 priority: ['left', 'right', 'top', 'bottom'], 33006 /** 33007 * @prop {number} padding=5 33008 * Amount of pixel used to define a minimum distance between the boundaries 33009 * and the popper this makes sure the popper has always a little padding 33010 * between the edges of its container 33011 */ 33012 padding: 5, 33013 /** 33014 * @prop {String|HTMLElement} boundariesElement='scrollParent' 33015 * Boundaries used by the modifier, can be `scrollParent`, `window`, 33016 * `viewport` or any DOM element. 33017 */ 33018 boundariesElement: 'scrollParent' 33019 }, 33020 33021 /** 33022 * Modifier used to make sure the reference and its popper stay near eachothers 33023 * without leaving any gap between the two. Expecially useful when the arrow is 33024 * enabled and you want to assure it to point to its reference element. 33025 * It cares only about the first axis, you can still have poppers with margin 33026 * between the popper and its reference element. 33027 * @memberof modifiers 33028 * @inner 33029 */ 33030 keepTogether: { 33031 /** @prop {number} order=400 - Index used to define the order of execution */ 33032 order: 400, 33033 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 33034 enabled: true, 33035 /** @prop {ModifierFn} */ 33036 fn: keepTogether 33037 }, 33038 33039 /** 33040 * This modifier is used to move the `arrowElement` of the popper to make 33041 * sure it is positioned between the reference element and its popper element. 33042 * It will read the outer size of the `arrowElement` node to detect how many 33043 * pixels of conjuction are needed. 33044 * 33045 * It has no effect if no `arrowElement` is provided. 33046 * @memberof modifiers 33047 * @inner 33048 */ 33049 arrow: { 33050 /** @prop {number} order=500 - Index used to define the order of execution */ 33051 order: 500, 33052 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 33053 enabled: true, 33054 /** @prop {ModifierFn} */ 33055 fn: arrow, 33056 /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ 33057 element: '[x-arrow]' 33058 }, 33059 33060 /** 33061 * Modifier used to flip the popper's placement when it starts to overlap its 33062 * reference element. 33063 * 33064 * Requires the `preventOverflow` modifier before it in order to work. 33065 * 33066 * **NOTE:** this modifier will interrupt the current update cycle and will 33067 * restart it if it detects the need to flip the placement. 33068 * @memberof modifiers 33069 * @inner 33070 */ 33071 flip: { 33072 /** @prop {number} order=600 - Index used to define the order of execution */ 33073 order: 600, 33074 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 33075 enabled: true, 33076 /** @prop {ModifierFn} */ 33077 fn: flip, 33078 /** 33079 * @prop {String|Array} behavior='flip' 33080 * The behavior used to change the popper's placement. It can be one of 33081 * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid 33082 * placements (with optional variations). 33083 */ 33084 behavior: 'flip', 33085 /** 33086 * @prop {number} padding=5 33087 * The popper will flip if it hits the edges of the `boundariesElement` 33088 */ 33089 padding: 5, 33090 /** 33091 * @prop {String|HTMLElement} boundariesElement='viewport' 33092 * The element which will define the boundaries of the popper position, 33093 * the popper will never be placed outside of the defined boundaries 33094 * (except if keepTogether is enabled) 33095 */ 33096 boundariesElement: 'viewport' 33097 }, 33098 33099 /** 33100 * Modifier used to make the popper flow toward the inner of the reference element. 33101 * By default, when this modifier is disabled, the popper will be placed outside 33102 * the reference element. 33103 * @memberof modifiers 33104 * @inner 33105 */ 33106 inner: { 33107 /** @prop {number} order=700 - Index used to define the order of execution */ 33108 order: 700, 33109 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ 33110 enabled: false, 33111 /** @prop {ModifierFn} */ 33112 fn: inner 33113 }, 33114 33115 /** 33116 * Modifier used to hide the popper when its reference element is outside of the 33117 * popper boundaries. It will set a `x-out-of-boundaries` attribute which can 33118 * be used to hide with a CSS selector the popper when its reference is 33119 * out of boundaries. 33120 * 33121 * Requires the `preventOverflow` modifier before it in order to work. 33122 * @memberof modifiers 33123 * @inner 33124 */ 33125 hide: { 33126 /** @prop {number} order=800 - Index used to define the order of execution */ 33127 order: 800, 33128 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 33129 enabled: true, 33130 /** @prop {ModifierFn} */ 33131 fn: hide 33132 }, 33133 33134 /** 33135 * Computes the style that will be applied to the popper element to gets 33136 * properly positioned. 33137 * 33138 * Note that this modifier will not touch the DOM, it just prepares the styles 33139 * so that `applyStyle` modifier can apply it. This separation is useful 33140 * in case you need to replace `applyStyle` with a custom implementation. 33141 * 33142 * This modifier has `850` as `order` value to maintain backward compatibility 33143 * with previous versions of Popper.js. Expect the modifiers ordering method 33144 * to change in future major versions of the library. 33145 * 33146 * @memberof modifiers 33147 * @inner 33148 */ 33149 computeStyle: { 33150 /** @prop {number} order=850 - Index used to define the order of execution */ 33151 order: 850, 33152 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 33153 enabled: true, 33154 /** @prop {ModifierFn} */ 33155 fn: computeStyle, 33156 /** 33157 * @prop {Boolean} gpuAcceleration=true 33158 * If true, it uses the CSS 3d transformation to position the popper. 33159 * Otherwise, it will use the `top` and `left` properties. 33160 */ 33161 gpuAcceleration: true, 33162 /** 33163 * @prop {string} [x='bottom'] 33164 * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. 33165 * Change this if your popper should grow in a direction different from `bottom` 33166 */ 33167 x: 'bottom', 33168 /** 33169 * @prop {string} [x='left'] 33170 * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. 33171 * Change this if your popper should grow in a direction different from `right` 33172 */ 33173 y: 'right' 33174 }, 33175 33176 /** 33177 * Applies the computed styles to the popper element. 33178 * 33179 * All the DOM manipulations are limited to this modifier. This is useful in case 33180 * you want to integrate Popper.js inside a framework or view library and you 33181 * want to delegate all the DOM manipulations to it. 33182 * 33183 * Note that if you disable this modifier, you must make sure the popper element 33184 * has its position set to `absolute` before Popper.js can do its work! 33185 * 33186 * Just disable this modifier and define you own to achieve the desired effect. 33187 * 33188 * @memberof modifiers 33189 * @inner 33190 */ 33191 applyStyle: { 33192 /** @prop {number} order=900 - Index used to define the order of execution */ 33193 order: 900, 33194 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 33195 enabled: true, 33196 /** @prop {ModifierFn} */
vendor: 5,047 bytes, lines 33197-33335
33197 fn: applyStyle, 33198 /** @prop {Function} */ 33199 onLoad: applyStyleOnLoad, 33200 /** 33201 * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier 33202 * @prop {Boolean} gpuAcceleration=true 33203 * If true, it uses the CSS 3d transformation to position the popper. 33204 * Otherwise, it will use the `top` and `left` properties. 33205 */ 33206 gpuAcceleration: undefined 33207 } 33208 }; 33209 33210 /** 33211 * The `dataObject` is an object containing all the informations used by Popper.js 33212 * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks. 33213 * @name dataObject 33214 * @property {Object} data.instance The Popper.js instance 33215 * @property {String} data.placement Placement applied to popper 33216 * @property {String} data.originalPlacement Placement originally defined on init 33217 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier 33218 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper. 33219 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier 33220 * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`) 33221 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`) 33222 * @property {Object} data.boundaries Offsets of the popper boundaries 33223 * @property {Object} data.offsets The measurements of popper, reference and arrow elements. 33224 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values 33225 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values 33226 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 33227 */ 33228 33229 /** 33230 * Default options provided to Popper.js constructor.<br /> 33231 * These can be overriden using the `options` argument of Popper.js.<br /> 33232 * To override an option, simply pass as 3rd argument an object with the same 33233 * structure of this object, example: 33234 * ``` 33235 * new Popper(ref, pop, { 33236 * modifiers: { 33237 * preventOverflow: { enabled: false } 33238 * } 33239 * }) 33240 * ``` 33241 * @type {Object} 33242 * @static 33243 * @memberof Popper 33244 */ 33245 var Defaults = { 33246 /** 33247 * Popper's placement 33248 * @prop {Popper.placements} placement='bottom' 33249 */ 33250 placement: 'bottom', 33251 33252 /** 33253 * Set this to true if you want popper to position it self in 'fixed' mode 33254 * @prop {Boolean} positionFixed=false 33255 */ 33256 positionFixed: false, 33257 33258 /** 33259 * Whether events (resize, scroll) are initially enabled 33260 * @prop {Boolean} eventsEnabled=true 33261 */ 33262 eventsEnabled: true, 33263 33264 /** 33265 * Set to true if you want to automatically remove the popper when 33266 * you call the `destroy` method. 33267 * @prop {Boolean} removeOnDestroy=false 33268 */ 33269 removeOnDestroy: false, 33270 33271 /** 33272 * Callback called when the popper is created.<br /> 33273 * By default, is set to no-op.<br /> 33274 * Access Popper.js instance with `data.instance`. 33275 * @prop {onCreate} 33276 */ 33277 onCreate: function onCreate() {}, 33278 33279 /** 33280 * Callback called when the popper is updated, this callback is not called 33281 * on the initialization/creation of the popper, but only on subsequent 33282 * updates.<br /> 33283 * By default, is set to no-op.<br /> 33284 * Access Popper.js instance with `data.instance`. 33285 * @prop {onUpdate} 33286 */ 33287 onUpdate: function onUpdate() {}, 33288 33289 /** 33290 * List of modifiers used to modify the offsets before they are applied to the popper. 33291 * They provide most of the functionalities of Popper.js 33292 * @prop {modifiers} 33293 */ 33294 modifiers: modifiers 33295 }; 33296 33297 /** 33298 * @callback onCreate 33299 * @param {dataObject} data 33300 */ 33301 33302 /** 33303 * @callback onUpdate 33304 * @param {dataObject} data 33305 */ 33306 33307 // Utils 33308 // Methods 33309 var Popper = function () { 33310 /** 33311 * Create a new Popper.js instance 33312 * @class Popper 33313 * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper 33314 * @param {HTMLElement} popper - The HTML element used as popper. 33315 * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) 33316 * @return {Object} instance - The generated Popper.js instance 33317 */ 33318 function Popper(reference, popper) { 33319 var _this = this; 33320 33321 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 33322 classCallCheck(this, Popper); 33323 33324 this.scheduleUpdate = function () { 33325 return requestAnimationFrame(_this.update); 33326 }; 33327 33328 // make update() debounced, so that it only runs at most once-per-tick 33329 this.update = debounce(this.update.bind(this)); 33330 33331 // with {} we create a new object with the options inside it 33332 this.options = _extends({}, Popper.Defaults, options); 33333 33334 // init state 33335 this.state = {
vendor: 7,957 bytes, lines 33336-33568
33336 isDestroyed: false, 33337 isCreated: false, 33338 scrollParents: [] 33339 }; 33340 33341 // get reference and popper elements (allow jQuery wrappers) 33342 this.reference = reference && reference.jquery ? reference[0] : reference; 33343 this.popper = popper && popper.jquery ? popper[0] : popper; 33344 33345 // Deep merge modifiers options 33346 this.options.modifiers = {}; 33347 Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { 33348 _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); 33349 }); 33350 33351 // Refactoring modifiers' list (Object => Array) 33352 this.modifiers = Object.keys(this.options.modifiers).map(function (name) { 33353 return _extends({ 33354 name: name 33355 }, _this.options.modifiers[name]); 33356 }) 33357 // sort the modifiers by order 33358 .sort(function (a, b) { 33359 return a.order - b.order; 33360 }); 33361 33362 // modifiers have the ability to execute arbitrary code when Popper.js get inited 33363 // such code is executed in the same order of its modifier 33364 // they could add new properties to their options configuration 33365 // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! 33366 this.modifiers.forEach(function (modifierOptions) { 33367 if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { 33368 modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); 33369 } 33370 }); 33371 33372 // fire the first update to position the popper in the right place 33373 this.update(); 33374 33375 var eventsEnabled = this.options.eventsEnabled; 33376 if (eventsEnabled) { 33377 // setup event listeners, they will take care of update the position in specific situations 33378 this.enableEventListeners(); 33379 } 33380 33381 this.state.eventsEnabled = eventsEnabled; 33382 } 33383 33384 // We can't use class properties because they don't get listed in the 33385 // class prototype and break stuff like Sinon stubs 33386 33387 33388 createClass(Popper, [{ 33389 key: 'update', 33390 value: function update$$1() { 33391 return update.call(this); 33392 } 33393 }, { 33394 key: 'destroy', 33395 value: function destroy$$1() { 33396 return destroy.call(this); 33397 } 33398 }, { 33399 key: 'enableEventListeners', 33400 value: function enableEventListeners$$1() { 33401 return enableEventListeners.call(this); 33402 } 33403 }, { 33404 key: 'disableEventListeners', 33405 value: function disableEventListeners$$1() { 33406 return disableEventListeners.call(this); 33407 } 33408 33409 /** 33410 * Schedule an update, it will run on the next UI update available 33411 * @method scheduleUpdate 33412 * @memberof Popper 33413 */ 33414 33415 33416 /** 33417 * Collection of utilities useful when writing custom modifiers. 33418 * Starting from version 1.7, this method is available only if you 33419 * include `popper-utils.js` before `popper.js`. 33420 * 33421 * **DEPRECATION**: This way to access PopperUtils is deprecated 33422 * and will be removed in v2! Use the PopperUtils module directly instead. 33423 * Due to the high instability of the methods contained in Utils, we can't 33424 * guarantee them to follow semver. Use them at your own risk! 33425 * @static 33426 * @private 33427 * @type {Object} 33428 * @deprecated since version 1.8 33429 * @member Utils 33430 * @memberof Popper 33431 */ 33432 33433 }]); 33434 return Popper; 33435 }(); 33436 33437 /** 33438 * The `referenceObject` is an object that provides an interface compatible with Popper.js 33439 * and lets you use it as replacement of a real DOM node.<br /> 33440 * You can use this method to position a popper relatively to a set of coordinates 33441 * in case you don't have a DOM node to use as reference. 33442 * 33443 * ``` 33444 * new Popper(referenceObject, popperNode); 33445 * ``` 33446 * 33447 * NB: This feature isn't supported in Internet Explorer 10 33448 * @name referenceObject 33449 * @property {Function} data.getBoundingClientRect 33450 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. 33451 * @property {number} data.clientWidth 33452 * An ES6 getter that will return the width of the virtual reference element. 33453 * @property {number} data.clientHeight 33454 * An ES6 getter that will return the height of the virtual reference element. 33455 */ 33456 33457 33458 Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; 33459 Popper.placements = placements; 33460 Popper.Defaults = Defaults; 33461 33462 /** 33463 * -------------------------------------------------------------------------- 33464 * Bootstrap (v4.1.3): dropdown.js 33465 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 33466 * -------------------------------------------------------------------------- 33467 */ 33468 33469 var Dropdown = function ($$$1) { 33470 /** 33471 * ------------------------------------------------------------------------ 33472 * Constants 33473 * ------------------------------------------------------------------------ 33474 */ 33475 var NAME = 'dropdown'; 33476 var VERSION = '4.1.3'; 33477 var DATA_KEY = 'bs.dropdown'; 33478 var EVENT_KEY = "." + DATA_KEY; 33479 var DATA_API_KEY = '.data-api'; 33480 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 33481 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 33482 33483 var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key 33484 33485 var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key 33486 33487 var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key 33488 33489 var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key 33490 33491 var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) 33492 33493 var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); 33494 var Event = { 33495 HIDE: "hide" + EVENT_KEY, 33496 HIDDEN: "hidden" + EVENT_KEY, 33497 SHOW: "show" + EVENT_KEY, 33498 SHOWN: "shown" + EVENT_KEY, 33499 CLICK: "click" + EVENT_KEY, 33500 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, 33501 KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, 33502 KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY 33503 }; 33504 var ClassName = { 33505 DISABLED: 'disabled', 33506 SHOW: 'show', 33507 DROPUP: 'dropup', 33508 DROPRIGHT: 'dropright', 33509 DROPLEFT: 'dropleft', 33510 MENURIGHT: 'dropdown-menu-right', 33511 MENULEFT: 'dropdown-menu-left', 33512 POSITION_STATIC: 'position-static' 33513 }; 33514 var Selector = { 33515 DATA_TOGGLE: '[data-toggle="dropdown"]', 33516 FORM_CHILD: '.dropdown form', 33517 MENU: '.dropdown-menu', 33518 NAVBAR_NAV: '.navbar-nav', 33519 VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' 33520 }; 33521 var AttachmentMap = { 33522 TOP: 'top-start', 33523 TOPEND: 'top-end', 33524 BOTTOM: 'bottom-start', 33525 BOTTOMEND: 'bottom-end', 33526 RIGHT: 'right-start', 33527 RIGHTEND: 'right-end', 33528 LEFT: 'left-start', 33529 LEFTEND: 'left-end' 33530 }; 33531 var Default = { 33532 offset: 0, 33533 flip: true, 33534 boundary: 'scrollParent', 33535 reference: 'toggle', 33536 display: 'dynamic' 33537 }; 33538 var DefaultType = { 33539 offset: '(number|string|function)', 33540 flip: 'boolean', 33541 boundary: '(string|element)', 33542 reference: '(string|element)', 33543 display: 'string' 33544 /** 33545 * ------------------------------------------------------------------------ 33546 * Class Definition 33547 * ------------------------------------------------------------------------ 33548 */ 33549 33550 }; 33551 33552 var Dropdown = 33553 /*#__PURE__*/ 33554 function () { 33555 function Dropdown(element, config) { 33556 this._element = element; 33557 this._popper = null; 33558 this._config = this._getConfig(config); 33559 this._menu = this._getMenuElement(); 33560 this._inNavbar = this._detectNavbar(); 33561 33562 this._addEventListeners(); 33563 } // Getters 33564 33565 33566 var _proto = Dropdown.prototype; 33567 33568 // Public
33569 _proto.toggle = function toggle() { 33570 if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { 33571 return; 33572 } 33573 33574 var parent = Dropdown._getParentFromElement(this._element); 33575 33576 var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); 33577 33578 Dropdown._clearMenus(); 33579 33580 if (isActive) { 33581 return; 33582 } 33583 33584 var relatedTarget = { 33585 relatedTarget: this._element 33586 }; 33587 var showEvent = $$$1.Event(Event.SHOW, relatedTarget); 33588 $$$1(parent).trigger(showEvent); 33589 33590 if (showEvent.isDefaultPrevented()) { 33591 return; 33592 } // Disable totally Popper.js for Dropdown in Navbar 33593 33594 33595 if (!this._inNavbar) { 33596 /** 33597 * Check for Popper dependency 33598 * Popper - https://popper.js.org 33599 */ 33600 if (typeof Popper === 'undefined') { 33601 throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); 33602 } 33603 33604 var referenceElement = this._element; 33605 33606 if (this._config.reference === 'parent') { 33607 referenceElement = parent; 33608 } else if (Util.isElement(this._config.reference)) { 33609 referenceElement = this._config.reference; // Check if it's jQuery element 33610 33611 if (typeof this._config.reference.jquery !== 'undefined') { 33612 referenceElement = this._config.reference[0]; 33613 } 33614 } // If boundary is not `scrollParent`, then set position to `static` 33615 // to allow the menu to "escape" the scroll parent's boundaries 33616 // https://github.com/twbs/bootstrap/issues/24251 33617 33618 33619 if (this._config.boundary !== 'scrollParent') { 33620 $$$1(parent).addClass(ClassName.POSITION_STATIC); 33621 } 33622 33623 this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); 33624 } // If this is a touch-enabled device we add extra 33625 // empty mouseover listeners to the body's immediate children; 33626 // only needed because of broken event delegation on iOS 33627 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 33628 33629 33630 if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { 33631 $$$1(document.body).children().on('mouseover', null, $$$1.noop); 33632 } 33633 33634 this._element.focus(); 33635 33636 this._element.setAttribute('aria-expanded', true); 33637 33638 $$$1(this._menu).toggleClass(ClassName.SHOW); 33639 $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); 33640 }; 33641 33642 _proto.dispose = function dispose() { 33643 $$$1.removeData(this._element, DATA_KEY); 33644 $$$1(this._element).off(EVENT_KEY); 33645 this._element = null; 33646 this._menu = null; 33647 33648 if (this._popper !== null) { 33649 this._popper.destroy(); 33650 33651 this._popper = null; 33652 } 33653 }; 33654 33655 _proto.update = function update() { 33656 this._inNavbar = this._detectNavbar(); 33657 33658 if (this._popper !== null) { 33659 this._popper.scheduleUpdate(); 33660 } 33661 }; // Private 33662 33663 33664 _proto._addEventListeners = function _addEventListeners() { 33665 var _this = this; 33666 33667 $$$1(this._element).on(Event.CLICK, function (event) { 33668 event.preventDefault(); 33669 event.stopPropagation(); 33670 33671 _this.toggle(); 33672 }); 33673 }; 33674 33675 _proto._getConfig = function _getConfig(config) { 33676 config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); 33677 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 33678 return config; 33679 }; 33680 33681 _proto._getMenuElement = function _getMenuElement() { 33682 if (!this._menu) { 33683 var parent = Dropdown._getParentFromElement(this._element); 33684 33685 if (parent) { 33686 this._menu = parent.querySelector(Selector.MENU); 33687 } 33688 } 33689 33690 return this._menu; 33691 }; 33692 33693 _proto._getPlacement = function _getPlacement() { 33694 var $parentDropdown = $$$1(this._element.parentNode); 33695 var placement = AttachmentMap.BOTTOM; // Handle dropup 33696 33697 if ($parentDropdown.hasClass(ClassName.DROPUP)) { 33698 placement = AttachmentMap.TOP; 33699 33700 if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 33701 placement = AttachmentMap.TOPEND; 33702 } 33703 } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { 33704 placement = AttachmentMap.RIGHT; 33705 } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { 33706 placement = AttachmentMap.LEFT; 33707 } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { 33708 placement = AttachmentMap.BOTTOMEND; 33709 } 33710 33711 return placement; 33712 }; 33713 33714 _proto._detectNavbar = function _detectNavbar() { 33715 return $$$1(this._element).closest('.navbar').length > 0; 33716 }; 33717 33718 _proto._getPopperConfig = function _getPopperConfig() { 33719 var _this2 = this; 33720 33721 var offsetConf = {}; 33722 33723 if (typeof this._config.offset === 'function') { 33724 offsetConf.fn = function (data) { 33725 data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); 33726 return data; 33727 }; 33728 } else { 33729 offsetConf.offset = this._config.offset; 33730 } 33731 33732 var popperConfig = { 33733 placement: this._getPlacement(), 33734 modifiers: { 33735 offset: offsetConf, 33736 flip: { 33737 enabled: this._config.flip 33738 }, 33739 preventOverflow: {
vendor: 8,256 bytes, lines 33740-33996
33740 boundariesElement: this._config.boundary 33741 } 33742 } // Disable Popper.js if we have a static display 33743 33744 }; 33745 33746 if (this._config.display === 'static') { 33747 popperConfig.modifiers.applyStyle = { 33748 enabled: false 33749 }; 33750 } 33751 33752 return popperConfig; 33753 }; // Static 33754 33755 33756 Dropdown._jQueryInterface = function _jQueryInterface(config) { 33757 return this.each(function () { 33758 var data = $$$1(this).data(DATA_KEY); 33759 33760 var _config = typeof config === 'object' ? config : null; 33761 33762 if (!data) { 33763 data = new Dropdown(this, _config); 33764 $$$1(this).data(DATA_KEY, data); 33765 } 33766 33767 if (typeof config === 'string') { 33768 if (typeof data[config] === 'undefined') { 33769 throw new TypeError("No method named \"" + config + "\""); 33770 } 33771 33772 data[config](); 33773 } 33774 }); 33775 }; 33776 33777 Dropdown._clearMenus = function _clearMenus(event) { 33778 if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { 33779 return; 33780 } 33781 33782 var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); 33783 33784 for (var i = 0, len = toggles.length; i < len; i++) { 33785 var parent = Dropdown._getParentFromElement(toggles[i]); 33786 33787 var context = $$$1(toggles[i]).data(DATA_KEY); 33788 var relatedTarget = { 33789 relatedTarget: toggles[i] 33790 }; 33791 33792 if (event && event.type === 'click') { 33793 relatedTarget.clickEvent = event; 33794 } 33795 33796 if (!context) { 33797 continue; 33798 } 33799 33800 var dropdownMenu = context._menu; 33801 33802 if (!$$$1(parent).hasClass(ClassName.SHOW)) { 33803 continue; 33804 } 33805 33806 if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { 33807 continue; 33808 } 33809 33810 var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); 33811 $$$1(parent).trigger(hideEvent); 33812 33813 if (hideEvent.isDefaultPrevented()) { 33814 continue; 33815 } // If this is a touch-enabled device we remove the extra 33816 // empty mouseover listeners we added for iOS support 33817 33818 33819 if ('ontouchstart' in document.documentElement) { 33820 $$$1(document.body).children().off('mouseover', null, $$$1.noop); 33821 } 33822 33823 toggles[i].setAttribute('aria-expanded', 'false'); 33824 $$$1(dropdownMenu).removeClass(ClassName.SHOW); 33825 $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); 33826 } 33827 }; 33828 33829 Dropdown._getParentFromElement = function _getParentFromElement(element) { 33830 var parent; 33831 var selector = Util.getSelectorFromElement(element); 33832 33833 if (selector) { 33834 parent = document.querySelector(selector); 33835 } 33836 33837 return parent || element.parentNode; 33838 }; // eslint-disable-next-line complexity 33839 33840 33841 Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { 33842 // If not input/textarea: 33843 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 33844 // If input/textarea: 33845 // - If space key => not a dropdown command 33846 // - If key is other than escape 33847 // - If key is not up or down => not a dropdown command 33848 // - If trigger inside the menu => not a dropdown command 33849 if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { 33850 return; 33851 } 33852 33853 event.preventDefault(); 33854 event.stopPropagation(); 33855 33856 if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { 33857 return; 33858 } 33859 33860 var parent = Dropdown._getParentFromElement(this); 33861 33862 var isActive = $$$1(parent).hasClass(ClassName.SHOW); 33863 33864 if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { 33865 if (event.which === ESCAPE_KEYCODE) { 33866 var toggle = parent.querySelector(Selector.DATA_TOGGLE); 33867 $$$1(toggle).trigger('focus'); 33868 } 33869 33870 $$$1(this).trigger('click'); 33871 return; 33872 } 33873 33874 var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)); 33875 33876 if (items.length === 0) { 33877 return; 33878 } 33879 33880 var index = items.indexOf(event.target); 33881 33882 if (event.which === ARROW_UP_KEYCODE && index > 0) { 33883 // Up 33884 index--; 33885 } 33886 33887 if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { 33888 // Down 33889 index++; 33890 } 33891 33892 if (index < 0) { 33893 index = 0; 33894 } 33895 33896 items[index].focus(); 33897 }; 33898 33899 _createClass(Dropdown, null, [{ 33900 key: "VERSION", 33901 get: function get() { 33902 return VERSION; 33903 } 33904 }, { 33905 key: "Default", 33906 get: function get() { 33907 return Default; 33908 } 33909 }, { 33910 key: "DefaultType", 33911 get: function get() { 33912 return DefaultType; 33913 } 33914 }]); 33915 33916 return Dropdown; 33917 }(); 33918 /** 33919 * ------------------------------------------------------------------------ 33920 * Data Api implementation 33921 * ------------------------------------------------------------------------ 33922 */ 33923 33924 33925 $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 33926 event.preventDefault(); 33927 event.stopPropagation(); 33928 33929 Dropdown._jQueryInterface.call($$$1(this), 'toggle'); 33930 }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { 33931 e.stopPropagation(); 33932 }); 33933 /** 33934 * ------------------------------------------------------------------------ 33935 * jQuery 33936 * ------------------------------------------------------------------------ 33937 */ 33938 33939 $$$1.fn[NAME] = Dropdown._jQueryInterface; 33940 $$$1.fn[NAME].Constructor = Dropdown; 33941 33942 $$$1.fn[NAME].noConflict = function () { 33943 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 33944 return Dropdown._jQueryInterface; 33945 }; 33946 33947 return Dropdown; 33948 }($, Popper); 33949 33950 /** 33951 * -------------------------------------------------------------------------- 33952 * Bootstrap (v4.1.3): modal.js 33953 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 33954 * -------------------------------------------------------------------------- 33955 */ 33956 33957 var Modal = function ($$$1) { 33958 /** 33959 * ------------------------------------------------------------------------ 33960 * Constants 33961 * ------------------------------------------------------------------------ 33962 */ 33963 var NAME = 'modal'; 33964 var VERSION = '4.1.3'; 33965 var DATA_KEY = 'bs.modal'; 33966 var EVENT_KEY = "." + DATA_KEY; 33967 var DATA_API_KEY = '.data-api'; 33968 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 33969 var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key 33970 33971 var Default = { 33972 backdrop: true, 33973 keyboard: true, 33974 focus: true, 33975 show: true 33976 }; 33977 var DefaultType = { 33978 backdrop: '(boolean|string)', 33979 keyboard: 'boolean', 33980 focus: 'boolean', 33981 show: 'boolean' 33982 }; 33983 var Event = { 33984 HIDE: "hide" + EVENT_KEY, 33985 HIDDEN: "hidden" + EVENT_KEY, 33986 SHOW: "show" + EVENT_KEY, 33987 SHOWN: "shown" + EVENT_KEY, 33988 FOCUSIN: "focusin" + EVENT_KEY, 33989 RESIZE: "resize" + EVENT_KEY, 33990 CLICK_DISMISS: "click.dismiss" + EVENT_KEY, 33991 KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, 33992 MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, 33993 MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, 33994 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 33995 }; 33996 var ClassName = {
33997 SCROLLBAR_MEASURER: 'modal-scrollbar-measure', 33998 BACKDROP: 'modal-backdrop', 33999 OPEN: 'modal-open', 34000 FADE: 'fade', 34001 SHOW: 'show' 34002 }; 34003 var Selector = { 34004 DIALOG: '.modal-dialog', 34005 DATA_TOGGLE: '[data-toggle="modal"]', 34006 DATA_DISMISS: '[data-dismiss="modal"]', 34007 FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', 34008 STICKY_CONTENT: '.sticky-top' 34009 /** 34010 * ------------------------------------------------------------------------ 34011 * Class Definition 34012 * ------------------------------------------------------------------------ 34013 */ 34014 34015 }; 34016 34017 var Modal = 34018 /*#__PURE__*/ 34019 function () { 34020 function Modal(element, config) { 34021 this._config = this._getConfig(config); 34022 this._element = element; 34023 this._dialog = element.querySelector(Selector.DIALOG); 34024 this._backdrop = null; 34025 this._isShown = false; 34026 this._isBodyOverflowing = false; 34027 this._ignoreBackdropClick = false; 34028 this._scrollbarWidth = 0; 34029 } // Getters 34030 34031 34032 var _proto = Modal.prototype; 34033 34034 // Public 34035 _proto.toggle = function toggle(relatedTarget) { 34036 return this._isShown ? this.hide() : this.show(relatedTarget); 34037 }; 34038 34039 _proto.show = function show(relatedTarget) { 34040 var _this = this; 34041 34042 if (this._isTransitioning || this._isShown) { 34043 return; 34044 } 34045 34046 if ($$$1(this._element).hasClass(ClassName.FADE)) { 34047 this._isTransitioning = true; 34048 } 34049 34050 var showEvent = $$$1.Event(Event.SHOW, { 34051 relatedTarget: relatedTarget 34052 }); 34053 $$$1(this._element).trigger(showEvent); 34054 34055 if (this._isShown || showEvent.isDefaultPrevented()) { 34056 return; 34057 } 34058 34059 this._isShown = true; 34060 34061 this._checkScrollbar(); 34062 34063 this._setScrollbar(); 34064 34065 this._adjustDialog(); 34066 34067 $$$1(document.body).addClass(ClassName.OPEN); 34068 34069 this._setEscapeEvent(); 34070 34071 this._setResizeEvent(); 34072 34073 $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { 34074 return _this.hide(event); 34075 }); 34076 $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { 34077 $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { 34078 if ($$$1(event.target).is(_this._element)) { 34079 _this._ignoreBackdropClick = true; 34080 } 34081 }); 34082 }); 34083 34084 this._showBackdrop(function () { 34085 return _this._showElement(relatedTarget); 34086 }); 34087 }; 34088 34089 _proto.hide = function hide(event) { 34090 var _this2 = this; 34091 34092 if (event) { 34093 event.preventDefault(); 34094 } 34095 34096 if (this._isTransitioning || !this._isShown) { 34097 return; 34098 } 34099 34100 var hideEvent = $$$1.Event(Event.HIDE); 34101 $$$1(this._element).trigger(hideEvent); 34102 34103 if (!this._isShown || hideEvent.isDefaultPrevented()) { 34104 return; 34105 } 34106 34107 this._isShown = false; 34108 var transition = $$$1(this._element).hasClass(ClassName.FADE); 34109 34110 if (transition) { 34111 this._isTransitioning = true; 34112 } 34113 34114 this._setEscapeEvent(); 34115 34116 this._setResizeEvent(); 34117 34118 $$$1(document).off(Event.FOCUSIN); 34119 $$$1(this._element).removeClass(ClassName.SHOW); 34120 $$$1(this._element).off(Event.CLICK_DISMISS); 34121 $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); 34122 34123 if (transition) { 34124 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 34125 $$$1(this._element).one(Util.TRANSITION_END, function (event) { 34126 return _this2._hideModal(event); 34127 }).emulateTransitionEnd(transitionDuration); 34128 } else { 34129 this._hideModal(); 34130 } 34131 }; 34132 34133 _proto.dispose = function dispose() { 34134 $$$1.removeData(this._element, DATA_KEY); 34135 $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); 34136 this._config = null; 34137 this._element = null; 34138 this._dialog = null; 34139 this._backdrop = null; 34140 this._isShown = null; 34141 this._isBodyOverflowing = null; 34142 this._ignoreBackdropClick = null; 34143 this._scrollbarWidth = null; 34144 }; 34145 34146 _proto.handleUpdate = function handleUpdate() { 34147 this._adjustDialog(); 34148 }; // Private 34149 34150 34151 _proto._getConfig = function _getConfig(config) { 34152 config = _objectSpread({}, Default, config); 34153 Util.typeCheckConfig(NAME, config, DefaultType); 34154 return config; 34155 }; 34156 34157 _proto._showElement = function _showElement(relatedTarget) { 34158 var _this3 = this; 34159 34160 var transition = $$$1(this._element).hasClass(ClassName.FADE); 34161 34162 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 34163 // Don't move modal's DOM position 34164 document.body.appendChild(this._element); 34165 } 34166 34167 this._element.style.display = 'block'; 34168 34169 this._element.removeAttribute('aria-hidden'); 34170 34171 this._element.scrollTop = 0; 34172 34173 if (transition) { 34174 Util.reflow(this._element); 34175 } 34176 34177 $$$1(this._element).addClass(ClassName.SHOW); 34178 34179 if (this._config.focus) { 34180 this._enforceFocus(); 34181 } 34182 34183 var shownEvent = $$$1.Event(Event.SHOWN, { 34184 relatedTarget: relatedTarget 34185 }); 34186 34187 var transitionComplete = function transitionComplete() { 34188 if (_this3._config.focus) { 34189 _this3._element.focus(); 34190 } 34191 34192 _this3._isTransitioning = false;
34193 $$$1(_this3._element).trigger(shownEvent); 34194 }; 34195 34196 if (transition) { 34197 var transitionDuration = Util.getTransitionDurationFromElement(this._element); 34198 $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); 34199 } else { 34200 transitionComplete(); 34201 } 34202 }; 34203 34204 _proto._enforceFocus = function _enforceFocus() { 34205 var _this4 = this; 34206 34207 $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop 34208 .on(Event.FOCUSIN, function (event) { 34209 if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { 34210 _this4._element.focus(); 34211 } 34212 }); 34213 }; 34214 34215 _proto._setEscapeEvent = function _setEscapeEvent() { 34216 var _this5 = this; 34217 34218 if (this._isShown && this._config.keyboard) { 34219 $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { 34220 if (event.which === ESCAPE_KEYCODE) { 34221 event.preventDefault(); 34222 34223 _this5.hide(); 34224 } 34225 }); 34226 } else if (!this._isShown) { 34227 $$$1(this._element).off(Event.KEYDOWN_DISMISS); 34228 } 34229 }; 34230 34231 _proto._setResizeEvent = function _setResizeEvent() { 34232 var _this6 = this; 34233 34234 if (this._isShown) { 34235 $$$1(window).on(Event.RESIZE, function (event) { 34236 return _this6.handleUpdate(event); 34237 }); 34238 } else { 34239 $$$1(window).off(Event.RESIZE); 34240 } 34241 }; 34242 34243 _proto._hideModal = function _hideModal() { 34244 var _this7 = this; 34245 34246 this._element.style.display = 'none'; 34247 34248 this._element.setAttribute('aria-hidden', true); 34249 34250 this._isTransitioning = false; 34251 34252 this._showBackdrop(function () { 34253 $$$1(document.body).removeClass(ClassName.OPEN); 34254 34255 _this7._resetAdjustments(); 34256 34257 _this7._resetScrollbar(); 34258 34259 $$$1(_this7._element).trigger(Event.HIDDEN); 34260 }); 34261 }; 34262 34263 _proto._removeBackdrop = function _removeBackdrop() { 34264 if (this._backdrop) { 34265 $$$1(this._backdrop).remove(); 34266 this._backdrop = null; 34267 } 34268 }; 34269 34270 _proto._showBackdrop = function _showBackdrop(callback) { 34271 var _this8 = this; 34272 34273 var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; 34274 34275 if (this._isShown && this._config.backdrop) { 34276 this._backdrop = document.createElement('div'); 34277 this._backdrop.className = ClassName.BACKDROP; 34278 34279 if (animate) { 34280 this._backdrop.classList.add(animate); 34281 } 34282 34283 $$$1(this._backdrop).appendTo(document.body); 34284 $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { 34285 if (_this8._ignoreBackdropClick) { 34286 _this8._ignoreBackdropClick = false; 34287 return; 34288 } 34289 34290 if (event.target !== event.currentTarget) { 34291 return; 34292 } 34293 34294 if (_this8._config.backdrop === 'static') { 34295 _this8._element.focus(); 34296 } else { 34297 _this8.hide(); 34298 } 34299 }); 34300 34301 if (animate) { 34302 Util.reflow(this._backdrop); 34303 } 34304 34305 $$$1(this._backdrop).addClass(ClassName.SHOW); 34306 34307 if (!callback) { 34308 return; 34309 } 34310 34311 if (!animate) { 34312 callback(); 34313 return; 34314 } 34315 34316 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 34317 $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); 34318 } else if (!this._isShown && this._backdrop) { 34319 $$$1(this._backdrop).removeClass(ClassName.SHOW); 34320 34321 var callbackRemove = function callbackRemove() { 34322 _this8._removeBackdrop(); 34323 34324 if (callback) { 34325 callback(); 34326 } 34327 }; 34328 34329 if ($$$1(this._element).hasClass(ClassName.FADE)) { 34330 var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); 34331 34332 $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); 34333 } else { 34334 callbackRemove(); 34335 } 34336 } else if (callback) { 34337 callback(); 34338 } 34339 }; // ---------------------------------------------------------------------- 34340 // the following methods are used to handle overflowing modals 34341 // todo (fat): these should probably be refactored out of modal.js 34342 // ---------------------------------------------------------------------- 34343 34344
34345 _proto._adjustDialog = function _adjustDialog() { 34346 var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 34347 34348 if (!this._isBodyOverflowing && isModalOverflowing) { 34349 this._element.style.paddingLeft = this._scrollbarWidth + "px"; 34350 } 34351 34352 if (this._isBodyOverflowing && !isModalOverflowing) { 34353 this._element.style.paddingRight = this._scrollbarWidth + "px"; 34354 } 34355 }; 34356 34357 _proto._resetAdjustments = function _resetAdjustments() { 34358 this._element.style.paddingLeft = ''; 34359 this._element.style.paddingRight = ''; 34360 }; 34361 34362 _proto._checkScrollbar = function _checkScrollbar() { 34363 var rect = document.body.getBoundingClientRect(); 34364 this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; 34365 this._scrollbarWidth = this._getScrollbarWidth(); 34366 }; 34367 34368 _proto._setScrollbar = function _setScrollbar() { 34369 var _this9 = this; 34370 34371 if (this._isBodyOverflowing) { 34372 // Note: DOMNode.style.paddingRight returns the actual value or '' if not set 34373 // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set 34374 var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); 34375 var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding 34376 34377 $$$1(fixedContent).each(function (index, element) { 34378 var actualPadding = element.style.paddingRight; 34379 var calculatedPadding = $$$1(element).css('padding-right'); 34380 $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); 34381 }); // Adjust sticky content margin 34382 34383 $$$1(stickyContent).each(function (index, element) { 34384 var actualMargin = element.style.marginRight; 34385 var calculatedMargin = $$$1(element).css('margin-right'); 34386 $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); 34387 }); // Adjust body padding 34388 34389 var actualPadding = document.body.style.paddingRight; 34390 var calculatedPadding = $$$1(document.body).css('padding-right'); 34391 $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); 34392 } 34393 }; 34394 34395 _proto._resetScrollbar = function _resetScrollbar() { 34396 // Restore fixed content padding 34397 var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); 34398 $$$1(fixedContent).each(function (index, element) { 34399 var padding = $$$1(element).data('padding-right'); 34400 $$$1(element).removeData('padding-right'); 34401 element.style.paddingRight = padding ? padding : ''; 34402 }); // Restore sticky content 34403 34404 var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); 34405 $$$1(elements).each(function (index, element) { 34406 var margin = $$$1(element).data('margin-right'); 34407 34408 if (typeof margin !== 'undefined') { 34409 $$$1(element).css('margin-right', margin).removeData('margin-right'); 34410 } 34411 }); // Restore body padding 34412 34413 var padding = $$$1(document.body).data('padding-right'); 34414 $$$1(document.body).removeData('padding-right'); 34415 document.body.style.paddingRight = padding ? padding : ''; 34416 }; 34417 34418 _proto._getScrollbarWidth = function _getScrollbarWidth() { 34419 // thx d.walsh 34420 var scrollDiv = document.createElement('div'); 34421 scrollDiv.className = ClassName.SCROLLBAR_MEASURER; 34422 document.body.appendChild(scrollDiv); 34423 var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; 34424 document.body.removeChild(scrollDiv); 34425 return scrollbarWidth; 34426 }; // Static 34427 34428 34429 Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { 34430 return this.each(function () { 34431 var data = $$$1(this).data(DATA_KEY); 34432 34433 var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {}); 34434 34435 if (!data) { 34436 data = new Modal(this, _config); 34437 $$$1(this).data(DATA_KEY, data); 34438 } 34439 34440 if (typeof config === 'string') { 34441 if (typeof data[config] === 'undefined') {
34442 throw new TypeError("No method named \"" + config + "\""); 34443 } 34444 34445 data[config](relatedTarget); 34446 } else if (_config.show) { 34447 data.show(relatedTarget); 34448 } 34449 }); 34450 }; 34451 34452 _createClass(Modal, null, [{ 34453 key: "VERSION", 34454 get: function get() { 34455 return VERSION; 34456 } 34457 }, { 34458 key: "Default", 34459 get: function get() { 34460 return Default; 34461 } 34462 }]); 34463 34464 return Modal; 34465 }(); 34466 /** 34467 * ------------------------------------------------------------------------ 34468 * Data Api implementation 34469 * ------------------------------------------------------------------------ 34470 */ 34471 34472 34473 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 34474 var _this10 = this; 34475 34476 var target; 34477 var selector = Util.getSelectorFromElement(this); 34478 34479 if (selector) { 34480 target = document.querySelector(selector); 34481 } 34482 34483 var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data()); 34484 34485 if (this.tagName === 'A' || this.tagName === 'AREA') { 34486 event.preventDefault(); 34487 } 34488 34489 var $target = $$$1(target).one(Event.SHOW, function (showEvent) { 34490 if (showEvent.isDefaultPrevented()) { 34491 // Only register focus restorer if modal will actually get shown 34492 return; 34493 } 34494 34495 $target.one(Event.HIDDEN, function () { 34496 if ($$$1(_this10).is(':visible')) { 34497 _this10.focus(); 34498 } 34499 }); 34500 }); 34501 34502 Modal._jQueryInterface.call($$$1(target), config, this); 34503 }); 34504 /** 34505 * ------------------------------------------------------------------------ 34506 * jQuery 34507 * ------------------------------------------------------------------------ 34508 */ 34509 34510 $$$1.fn[NAME] = Modal._jQueryInterface; 34511 $$$1.fn[NAME].Constructor = Modal; 34512 34513 $$$1.fn[NAME].noConflict = function () { 34514 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 34515 return Modal._jQueryInterface; 34516 }; 34517 34518 return Modal; 34519 }($); 34520 34521 /** 34522 * -------------------------------------------------------------------------- 34523 * Bootstrap (v4.1.3): tooltip.js 34524 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 34525 * -------------------------------------------------------------------------- 34526 */ 34527 34528 var Tooltip = function ($$$1) { 34529 /** 34530 * ------------------------------------------------------------------------ 34531 * Constants 34532 * ------------------------------------------------------------------------ 34533 */ 34534 var NAME = 'tooltip'; 34535 var VERSION = '4.1.3'; 34536 var DATA_KEY = 'bs.tooltip'; 34537 var EVENT_KEY = "." + DATA_KEY; 34538 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 34539 var CLASS_PREFIX = 'bs-tooltip'; 34540 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 34541 var DefaultType = { 34542 animation: 'boolean', 34543 template: 'string', 34544 title: '(string|element|function)', 34545 trigger: 'string', 34546 delay: '(number|object)', 34547 html: 'boolean', 34548 selector: '(string|boolean)', 34549 placement: '(string|function)', 34550 offset: '(number|string)', 34551 container: '(string|element|boolean)', 34552 fallbackPlacement: '(string|array)', 34553 boundary: '(string|element)' 34554 }; 34555 var AttachmentMap = { 34556 AUTO: 'auto', 34557 TOP: 'top', 34558 RIGHT: 'right', 34559 BOTTOM: 'bottom', 34560 LEFT: 'left' 34561 }; 34562 var Default = { 34563 animation: true, 34564 template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', 34565 trigger: 'hover focus', 34566 title: '', 34567 delay: 0, 34568 html: false, 34569 selector: false, 34570 placement: 'top', 34571 offset: 0, 34572 container: false, 34573 fallbackPlacement: 'flip', 34574 boundary: 'scrollParent' 34575 }; 34576 var HoverState = { 34577 SHOW: 'show', 34578 OUT: 'out' 34579 }; 34580 var Event = { 34581 HIDE: "hide" + EVENT_KEY, 34582 HIDDEN: "hidden" + EVENT_KEY, 34583 SHOW: "show" + EVENT_KEY, 34584 SHOWN: "shown" + EVENT_KEY, 34585 INSERTED: "inserted" + EVENT_KEY, 34586 CLICK: "click" + EVENT_KEY, 34587 FOCUSIN: "focusin" + EVENT_KEY, 34588 FOCUSOUT: "focusout" + EVENT_KEY, 34589 MOUSEENTER: "mouseenter" + EVENT_KEY, 34590 MOUSELEAVE: "mouseleave" + EVENT_KEY 34591 }; 34592 var ClassName = { 34593 FADE: 'fade', 34594 SHOW: 'show' 34595 }; 34596 var Selector = { 34597 TOOLTIP: '.tooltip', 34598 TOOLTIP_INNER: '.tooltip-inner', 34599 ARROW: '.arrow' 34600 }; 34601 var Trigger = {
34602 HOVER: 'hover', 34603 FOCUS: 'focus', 34604 CLICK: 'click', 34605 MANUAL: 'manual' 34606 /** 34607 * ------------------------------------------------------------------------ 34608 * Class Definition 34609 * ------------------------------------------------------------------------ 34610 */ 34611 34612 }; 34613 34614 var Tooltip = 34615 /*#__PURE__*/ 34616 function () { 34617 function Tooltip(element, config) { 34618 /** 34619 * Check for Popper dependency 34620 * Popper - https://popper.js.org 34621 */ 34622 if (typeof Popper === 'undefined') { 34623 throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); 34624 } // private 34625 34626 34627 this._isEnabled = true; 34628 this._timeout = 0; 34629 this._hoverState = ''; 34630 this._activeTrigger = {}; 34631 this._popper = null; // Protected 34632 34633 this.element = element; 34634 this.config = this._getConfig(config); 34635 this.tip = null; 34636 34637 this._setListeners(); 34638 } // Getters 34639 34640 34641 var _proto = Tooltip.prototype; 34642 34643 // Public 34644 _proto.enable = function enable() { 34645 this._isEnabled = true; 34646 }; 34647 34648 _proto.disable = function disable() { 34649 this._isEnabled = false; 34650 }; 34651 34652 _proto.toggleEnabled = function toggleEnabled() { 34653 this._isEnabled = !this._isEnabled; 34654 }; 34655 34656 _proto.toggle = function toggle(event) { 34657 if (!this._isEnabled) { 34658 return; 34659 } 34660 34661 if (event) { 34662 var dataKey = this.constructor.DATA_KEY; 34663 var context = $$$1(event.currentTarget).data(dataKey); 34664 34665 if (!context) { 34666 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 34667 $$$1(event.currentTarget).data(dataKey, context); 34668 } 34669 34670 context._activeTrigger.click = !context._activeTrigger.click; 34671 34672 if (context._isWithActiveTrigger()) { 34673 context._enter(null, context); 34674 } else { 34675 context._leave(null, context); 34676 } 34677 } else { 34678 if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { 34679 this._leave(null, this); 34680 34681 return; 34682 } 34683 34684 this._enter(null, this); 34685 } 34686 }; 34687 34688 _proto.dispose = function dispose() { 34689 clearTimeout(this._timeout); 34690 $$$1.removeData(this.element, this.constructor.DATA_KEY); 34691 $$$1(this.element).off(this.constructor.EVENT_KEY); 34692 $$$1(this.element).closest('.modal').off('hide.bs.modal'); 34693 34694 if (this.tip) { 34695 $$$1(this.tip).remove(); 34696 } 34697 34698 this._isEnabled = null; 34699 this._timeout = null; 34700 this._hoverState = null; 34701 this._activeTrigger = null; 34702 34703 if (this._popper !== null) { 34704 this._popper.destroy(); 34705 } 34706 34707 this._popper = null; 34708 this.element = null; 34709 this.config = null; 34710 this.tip = null; 34711 }; 34712 34713 _proto.show = function show() { 34714 var _this = this; 34715 34716 if ($$$1(this.element).css('display') === 'none') { 34717 throw new Error('Please use show on visible elements'); 34718 } 34719 34720 var showEvent = $$$1.Event(this.constructor.Event.SHOW); 34721 34722 if (this.isWithContent() && this._isEnabled) { 34723 $$$1(this.element).trigger(showEvent); 34724 var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); 34725 34726 if (showEvent.isDefaultPrevented() || !isInTheDom) { 34727 return; 34728 } 34729 34730 var tip = this.getTipElement(); 34731 var tipId = Util.getUID(this.constructor.NAME);
34732 tip.setAttribute('id', tipId); 34733 this.element.setAttribute('aria-describedby', tipId); 34734 this.setContent(); 34735 34736 if (this.config.animation) { 34737 $$$1(tip).addClass(ClassName.FADE); 34738 } 34739 34740 var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; 34741 34742 var attachment = this._getAttachment(placement); 34743 34744 this.addAttachmentClass(attachment); 34745 var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container); 34746 $$$1(tip).data(this.constructor.DATA_KEY, this); 34747 34748 if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { 34749 $$$1(tip).appendTo(container); 34750 } 34751 34752 $$$1(this.element).trigger(this.constructor.Event.INSERTED); 34753 this._popper = new Popper(this.element, tip, { 34754 placement: attachment, 34755 modifiers: { 34756 offset: { 34757 offset: this.config.offset 34758 }, 34759 flip: { 34760 behavior: this.config.fallbackPlacement 34761 }, 34762 arrow: { 34763 element: Selector.ARROW 34764 }, 34765 preventOverflow: { 34766 boundariesElement: this.config.boundary 34767 } 34768 }, 34769 onCreate: function onCreate(data) { 34770 if (data.originalPlacement !== data.placement) { 34771 _this._handlePopperPlacementChange(data); 34772 } 34773 }, 34774 onUpdate: function onUpdate(data) { 34775 _this._handlePopperPlacementChange(data); 34776 } 34777 }); 34778 $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra 34779 // empty mouseover listeners to the body's immediate children; 34780 // only needed because of broken event delegation on iOS 34781 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 34782 34783 if ('ontouchstart' in document.documentElement) { 34784 $$$1(document.body).children().on('mouseover', null, $$$1.noop); 34785 } 34786 34787 var complete = function complete() { 34788 if (_this.config.animation) { 34789 _this._fixTransition(); 34790 } 34791 34792 var prevHoverState = _this._hoverState; 34793 _this._hoverState = null; 34794 $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); 34795 34796 if (prevHoverState === HoverState.OUT) { 34797 _this._leave(null, _this); 34798 } 34799 }; 34800 34801 if ($$$1(this.tip).hasClass(ClassName.FADE)) { 34802 var transitionDuration = Util.getTransitionDurationFromElement(this.tip); 34803 $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 34804 } else { 34805 complete(); 34806 } 34807 } 34808 }; 34809 34810 _proto.hide = function hide(callback) { 34811 var _this2 = this; 34812 34813 var tip = this.getTipElement(); 34814 var hideEvent = $$$1.Event(this.constructor.Event.HIDE); 34815 34816 var complete = function complete() { 34817 if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { 34818 tip.parentNode.removeChild(tip); 34819 } 34820 34821 _this2._cleanTipClass(); 34822 34823 _this2.element.removeAttribute('aria-describedby'); 34824 34825 $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); 34826 34827 if (_this2._popper !== null) { 34828 _this2._popper.destroy(); 34829 } 34830 34831 if (callback) { 34832 callback(); 34833 } 34834 }; 34835 34836 $$$1(this.element).trigger(hideEvent); 34837 34838 if (hideEvent.isDefaultPrevented()) { 34839 return; 34840 } 34841 34842 $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra 34843 // empty mouseover listeners we added for iOS support 34844 34845 if ('ontouchstart' in document.documentElement) { 34846 $$$1(document.body).children().off('mouseover', null, $$$1.noop); 34847 } 34848 34849 this._activeTrigger[Trigger.CLICK] = false;
34850 this._activeTrigger[Trigger.FOCUS] = false; 34851 this._activeTrigger[Trigger.HOVER] = false; 34852 34853 if ($$$1(this.tip).hasClass(ClassName.FADE)) { 34854 var transitionDuration = Util.getTransitionDurationFromElement(tip); 34855 $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 34856 } else { 34857 complete(); 34858 } 34859 34860 this._hoverState = ''; 34861 }; 34862 34863 _proto.update = function update() { 34864 if (this._popper !== null) { 34865 this._popper.scheduleUpdate(); 34866 } 34867 }; // Protected 34868 34869 34870 _proto.isWithContent = function isWithContent() { 34871 return Boolean(this.getTitle()); 34872 }; 34873 34874 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 34875 $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 34876 }; 34877 34878 _proto.getTipElement = function getTipElement() { 34879 this.tip = this.tip || $$$1(this.config.template)[0]; 34880 return this.tip; 34881 }; 34882 34883 _proto.setContent = function setContent() { 34884 var tip = this.getTipElement(); 34885 this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()); 34886 $$$1(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW); 34887 }; 34888 34889 _proto.setElementContent = function setElementContent($element, content) { 34890 var html = this.config.html; 34891 34892 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 34893 // Content is a DOM node or a jQuery 34894 if (html) { 34895 if (!$$$1(content).parent().is($element)) { 34896 $element.empty().append(content); 34897 } 34898 } else { 34899 $element.text($$$1(content).text()); 34900 } 34901 } else { 34902 $element[html ? 'html' : 'text'](content); 34903 } 34904 }; 34905 34906 _proto.getTitle = function getTitle() { 34907 var title = this.element.getAttribute('data-original-title'); 34908 34909 if (!title) { 34910 title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; 34911 } 34912 34913 return title; 34914 }; // Private 34915 34916 34917 _proto._getAttachment = function _getAttachment(placement) { 34918 return AttachmentMap[placement.toUpperCase()]; 34919 }; 34920 34921 _proto._setListeners = function _setListeners() { 34922 var _this3 = this; 34923 34924 var triggers = this.config.trigger.split(' '); 34925 triggers.forEach(function (trigger) { 34926 if (trigger === 'click') { 34927 $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { 34928 return _this3.toggle(event); 34929 }); 34930 } else if (trigger !== Trigger.MANUAL) { 34931 var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; 34932 var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; 34933 $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { 34934 return _this3._enter(event); 34935 }).on(eventOut, _this3.config.selector, function (event) { 34936 return _this3._leave(event); 34937 }); 34938 } 34939 34940 $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { 34941 return _this3.hide(); 34942 }); 34943 }); 34944 34945 if (this.config.selector) { 34946 this.config = _objectSpread({}, this.config, { 34947 trigger: 'manual', 34948 selector: '' 34949 }); 34950 } else { 34951 this._fixTitle(); 34952 } 34953 }; 34954 34955 _proto._fixTitle = function _fixTitle() { 34956 var titleType = typeof this.element.getAttribute('data-original-title'); 34957 34958 if (this.element.getAttribute('title') || titleType !== 'string') { 34959 this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); 34960 this.element.setAttribute('title', ''); 34961 } 34962 }; 34963 34964 _proto._enter = function _enter(event, context) { 34965 var dataKey = this.constructor.DATA_KEY; 34966 context = context || $$$1(event.currentTarget).data(dataKey); 34967 34968 if (!context) { 34969 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 34970 $$$1(event.currentTarget).data(dataKey, context); 34971 } 34972 34973 if (event) { 34974 context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; 34975 } 34976 34977 if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { 34978 context._hoverState = HoverState.SHOW; 34979 return; 34980 } 34981 34982 clearTimeout(context._timeout); 34983 context._hoverState = HoverState.SHOW; 34984 34985 if (!context.config.delay || !context.config.delay.show) { 34986 context.show(); 34987 return; 34988 } 34989 34990 context._timeout = setTimeout(function () { 34991 if (context._hoverState === HoverState.SHOW) { 34992 context.show(); 34993 } 34994 }, context.config.delay.show); 34995 }; 34996 34997 _proto._leave = function _leave(event, context) { 34998 var dataKey = this.constructor.DATA_KEY; 34999 context = context || $$$1(event.currentTarget).data(dataKey); 35000 35001 if (!context) { 35002 context = new this.constructor(event.currentTarget, this._getDelegateConfig()); 35003 $$$1(event.currentTarget).data(dataKey, context); 35004 } 35005 35006 if (event) { 35007 context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
vendor: 5,417 bytes, lines 35008-35208
35008 } 35009 35010 if (context._isWithActiveTrigger()) { 35011 return; 35012 } 35013 35014 clearTimeout(context._timeout); 35015 context._hoverState = HoverState.OUT; 35016 35017 if (!context.config.delay || !context.config.delay.hide) { 35018 context.hide(); 35019 return; 35020 } 35021 35022 context._timeout = setTimeout(function () { 35023 if (context._hoverState === HoverState.OUT) { 35024 context.hide(); 35025 } 35026 }, context.config.delay.hide); 35027 }; 35028 35029 _proto._isWithActiveTrigger = function _isWithActiveTrigger() { 35030 for (var trigger in this._activeTrigger) { 35031 if (this._activeTrigger[trigger]) { 35032 return true; 35033 } 35034 } 35035 35036 return false; 35037 }; 35038 35039 _proto._getConfig = function _getConfig(config) { 35040 config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {}); 35041 35042 if (typeof config.delay === 'number') { 35043 config.delay = { 35044 show: config.delay, 35045 hide: config.delay 35046 }; 35047 } 35048 35049 if (typeof config.title === 'number') { 35050 config.title = config.title.toString(); 35051 } 35052 35053 if (typeof config.content === 'number') { 35054 config.content = config.content.toString(); 35055 } 35056 35057 Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); 35058 return config; 35059 }; 35060 35061 _proto._getDelegateConfig = function _getDelegateConfig() { 35062 var config = {}; 35063 35064 if (this.config) { 35065 for (var key in this.config) { 35066 if (this.constructor.Default[key] !== this.config[key]) { 35067 config[key] = this.config[key]; 35068 } 35069 } 35070 } 35071 35072 return config; 35073 }; 35074 35075 _proto._cleanTipClass = function _cleanTipClass() { 35076 var $tip = $$$1(this.getTipElement()); 35077 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 35078 35079 if (tabClass !== null && tabClass.length) { 35080 $tip.removeClass(tabClass.join('')); 35081 } 35082 }; 35083 35084 _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { 35085 var popperInstance = popperData.instance; 35086 this.tip = popperInstance.popper; 35087 35088 this._cleanTipClass(); 35089 35090 this.addAttachmentClass(this._getAttachment(popperData.placement)); 35091 }; 35092 35093 _proto._fixTransition = function _fixTransition() { 35094 var tip = this.getTipElement(); 35095 var initConfigAnimation = this.config.animation; 35096 35097 if (tip.getAttribute('x-placement') !== null) { 35098 return; 35099 } 35100 35101 $$$1(tip).removeClass(ClassName.FADE); 35102 this.config.animation = false; 35103 this.hide(); 35104 this.show(); 35105 this.config.animation = initConfigAnimation; 35106 }; // Static 35107 35108 35109 Tooltip._jQueryInterface = function _jQueryInterface(config) { 35110 return this.each(function () { 35111 var data = $$$1(this).data(DATA_KEY); 35112 35113 var _config = typeof config === 'object' && config; 35114 35115 if (!data && /dispose|hide/.test(config)) { 35116 return; 35117 } 35118 35119 if (!data) { 35120 data = new Tooltip(this, _config); 35121 $$$1(this).data(DATA_KEY, data); 35122 } 35123 35124 if (typeof config === 'string') { 35125 if (typeof data[config] === 'undefined') { 35126 throw new TypeError("No method named \"" + config + "\""); 35127 } 35128 35129 data[config](); 35130 } 35131 }); 35132 }; 35133 35134 _createClass(Tooltip, null, [{ 35135 key: "VERSION", 35136 get: function get() { 35137 return VERSION; 35138 } 35139 }, { 35140 key: "Default", 35141 get: function get() { 35142 return Default; 35143 } 35144 }, { 35145 key: "NAME", 35146 get: function get() { 35147 return NAME; 35148 } 35149 }, { 35150 key: "DATA_KEY", 35151 get: function get() { 35152 return DATA_KEY; 35153 } 35154 }, { 35155 key: "Event", 35156 get: function get() { 35157 return Event; 35158 } 35159 }, { 35160 key: "EVENT_KEY", 35161 get: function get() { 35162 return EVENT_KEY; 35163 } 35164 }, { 35165 key: "DefaultType", 35166 get: function get() { 35167 return DefaultType; 35168 } 35169 }]); 35170 35171 return Tooltip; 35172 }(); 35173 /** 35174 * ------------------------------------------------------------------------ 35175 * jQuery 35176 * ------------------------------------------------------------------------ 35177 */ 35178 35179 35180 $$$1.fn[NAME] = Tooltip._jQueryInterface; 35181 $$$1.fn[NAME].Constructor = Tooltip; 35182 35183 $$$1.fn[NAME].noConflict = function () { 35184 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 35185 return Tooltip._jQueryInterface; 35186 }; 35187 35188 return Tooltip; 35189 }($, Popper); 35190 35191 /** 35192 * -------------------------------------------------------------------------- 35193 * Bootstrap (v4.1.3): popover.js 35194 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 35195 * -------------------------------------------------------------------------- 35196 */ 35197 35198 var Popover = function ($$$1) { 35199 /** 35200 * ------------------------------------------------------------------------ 35201 * Constants 35202 * ------------------------------------------------------------------------ 35203 */ 35204 var NAME = 'popover'; 35205 var VERSION = '4.1.3'; 35206 var DATA_KEY = 'bs.popover'; 35207 var EVENT_KEY = "." + DATA_KEY; 35208 var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
35209 var CLASS_PREFIX = 'bs-popover'; 35210 var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); 35211 35212 var Default = _objectSpread({}, Tooltip.Default, { 35213 placement: 'right', 35214 trigger: 'click', 35215 content: '', 35216 template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' 35217 }); 35218 35219 var DefaultType = _objectSpread({}, Tooltip.DefaultType, { 35220 content: '(string|element|function)' 35221 }); 35222 35223 var ClassName = { 35224 FADE: 'fade', 35225 SHOW: 'show' 35226 }; 35227 var Selector = { 35228 TITLE: '.popover-header', 35229 CONTENT: '.popover-body' 35230 }; 35231 var Event = { 35232 HIDE: "hide" + EVENT_KEY, 35233 HIDDEN: "hidden" + EVENT_KEY, 35234 SHOW: "show" + EVENT_KEY, 35235 SHOWN: "shown" + EVENT_KEY, 35236 INSERTED: "inserted" + EVENT_KEY, 35237 CLICK: "click" + EVENT_KEY, 35238 FOCUSIN: "focusin" + EVENT_KEY, 35239 FOCUSOUT: "focusout" + EVENT_KEY, 35240 MOUSEENTER: "mouseenter" + EVENT_KEY, 35241 MOUSELEAVE: "mouseleave" + EVENT_KEY 35242 /** 35243 * ------------------------------------------------------------------------ 35244 * Class Definition 35245 * ------------------------------------------------------------------------ 35246 */ 35247 35248 }; 35249 35250 var Popover = 35251 /*#__PURE__*/ 35252 function (_Tooltip) { 35253 _inheritsLoose(Popover, _Tooltip); 35254 35255 function Popover() { 35256 return _Tooltip.apply(this, arguments) || this; 35257 } 35258 35259 var _proto = Popover.prototype; 35260 35261 // Overrides 35262 _proto.isWithContent = function isWithContent() { 35263 return this.getTitle() || this._getContent(); 35264 }; 35265 35266 _proto.addAttachmentClass = function addAttachmentClass(attachment) { 35267 $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); 35268 }; 35269 35270 _proto.getTipElement = function getTipElement() { 35271 this.tip = this.tip || $$$1(this.config.template)[0]; 35272 return this.tip; 35273 }; 35274 35275 _proto.setContent = function setContent() { 35276 var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events 35277 35278 this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); 35279 35280 var content = this._getContent(); 35281 35282 if (typeof content === 'function') { 35283 content = content.call(this.element); 35284 } 35285 35286 this.setElementContent($tip.find(Selector.CONTENT), content); 35287 $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); 35288 }; // Private 35289 35290 35291 _proto._getContent = function _getContent() { 35292 return this.element.getAttribute('data-content') || this.config.content; 35293 }; 35294 35295 _proto._cleanTipClass = function _cleanTipClass() { 35296 var $tip = $$$1(this.getTipElement()); 35297 var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); 35298 35299 if (tabClass !== null && tabClass.length > 0) { 35300 $tip.removeClass(tabClass.join('')); 35301 } 35302 }; // Static 35303 35304 35305 Popover._jQueryInterface = function _jQueryInterface(config) { 35306 return this.each(function () { 35307 var data = $$$1(this).data(DATA_KEY); 35308 35309 var _config = typeof config === 'object' ? config : null; 35310 35311 if (!data && /destroy|hide/.test(config)) { 35312 return; 35313 } 35314 35315 if (!data) { 35316 data = new Popover(this, _config); 35317 $$$1(this).data(DATA_KEY, data); 35318 } 35319 35320 if (typeof config === 'string') { 35321 if (typeof data[config] === 'undefined') { 35322 throw new TypeError("No method named \"" + config + "\""); 35323 } 35324 35325 data[config](); 35326 } 35327 }); 35328 }; 35329 35330 _createClass(Popover, null, [{ 35331 key: "VERSION", 35332 // Getters 35333 get: function get() { 35334 return VERSION; 35335 } 35336 }, { 35337 key: "Default", 35338 get: function get() { 35339 return Default; 35340 } 35341 }, { 35342 key: "NAME", 35343 get: function get() { 35344 return NAME; 35345 } 35346 }, { 35347 key: "DATA_KEY", 35348 get: function get() { 35349 return DATA_KEY; 35350 } 35351 }, { 35352 key: "Event", 35353 get: function get() { 35354 return Event; 35355 } 35356 }, { 35357 key: "EVENT_KEY", 35358 get: function get() { 35359 return EVENT_KEY; 35360 } 35361 }, { 35362 key: "DefaultType", 35363 get: function get() { 35364 return DefaultType; 35365 } 35366 }]); 35367 35368 return Popover; 35369 }(Tooltip); 35370 /** 35371 * ------------------------------------------------------------------------ 35372 * jQuery 35373 * ------------------------------------------------------------------------ 35374 */ 35375 35376 35377 $$$1.fn[NAME] = Popover._jQueryInterface; 35378 $$$1.fn[NAME].Constructor = Popover; 35379 35380 $$$1.fn[NAME].noConflict = function () { 35381 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 35382 return Popover._jQueryInterface; 35383 }; 35384 35385 return Popover; 35386 }($); 35387 35388 /** 35389 * -------------------------------------------------------------------------- 35390 * Bootstrap (v4.1.3): scrollspy.js 35391 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 35392 * -------------------------------------------------------------------------- 35393 */ 35394 35395 var ScrollSpy = function ($$$1) { 35396 /** 35397 * ------------------------------------------------------------------------ 35398 * Constants 35399 * ------------------------------------------------------------------------ 35400 */ 35401 var NAME = 'scrollspy'; 35402 var VERSION = '4.1.3'; 35403 var DATA_KEY = 'bs.scrollspy'; 35404 var EVENT_KEY = "." + DATA_KEY; 35405 var DATA_API_KEY = '.data-api'; 35406 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 35407 var Default = { 35408 offset: 10, 35409 method: 'auto', 35410 target: '' 35411 }; 35412 var DefaultType = { 35413 offset: 'number', 35414 method: 'string', 35415 target: '(string|element)' 35416 }; 35417 var Event = { 35418 ACTIVATE: "activate" + EVENT_KEY, 35419 SCROLL: "scroll" + EVENT_KEY, 35420 LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY 35421 }; 35422 var ClassName = {
35423 DROPDOWN_ITEM: 'dropdown-item', 35424 DROPDOWN_MENU: 'dropdown-menu', 35425 ACTIVE: 'active' 35426 }; 35427 var Selector = { 35428 DATA_SPY: '[data-spy="scroll"]', 35429 ACTIVE: '.active', 35430 NAV_LIST_GROUP: '.nav, .list-group', 35431 NAV_LINKS: '.nav-link', 35432 NAV_ITEMS: '.nav-item', 35433 LIST_ITEMS: '.list-group-item', 35434 DROPDOWN: '.dropdown', 35435 DROPDOWN_ITEMS: '.dropdown-item', 35436 DROPDOWN_TOGGLE: '.dropdown-toggle' 35437 }; 35438 var OffsetMethod = { 35439 OFFSET: 'offset', 35440 POSITION: 'position' 35441 /** 35442 * ------------------------------------------------------------------------ 35443 * Class Definition 35444 * ------------------------------------------------------------------------ 35445 */ 35446 35447 }; 35448 35449 var ScrollSpy = 35450 /*#__PURE__*/ 35451 function () { 35452 function ScrollSpy(element, config) { 35453 var _this = this; 35454 35455 this._element = element; 35456 this._scrollElement = element.tagName === 'BODY' ? window : element; 35457 this._config = this._getConfig(config); 35458 this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); 35459 this._offsets = []; 35460 this._targets = []; 35461 this._activeTarget = null; 35462 this._scrollHeight = 0; 35463 $$$1(this._scrollElement).on(Event.SCROLL, function (event) { 35464 return _this._process(event); 35465 }); 35466 this.refresh(); 35467 35468 this._process(); 35469 } // Getters 35470 35471 35472 var _proto = ScrollSpy.prototype; 35473 35474 // Public 35475 _proto.refresh = function refresh() { 35476 var _this2 = this; 35477 35478 var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; 35479 var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 35480 var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; 35481 this._offsets = []; 35482 this._targets = []; 35483 this._scrollHeight = this._getScrollHeight(); 35484 var targets = [].slice.call(document.querySelectorAll(this._selector)); 35485 targets.map(function (element) { 35486 var target; 35487 var targetSelector = Util.getSelectorFromElement(element); 35488 35489 if (targetSelector) { 35490 target = document.querySelector(targetSelector); 35491 } 35492 35493 if (target) { 35494 var targetBCR = target.getBoundingClientRect(); 35495 35496 if (targetBCR.width || targetBCR.height) { 35497 // TODO (fat): remove sketch reliance on jQuery position/offset 35498 return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; 35499 } 35500 } 35501 35502 return null; 35503 }).filter(function (item) { 35504 return item; 35505 }).sort(function (a, b) { 35506 return a[0] - b[0]; 35507 }
35507).forEach(function (item) { 35508 _this2._offsets.push(item[0]); 35509 35510 _this2._targets.push(item[1]); 35511 }); 35512 }; 35513 35514 _proto.dispose = function dispose() { 35515 $$$1.removeData(this._element, DATA_KEY); 35516 $$$1(this._scrollElement).off(EVENT_KEY); 35517 this._element = null; 35518 this._scrollElement = null; 35519 this._config = null; 35520 this._selector = null; 35521 this._offsets = null; 35522 this._targets = null; 35523 this._activeTarget = null; 35524 this._scrollHeight = null; 35525 }; // Private 35526 35527 35528 _proto._getConfig = function _getConfig(config) { 35529 config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {}); 35530 35531 if (typeof config.target !== 'string') { 35532 var id = $$$1(config.target).attr('id'); 35533 35534 if (!id) { 35535 id = Util.getUID(NAME); 35536 $$$1(config.target).attr('id', id); 35537 } 35538 35539 config.target = "#" + id; 35540 } 35541 35542 Util.typeCheckConfig(NAME, config, DefaultType); 35543 return config; 35544 }; 35545 35546 _proto._getScrollTop = function _getScrollTop() { 35547 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 35548 }; 35549 35550 _proto._getScrollHeight = function _getScrollHeight() { 35551 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 35552 }; 35553 35554 _proto._getOffsetHeight = function _getOffsetHeight() { 35555 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 35556 }; 35557 35558 _proto._process = function _process() { 35559 var scrollTop = this._getScrollTop() + this._config.offset; 35560 35561 var scrollHeight = this._getScrollHeight(); 35562 35563 var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 35564 35565 if (this._scrollHeight !== scrollHeight) { 35566 this.refresh(); 35567 } 35568 35569 if (scrollTop >= maxScroll) { 35570 var target = this._targets[this._targets.length - 1]; 35571 35572 if (this._activeTarget !== target) { 35573 this._activate(target); 35574 } 35575 35576 return; 35577 } 35578 35579 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 35580 this._activeTarget = null; 35581 35582 this._clear(); 35583 35584 return; 35585 } 35586 35587 var offsetLength = this._offsets.length; 35588 35589 for (var i = offsetLength; i--;) { 35590 var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 35591 35592 if (isActiveTarget) { 35593 this._activate(this._targets[i]); 35594 } 35595 } 35596 }; 35597 35598 _proto._activate = function _activate(target) { 35599 this._activeTarget = target; 35600 35601 this._clear(); 35602 35603 var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style 35604 35605 35606 queries = queries.map(function (selector) { 35607 return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); 35608 }); 35609 var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(',')))); 35610 35611 if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { 35612 $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); 35613 $link.addClass(ClassName.ACTIVE); 35614 } else { 35615 // Set triggered link as active 35616 $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
35617 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 35618 35619 $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item 35620 35621 $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); 35622 } 35623 35624 $$$1(this._scrollElement).trigger(Event.ACTIVATE, { 35625 relatedTarget: target 35626 }); 35627 }; 35628 35629 _proto._clear = function _clear() { 35630 var nodes = [].slice.call(document.querySelectorAll(this._selector)); 35631 $$$1(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); 35632 }; // Static 35633 35634 35635 ScrollSpy._jQueryInterface = function _jQueryInterface(config) { 35636 return this.each(function () { 35637 var data = $$$1(this).data(DATA_KEY); 35638 35639 var _config = typeof config === 'object' && config; 35640 35641 if (!data) { 35642 data = new ScrollSpy(this, _config); 35643 $$$1(this).data(DATA_KEY, data); 35644 } 35645 35646 if (typeof config === 'string') { 35647 if (typeof data[config] === 'undefined') { 35648 throw new TypeError("No method named \"" + config + "\""); 35649 } 35650 35651 data[config](); 35652 } 35653 }); 35654 }; 35655 35656 _createClass(ScrollSpy, null, [{ 35657 key: "VERSION", 35658 get: function get() { 35659 return VERSION; 35660 } 35661 }, { 35662 key: "Default", 35663 get: function get() { 35664 return Default; 35665 } 35666 }]); 35667 35668 return ScrollSpy; 35669 }(); 35670 /** 35671 * ------------------------------------------------------------------------ 35672 * Data Api implementation 35673 * ------------------------------------------------------------------------ 35674 */ 35675 35676 35677 $$$1(window).on(Event.LOAD_DATA_API, function () { 35678 var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)); 35679 var scrollSpysLength = scrollSpys.length; 35680 35681 for (var i = scrollSpysLength; i--;) { 35682 var $spy = $$$1(scrollSpys[i]); 35683 35684 ScrollSpy._jQueryInterface.call($spy, $spy.data()); 35685 } 35686 }); 35687 /** 35688 * ------------------------------------------------------------------------ 35689 * jQuery 35690 * ------------------------------------------------------------------------ 35691 */ 35692 35693 $$$1.fn[NAME] = ScrollSpy._jQueryInterface; 35694 $$$1.fn[NAME].Constructor = ScrollSpy; 35695 35696 $$$1.fn[NAME].noConflict = function () { 35697 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 35698 return ScrollSpy._jQueryInterface; 35699 }; 35700 35701 return ScrollSpy; 35702 }($); 35703 35704 /** 35705 * -------------------------------------------------------------------------- 35706 * Bootstrap (v4.1.3): tab.js 35707 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 35708 * -------------------------------------------------------------------------- 35709 */ 35710 35711 var Tab = function ($$$1) { 35712 /** 35713 * ------------------------------------------------------------------------ 35714 * Constants 35715 * ------------------------------------------------------------------------ 35716 */ 35717 var NAME = 'tab'; 35718 var VERSION = '4.1.3'; 35719 var DATA_KEY = 'bs.tab'; 35720 var EVENT_KEY = "." + DATA_KEY; 35721 var DATA_API_KEY = '.data-api'; 35722 var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; 35723 var Event = { 35724 HIDE: "hide" + EVENT_KEY, 35725 HIDDEN: "hidden" + EVENT_KEY, 35726 SHOW: "show" + EVENT_KEY, 35727 SHOWN: "shown" + EVENT_KEY, 35728 CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY 35729 }; 35730 var ClassName = { 35731 DROPDOWN_MENU: 'dropdown-menu', 35732 ACTIVE: 'active', 35733 DISABLED: 'disabled', 35734 FADE: 'fade', 35735 SHOW: 'show' 35736 }; 35737 var Selector = { 35738 DROPDOWN: '.dropdown', 35739 NAV_LIST_GROUP: '.nav, .list-group', 35740 ACTIVE: '.active', 35741 ACTIVE_UL: '> li > .active', 35742 DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', 35743 DROPDOWN_TOGGLE: '.dropdown-toggle', 35744 DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' 35745 /** 35746 * ------------------------------------------------------------------------ 35747 * Class Definition 35748 * ------------------------------------------------------------------------ 35749 */ 35750 35751 }; 35752 35753 var Tab = 35754 /*#__PURE__*/ 35755 function () { 35756 function Tab(element) { 35757 this._element = element; 35758 } // Getters 35759 35760 35761 var _proto = Tab.prototype; 35762 35763 // Public 35764 _proto.show = function show() { 35765 var _this = this; 35766 35767 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) { 35768 return; 35769 } 35770 35771 var target; 35772 var previous; 35773 var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0]; 35774 var selector = Util.getSelectorFromElement(this._element); 35775 35776 if (listElement) { 35777 var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE; 35778 previous = $$$1.makeArray($$$1(listElement).find(itemSelector)); 35779 previous = previous[previous.length - 1]; 35780 } 35781 35782 var hideEvent = $$$1.Event(Event.HIDE, { 35783 relatedTarget: this._element 35784 }); 35785 var showEvent = $$$1.Event(Event.SHOW, { 35786 relatedTarget: previous 35787 }); 35788 35789 if (previous) { 35790 $$$1(previous).trigger(hideEvent); 35791 } 35792 35793 $$$1(this._element).trigger(showEvent); 35794 35795 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { 35796 return; 35797 } 35798 35799 if (selector) { 35800 target = document.querySelector(selector); 35801 } 35802 35803 this._activate(this._element, listElement); 35804 35805 var complete = function complete() { 35806 var hiddenEvent = $$$1.Event(Event.HIDDEN, { 35807 relatedTarget: _this._element 35808 }); 35809 var shownEvent = $$$1.Event(Event.SHOWN, { 35810 relatedTarget: previous 35811 }); 35812 $$$1(previous).trigger(hiddenEvent); 35813 $$$1(_this._element).trigger(shownEvent); 35814 }; 35815 35816 if (target) { 35817 this._activate(target, target.parentNode, complete); 35818 } else { 35819 complete(); 35820 } 35821 }; 35822 35823 _proto.dispose = function dispose() { 35824 $$$1.removeData(this._element, DATA_KEY); 35825 this._element = null; 35826 }; // Private 35827 35828 35829 _proto._activate = function _activate(element, container, callback) { 35830 var _this2 = this; 35831 35832 var activeElements; 35833 35834 if (container.nodeName === 'UL') { 35835 activeElements = $$$1(container).find(Selector.ACTIVE_UL); 35836 } else { 35837 activeElements = $$$1(container).children(Selector.ACTIVE); 35838 } 35839 35840 var active = activeElements[0]; 35841 var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE); 35842 35843 var complete = function complete() { 35844 return _this2._transitionComplete(element, active, callback); 35845 }; 35846 35847 if (active && isTransitioning) { 35848 var transitionDuration = Util.getTransitionDurationFromElement(active); 35849 $$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); 35850 } else { 35851 complete(); 35852 } 35853 }; 35854 35855 _proto._transitionComplete = function _transitionComplete(element, active, callback) { 35856 if (active) { 35857 $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
35858 var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; 35859 35860 if (dropdownChild) { 35861 $$$1(dropdownChild).removeClass(ClassName.ACTIVE); 35862 } 35863 35864 if (active.getAttribute('role') === 'tab') { 35865 active.setAttribute('aria-selected', false); 35866 } 35867 } 35868 35869 $$$1(element).addClass(ClassName.ACTIVE); 35870 35871 if (element.getAttribute('role') === 'tab') { 35872 element.setAttribute('aria-selected', true); 35873 } 35874 35875 Util.reflow(element); 35876 $$$1(element).addClass(ClassName.SHOW); 35877 35878 if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { 35879 var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0]; 35880 35881 if (dropdownElement) { 35882 var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)); 35883 $$$1(dropdownToggleList).addClass(ClassName.ACTIVE); 35884 } 35885 35886 element.setAttribute('aria-expanded', true); 35887 } 35888 35889 if (callback) { 35890 callback(); 35891 } 35892 }; // Static 35893 35894 35895 Tab._jQueryInterface = function _jQueryInterface(config) { 35896 return this.each(function () { 35897 var $this = $$$1(this); 35898 var data = $this.data(DATA_KEY); 35899 35900 if (!data) { 35901 data = new Tab(this); 35902 $this.data(DATA_KEY, data); 35903 } 35904 35905 if (typeof config === 'string') { 35906 if (typeof data[config] === 'undefined') { 35907 throw new TypeError("No method named \"" + config + "\""); 35908 } 35909 35910 data[config](); 35911 } 35912 }); 35913 }; 35914 35915 _createClass(Tab, null, [{ 35916 key: "VERSION", 35917 get: function get() { 35918 return VERSION; 35919 } 35920 }]); 35921 35922 return Tab; 35923 }(); 35924 /** 35925 * ------------------------------------------------------------------------ 35926 * Data Api implementation 35927 * ------------------------------------------------------------------------ 35928 */ 35929 35930 35931 $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { 35932 event.preventDefault(); 35933 35934 Tab._jQueryInterface.call($$$1(this), 'show'); 35935 }); 35936 /** 35937 * ------------------------------------------------------------------------ 35938 * jQuery 35939 * ------------------------------------------------------------------------ 35940 */ 35941 35942 $$$1.fn[NAME] = Tab._jQueryInterface; 35943 $$$1.fn[NAME].Constructor = Tab; 35944 35945 $$$1.fn[NAME].noConflict = function () { 35946 $$$1.fn[NAME] = JQUERY_NO_CONFLICT; 35947 return Tab._jQueryInterface; 35948 }; 35949 35950 return Tab; 35951 }($); 35952 35953 /** 35954 * -------------------------------------------------------------------------- 35955 * Bootstrap (v4.1.3): index.js 35956 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 35957 * -------------------------------------------------------------------------- 35958 */ 35959 35960 (function ($$$1) { 35961 if (typeof $$$1 === 'undefined') { 35962 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 35963 } 35964 35965 var version = $$$1.fn.jquery.split(' ')[0].split('.'); 35966 var minMajor = 1; 35967 var ltMajor = 2; 35968 var minMinor = 9; 35969 var minPatch = 1; 35970 var maxMajor = 4; 35971 35972 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 35973 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 35974 } 35975 })($); 35976 35977 exports.Util = Util; 35978 exports.Alert = Alert; 35979 exports.Button = Button; 35980 exports.Carousel = Carousel; 35981 exports.Collapse = Collapse; 35982 exports.Dropdown = Dropdown; 35983 exports.Modal = Modal; 35984 exports.Popover = Popover; 35985 exports.Scrollspy = ScrollSpy; 35986 exports.Tab = Tab; 35987 exports.Tooltip = Tooltip; 35988 35989 Object.defineProperty(exports, '__esModule', { value: true }); 35990 35991}))); 35992//# sourceMappingURL=bootstrap.bundle.js.map 35993 35994/*! 35995 * FormValidation (http://formvalidation.io) 35996 * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks 35997 * 35998 * This is a custom build that does NOT consist of all validators. Only popular validators are included: 35999 * - between 36000 * - callback 36001 * - choice 36002 * - color 36003 * - creditCard 36004 * - date 36005 * - different 36006 * - digits 36007 * - emailAddress 36008 * - file 36009 * - greaterThan 36010 * - identical 36011 * - integer 36012 * - lessThan 36013 * - notEmpty 36014 * - numeric 36015 * - promise 36016 * - regexp 36017 * - remote 36018 * - stringLength 36019 * - uri 36020 * 36021 * Use formValidation(.min).js file if you want to have all validators. 36022 * 36023 * @version v0.8.1, built on 2016-07-29 1:10:54 AM 36024 * @author https://twitter.com/formvalidation 36025 * @copyright (c) 2013 - 2016 Nguyen Huu Phuoc 36026 * @license http://formvalidation.io/license/ 36027 */ 36028// Register the namespace 36029window.FormValidation = { 36030 AddOn: {}, // Add-ons 36031 Framework: {}
vendor: 21,143 bytes, lines 36031-36446
36031, // Supported frameworks 36032 I18n: {}, // i18n 36033 Validator: {} // Available validators 36034}; 36035 36036if (typeof jQuery === 'undefined') { 36037 throw new Error('FormValidation requires jQuery'); 36038} 36039 36040(function($) { 36041 var version = $.fn.jquery.split(' ')[0].split('.'); 36042 if ((+version[0] < 2 && +version[1] < 9) || (+version[0] === 1 && +version[1] === 9 && +version[2] < 1)) { 36043 throw new Error('FormValidation requires jQuery version 1.9.1 or higher'); 36044 } 36045}(jQuery)); 36046 36047(function($) { 36048 // TODO: Remove backward compatibility 36049 /** 36050 * Constructor 36051 * 36052 * @param {jQuery|String} form The form element or selector 36053 * @param {Object} options The options 36054 * @param {String} [namespace] The optional namespace which is used for data-{namespace}-xxx attributes and internal data. 36055 * Currently, it's used to support backward version 36056 * @constructor 36057 */ 36058 FormValidation.Base = function(form, options, namespace) { 36059 this.$form = $(form); 36060 this.options = $.extend({}, $.fn.formValidation.DEFAULT_OPTIONS, options); 36061 this._namespace = namespace || 'fv'; 36062 36063 this.$invalidFields = $([]); // Array of invalid fields 36064 this.$submitButton = null; // The submit button which is clicked to submit form 36065 this.$hiddenButton = null; 36066 36067 // Validating status 36068 this.STATUS_NOT_VALIDATED = 'NOT_VALIDATED'; 36069 this.STATUS_VALIDATING = 'VALIDATING'; 36070 this.STATUS_INVALID = 'INVALID'; 36071 this.STATUS_VALID = 'VALID'; 36072 this.STATUS_IGNORED = 'IGNORED'; 36073 36074 // Default message 36075 this.DEFAULT_MESSAGE = $.fn.formValidation.DEFAULT_MESSAGE; 36076 36077 // Determine the event that is fired when user change the field value 36078 // Most modern browsers supports input event except IE 7, 8. 36079 // IE 9 supports input event but the event is still not fired if I press the backspace key. 36080 // Get IE version 36081 // https://gist.github.com/padolsey/527683/#comment-7595 36082 this._ieVersion = (function() { 36083 var v = 3, div = document.createElement('div'), a = div.all || []; 36084 while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]) {} 36085 return v > 4 ? v : document.documentMode; 36086 }()); 36087 36088 var el = document.createElement('div'); 36089 this._changeEvent = (this._ieVersion === 9 || !('oninput' in el)) ? 'keyup' : 'input'; 36090 36091 // The flag to indicate that the form is ready to submit when a remote/callback validator returns 36092 this._submitIfValid = null; 36093 36094 // Field elements 36095 this._cacheFields = {}; 36096 36097 this._init(); 36098 }; 36099 36100 FormValidation.Base.prototype = { 36101 constructor: FormValidation.Base, 36102 36103 /** 36104 * Check if the number of characters of field value exceed the threshold or not 36105 * 36106 * @param {jQuery} $field The field element 36107 * @returns {Boolean} 36108 */ 36109 _exceedThreshold: function($field) { 36110 var ns = this._namespace, 36111 field = $field.attr('data-' + ns + '-field'), 36112 threshold = this.options.fields[field].threshold || this.options.threshold; 36113 if (!threshold) { 36114 return true; 36115 } 36116 var cannotType = $.inArray($field.attr('type'), ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'reset', 'submit']) !== -1; 36117 return (cannotType || $field.val().length >= threshold); 36118 }, 36119 36120 /** 36121 * Init form 36122 */ 36123 _init: function() { 36124 var that = this, 36125 ns = this._namespace, 36126 options = { 36127 addOns: {}, 36128 autoFocus: this.$form.attr('data-' + ns + '-autofocus'), 36129 button: { 36130 selector: this.$form.attr('data-' + ns + '-button-selector') || this.$form.attr('data-' + ns + '-submitbuttons'), // Support backward 36131 disabled: this.$form.attr('data-' + ns + '-button-disabled') 36132 }, 36133 control: { 36134 valid: this.$form.attr('data-' + ns + '-control-valid'), 36135 invalid: this.$form.attr('data-' + ns + '-control-invalid') 36136 }, 36137 err: { 36138 clazz: this.$form.attr('data-' + ns + '-err-clazz'), 36139 container: this.$form.attr('data-' + ns + '-err-container') || this.$form.attr('data-' + ns + '-container'), // Support backward 36140 parent: this.$form.attr('data-' + ns + '-err-parent') 36141 }, 36142 events: { 36143 formInit: this.$form.attr('data-' + ns + '-events-form-init'), 36144 formPreValidate: this.$form.attr('data-' + ns + '-events-form-prevalidate'), 36145 formError: this.$form.attr('data-' + ns + '-events-form-error'), 36146 formReset: this.$form.attr('data-' + ns + '-events-form-reset'), 36147 formSuccess: this.$form.attr('data-' + ns + '-events-form-success'), 36148 fieldAdded: this.$form.attr('data-' + ns + '-events-field-added'), 36149 fieldRemoved: this.$form.attr('data-' + ns + '-events-field-removed'), 36150 fieldInit: this.$form.attr('data-' + ns + '-events-field-init'), 36151 fieldError: this.$form.attr('data-' + ns + '-events-field-error'), 36152 fieldReset: this.$form.attr('data-' + ns + '-events-field-reset'), 36153 fieldSuccess: this.$form.attr('data-' + ns + '-events-field-success'), 36154 fieldStatus: this.$form.attr('data-' + ns + '-events-field-status'), 36155 localeChanged: this.$form.attr('data-' + ns + '-events-locale-changed'), 36156 validatorError: this.$form.attr('data-' + ns + '-events-validator-error'), 36157 validatorSuccess: this.$form.attr('data-' + ns + '-events-validator-success'), 36158 validatorIgnored: this.$form.attr('data-' + ns + '-events-validator-ignored') 36159 }, 36160 excluded: this.$form.attr('data-' + ns + '-excluded'), 36161 icon: { 36162 valid: this.$form.attr('data-' + ns + '-icon-valid') || this.$form.attr('data-' + ns + '-feedbackicons-valid'), // Support backward 36163 invalid: this.$form.attr('data-' + ns + '-icon-invalid') || this.$form.attr('data-' + ns + '-feedbackicons-invalid'), // Support backward 36164 validating: this.$form.attr('data-' + ns + '-icon-validating') || this.$form.attr('data-' + ns + '-feedbackicons-validating'), // Support backward 36165 feedback: this.$form.attr('data-' + ns + '-icon-feedback') 36166 }, 36167 live: this.$form.attr('data-' + ns + '-live'), 36168 locale: this.$form.attr('data-' + ns + '-locale'), 36169 message: this.$form.attr('data-' + ns + '-message'), 36170 onPreValidate: this.$form.attr('data-' + ns + '-onprevalidate'), 36171 onError: this.$form.attr('data-' + ns + '-onerror'), 36172 onReset: this.$form.attr('data-' + ns + '-onreset'), 36173 onSuccess: this.$form.attr('data-' + ns + '-onsuccess'), 36174 row: { 36175 selector: this.$form.attr('data-' + ns + '-row-selector') || this.$form.attr('data-' + ns + '-group'), // Support backward 36176 valid: this.$form.attr('data-' + ns + '-row-valid'), 36177 invalid: this.$form.attr('data-' + ns + '-row-invalid'), 36178 feedback: this.$form.attr('data-' + ns + '-row-feedback') 36179 }, 36180 threshold: this.$form.attr('data-' + ns + '-threshold'), 36181 trigger: this.$form.attr('data-' + ns + '-trigger'), 36182 verbose: this.$form.attr('data-' + ns + '-verbose'), 36183 fields: {} 36184 }; 36185 36186 this.$form 36187 // Disable client side validation in HTML 5 36188 .attr('novalidate', 'novalidate') 36189 .addClass(this.options.elementClass) 36190 // Disable the default submission first 36191 .on('submit.' + ns, function(e) { 36192 e.preventDefault(); 36193 that.validate(); 36194 }) 36195 .on('click.' + ns, this.options.button.selector, function() { 36196 that.$submitButton = $(this); 36197 // The user just click the submit button 36198 that._submitIfValid = true; 36199 }); 36200 36201 if (this.options.declarative === true || this.options.declarative === 'true') { 36202 // Find all fields which have either "name" or "data-{namespace}-field" attribute 36203 this.$form 36204 .find('[name], [data-' + ns + '-field]') 36205 .each(function() { 36206 var $field = $(this), 36207 field = $field.attr('name') || $field.attr('data-' + ns + '-field'), 36208 opts = that._parseOptions($field); 36209 if (opts) { 36210 $field.attr('data-' + ns + '-field', field); 36211 options.fields[field] = $.extend({}, opts, options.fields[field]); 36212 } 36213 }); 36214 } 36215 36216 this.options = $.extend(true, this.options, options); 36217 36218 // Normalize the err.parent option 36219 if ('string' === typeof this.options.err.parent) { 36220 this.options.err.parent = new RegExp(this.options.err.parent); 36221 } 36222 36223 // Support backward 36224 if (this.options.container) { 36225 this.options.err.container = this.options.container; 36226 delete this.options.container; 36227 } 36228 if (this.options.feedbackIcons) { 36229 this.options.icon = $.extend(true, this.options.icon, this.options.feedbackIcons); 36230 delete this.options.feedbackIcons; 36231 } 36232 if (this.options.group) { 36233 this.options.row.selector = this.options.group; 36234 delete this.options.group; 36235 } 36236 if (this.options.submitButtons) { 36237 this.options.button.selector = this.options.submitButtons; 36238 delete this.options.submitButtons; 36239 } 36240 36241 // If the locale is not found, reset it to default one 36242 if (!FormValidation.I18n[this.options.locale]) { 36243 this.options.locale = $.fn.formValidation.DEFAULT_OPTIONS.locale; 36244 } 36245 36246 // Parse the add-on options from HTML attributes 36247 if (this.options.declarative === true || this.options.declarative === 'true') { 36248 this.options = $.extend(true, this.options, { addOns: this._parseAddOnOptions() }); 36249 } 36250 36251 // When pressing Enter on any field in the form, the first submit button will do its job. 36252 // The form then will be submitted. 36253 // I create a first hidden submit button 36254 this.$hiddenButton = $('<button/>') 36255 .attr('type', 'submit') 36256 .prependTo(this.$form) 36257 .addClass('fv-hidden-submit') 36258 .css({ display: 'none', width: 0, height: 0 }); 36259 36260 this.$form 36261 .on('click.' + this._namespace, '[type="submit"]', function(e) { 36262 // #746: Check if the button click handler returns false 36263 if (!e.isDefaultPrevented()) { 36264 var $target = $(e.target), 36265 // The button might contain HTML tag 36266 $button = $target.is('[type="submit"]') ? $target.eq(0) : $target.parent('[type="submit"]').eq(0); 36267 36268 // Don't perform validation when clicking on the submit button/input which 36269 // aren't defined by the 'button.selector' option 36270 if (that.options.button.selector && !$button.is(that.options.button.selector) && !$button.is(that.$hiddenButton)) { 36271 that.$form.off('submit.' + that._namespace).submit(); 36272 // Fix the issue where 'formnovalidate' causes IE to send two postbacks to server 36273 return false; 36274 } 36275 } 36276 }); 36277 36278 for (var field in this.options.fields) { 36279 this._initField(field); 36280 } 36281 36282 // Init the add-ons 36283 for (var addOn in this.options.addOns) { 36284 if ('function' === typeof FormValidation.AddOn[addOn].init) { 36285 FormValidation.AddOn[addOn].init(this, this.options.addOns[addOn]); 36286 } 36287 } 36288 36289 this.$form.trigger($.Event(this.options.events.formInit), { 36290 bv: this, // Support backward 36291 fv: this, 36292 options: this.options 36293 }); 36294 36295 // Prepare the events 36296 if (this.options.onPreValidate) { 36297 this.$form.on(this.options.events.formPreValidate, function(e) { 36298 FormValidation.Helper.call(that.options.onPreValidate, [e]); 36299 }); 36300 } 36301 if (this.options.onSuccess) { 36302 this.$form.on(this.options.events.formSuccess, function(e) { 36303 FormValidation.Helper.call(that.options.onSuccess, [e]); 36304 }); 36305 } 36306 if (this.options.onError) { 36307 this.$form.on(this.options.events.formError, function(e) { 36308 FormValidation.Helper.call(that.options.onError, [e]); 36309 }); 36310 } 36311 if (this.options.onReset) { 36312 this.$form.on(this.options.events.formReset, function(e) { 36313 FormValidation.Helper.call(that.options.onReset, [e]); 36314 }); 36315 } 36316 }, 36317 36318 /** 36319 * Init field 36320 * 36321 * @param {String|jQuery} field The field name or field element 36322 */ 36323 _initField: function(field) { 36324 var ns = this._namespace, 36325 fields = $([]); 36326 switch (typeof field) { 36327 case 'object': 36328 fields = field; 36329 field = field.attr('data-' + ns + '-field'); 36330 break; 36331 case 'string': 36332 fields = this.getFieldElements(field); 36333 fields.attr('data-' + ns + '-field', field); 36334 break; 36335 default: 36336 break; 36337 } 36338 36339 // We don't need to validate non-existing fields 36340 if (fields.length === 0) { 36341 return; 36342 } 36343 36344 if (this.options.fields[field] === null || this.options.fields[field].validators === null) { 36345 return; 36346 } 36347 36348 var validators = this.options.fields[field].validators, 36349 validatorName, 36350 alias; 36351 for (validatorName in validators) { 36352 alias = validators[validatorName].alias || validatorName; 36353 if (!FormValidation.Validator[alias]) { 36354 delete this.options.fields[field].validators[validatorName]; 36355 } 36356 } 36357 if (this.options.fields[field].enabled === null) { 36358 this.options.fields[field].enabled = true; 36359 } 36360 36361 var that = this, 36362 total = fields.length, 36363 type = fields.attr('type'), 36364 updateAll = (total === 1) || ('radio' === type) || ('checkbox' === type), 36365 trigger = this._getFieldTrigger(fields.eq(0)), 36366 clazz = this.options.err.clazz.split(' ').join('.'), 36367 events = $.map(trigger, function(item) { 36368 return item + '.update.' + ns; 36369 }).join(' '); 36370 36371 for (var i = 0; i < total; i++) { 36372 var $field = fields.eq(i), 36373 row = this.options.fields[field].row || this.options.row.selector, 36374 $parent = $field.closest(row), 36375 // Allow user to indicate where the error messages are shown 36376 // Support backward 36377 container = ('function' === typeof (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container)) 36378 ? (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container).call(this, $field, this) 36379 : (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container), 36380 $message = (container && container !== 'tooltip' && container !== 'popover') ? $(container) : this._getMessageContainer($field, row); 36381 36382 if (container && container !== 'tooltip' && container !== 'popover') { 36383 $message.addClass(this.options.err.clazz); 36384 } 36385 36386 // Remove all error messages and feedback icons 36387 $message.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]').remove(); 36388 $parent.find('i[data-' + ns + '-icon-for="' + field + '"]').remove(); 36389 36390 // Whenever the user change the field value, mark it as not validated yet 36391 $field.off(events).on(events, function() { 36392 that.updateStatus($(this), that.STATUS_NOT_VALIDATED); 36393 }); 36394 36395 // Create help block elements for showing the error messages 36396 $field.data(ns + '.messages', $message); 36397 for (validatorName in validators) { 36398 $field.data(ns + '.result.' + validatorName, this.STATUS_NOT_VALIDATED); 36399 36400 if (!updateAll || i === total - 1) { 36401 $('<small/>') 36402 .css('display', 'none') 36403 .addClass(this.options.err.clazz) 36404 .attr('data-' + ns + '-validator', validatorName) 36405 .attr('data-' + ns + '-for', field) 36406 .attr('data-' + ns + '-result', this.STATUS_NOT_VALIDATED) 36407 .html(this._getMessage(field, validatorName)) 36408 .appendTo($message); 36409 } 36410 36411 // Init the validator 36412 alias = validators[validatorName].alias || validatorName; 36413 if ('function' === typeof FormValidation.Validator[alias].init) { 36414 FormValidation.Validator[alias].init(this, $field, this.options.fields[field].validators[validatorName], validatorName); 36415 } 36416 } 36417 36418 // Prepare the feedback icons 36419 if (this.options.fields[field].icon !== false && this.options.fields[field].icon !== 'false' 36420 && this.options.icon 36421 && this.options.icon.valid && this.options.icon.invalid && this.options.icon.validating 36422 && (!updateAll || i === total - 1)) 36423 { 36424 // $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid).addClass(this.options.row.feedback); 36425 // Keep error messages which are populated from back-end 36426 $parent.addClass(this.options.row.feedback); 36427 var $icon = $('<i/>') 36428 .css('display', 'none') 36429 .addClass(this.options.icon.feedback) 36430 .attr('data-' + ns + '-icon-for', field) 36431 .insertAfter($field); 36432 36433 // Store the icon as a data of field element 36434 (!updateAll ? $field : fields).data(ns + '.icon', $icon); 36435 36436 if ('tooltip' === container || 'popover' === container) { 36437 (!updateAll ? $field : fields) 36438 .on(this.options.events.fieldError, function() { 36439 $parent.addClass('fv-has-tooltip'); 36440 }) 36441 .on(this.options.events.fieldSuccess, function() { 36442 $parent.removeClass('fv-has-tooltip'); 36443 }); 36444 36445 $field 36446 // Show tooltip/popover message when field gets focu
36446s 36447 .off('focus.container.' + ns) 36448 .on('focus.container.' + ns, function() { 36449 that._showTooltip($(this), container); 36450 }) 36451 // and hide them when losing focus 36452 .off('blur.container.' + ns) 36453 .on('blur.container.' + ns, function() { 36454 that._hideTooltip($(this), container); 36455 }); 36456 } 36457 36458 if ('string' === typeof this.options.fields[field].icon && this.options.fields[field].icon !== 'true') { 36459 $icon.appendTo($(this.options.fields[field].icon)); 36460 } else { 36461 this._fixIcon($field, $icon); 36462 } 36463 } 36464 } 36465 36466 // Sort the validators by priority 36467 var sortedByPriority = []; 36468 for (validatorName in validators) { 36469 alias = validators[validatorName].alias || validatorName; 36470 36471 // Determine the priority 36472 validators[validatorName].priority = parseInt(validators[validatorName].priority 36473 || FormValidation.Validator[alias].priority 36474 || 1, 10); 36475 sortedByPriority.push({ 36476 validator: validatorName, 36477 priority: validators[validatorName].priority 36478 }); 36479 } 36480 sortedByPriority = sortedByPriority.sort(function(a, b) { 36481 return a.priority - b.priority; 36482 }); 36483 36484 // Prepare the events 36485 fields 36486 .data(ns + '.validators', sortedByPriority) 36487 .on(this.options.events.fieldSuccess, function(e, data) { 36488 var onSuccess = that.getOptions(data.field, null, 'onSuccess'); 36489 if (onSuccess) { 36490 FormValidation.Helper.call(onSuccess, [e, data]); 36491 } 36492 }) 36493 .on(this.options.events.fieldError, function(e, data) { 36494 var onError = that.getOptions(data.field, null, 'onError'); 36495 if (onError) { 36496 FormValidation.Helper.call(onError, [e, data]); 36497 } 36498 }) 36499 .on(this.options.events.fieldReset, function(e, data) { 36500 var onReset = that.getOptions(data.field, null, 'onReset'); 36501 if (onReset) { 36502 FormValidation.Helper.call(onReset, [e, data]); 36503 } 36504 }) 36505 .on(this.options.events.fieldStatus, function(e, data) { 36506 var onStatus = that.getOptions(data.field, null, 'onStatus'); 36507 if (onStatus) { 36508 FormValidation.Helper.call(onStatus, [e, data]); 36509 } 36510 }) 36511 .on(this.options.events.validatorError, function(e, data) { 36512 var onError = that.getOptions(data.field, data.validator, 'onError'); 36513 if (onError) { 36514 FormValidation.Helper.call(onError, [e, data]); 36515 } 36516 }) 36517 .on(this.options.events.validatorIgnored, function(e, data) { 36518 var onIgnored = that.getOptions(data.field, data.validator, 'onIgnored'); 36519 if (onIgnored) { 36520 FormValidation.Helper.call(onIgnored, [e, data]); 36521 } 36522 }) 36523 .on(this.options.events.validatorSuccess, function(e, data) { 36524 var onSuccess = that.getOptions(data.field, data.validator, 'onSuccess'); 36525 if (onSuccess) { 36526 FormValidation.Helper.call(onSuccess, [e, data]); 36527 } 36528 }); 36529 36530 // Set live mode 36531 this.onLiveChange(fields, 'live', function() { 36532 if (that._exceedThreshold($(this))) { 36533 that.validateField($(this)); 36534 } 36535 }); 36536 36537 fields.trigger($.Event(this.options.events.fieldInit), {
vendor: 4,652 bytes, lines 36538-36636
36538 bv: this, // Support backward 36539 fv: this, 36540 field: field, 36541 element: fields 36542 }); 36543 }, 36544 36545 /** 36546 * Check if the field is excluded. 36547 * Returning true means that the field will not be validated 36548 * 36549 * @param {jQuery} $field The field element 36550 * @returns {Boolean} 36551 */ 36552 _isExcluded: function($field) { 36553 var ns = this._namespace, 36554 excludedAttr = $field.attr('data-' + ns + '-excluded'), 36555 // I still need to check the 'name' attribute while initializing the field 36556 field = $field.attr('data-' + ns + '-field') || $field.attr('name'); 36557 36558 switch (true) { 36559 case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'true' || this.options.fields[field].excluded === true)): 36560 case (excludedAttr === 'true'): 36561 case (excludedAttr === ''): 36562 return true; 36563 36564 case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'false' || this.options.fields[field].excluded === false)): 36565 case (excludedAttr === 'false'): 36566 return false; 36567 36568 case (!!field && this.options.fields && this.options.fields[field] && 'function' === typeof this.options.fields[field].excluded): 36569 return this.options.fields[field].excluded.call(this, $field, this); 36570 36571 case (!!field && this.options.fields && this.options.fields[field] && 'string' === typeof this.options.fields[field].excluded): 36572 case (excludedAttr): 36573 return FormValidation.Helper.call(this.options.fields[field].excluded, [$field, this]); 36574 36575 default: 36576 if (this.options.excluded) { 36577 // Convert to array first 36578 if ('string' === typeof this.options.excluded) { 36579 this.options.excluded = $.map(this.options.excluded.split(','), function(item) { 36580 // Trim the spaces 36581 return $.trim(item); 36582 }); 36583 } 36584 36585 var length = this.options.excluded.length; 36586 for (var i = 0; i < length; i++) { 36587 if (('string' === typeof this.options.excluded[i] && $field.is(this.options.excluded[i])) 36588 || ('function' === typeof this.options.excluded[i] && this.options.excluded[i].call(this, $field, this) === true)) 36589 { 36590 return true; 36591 } 36592 } 36593 } 36594 return false; 36595 } 36596 }, 36597 36598 /** 36599 * Get a field changed trigger event 36600 * 36601 * @param {jQuery} $field The field element 36602 * @returns {String[]} The event names triggered on field change 36603 */ 36604 _getFieldTrigger: function($field) { 36605 var ns = this._namespace, 36606 trigger = $field.data(ns + '.trigger'); 36607 if (trigger) { 36608 return trigger; 36609 } 36610 36611 // IE10/11 auto fires input event of elements using the placeholder attribute 36612 // https://connect.microsoft.com/IE/feedback/details/856700/ 36613 var type = $field.attr('type'), 36614 name = $field.attr('data-' + ns + '-field'), 36615 event = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === $field.get(0).tagName) 36616 ? 'change' 36617 : (this._ieVersion >= 10 && $field.attr('placeholder') ? 'keyup' : this._changeEvent); 36618 trigger = ((this.options.fields[name] ? this.options.fields[name].trigger : null) || this.options.trigger || event).split(' '); 36619 36620 // Since the trigger data is used many times, I need to cache it to use later 36621 $field.data(ns + '.trigger', trigger); 36622 36623 return trigger; 36624 }, 36625 36626 /** 36627 * Get the error message for given field and validator 36628 * 36629 * @param {String} field The field name 36630 * @param {String} validatorName The validator name 36631 * @returns {String} 36632 */ 36633 _getMessage: function(field, validatorName) { 36634 if (!this.options.fields[field] || !this.options.fields[field].validators) { 36635 return ''; 36636 }
36637 var validators = this.options.fields[field].validators, 36638 alias = (validators[validatorName] && validators[validatorName].alias) ? validators[validatorName].alias : validatorName; 36639 if (!FormValidation.Validator[alias]) { 36640 return ''; 36641 } 36642 36643 switch (true) { 36644 case !!validators[validatorName].message: 36645 return validators[validatorName].message; 36646 case !!this.options.fields[field].message: 36647 return this.options.fields[field].message; 36648 case !!this.options.message: 36649 return this.options.message; 36650 case (!!FormValidation.I18n[this.options.locale] && !!FormValidation.I18n[this.options.locale][alias] && !!FormValidation.I18n[this.options.locale][alias]['default']): 36651 return FormValidation.I18n[this.options.locale][alias]['default']; 36652 default: 36653 return this.DEFAULT_MESSAGE; 36654 } 36655 }, 36656 36657 /** 36658 * Get the element to place the error messages 36659 * 36660 * @param {jQuery} $field The field element 36661 * @param {String} row 36662 * @returns {jQuery} 36663 */ 36664 _getMessageContainer: function($field, row) { 36665 if (!this.options.err.parent) { 36666 throw new Error('The err.parent option is not defined'); 36667 } 36668 36669 var $parent = $field.parent(); 36670 if ($parent.is(row)) { 36671 return $parent; 36672 } 36673
36674 var cssClasses = $parent.attr('class'); 36675 if (!cssClasses) { 36676 return this._getMessageContainer($parent, row); 36677 } 36678 36679 if (this.options.err.parent.test(cssClasses)) { 36680 return $parent; 36681 } 36682 36683 return this._getMessageContainer($parent, row); 36684 }, 36685 36686 /** 36687 * Parse the add-on options from HTML attributes 36688 * 36689 * @returns {Object} 36690 */ 36691 _parseAddOnOptions: function() { 36692 var ns = this._namespace, 36693 names = this.$form.attr('data-' + ns + '-addons'), 36694 addOns = this.options.addOns || {}; 36695 36696 if (names) { 36697 names = names.replace(/\s/g, '').split(','); 36698 for (var i = 0; i < names.length; i++) { 36699 if (!addOns[names[i]]) { 36700 addOns[names[i]] = {}; 36701 } 36702 } 36703 } 36704 36705 // Try to parse each add-on options 36706 var addOn, attrMap, attr, option; 36707 for (addOn in addOns) { 36708 if (!FormValidation.AddOn[addOn]) { 36709 // Add-on is not found 36710 delete addOns[addOn]; 36711 continue; 36712 } 36713 36714 attrMap = FormValidation.AddOn[addOn].html5Attributes; 36715 if (attrMap) { 36716 for (attr in attrMap) { 36717 option = this.$form.attr('data-' + ns + '-addons-' + addOn.toLowerCase() + '-' + attr.toLowerCase()); 36718 if (option) { 36719 addOns[addOn][attrMap[attr]] = option; 36720 } 36721 } 36722 } 36723 } 36724 36725 return addOns; 36726 }, 36727 36728 /** 36729 * Parse the validator options from HTML attributes 36730 * 36731 * @param {jQuery} $field The field element 36732 * @returns {Object} 36733 */ 36734 _parseOptions: function($field) { 36735 var ns = this._namespace, 36736 field = $field.attr('name') || $field.attr('data-' + ns + '-field'), 36737 validators = {}, 36738 aliasAttr = new RegExp('^data-' + ns + '-([a-z]+)-alias$'), 36739 validatorSet = $.extend({}, FormValidation.Validator), 36740 validator, 36741 v, // Validator name 36742 attrName, 36743 enabled, 36744 optionName, 36745 optionAttrName, 36746 optionValue, 36747 html5AttrName, 36748 html5AttrMap; 36749 36750 // Determine whether the alias validator is used by checking the data-fv-validator-alias attribute 36751 $.each($field.get(0).attributes, function(i, attribute) { 36752 if (attribute.value && aliasAttr.test(attribute.name)) { 36753 v = attribute.name.split('-')[2]; 36754 if (validatorSet[attribute.value]) { 36755 validatorSet[v] = validatorSet[attribute.value]; 36756 validatorSet[v].alias = attribute.value; 36757 } 36758 } 36759 }); 36760 36761 for (v in validatorSet) { 36762 validator = validatorSet[v]; 36763 attrName = 'data-' + ns + '-' + v.toLowerCase(), 36764 enabled = $field.attr(attrName) + ''; 36765 html5AttrMap = ('function' === typeof validator.enableByHtml5) ? validator.enableByHtml5($field) : null; 36766 36767 if ((html5AttrMap && enabled !== 'false') 36768 || (html5AttrMap !== true && ('' === enabled || 'true' === enabled || attrName === enabled.toLowerCase()))) 36769 { 36770 // Try to parse the options via attributes 36771 validator.html5Attributes = $.extend({}, { 36772 message: 'message', 36773 onerror: 'onError', 36774 onreset: 'onReset', 36775 onsuccess: 'onSuccess', 36776 priority: 'priority', 36777 transformer: 'transformer' 36778 }, validator.html5Attributes); 36779 validators[v] = $.extend({}, html5AttrMap === true ? {} : html5AttrMap, validators[v]); 36780 if (validator.alias) { 36781 validators[v].alias = validator.alias; 36782 } 36783 36784 for (html5AttrName in validator.html5Attributes) { 36785 optionName = validator.html5Attributes[html5AttrName]; 36786 optionAttrName = 'data-' + ns + '-' + v.toLowerCase() + '-' + html5AttrName; 36787 optionValue = $field.attr(optionAttrName); 36788 if (optionValue) { 36789 if ('true' === optionValue || optionAttrName === optionValue.toLowerCase()) { 36790 optionValue = true; 36791 } else if ('false' === optionValue) { 36792 optionValue = false;
vendor: 2,220 bytes, lines 36793-36823
36793 } 36794 validators[v][optionName] = optionValue; 36795 } 36796 } 36797 } 36798 } 36799 36800 var opts = { 36801 autoFocus: $field.attr('data-' + ns + '-autofocus'), 36802 err: $field.attr('data-' + ns + '-err-container') || $field.attr('data-' + ns + '-container'), // Support backward 36803 enabled: $field.attr('data-' + ns + '-enabled'), 36804 excluded: $field.attr('data-' + ns + '-excluded'), 36805 icon: $field.attr('data-' + ns + '-icon') || $field.attr('data-' + ns + '-feedbackicons') || (this.options.fields && this.options.fields[field] ? this.options.fields[field].feedbackIcons : null), // Support backward 36806 message: $field.attr('data-' + ns + '-message'), 36807 onError: $field.attr('data-' + ns + '-onerror'), 36808 onReset: $field.attr('data-' + ns + '-onreset'), 36809 onStatus: $field.attr('data-' + ns + '-onstatus'), 36810 onSuccess: $field.attr('data-' + ns + '-onsuccess'), 36811 row: $field.attr('data-' + ns + '-row') || $field.attr('data-' + ns + '-group') || (this.options.fields && this.options.fields[field] ? this.options.fields[field].group : null), // Support backward 36812 selector: $field.attr('data-' + ns + '-selector'), 36813 threshold: $field.attr('data-' + ns + '-threshold'), 36814 transformer: $field.attr('data-' + ns + '-transformer'), 36815 trigger: $field.attr('data-' + ns + '-trigger'), 36816 verbose: $field.attr('data-' + ns + '-verbose'), 36817 validators: validators 36818 }, 36819 emptyOptions = $.isEmptyObject(opts), // Check if the field options are set using HTML attributes 36820 emptyValidators = $.isEmptyObject(validators); // Check if the field validators are set using HTML attributes 36821 36822 if (!emptyValidators || (!emptyOptions && this.options.fields && this.options.fields[field])) { 36823 //
vendor: 16,222 bytes, lines 36823-37260
36823opts.validators = validators; 36824 return opts; 36825 } else { 36826 return null; 36827 } 36828 }, 36829 36830 /** 36831 * Called when all validations are completed 36832 */ 36833 _submit: function() { 36834 var isValid = this.isValid(); 36835 if (isValid === null) { 36836 return; 36837 } 36838 36839 var eventType = isValid ? this.options.events.formSuccess : this.options.events.formError, 36840 e = $.Event(eventType); 36841 36842 this.$form.trigger(e); 36843 36844 // Call default handler 36845 // Check if whether the submit button is clicked 36846 if (this.$submitButton) { 36847 isValid ? this._onSuccess(e) : this._onError(e); 36848 } 36849 }, 36850 36851 // ~~~~~~ 36852 // Events 36853 // ~~~~~~ 36854 36855 /** 36856 * The default handler of error.form.fv event. 36857 * It will be called when there is a invalid field 36858 * 36859 * @param {jQuery.Event} e The jQuery event object 36860 */ 36861 _onError: function(e) { 36862 if (e.isDefaultPrevented()) { 36863 return; 36864 } 36865 36866 if ('submitted' === this.options.live) { 36867 // Enable live mode 36868 this.options.live = 'enabled'; 36869 36870 var that = this; 36871 for (var field in this.options.fields) { 36872 (function(f) { 36873 var fields = that.getFieldElements(f); 36874 if (fields.length) { 36875 that.onLiveChange(fields, 'live', function() { 36876 if (that._exceedThreshold($(this))) { 36877 that.validateField($(this)); 36878 } 36879 }); 36880 } 36881 })(field); 36882 } 36883 } 36884 36885 // Determined the first invalid field which will be focused on automatically 36886 var ns = this._namespace; 36887 for (var i = 0; i < this.$invalidFields.length; i++) { 36888 var $field = this.$invalidFields.eq(i), 36889 autoFocus = this.isOptionEnabled($field.attr('data-' + ns + '-field'), 'autoFocus'); 36890 if (autoFocus) { 36891 // Focus the field 36892 $field.focus(); 36893 break; 36894 } 36895 } 36896 }, 36897 36898 /** 36899 * Called after validating a field element 36900 * 36901 * @param {jQuery} $field The field element 36902 * @param {String} [validatorName] The validator name 36903 */ 36904 _onFieldValidated: function($field, validatorName) { 36905 var ns = this._namespace, 36906 field = $field.attr('data-' + ns + '-field'), 36907 validators = this.options.fields[field].validators, 36908 counter = {}, 36909 numValidators = 0, 36910 data = { 36911 bv: this, // Support backward 36912 fv: this, 36913 field: field, 36914 element: $field, 36915 validator: validatorName, 36916 result: $field.data(ns + '.response.' + validatorName) 36917 }; 36918 36919 // Trigger an event after given validator completes 36920 if (validatorName) { 36921 switch ($field.data(ns + '.result.' + validatorName)) { 36922 case this.STATUS_INVALID: 36923 $field.trigger($.Event(this.options.events.validatorError), data); 36924 break; 36925 case this.STATUS_VALID: 36926 $field.trigger($.Event(this.options.events.validatorSuccess), data); 36927 break; 36928 case this.STATUS_IGNORED: 36929 $field.trigger($.Event(this.options.events.validatorIgnored), data); 36930 break; 36931 default: 36932 break; 36933 } 36934 } 36935 36936 counter[this.STATUS_NOT_VALIDATED] = 0; 36937 counter[this.STATUS_VALIDATING] = 0; 36938 counter[this.STATUS_INVALID] = 0; 36939 counter[this.STATUS_VALID] = 0; 36940 counter[this.STATUS_IGNORED] = 0; 36941 36942 for (var v in validators) { 36943 if (validators[v].enabled === false) { 36944 continue; 36945 } 36946 36947 numValidators++; 36948 var result = $field.data(ns + '.result.' + v); 36949 if (result) { 36950 counter[result]++; 36951 } 36952 } 36953 36954 // The sum of valid fields now also include ignored fields 36955 if (counter[this.STATUS_VALID] + counter[this.STATUS_IGNORED] === numValidators) { 36956 // Remove from the list of invalid fields 36957 this.$invalidFields = this.$invalidFields.not($field); 36958 36959 $field.trigger($.Event(this.options.events.fieldSuccess), data); 36960 } 36961 // If all validators are completed and there is at least one validator which doesn't pass 36962 else if ((counter[this.STATUS_NOT_VALIDATED] === 0 || !this.isOptionEnabled(field, 'verbose')) && counter[this.STATUS_VALIDATING] === 0 && counter[this.STATUS_INVALID] > 0) { 36963 // Add to the list of invalid fields 36964 this.$invalidFields = this.$invalidFields.add($field); 36965 36966 $field.trigger($.Event(this.options.events.fieldError), data); 36967 } 36968 }, 36969 36970 /** 36971 * The default handler of success.form.fv event. 36972 * It will be called when all the fields are valid 36973 * 36974 * @param {jQuery.Event} e The jQuery event object 36975 */ 36976 _onSuccess: function(e) { 36977 if (e.isDefaultPrevented()) { 36978 return; 36979 } 36980 36981 // Submit the form 36982 this.disableSubmitButtons(true).defaultSubmit(); 36983 }, 36984 36985 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36986 // Abstract methods 36987 // Need to be implemented by sub-class that supports specific framework 36988 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36989 36990 /** 36991 * Specific framework might need to adjust the icon position 36992 * 36993 * @param {jQuery} $field The field element 36994 * @param {jQuery} $icon The icon element 36995 */ 36996 _fixIcon: function($field, $icon) { 36997 }, 36998 36999 /** 37000 * Create a tooltip or popover 37001 * It will be shown when focusing on the field 37002 * 37003 * @param {jQuery} $field The field element 37004 * @param {String} message The message 37005 * @param {String} type Can be 'tooltip' or 'popover' 37006 */ 37007 _createTooltip: function($field, message, type) { 37008 }, 37009 37010 /** 37011 * Destroy the tooltip or popover 37012 * 37013 * @param {jQuery} $field The field element 37014 * @param {String} type Can be 'tooltip' or 'popover' 37015 */ 37016 _destroyTooltip: function($field, type) { 37017 }, 37018 37019 /** 37020 * Hide a tooltip or popover 37021 * 37022 * @param {jQuery} $field The field element 37023 * @param {String} type Can be 'tooltip' or 'popover' 37024 */ 37025 _hideTooltip: function($field, type) { 37026 }, 37027 37028 /** 37029 * Show a tooltip or popover 37030 * 37031 * @param {jQuery} $field The field element 37032 * @param {String} type Can be 'tooltip' or 'popover' 37033 */ 37034 _showTooltip: function($field, type) { 37035 }, 37036 37037 // ~~~~~~~~~~~~~~ 37038 // Public methods 37039 // ~~~~~~~~~~~~~~ 37040 37041 /** 37042 * Submit the form using default submission. 37043 * It also does not perform any validations when submitting the form 37044 */ 37045 defaultSubmit: function() { 37046 var ns = this._namespace; 37047 if (this.$submitButton) { 37048 // Create hidden input to send the submit buttons 37049 $('<input/>') 37050 .attr({ 37051 'type': 'hidden', 37052 name: this.$submitButton.attr('name') 37053 }) 37054 .attr('data-' + ns + '-submit-hidden', '') 37055 .val(this.$submitButton.val()) 37056 .appendTo(this.$form); 37057 } 37058 37059 // Submit form 37060 this.$form.off('submit.' + ns).submit(); 37061 }, 37062 37063 /** 37064 * Disable/enable submit buttons 37065 * 37066 * @param {Boolean} disabled Can be true or false 37067 * @returns {FormValidation.Base} 37068 */ 37069 disableSubmitButtons: function(disabled) { 37070 if (!disabled) { 37071 this.$form 37072 .find(this.options.button.selector) 37073 .removeAttr('disabled') 37074 .removeClass(this.options.button.disabled); 37075 } else if (this.options.live !== 'disabled') { 37076 // Don't disable if the live validating mode is disabled 37077 this.$form 37078 .find(this.options.button.selector) 37079 .attr('disabled', 'disabled') 37080 .addClass(this.options.button.disabled); 37081 } 37082 37083 return this; 37084 }, 37085 37086 /** 37087 * Retrieve the field elements by given name 37088 * 37089 * @param {String} field The field name 37090 * @returns {null|jQuery[]} 37091 */ 37092 getFieldElements: function(field) { 37093 if (!this._cacheFields[field]) { 37094 if (this.options.fields[field] && this.options.fields[field].selector) { 37095 // Look for the field inside the form first 37096 var f = this.$form.find(this.options.fields[field].selector); 37097 // If not found, search in entire document 37098 this._cacheFields[field] = f.length ? f : $(this.options.fields[field].selector); 37099 } else { 37100 this._cacheFields[field] = this.$form.find('[name="' + field + '"]'); 37101 } 37102 } 37103 37104 return this._cacheFields[field]; 37105 }, 37106 37107 /** 37108 * Get the field value after applying transformer 37109 * 37110 * @param {String|jQuery} field The field name or field element 37111 * @param {String} validatorName The validator name 37112 * @returns {String} 37113 */ 37114 getFieldValue: function(field, validatorName) { 37115 var $field, ns = this._namespace; 37116 if ('string' === typeof field) { 37117 $field = this.getFieldElements(field); 37118 if ($field.length === 0) { 37119 return null; 37120 } 37121 } else { 37122 $field = field; 37123 field = $field.attr('data-' + ns + '-field'); 37124 } 37125 37126 if (!field || !this.options.fields[field]) { 37127 return $field.val(); 37128 } 37129 37130 var transformer = (this.options.fields[field].validators && this.options.fields[field].validators[validatorName] 37131 ? this.options.fields[field].validators[validatorName].transformer : null) 37132 || this.options.fields[field].transformer; 37133 return transformer ? FormValidation.Helper.call(transformer, [$field, validatorName, this]) : $field.val(); 37134 }, 37135 37136 /** 37137 * Get the namespace 37138 * 37139 * @returns {String} 37140 */ 37141 getNamespace: function() { 37142 return this._namespace; 37143 }, 37144 37145 /** 37146 * Get the field options 37147 * 37148 * @param {String|jQuery} [field] The field name or field element. If it is not set, the method returns the form options 37149 * @param {String} [validator] The name of validator. It null, the method returns form options 37150 * @param {String} [option] The option name 37151 * @return {String|Object} 37152 */ 37153 getOptions: function(field, validator, option) { 37154 var ns = this._namespace; 37155 if (!field) { 37156 return option ? this.options[option] : this.options; 37157 } 37158 if ('object' === typeof field) { 37159 field = field.attr('data-' + ns + '-field'); 37160 } 37161 if (!this.options.fields[field]) { 37162 return null; 37163 } 37164 37165 var options = this.options.fields[field]; 37166 if (!validator) { 37167 return option ? options[option] : options; 37168 } 37169 if (!options.validators || !options.validators[validator]) { 37170 return null; 37171 } 37172 37173 return option ? options.validators[validator][option] : options.validators[validator]; 37174 }, 37175 37176 /** 37177 * Get the validating result of field 37178 * 37179 * @param {String|jQuery} field The field name or field element 37180 * @param {String} validatorName The validator name 37181 * @returns {String} The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID', 'VALID' or 'IGNORED' 37182 */ 37183 getStatus: function(field, validatorName) { 37184 var ns = this._namespace; 37185 switch (typeof field) { 37186 case 'object': 37187 return field.data(ns + '.result.' + validatorName); 37188 case 'string': 37189 /* falls through */ 37190 default: 37191 return this.getFieldElements(field).eq(0).data(ns + '.result.' + validatorName); 37192 } 37193 }, 37194 37195 /** 37196 * Check whether or not a field option is enabled 37197 * 37198 * @param {String} field The field name 37199 * @param {String} option The option name, "verbose", "autoFocus", for example 37200 * @returns {Boolean} 37201 */ 37202 isOptionEnabled: function(field, option) { 37203 if (this.options.fields[field] && (this.options.fields[field][option] === 'true' || this.options.fields[field][option] === true)) { 37204 return true; 37205 } 37206 if (this.options.fields[field] && (this.options.fields[field][option] === 'false' || this.options.fields[field][option] === false)) { 37207 return false; 37208 } 37209 return this.options[option] === 'true' || this.options[option] === true; 37210 }, 37211 37212 /** 37213 * Check the form validity 37214 * 37215 * @returns {Boolean|null} Returns one of three values 37216 * - true, if all fields are valid 37217 * - false, if there is one invalid field 37218 * - null, if there is at least one field which is not validated yet or being validated 37219 */ 37220 isValid: function() { 37221 for (var field in this.options.fields) { 37222 var isValidField = this.isValidField(field); 37223 if (isValidField === null) { 37224 return null; 37225 } 37226 if (isValidField === false) { 37227 return false; 37228 } 37229 } 37230 37231 return true; 37232 }, 37233 37234 /** 37235 * Check if all fields inside a given container are valid. 37236 * It's useful when working with a wizard-like such as tab, collapse 37237 * 37238 * @param {String|jQuery} container The container selector or element 37239 * @returns {Boolean|null} Returns one of three values 37240 * - true, if all fields inside the container are valid 37241 * - false, if there is one invalid field inside the container 37242 * - null, if the container consists of at least one field which is not validated yet or being validated 37243 */ 37244 isValidContainer: function(container) { 37245 var that = this, 37246 ns = this._namespace, 37247 fields = [], 37248 $container = ('string' === typeof container) ? $(container) : container; 37249 if ($container.length === 0) { 37250 return true; 37251 } 37252 37253 $container.find('[data-' + ns + '-field]').each(function() { 37254 var $field = $(this); 37255 if (!that._isExcluded($field)) { 37256 fields.push($field); 37257 } 37258 }); 37259 37260 var total = fields.length
vendor: 45,154 bytes, lines 37260-38327
37260, 37261 clazz = this.options.err.clazz.split(' ').join('.'); 37262 for (var i = 0; i < total; i++) { 37263 var $f = fields[i], 37264 field = $f.attr('data-' + ns + '-field'), 37265 $errors = $f.data(ns + '.messages') 37266 .find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]'); 37267 37268 if (this.options.fields && this.options.fields[field] 37269 && (this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false)) 37270 { 37271 continue; 37272 } 37273 37274 if ($errors.filter('[data-' + ns + '-result="' + this.STATUS_INVALID + '"]').length > 0) { 37275 return false; 37276 } 37277 37278 // If the field is not validated 37279 if ($errors.filter('[data-' + ns + '-result="' + this.STATUS_NOT_VALIDATED + '"]').length > 0 37280 || $errors.filter('[data-' + ns + '-result="' + this.STATUS_VALIDATING + '"]').length > 0) 37281 { 37282 return null; 37283 } 37284 } 37285 37286 return true; 37287 }, 37288 37289 /** 37290 * Check if the field is valid or not 37291 * 37292 * @param {String|jQuery} field The field name or field element 37293 * @returns {Boolean|null} Returns one of three values 37294 * - true, if the field passes all validators 37295 * - false, if the field doesn't pass any validator 37296 * - null, if there is at least one validator which isn't validated yet or being validated 37297 */ 37298 isValidField: function(field) { 37299 var ns = this._namespace, 37300 fields = $([]); 37301 switch (typeof field) { 37302 case 'object': 37303 fields = field; 37304 field = field.attr('data-' + ns + '-field'); 37305 break; 37306 case 'string': 37307 fields = this.getFieldElements(field); 37308 break; 37309 default: 37310 break; 37311 } 37312 if (fields.length === 0 || !this.options.fields[field] 37313 || this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false) 37314 { 37315 return true; 37316 } 37317 37318 var type = fields.attr('type'), 37319 total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length, 37320 $field, validatorName, status; 37321 for (var i = 0; i < total; i++) { 37322 $field = fields.eq(i); 37323 if (this._isExcluded($field)) { 37324 continue; 37325 } 37326 37327 for (validatorName in this.options.fields[field].validators) { 37328 if (this.options.fields[field].validators[validatorName].enabled === false) { 37329 continue; 37330 } 37331 37332 status = $field.data(ns + '.result.' + validatorName); 37333 if (status === this.STATUS_VALIDATING || status === this.STATUS_NOT_VALIDATED) { 37334 return null; 37335 } else if (status === this.STATUS_INVALID) { 37336 return false; 37337 } 37338 } 37339 } 37340 37341 return true; 37342 }, 37343 37344 /** 37345 * Detach a handler function for a field live change event 37346 * 37347 * @param {jQuery[]} $fields The field elements 37348 * @param {String} namespace The event namespace 37349 * @returns {FormValidation.Base} 37350 */ 37351 offLiveChange: function($fields, namespace) { 37352 if ($fields === null || $fields.length === 0) { 37353 return this; 37354 } 37355 37356 var ns = this._namespace, 37357 trigger = this._getFieldTrigger($fields.eq(0)), 37358 events = $.map(trigger, function(item) { 37359 return item + '.' + namespace + '.' + ns; 37360 }).join(' '); 37361 37362 $fields.off(events); 37363 return this; 37364 }, 37365 37366 /** 37367 * Attach a handler function for a field live change event 37368 * 37369 * @param {jQuery[]} $fields The field elements 37370 * @param {String} namespace The event namespace 37371 * @param {Function} handler The handler function 37372 * @returns {FormValidation.Base} 37373 */ 37374 onLiveChange: function($fields, namespace, handler) { 37375 if ($fields === null || $fields.length === 0) { 37376 return this; 37377 } 37378 37379 var ns = this._namespace, 37380 trigger = this._getFieldTrigger($fields.eq(0)), 37381 events = $.map(trigger, function(item) { 37382 return item + '.' + namespace + '.' + ns; 37383 }).join(' '); 37384 37385 switch (this.options.live) { 37386 case 'submitted': 37387 break; 37388 case 'disabled': 37389 $fields.off(events); 37390 break; 37391 case 'enabled': 37392 /* falls through */ 37393 default: 37394 $fields.off(events).on(events, function(e) { 37395 handler.apply(this, arguments); 37396 }); 37397 break; 37398 } 37399 37400 return this; 37401 }, 37402 37403 /** 37404 * Update the error message 37405 * 37406 * @param {String|jQuery} field The field name or field element 37407 * @param {String} validator The validator name 37408 * @param {String} message The message 37409 * @returns {FormValidation.Base} 37410 */ 37411 updateMessage: function(field, validator, message) { 37412 var ns = this._namespace, 37413 $fields = $([]); 37414 switch (typeof field) { 37415 case 'object': 37416 $fields = field; 37417 field = field.attr('data-' + ns + '-field'); 37418 break; 37419 case 'string': 37420 $fields = this.getFieldElements(field); 37421 break; 37422 default: 37423 break; 37424 } 37425 37426 var clazz = this.options.err.clazz.split(' ').join('.'); 37427 $fields.each(function() { 37428 $(this) 37429 .data(ns + '.messages') 37430 .find('.' + clazz + '[data-' + ns + '-validator="' + validator + '"][data-' + ns + '-for="' + field + '"]').html(message); 37431 }); 37432 37433 return this; 37434 }, 37435 37436 /** 37437 * Update all validating results of field 37438 * 37439 * @param {String|jQuery} field The field name or field element 37440 * @param {String} status The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID', 'VALID' or 'IGNORED' 37441 * @param {String} [validatorName] The validator name. If null, the method updates validity result for all validators 37442 * @returns {FormValidation.Base} 37443 */ 37444 updateStatus: function(field, status, validatorName) { 37445 var ns = this._namespace, 37446 fields = $([]); 37447 switch (typeof field) { 37448 case 'object': 37449 fields = field; 37450 field = field.attr('data-' + ns + '-field'); 37451 break; 37452 case 'string': 37453 fields = this.getFieldElements(field); 37454 break; 37455 default: 37456 break; 37457 } 37458 37459 if (!field || !this.options.fields[field]) { 37460 return this; 37461 } 37462 37463 if (status === this.STATUS_NOT_VALIDATED) { 37464 // Reset the flag 37465 // To prevent the form from doing submit when a deferred validator returns true while typing 37466 this._submitIfValid = false; 37467 } 37468 37469 var that = this, 37470 type = fields.attr('type'), 37471 row = this.options.fields[field].row || this.options.row.selector, 37472 total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length, 37473 clazz = this.options.err.clazz.split(' ').join('.'); 37474 37475 for (var i = 0; i < total; i++) { 37476 var $field = fields.eq(i); 37477 if (this._isExcluded($field)) { 37478 continue; 37479 } 37480 37481 var $parent = $field.closest(row), 37482 $message = $field.data(ns + '.messages'), 37483 $allErrors = $message.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]'), 37484 $errors = validatorName ? $allErrors.filter('[data-' + ns + '-validator="' + validatorName + '"]') : $allErrors, 37485 $icon = $field.data(ns + '.icon'), 37486 // Support backward 37487 container = ('function' === typeof (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container)) 37488 ? (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container).call(this, $field, this) 37489 : (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container), 37490 isValidField = null, 37491 isValidating, 37492 isNotValidated; 37493 37494 // Update status 37495 if (validatorName) { 37496 $field.data(ns + '.result.' + validatorName, status); 37497 } else { 37498 for (var v in this.options.fields[field].validators) { 37499 $field.data(ns + '.result.' + v, status); 37500 } 37501 } 37502 37503 // Show/hide error elements and feedback icons 37504 $errors.attr('data-' + ns + '-result', status); 37505 37506 switch (status) { 37507 case this.STATUS_VALIDATING: 37508 isValidField = null; 37509 this.disableSubmitButtons(true); 37510 $field.removeClass(this.options.control.valid).removeClass(this.options.control.invalid); 37511 $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid); 37512 if ($icon) { 37513 $icon.removeClass(this.options.icon.valid).removeClass(this.options.icon.invalid).addClass(this.options.icon.validating).show(); 37514 } 37515 break; 37516 37517 case this.STATUS_INVALID: 37518 isValidField = false; 37519 this.disableSubmitButtons(true); 37520 $field.removeClass(this.options.control.valid).addClass(this.options.control.invalid); 37521 $parent.removeClass(this.options.row.valid).addClass(this.options.row.invalid); 37522 if ($icon) { 37523 $icon.removeClass(this.options.icon.valid).removeClass(this.options.icon.validating).addClass(this.options.icon.invalid).show(); 37524 } 37525 break; 37526 37527 case this.STATUS_IGNORED: // Treat ignored fields like they are valid with some specialties 37528 case this.STATUS_VALID: 37529 isValidating = ($allErrors.filter('[data-' + ns + '-result="' + this.STATUS_VALIDATING +'"]').length > 0); 37530 isNotValidated = ($allErrors.filter('[data-' + ns + '-result="' + this.STATUS_NOT_VALIDATED +'"]').length > 0); 37531 37532 var numIgnored = $allErrors.filter('[data-' + ns + '-result="' + this.STATUS_IGNORED +'"]').length; 37533 37534 // If the field is valid (passes all validators) 37535 isValidField = (isValidating || isNotValidated) // There are some validators that have not done 37536 ? null 37537 // All validators are completed 37538 : ($allErrors.filter('[data-' + ns + '-result="' + this.STATUS_VALID +'"]').length + numIgnored === $allErrors.length); 37539 37540 $field.removeClass(this.options.control.valid).removeClass(this.options.control.invalid); 37541 37542 if (isValidField === true) { 37543 this.disableSubmitButtons(this.isValid() === false); 37544 if (status === this.STATUS_VALID) { 37545 $field.addClass(this.options.control.valid); 37546 } 37547 } else if (isValidField === false) { 37548 this.disableSubmitButtons(true); 37549 if (status === this.STATUS_VALID) { 37550 $field.addClass(this.options.control.invalid); 37551 } 37552 } 37553 37554 if ($icon) { 37555 $icon.removeClass(this.options.icon.invalid).removeClass(this.options.icon.validating).removeClass(this.options.icon.valid); 37556 if (status === this.STATUS_VALID || numIgnored !== $allErrors.length) { 37557 $icon.addClass(isValidating 37558 ? this.options.icon.validating 37559 : (isValidField === null ? '' : (isValidField ? this.options.icon.valid : this.options.icon.invalid))) 37560 .show(); 37561 } 37562 } 37563 37564 var isValidContainer = this.isValidContainer($parent); 37565 if (isValidContainer !== null) { 37566 $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid); 37567 if (status === this.STATUS_VALID || numIgnored !== $allErrors.length) { 37568 $parent.addClass(isValidContainer ? this.options.row.valid : this.options.row.invalid); 37569 } 37570 } 37571 break; 37572 37573 case this.STATUS_NOT_VALIDATED: 37574 /* falls through */ 37575 default: 37576 isValidField = null; 37577 this.disableSubmitButtons(false); 37578 $field.removeClass(this.options.control.valid).removeClass(this.options.control.invalid); 37579 $parent.removeClass(this.options.row.valid).removeClass(this.options.row.invalid); 37580 if ($icon) { 37581 $icon.removeClass(this.options.icon.valid).removeClass(this.options.icon.invalid).removeClass(this.options.icon.validating).hide(); 37582 } 37583 break; 37584 } 37585 37586 if ($icon && ('tooltip' === container || 'popover' === container)) { 37587 (isValidField === false) 37588 // Only show the first error message 37589 ? this._createTooltip($field, $allErrors.filter('[data-' + ns + '-result="' + that.STATUS_INVALID + '"]').eq(0).html(), container) 37590 : this._destroyTooltip($field, container); 37591 } else { 37592 (status === this.STATUS_INVALID) ? $errors.show() : $errors.hide(); 37593 } 37594 37595 // Trigger an event 37596 $field.trigger($.Event(this.options.events.fieldStatus), { 37597 bv: this, // Support backward 37598 fv: this, 37599 field: field, 37600 element: $field, 37601 status: status, 37602 validator: validatorName 37603 }); 37604 this._onFieldValidated($field, validatorName); 37605 } 37606 37607 return this; 37608 }, 37609 37610 /** 37611 * Validate the form 37612 * 37613 * @returns {FormValidation.Base} 37614 */ 37615 validate: function() { 37616 if ($.isEmptyObject(this.options.fields)) { 37617 this._submit(); 37618 return this; 37619 } 37620 this.$form.trigger($.Event(this.options.events.formPreValidate)); 37621 37622 this.disableSubmitButtons(true); 37623 this._submitIfValid = false; 37624 for (var field in this.options.fields) { 37625 this.validateField(field); 37626 } 37627 37628 this._submit(); 37629 this._submitIfValid = true; 37630 37631 return this; 37632 }, 37633 37634 /** 37635 * Validate given field 37636 * 37637 * @param {String|jQuery} field The field name or field element 37638 * @returns {FormValidation.Base} 37639 */ 37640 validateField: function(field) { 37641 var ns = this._namespace, 37642 fields = $([]); 37643 switch (typeof field) { 37644 case 'object': 37645 fields = field; 37646 field = field.attr('data-' + ns + '-field'); 37647 break; 37648 case 'string': 37649 fields = this.getFieldElements(field); 37650 break; 37651 default: 37652 break; 37653 } 37654 37655 if (fields.length === 0 || !this.options.fields[field] 37656 || this.options.fields[field].enabled === 'false' || this.options.fields[field].enabled === false) 37657 { 37658 return this; 37659 } 37660 37661 var that = this, 37662 type = fields.attr('type'), 37663 total = (('radio' === type || 'checkbox' === type) && this.options.live !== 'disabled') ? 1 : fields.length, 37664 updateAll = ('radio' === type || 'checkbox' === type), 37665 validators = this.options.fields[field].validators, 37666 verbose = this.isOptionEnabled(field, 'verbose'), 37667 validatorName, 37668 alias, 37669 validateResult; 37670 37671 for (var i = 0; i < total; i++) { 37672 var $field = fields.eq(i); 37673 if (this._isExcluded($field)) { 37674 continue; 37675 } 37676 37677 var stop = false, 37678 sortedByPriority = $field.data(ns + '.validators'), 37679 numValidators = sortedByPriority.length; 37680 37681 for (var j = 0; j < numValidators; j++) { 37682 validatorName = sortedByPriority[j].validator; 37683 if ($field.data(ns + '.dfs.' + validatorName)) { 37684 $field.data(ns + '.dfs.' + validatorName).reject(); 37685 } 37686 if (stop) { 37687 break; 37688 } 37689 37690 // Don't validate field if it is already done 37691 var result = $field.data(ns + '.result.' + validatorName); 37692 if (result === this.STATUS_VALID || result === this.STATUS_INVALID) { 37693 this._onFieldValidated($field, validatorName); 37694 continue; 37695 } else if (validators[validatorName].enabled === false) { 37696 // Changed in v0.6.2: 37697 // When the field validator is disabled, it should be treated as STATUS_IGNORED instead of STATUS_VALID 37698 // By doing that, the field with only disabled and ignored validators will not have success/error class 37699 this.updateStatus(updateAll ? field : $field, this.STATUS_IGNORED, validatorName); 37700 continue; 37701 } 37702 37703 $field.data(ns + '.result.' + validatorName, this.STATUS_VALIDATING); 37704 37705 // Check whether or not the validator is just an alias of another 37706 alias = validators[validatorName].alias || validatorName; 37707 validateResult = FormValidation.Validator[alias].validate(this, $field, validators[validatorName], validatorName); 37708 37709 // validateResult can be a $.Deferred object ... 37710 if ('object' === typeof validateResult && validateResult.resolve) { 37711 this.updateStatus(updateAll ? field : $field, this.STATUS_VALIDATING, validatorName); 37712 $field.data(ns + '.dfs.' + validatorName, validateResult); 37713 37714 validateResult.done(function($f, v, response) { 37715 // v is validator name 37716 $f.removeData(ns + '.dfs.' + v).data(ns + '.response.' + v, response); 37717 if (response.message) { 37718 that.updateMessage($f, v, response.message); 37719 } 37720 37721 that.updateStatus(updateAll ? $f.attr('data-' + ns + '-field') : $f, 37722 response.valid === true ? that.STATUS_VALID : (response.valid === false ? that.STATUS_INVALID : that.STATUS_IGNORED), 37723 v); 37724 37725 if (response.valid && that._submitIfValid === true) { 37726 // If a remote validator returns true and the form is ready to submit, then do it 37727 that._submit(); 37728 } else if (response.valid === false && !verbose) { 37729 stop = true; 37730 } 37731 }); 37732 } 37733 // ... or object { valid: true/false/null, message: 'dynamic message', otherKey: value, ... } 37734 else if ('object' === typeof validateResult && validateResult.valid !== undefined) { 37735 $field.data(ns + '.response.' + validatorName, validateResult); 37736 if (validateResult.message) { 37737 this.updateMessage(updateAll ? field : $field, validatorName, validateResult.message); 37738 } 37739 this.updateStatus(updateAll ? field : $field, 37740 validateResult.valid === true ? this.STATUS_VALID : (validateResult.valid === false ? this.STATUS_INVALID : this.STATUS_IGNORED), 37741 validatorName); 37742 if (validateResult.valid === false && !verbose) { 37743 break; 37744 } 37745 } 37746 // ... or a boolean value 37747 else if ('boolean' === typeof validateResult) { 37748 $field.data(ns + '.response.' + validatorName, validateResult); 37749 this.updateStatus(updateAll ? field : $field, validateResult ? this.STATUS_VALID : this.STATUS_INVALID, validatorName); 37750 if (!validateResult && !verbose) { 37751 break; 37752 } 37753 } 37754 // ... or null 37755 // to indicate that the field should be ignored for current validator 37756 else if (null === validateResult) { 37757 $field.data(ns + '.response.' + validatorName, validateResult); 37758 this.updateStatus(updateAll ? field : $field, this.STATUS_IGNORED, validatorName); 37759 } 37760 } 37761 } 37762 37763 return this; 37764 }, 37765 37766 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 37767 // Useful APIs which aren't used internally 37768 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 37769 37770 /** 37771 * Add a new field 37772 * 37773 * @param {String|jQuery} field The field name or field element 37774 * @param {Object} [options] The validator rules 37775 * @returns {FormValidation.Base} 37776 */ 37777 addField: function(field, options) { 37778 var ns = this._namespace, 37779 fields = $([]); 37780 switch (typeof field) { 37781 case 'object': 37782 fields = field; 37783 field = field.attr('data-' + ns + '-field') || field.attr('name'); 37784 break; 37785 case 'string': 37786 delete this._cacheFields[field]; 37787 fields = this.getFieldElements(field); 37788 break; 37789 default: 37790 break; 37791 } 37792 37793 fields.attr('data-' + ns + '-field', field); 37794 37795 var type = fields.attr('type'), 37796 total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length; 37797 37798 for (var i = 0; i < total; i++) { 37799 var $field = fields.eq(i); 37800 37801 // Try to parse the options from HTML attributes 37802 var opts = this._parseOptions($field); 37803 opts = (opts === null) ? options : $.extend(true, opts, options); 37804 37805 this.options.fields[field] = $.extend(true, this.options.fields[field], opts); 37806 37807 // Update the cache 37808 this._cacheFields[field] = this._cacheFields[field] ? this._cacheFields[field].add($field) : $field; 37809 37810 // Init the element 37811 this._initField(('checkbox' === type || 'radio' === type) ? field : $field); 37812 } 37813 37814 this.disableSubmitButtons(false); 37815 // Trigger an event 37816 this.$form.trigger($.Event(this.options.events.fieldAdded), { 37817 field: field, 37818 element: fields, 37819 options: this.options.fields[field] 37820 }); 37821 37822 return this; 37823 }, 37824 37825 /** 37826 * Destroy the plugin 37827 * It will remove all error messages, feedback icons and turn off the events 37828 */ 37829 destroy: function() { 37830 var ns = this._namespace, i, field, fields, $field, validator, $icon, row, alias; 37831 37832 // Destroy the validators first 37833 for (field in this.options.fields) { 37834 fields = this.getFieldElements(field); 37835 for (i = 0; i < fields.length; i++) { 37836 $field = fields.eq(i); 37837 for (validator in this.options.fields[field].validators) { 37838 if ($field.data(ns + '.dfs.' + validator)) { 37839 $field.data(ns + '.dfs.' + validator).reject(); 37840 } 37841 $field.removeData(ns + '.result.' + validator) 37842 .removeData(ns + '.response.' + validator) 37843 .removeData(ns + '.dfs.' + validator); 37844 37845 // Destroy the validator 37846 alias = this.options.fields[field].validators[validator].alias || validator; 37847 if ('function' === typeof FormValidation.Validator[alias].destroy) { 37848 FormValidation.Validator[alias].destroy(this, $field, this.options.fields[field].validators[validator], validator); 37849 } 37850 } 37851 } 37852 } 37853 37854 // Remove messages and icons 37855 var clazz = this.options.err.clazz.split(' ').join('.'); 37856 for (field in this.options.fields) { 37857 fields = this.getFieldElements(field); 37858 row = this.options.fields[field].row || this.options.row.selector; 37859 for (i = 0; i < fields.length; i++) { 37860 $field = fields.eq(i); 37861 // Remove all error messages 37862 var $messages = $field.data(ns + '.messages'); 37863 if ($messages) { 37864 $messages.find('.' + clazz + '[data-' + ns + '-validator][data-' + ns + '-for="' + field + '"]').remove(); 37865 } 37866 $field 37867 .removeData(ns + '.messages') 37868 .removeData(ns + '.validators') 37869 // Remove feedback classes 37870 .closest(row) 37871 .removeClass(this.options.row.valid) 37872 .removeClass(this.options.row.invalid) 37873 .removeClass(this.options.row.feedback) 37874 .end() 37875 // Turn off events 37876 .off('.' + ns) 37877 .removeAttr('data-' + ns + '-field'); 37878 37879 // Remove feedback icons, tooltip/popover container 37880 // Support backward 37881 var container = ('function' === typeof (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container)) 37882 ? (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container).call(this, $field, this) 37883 : (this.options.fields[field].container || this.options.fields[field].err || this.options.err.container); 37884 if ('tooltip' === container || 'popover' === container) { 37885 this._destroyTooltip($field, container); 37886 } 37887 37888 $icon = $field.data(ns + '.icon'); 37889 if ($icon) { 37890 $icon.remove(); 37891 } 37892 $field.removeData(ns + '.icon') 37893 // It's safe to remove trigger data here, because it might be used when destroying the validator 37894 .removeData(ns + '.trigger'); 37895 } 37896 } 37897 37898 // Destroy the add-ons 37899 for (var addOn in this.options.addOns) { 37900 if ('function' === typeof FormValidation.AddOn[addOn].destroy) { 37901 FormValidation.AddOn[addOn].destroy(this, this.options.addOns[addOn]); 37902 } 37903 } 37904 37905 this.disableSubmitButtons(false); // Enable submit buttons 37906 this.$hiddenButton.remove(); // Remove the hidden button 37907 37908 this.$form 37909 .removeClass(this.options.elementClass) 37910 .off('.' + ns) 37911 .removeData('bootstrapValidator') // Support backward 37912 .removeData('formValidation') 37913 // Remove generated hidden elements 37914 .find('[data-' + ns + '-submit-hidden]').remove().end() 37915 .find('[type="submit"]') 37916 .off('click.' + ns); 37917 }, 37918 37919 /** 37920 * Enable/Disable all validators to given field 37921 * 37922 * @param {String} field The field name 37923 * @param {Boolean} enabled Enable/Disable field validators 37924 * @param {String} [validatorName] The validator name. If null, all validators will be enabled/disabled 37925 * @returns {FormValidation.Base} 37926 */ 37927 enableFieldValidators: function(field, enabled, validatorName) { 37928 var validators = this.options.fields[field].validators; 37929 37930 // Enable/disable particular validator 37931 if (validatorName 37932 && validators 37933 && validators[validatorName] && validators[validatorName].enabled !== enabled) 37934 { 37935 this.options.fields[field].validators[validatorName].enabled = enabled; 37936 this.updateStatus(field, this.STATUS_NOT_VALIDATED, validatorName); 37937 } 37938 // Enable/disable all validators 37939 else if (!validatorName && this.options.fields[field].enabled !== enabled) { 37940 this.options.fields[field].enabled = enabled; 37941 for (var v in validators) { 37942 this.enableFieldValidators(field, enabled, v); 37943 } 37944 } 37945 37946 return this; 37947 }, 37948 37949 /** 37950 * Some validators have option which its value is dynamic. 37951 * For example, the zipCode validator has the country option which might be changed dynamically by a select element. 37952 * 37953 * @param {jQuery|String} field The field name or element 37954 * @param {String|Function} option The option which can be determined by: 37955 * - a string 37956 * - name of field which defines the value 37957 * - name of function which returns the value 37958 * - a function returns the value 37959 * 37960 * The callback function has the format of 37961 * callback: function(value, validator, $field) { 37962 * // value is the value of field 37963 * // validator is the BootstrapValidator instance 37964 * // $field is the field element 37965 * } 37966 * 37967 * @returns {String} 37968 */ 37969 getDynamicOption: function(field, option) { 37970 var $field = ('string' === typeof field) ? this.getFieldElements(field) : field, 37971 value = $field.val(); 37972 37973 // Option can be determined by 37974 // ... a function 37975 if ('function' === typeof option) { 37976 return FormValidation.Helper.call(option, [value, this, $field]); 37977 } 37978 // ... value of other field 37979 else if ('string' === typeof option) { 37980 var $f = this.getFieldElements(option); 37981 if ($f.length) { 37982 return $f.val(); 37983 } 37984 // ... return value of callback 37985 else { 37986 return FormValidation.Helper.call(option, [value, this, $field]) || option; 37987 } 37988 } 37989 37990 return null; 37991 }, 37992 37993 /** 37994 * Get the form element 37995 * 37996 * @returns {jQuery} 37997 */ 37998 getForm: function() { 37999 return this.$form; 38000 }, 38001 38002 /** 38003 * Get the list of invalid fields 38004 * 38005 * @returns {jQuery[]} 38006 */ 38007 getInvalidFields: function() { 38008 return this.$invalidFields; 38009 }, 38010 38011 /** 38012 * Get the current locale 38013 * 38014 * @return {String} 38015 */ 38016 getLocale: function() { 38017 return this.options.locale; 38018 }, 38019 38020 /** 38021 * Get the error messages 38022 * 38023 * @param {String|jQuery} [field] The field name or field element 38024 * If the field is not defined, the method returns all error messages of all fields 38025 * @param {String} [validator] The name of validator 38026 * If the validator is not defined, the method returns error messages of all validators 38027 * @returns {String[]} 38028 */ 38029 getMessages: function(field, validator) { 38030 var that = this, 38031 ns = this._namespace, 38032 messages = [], 38033 $fields = $([]); 38034 38035 switch (true) { 38036 case (field && 'object' === typeof field): 38037 $fields = field; 38038 break; 38039 case (field && 'string' === typeof field): 38040 var f = this.getFieldElements(field); 38041 if (f.length > 0) { 38042 var type = f.attr('type'); 38043 $fields = ('radio' === type || 'checkbox' === type) ? f.eq(0) : f; 38044 } 38045 break; 38046 default: 38047 $fields = this.$invalidFields; 38048 break; 38049 } 38050 38051 var filter = validator ? '[data-' + ns + '-validator="' + validator + '"]' : '', 38052 clazz = this.options.err.clazz.split(' ').join('.'); 38053 $fields.each(function() { 38054 messages = messages.concat( 38055 $(this) 38056 .data(ns + '.messages') 38057 .find('.' + clazz + '[data-' + ns + '-for="' + $(this).attr('data-' + ns + '-field') + '"][data-' + ns + '-result="' + that.STATUS_INVALID + '"]' + filter) 38058 .map(function() { 38059 var v = $(this).attr('data-' + ns + '-validator'), 38060 f = $(this).attr('data-' + ns + '-for'); 38061 return (that.options.fields[f].validators[v].enabled === false) ? '' : $(this).html(); 38062 }) 38063 .get() 38064 ); 38065 }); 38066 38067 return messages; 38068 }, 38069 38070 /** 38071 * Returns the clicked submit button 38072 * 38073 * @returns {jQuery} 38074 */ 38075 getSubmitButton: function() { 38076 return this.$submitButton; 38077 }, 38078 38079 /** 38080 * Remove a given field 38081 * 38082 * @param {String|jQuery} field The field name or field element 38083 * @returns {FormValidation.Base} 38084 */ 38085 removeField: function(field) { 38086 var ns = this._namespace, 38087 fields = $([]); 38088 switch (typeof field) { 38089 case 'object': 38090 fields = field; 38091 field = field.attr('data-' + ns + '-field') || field.attr('name'); 38092 fields.attr('data-' + ns + '-field', field); 38093 break; 38094 case 'string': 38095 fields = this.getFieldElements(field); 38096 break; 38097 default: 38098 break; 38099 } 38100 38101 if (fields.length === 0) { 38102 return this; 38103 } 38104 38105 var type = fields.attr('type'), 38106 total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length; 38107 38108 for (var i = 0; i < total; i++) { 38109 var $field = fields.eq(i); 38110 38111 // Remove from the list of invalid fields 38112 this.$invalidFields = this.$invalidFields.not($field); 38113 38114 // Update the cache 38115 this._cacheFields[field] = this._cacheFields[field].not($field); 38116 } 38117 38118 if (!this._cacheFields[field] || this._cacheFields[field].length === 0) { 38119 delete this.options.fields[field]; 38120 } 38121 if ('checkbox' === type || 'radio' === type) { 38122 this._initField(field); 38123 } 38124 38125 this.disableSubmitButtons(false); 38126 // Trigger an event 38127 this.$form.trigger($.Event(this.options.events.fieldRemoved), { 38128 field: field, 38129 element: fields 38130 }); 38131 38132 return this; 38133 }, 38134 38135 /** 38136 * Reset given field 38137 * 38138 * @param {String|jQuery} field The field name or field element 38139 * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox) 38140 * @returns {FormValidation.Base} 38141 */ 38142 resetField: function(field, resetValue) { 38143 var ns = this._namespace, 38144 $fields = $([]); 38145 switch (typeof field) { 38146 case 'object': 38147 $fields = field; 38148 field = field.attr('data-' + ns + '-field'); 38149 break; 38150 case 'string': 38151 $fields = this.getFieldElements(field); 38152 break; 38153 default: 38154 break; 38155 } 38156 38157 var i = 0, 38158 total = $fields.length; 38159 if (this.options.fields[field]) { 38160 for (i = 0; i < total; i++) { 38161 for (var validator in this.options.fields[field].validators) { 38162 $fields.eq(i).removeData(ns + '.dfs.' + validator); 38163 } 38164 } 38165 } 38166 38167 if (resetValue) { 38168 var type = $fields.attr('type'); 38169 ('radio' === type || 'checkbox' === type) ? $fields.prop('checked', false).removeAttr('selected') : $fields.val(''); 38170 } 38171 38172 // Mark field as not validated yet 38173 this.updateStatus(field, this.STATUS_NOT_VALIDATED); 38174 38175 for (i = 0; i < total; i++) { 38176 $fields.eq(i).trigger($.Event(this.options.events.fieldReset), { 38177 fv: this, 38178 field: field, 38179 element: $fields.eq(i), 38180 resetValue: resetValue 38181 }); 38182 } 38183 38184 return this; 38185 }, 38186 38187 /** 38188 * Reset the form 38189 * 38190 * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox) 38191 * @returns {FormValidation.Base} 38192 */ 38193 resetForm: function(resetValue) { 38194 for (var field in this.options.fields) { 38195 this.resetField(field, resetValue); 38196 } 38197 38198 this.$invalidFields = $([]); 38199 this.$submitButton = null; 38200 38201 // Enable submit buttons 38202 this.disableSubmitButtons(false); 38203 38204 this.$form.trigger($.Event(this.options.events.formReset), { 38205 fv: this, 38206 resetValue: resetValue 38207 }); 38208 38209 return this; 38210 }, 38211 38212 /** 38213 * Revalidate given field 38214 * It's used when you need to revalidate the field which its value is updated by other plugin 38215 * 38216 * @param {String|jQuery} field The field name of field element 38217 * @returns {FormValidation.Base} 38218 */ 38219 revalidateField: function(field) { 38220 this.updateStatus(field, this.STATUS_NOT_VALIDATED) 38221 .validateField(field); 38222 38223 return this; 38224 }, 38225 38226 /** 38227 * Set the locale 38228 * 38229 * @param {String} locale The locale in format of countrycode_LANGUAGECODE 38230 * @returns {FormValidation.Base} 38231 */ 38232 setLocale: function(locale) { 38233 this.options.locale = locale; 38234 this.$form.trigger($.Event(this.options.events.localeChanged), { 38235 locale: locale, 38236 bv: this, // Support backward 38237 fv: this 38238 }); 38239 38240 return this; 38241 }, 38242 38243 /** 38244 * Update the option of a specific validator 38245 * 38246 * @param {String|jQuery} field The field name or field element 38247 * @param {String} validator The validator name 38248 * @param {String} option The option name 38249 * @param {String} value The value to set 38250 * @returns {FormValidation.Base} 38251 */ 38252 updateOption: function(field, validator, option, value) { 38253 var ns = this._namespace; 38254 if ('object' === typeof field) { 38255 field = field.attr('data-' + ns + '-field'); 38256 } 38257 if (this.options.fields[field] && this.options.fields[field].validators[validator]) { 38258 this.options.fields[field].validators[validator][option] = value; 38259 this.updateStatus(field, this.STATUS_NOT_VALIDATED, validator); 38260 } 38261 38262 return this; 38263 }, 38264 38265 /** 38266 * Validate given container 38267 * It can be used with isValidContainer() when you want to work with wizard form 38268 * 38269 * @param {String|jQuery} container The container selector or element 38270 * @returns {FormValidation.Base} 38271 */ 38272 validateContainer: function(container) { 38273 var that = this, 38274 ns = this._namespace, 38275 fields = [], 38276 $container = ('string' === typeof container) ? $(container) : container; 38277 if ($container.length === 0) { 38278 return this; 38279 } 38280 38281 $container.find('[data-' + ns + '-field]').each(function() { 38282 var $field = $(this); 38283 if (!that._isExcluded($field)) { 38284 fields.push($field); 38285 } 38286 }); 38287 38288 var total = fields.length; 38289 for (var i = 0; i < total; i++) { 38290 this.validateField(fields[i]); 38291 } 38292 38293 return this; 38294 } 38295 }; 38296 38297 // Plugin definition 38298 $.fn.formValidation = function(option) { 38299 var params = arguments; 38300 return this.each(function() { 38301 var $this = $(this), 38302 data = $this.data('formValidation'), 38303 options = 'object' === typeof option && option; 38304 if (!data) { 38305 var framework = (options.framework || $this.attr('data-fv-framework') || 'bootstrap').toLowerCase(), 38306 clazz = framework.substr(0, 1).toUpperCase() + framework.substr(1); 38307 38308 if (typeof FormValidation.Framework[clazz] === 'undefined') { 38309 throw new Error('The class FormValidation.Framework.' + clazz + ' is not implemented'); 38310 } 38311 38312 data = new FormValidation.Framework[clazz](this, options); 38313 $this.addClass('fv-form-' + framework) 38314 .data('formValidation', data); 38315 } 38316 38317 // Allow to call plugin method 38318 if ('string' === typeof option) { 38319 data[option].apply(data, Array.prototype.slice.call(params, 1)); 38320 } 38321 }); 38322 }; 38323 38324 $.fn.formValidation.Constructor = FormValidation.Base; 38325 38326 // Default message 38327 $.fn.formValidation.DEFAULT_MESSAGE = 'This value is not val
38327id'; 38328 38329 // The default options sorted in alphabetical order 38330 $.fn.formValidation.DEFAULT_OPTIONS = { 38331 // The first invalid field will be focused automatically 38332 autoFocus: true, 38333 38334 // Support declarative usage (setting options via HTML 5 attributes) 38335 // Setting to false can improve the performance 38336 declarative: true, 38337 38338 // The form CSS class 38339 elementClass: 'fv-form', 38340 38341 // Use custom event name to avoid window.onerror being invoked by jQuery 38342 // See #630 38343 events: { 38344 // Support backward 38345 formInit: 'init.form.fv', 38346 formPreValidate: 'prevalidate.form.fv', 38347 formError: 'err.form.fv', 38348 formReset: 'rst.form.fv', 38349 formSuccess: 'success.form.fv', 38350 fieldAdded: 'added.field.fv', 38351 fieldRemoved: 'removed.field.fv', 38352 fieldInit: 'init.field.fv', 38353 fieldError: 'err.field.fv', 38354 fieldReset: 'rst.field.fv', 38355 fieldSuccess: 'success.field.fv', 38356 fieldStatus: 'status.field.fv', 38357 localeChanged: 'changed.locale.fv', 38358 validatorError: 'err.validator.fv', 38359 validatorSuccess: 'success.validator.fv', 38360 validatorIgnored: 'ignored.validator.fv' 38361 }, 38362 38363 // Indicate fields which won't be validated 38364 // By default, the plugin will not validate the following kind of fields: 38365 // - disabled 38366 // - hidden 38367 // - invisible 38368 // 38369 // The setting consists of jQuery filters. Accept 3 formats: 38370 // - A string. Use a comma to separate filter 38371 // - An array. Each element is a filter 38372 // - An array. Each element can be a callback function 38373 // function($field, validator) { 38374 // $field is jQuery object representing the field element 38375 // validator is the BootstrapValidator instance 38376 // return true or false; 38377 // } 38378 // 38379 // The 3 following settings are equivalent: 38380 // 38381 // 1) ':disabled, :hidden, :not(:visible)' 38382 // 2) [':disabled', ':hidden', ':not(:visible)'] 38383 // 3) [':disabled', ':hidden', function($field) { 38384 // return !$field.is(':visible'); 38385 // }] 38386 excluded: [':disabled', ':hidden', ':not(:visible)'], 38387 38388 // Map the field name with validator rules 38389 fields: null, 38390 38391 // Live validating option 38392 // Can be one of 3 values: 38393 // - enabled: The plugin validates fields as soon as they are changed 38394 // - disabled: Disable the live validating. The error messages are only shown after the form is submitted 38395 // - submitted: The live validating is enabled after the form is submitted 38396 live: 'enabled', 38397 38398 // Locale in the format of languagecode_COUNTRYCODE 38399 locale: 'en_US', 38400 38401 // Default invalid message 38402 message: null, 38403 38404 // The field will not be live validated if its length is less than this number of characters 38405 threshold: null, 38406 38407 // Whether to be verbose when validating a field or not. 38408 // Possible values: 38409 // - true: when a field has multiple validators, all of them will be checked, and respectively - if errors occur in 38410 // multiple validators, all of them will be displayed to the user 38411 // - false: when a field has multiple validators, validation for this field will be terminated upon the first encountered error. 38412 // Thus, only the very first error message related to this field will be displayed to the user 38413 verbose: true, 38414 38415 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38416 // These options mostly are overridden by specific framework 38417 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38418 38419 button: { 38420 // The submit buttons selector 38421 // These buttons will be disabled to prevent the valid form from multiple submissions 38422 // Don't perform validation when clicking on the submit button/input which have formnovalidate attribute 38423 selector: '[type="submit"]:not([formnovalidate])
vendor: 7,169 bytes, lines 38423-38632
38423', 38424 38425 // The disabled class 38426 disabled: '' 38427 }, 38428 38429 control: { 38430 // The CSS class for valid control 38431 valid: '', 38432 38433 // The CSS class for invalid control 38434 invalid: '' 38435 }, 38436 38437 err: { 38438 // The CSS class of each message element 38439 clazz: '', 38440 38441 // The error messages container. It can be: 38442 // - 'tooltip' if you want to use Bootstrap tooltip to show error messages 38443 // - 'popover' if you want to use Bootstrap popover to show error messages 38444 // - a CSS selector indicating the container 38445 // In the first two cases, since the tooltip/popover should be small enough, the plugin only shows only one error message 38446 // You also can define the message container for particular field 38447 container: null, 38448 38449 // Used to determine where the messages are placed 38450 parent: null 38451 }, 38452 38453 // Shows ok/error/loading icons based on the field validity. 38454 icon: { 38455 valid: null, 38456 invalid: null, 38457 validating: null, 38458 feedback: '' 38459 }, 38460 38461 row: { 38462 // The CSS selector for indicating the element consists of the field 38463 // You should adjust this option if your form group consists of many fields which not all of them need to be validated 38464 selector: null, 38465 valid: '', 38466 invalid: '', 38467 feedback: '' 38468 } 38469 }; 38470}(jQuery)); 38471;(function($) { 38472 // Helper methods, which can be used in validator class 38473 FormValidation.Helper = { 38474 /** 38475 * Execute a callback function 38476 * 38477 * @param {String|Function} functionName Can be 38478 * - name of global function 38479 * - name of namespace function (such as A.B.C) 38480 * - a function 38481 * @param {Array} args The callback arguments 38482 */ 38483 call: function(functionName, args) { 38484 if ('function' === typeof functionName) { 38485 return functionName.apply(this, args); 38486 } else if ('string' === typeof functionName) { 38487 if ('()' === functionName.substring(functionName.length - 2)) { 38488 functionName = functionName.substring(0, functionName.length - 2); 38489 } 38490 var ns = functionName.split('.'), 38491 func = ns.pop(), 38492 context = window; 38493 for (var i = 0; i < ns.length; i++) { 38494 context = context[ns[i]]; 38495 } 38496 38497 return (typeof context[func] === 'undefined') ? null : context[func].apply(this, args); 38498 } 38499 }, 38500 38501 /** 38502 * Validate a date 38503 * 38504 * @param {Number} year The full year in 4 digits 38505 * @param {Number} month The month number 38506 * @param {Number} day The day number 38507 * @param {Boolean} [notInFuture] If true, the date must not be in the future 38508 * @returns {Boolean} 38509 */ 38510 date: function(year, month, day, notInFuture) { 38511 if (isNaN(year) || isNaN(month) || isNaN(day)) { 38512 return false; 38513 } 38514 if (day.length > 2 || month.length > 2 || year.length > 4) { 38515 return false; 38516 } 38517 38518 day = parseInt(day, 10); 38519 month = parseInt(month, 10); 38520 year = parseInt(year, 10); 38521 38522 if (year < 1000 || year > 9999 || month <= 0 || month > 12) { 38523 return false; 38524 } 38525 var numDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 38526 // Update the number of days in Feb of leap year 38527 if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) { 38528 numDays[1] = 29; 38529 } 38530 38531 // Check the day 38532 if (day <= 0 || day > numDays[month - 1]) { 38533 return false; 38534 } 38535 38536 if (notInFuture === true) { 38537 var currentDate = new Date(), 38538 currentYear = currentDate.getFullYear(), 38539 currentMonth = currentDate.getMonth(), 38540 currentDay = currentDate.getDate(); 38541 return (year < currentYear 38542 || (year === currentYear && month - 1 < currentMonth) 38543 || (year === currentYear && month - 1 === currentMonth && day < currentDay)); 38544 } 38545 38546 return true; 38547 }, 38548 38549 /** 38550 * Format a string 38551 * It's used to format the error message 38552 * format('The field must between %s and %s', [10, 20]) = 'The field must between 10 and 20' 38553 * 38554 * @param {String} message 38555 * @param {Array} parameters 38556 * @returns {String} 38557 */ 38558 format: function(message, parameters) { 38559 if (!$.isArray(parameters)) { 38560 parameters = [parameters]; 38561 } 38562 38563 for (var i in parameters) { 38564 message = message.replace('%s', parameters[i]); 38565 } 38566 38567 return message; 38568 }, 38569 38570 /** 38571 * Implement Luhn validation algorithm 38572 * Credit to https://gist.github.com/ShirtlessKirk/2134376 38573 * 38574 * @see http://en.wikipedia.org/wiki/Luhn 38575 * @param {String} value 38576 * @returns {Boolean} 38577 */ 38578 luhn: function(value) { 38579 var length = value.length, 38580 mul = 0, 38581 prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]], 38582 sum = 0; 38583 38584 while (length--) { 38585 sum += prodArr[mul][parseInt(value.charAt(length), 10)]; 38586 mul ^= 1; 38587 } 38588 38589 return (sum % 10 === 0 && sum > 0); 38590 }, 38591 38592 /** 38593 * Implement modulus 11, 10 (ISO 7064) algorithm 38594 * 38595 * @param {String} value 38596 * @returns {Boolean} 38597 */ 38598 mod11And10: function(value) { 38599 var check = 5, 38600 length = value.length; 38601 for (var i = 0; i < length; i++) { 38602 check = (((check || 10) * 2) % 11 + parseInt(value.charAt(i), 10)) % 10; 38603 } 38604 return (check === 1); 38605 }, 38606 38607 /** 38608 * Implements Mod 37, 36 (ISO 7064) algorithm 38609 * Usages: 38610 * mod37And36('A12425GABC1234002M') 38611 * mod37And36('002006673085', '0123456789') 38612 * 38613 * @param {String} value 38614 * @param {String} [alphabet] 38615 * @returns {Boolean} 38616 */ 38617 mod37And36: function(value, alphabet) { 38618 alphabet = alphabet || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 38619 var modulus = alphabet.length, 38620 length = value.length, 38621 check = Math.floor(modulus / 2); 38622 for (var i = 0; i < length; i++) { 38623 check = (((check || modulus) * 2) % (modulus + 1) + alphabet.indexOf(value.charAt(i))) % modulus; 38624 } 38625 return (check === 1); 38626 } 38627 }; 38628}(jQuery)); 38629;(function($) { 38630 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 38631 'en_US': { 38632 b
38632etween: { 38633 'default': 'Please enter a value between %s and %s', 38634 notInclusive: 'Please enter a value between %s and %s strictly' 38635 } 38636 } 38637 }); 38638 38639 FormValidation.Validator.between = { 38640 html5Attributes: { 38641 message: 'message', 38642 min: 'min', 38643 max: 'max', 38644 inclusive: 'inclusive' 38645 }, 38646 38647 enableByHtml5: function($field) { 38648 if ('range' === $field.attr('type')) { 38649 return { 38650 min: $field.attr('min'), 38651 max: $field.attr('max') 38652 }; 38653 } 38654 38655 return false; 38656 }, 38657 38658 /** 38659 * Return true if the input value is between (strictly or not) two given numbers 38660 * 38661 * @param {FormValidation.Base} validator The validator plugin instance 38662 * @param {jQuery} $field Field element 38663 * @param {Object} options Can consist of the following keys: 38664 * - min 38665 * - max 38666 * 38667 * The min, max keys define the number which the field value compares to. min, max can be 38668 * - A number 38669 * - Name of field which its value defines the number 38670 * - Name of callback function that returns the number 38671 * - A callback function that returns the number 38672 * 38673 * - inclusive [optional]: Can be true or false. Default is true 38674 * - message: The invalid message 38675 * @returns {Boolean|Object} 38676 */ 38677 validate: function(validator, $field, options, validatorName) { 38678 var value = validator.getFieldValue($field, validatorName); 38679 if (value === '') { 38680 return true; 38681 } 38682 38683 value = this._format(value); 38684 38685 var locale = validator.getLocale(), 38686 min = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min), 38687 max = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max), 38688 minValue = this._format(min), 38689 maxValue = this._format(max); 38690 38691 return (options.inclusive === true || options.inclusive === undefined) 38692 ? { 38693 valid: $.isNumeric(value) && parseFloat(value) >= minValue && parseFloat(value) <= maxValue, 38694 message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].between['default'], [min, max]) 38695 } 38696 : { 38697 valid: $.isNumeric(value) && parseFloat(value) > minValue && parseFloat(value) < maxValue, 38698 message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].between.notInclusive, [min, max]) 38699 }; 38700 }, 38701 38702 _format: function(value) { 38703 return (value + '').replace(',', '.'); 38704 } 38705 }; 38706}(jQuery)); 38707;(function($) { 38708 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 38709 'en_US': { 38710 callback: { 38711 'default': 'Please enter a valid value' 38712 } 38713 } 38714 }); 38715 38716 FormValidation.Validator.callback = { 38717 priority: 999, 38718 38719 html5Attributes: { 38720 message: 'message', 38721 callback: 'callback' 38722 }, 38723 38724 /** 38725 * Return result from the callback method 38726 * 38727 * @param {FormValidation.Base} validator The validator plugin instance 38728 * @param {jQuery} $field Field element 38729 * @param {Object} options Can consist of the following keys: 38730 * - callback: The callback method that passes parameters: 38731 * callback: function(fieldValue, validator, $field) { 38732 * // fieldValue is the value of field 38733 * // validator is instance of FormValidation.Base 38734 * // $field is the field element 38735 * } 38736 * - message: The invalid message 38737 * @returns {Deferred} 38738 */
vendor: 21,515 bytes, lines 38739-39286
38739 validate: function(validator, $field, options, validatorName) { 38740 var value = validator.getFieldValue($field, validatorName), 38741 dfd = new $.Deferred(), 38742 result = { valid: true }; 38743 38744 if (options.callback) { 38745 var response = FormValidation.Helper.call(options.callback, [value, validator, $field]); 38746 result = ('boolean' === typeof response || null === response) ? { valid: response } : response; 38747 } 38748 38749 dfd.resolve($field, validatorName, result); 38750 return dfd; 38751 } 38752 }; 38753}(jQuery)); 38754;(function($) { 38755 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 38756 'en_US': { 38757 choice: { 38758 'default': 'Please enter a valid value', 38759 less: 'Please choose %s options at minimum', 38760 more: 'Please choose %s options at maximum', 38761 between: 'Please choose %s - %s options' 38762 } 38763 } 38764 }); 38765 38766 FormValidation.Validator.choice = { 38767 html5Attributes: { 38768 message: 'message', 38769 min: 'min', 38770 max: 'max' 38771 }, 38772 38773 /** 38774 * Check if the number of checked boxes are less or more than a given number 38775 * 38776 * @param {FormValidation.Base} validator The validator plugin instance 38777 * @param {jQuery} $field Field element 38778 * @param {Object} options Consists of following keys: 38779 * - min 38780 * - max 38781 * 38782 * At least one of two keys is required 38783 * The min, max keys define the number which the field value compares to. min, max can be 38784 * - A number 38785 * - Name of field which its value defines the number 38786 * - Name of callback function that returns the number 38787 * - A callback function that returns the number 38788 * 38789 * - message: The invalid message 38790 * @returns {Object} 38791 */ 38792 validate: function(validator, $field, options, validatorName) { 38793 var locale = validator.getLocale(), 38794 ns = validator.getNamespace(), 38795 numChoices = $field.is('select') 38796 ? validator.getFieldElements($field.attr('data-' + ns + '-field')).find('option').filter(':selected').length 38797 : validator.getFieldElements($field.attr('data-' + ns + '-field')).filter(':checked').length, 38798 min = options.min ? ($.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min)) : null, 38799 max = options.max ? ($.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max)) : null, 38800 isValid = true, 38801 message = options.message || FormValidation.I18n[locale].choice['default']; 38802 38803 if ((min && numChoices < parseInt(min, 10)) || (max && numChoices > parseInt(max, 10))) { 38804 isValid = false; 38805 } 38806 38807 switch (true) { 38808 case (!!min && !!max): 38809 message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.between, [parseInt(min, 10), parseInt(max, 10)]); 38810 break; 38811 38812 case (!!min): 38813 message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.less, parseInt(min, 10)); 38814 break; 38815 38816 case (!!max): 38817 message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].choice.more, parseInt(max, 10)); 38818 break; 38819 38820 default: 38821 break; 38822 } 38823 38824 return { valid: isValid, message: message }; 38825 } 38826 }; 38827}(jQuery)); 38828;(function($) { 38829 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 38830 'en_US': { 38831 color: { 38832 'default': 'Please enter a valid color' 38833 } 38834 } 38835 }); 38836 38837 FormValidation.Validator.color = { 38838 html5Attributes: { 38839 message: 'message', 38840 type: 'type' 38841 }, 38842 38843 enableByHtml5: function($field) { 38844 return ('color' === $field.attr('type')); 38845 }, 38846 38847 SUPPORTED_TYPES: [ 38848 'hex', 'rgb', 'rgba', 'hsl', 'hsla', 'keyword' 38849 ], 38850 38851 KEYWORD_COLORS: [ 38852 // Colors start with A 38853 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 38854 // B 38855 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 38856 // C 38857 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 38858 // D 38859 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 38860 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 38861 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 38862 'dimgrey', 'dodgerblue', 38863 // F 38864 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 38865 // G 38866 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey', 38867 // H 38868 'honeydew', 'hotpink', 38869 // I 38870 'indianred', 'indigo', 'ivory', 38871 // K 38872 'khaki', 38873 // L 38874 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 38875 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 38876 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 38877 'linen', 38878 // M 38879 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 38880 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 38881 'mistyrose', 'moccasin', 38882 // N 38883 'navajowhite', 'navy', 38884 // O 38885 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 38886 // P 38887 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 38888 'plum', 'powderblue', 'purple', 38889 // R 38890 'red', 'rosybrown', 'royalblue', 38891 // S 38892 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 38893 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 38894 // T 38895 'tan', 'teal', 'thistle', 'tomato', 'transparent', 'turquoise', 38896 // V 38897 'violet', 38898 // W 38899 'wheat', 'white', 'whitesmoke', 38900 // Y 38901 'yellow', 'yellowgreen' 38902 ], 38903 38904 /** 38905 * Return true if the input value is a valid color 38906 * 38907 * @param {FormValidation.Base} validator The validator plugin instance 38908 * @param {jQuery} $field Field element 38909 * @param {Object} options Can consist of the following keys: 38910 * - message: The invalid message 38911 * - type: The array of valid color types 38912 * @returns {Boolean} 38913 */ 38914 validate: function(validator, $field, options, validatorName) { 38915 var value = validator.getFieldValue($field, validatorName); 38916 if (value === '') { 38917 return true; 38918 } 38919 38920 // Only accept 6 hex character values due to the HTML 5 spec 38921 // See http://www.w3.org/TR/html-markup/input.color.html#input.color.attrs.value 38922 if (this.enableByHtml5($field)) { 38923 return /^#[0-9A-F]{6}$/i.test(value); 38924 } 38925 38926 var types = options.type || this.SUPPORTED_TYPES; 38927 if (!$.isArray(types)) { 38928 types = types.replace(/s/g, '').split(','); 38929 } 38930 38931 var method, 38932 type, 38933 isValid = false; 38934 38935 for (var i = 0; i < types.length; i++) { 38936 type = types[i]; 38937 method = '_' + type.toLowerCase(); 38938 isValid = isValid || this[method](value); 38939 if (isValid) { 38940 return true; 38941 } 38942 } 38943 38944 return false; 38945 }, 38946 38947 _hex: function(value) { 38948 return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(value); 38949 }, 38950 38951 _hsl: function(value) { 38952 return /^hsl\((\s*(-?\d+)\s*,)(\s*(\b(0?\d{1,2}|100)\b%)\s*,)(\s*(\b(0?\d{1,2}|100)\b%)\s*)\)$/.test(value); 38953 }, 38954 38955 _hsla: function(value) { 38956 return /^hsla\((\s*(-?\d+)\s*,)(\s*(\b(0?\d{1,2}|100)\b%)\s*,){2}(\s*(0?(\.\d+)?|1(\.0+)?)\s*)\)$/.test(value); 38957 }, 38958 38959 _keyword: function(value) { 38960 return $.inArray(value, this.KEYWORD_COLORS) >= 0; 38961 }, 38962 38963 _rgb: function(value) { 38964 var regexInteger = /^rgb\((\s*(\b([01]?\d{1,2}|2[0-4]\d|25[0-5])\b)\s*,){2}(\s*(\b([01]?\d{1,2}|2[0-4]\d|25[0-5])\b)\s*)\)$/, 38965 regexPercent = /^rgb\((\s*(\b(0?\d{1,2}|100)\b%)\s*,){2}(\s*(\b(0?\d{1,2}|100)\b%)\s*)\)$/; 38966 return regexInteger.test(value) || regexPercent.test(value); 38967 }, 38968 38969 _rgba: function(value) { 38970 var regexInteger = /^rgba\((\s*(\b([01]?\d{1,2}|2[0-4]\d|25[0-5])\b)\s*,){3}(\s*(0?(\.\d+)?|1(\.0+)?)\s*)\)$/, 38971 regexPercent = /^rgba\((\s*(\b(0?\d{1,2}|100)\b%)\s*,){3}(\s*(0?(\.\d+)?|1(\.0+)?)\s*)\)$/; 38972 return regexInteger.test(value) || regexPercent.test(value); 38973 } 38974 }; 38975}(jQuery)); 38976;(function($) { 38977 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 38978 'en_US': { 38979 creditCard: { 38980 'default': 'Please enter a valid credit card number' 38981 } 38982 } 38983 }); 38984 38985 FormValidation.Validator.creditCard = { 38986 /** 38987 * Return true if the input value is valid credit card number 38988 * Based on https://gist.github.com/DiegoSalazar/4075533 38989 * 38990 * @param {FormValidation.Base} validator The validator plugin instance 38991 * @param {jQuery} $field Field element 38992 * @param {Object} [options] Can consist of the following key: 38993 * - message: The invalid message 38994 * @returns {Boolean|Object} 38995 */ 38996 validate: function(validator, $field, options, validatorName) { 38997 var value = validator.getFieldValue($field, validatorName); 38998 if (value === '') { 38999 return true; 39000 } 39001 39002 // Accept only digits, dashes or spaces 39003 if (/[^0-9-\s]+/.test(value)) { 39004 return false; 39005 } 39006 value = value.replace(/\D/g, ''); 39007 39008 if (!FormValidation.Helper.luhn(value)) { 39009 return false; 39010 } 39011 39012 // Validate the card number based on prefix (IIN ranges) and length 39013 var cards = { 39014 AMERICAN_EXPRESS: { 39015 length: [15], 39016 prefix: ['34', '37'] 39017 }, 39018 DANKORT: { 39019 length: [16], 39020 prefix: ['5019'] 39021 }, 39022 DINERS_CLUB: { 39023 length: [14], 39024 prefix: ['300', '301', '302', '303', '304', '305', '36'] 39025 }, 39026 DINERS_CLUB_US: { 39027 length: [16], 39028 prefix: ['54', '55'] 39029 }, 39030 DISCOVER: { 39031 length: [16], 39032 prefix: ['6011', '622126', '622127', '622128', '622129', '62213', 39033 '62214', '62215', '62216', '62217', '62218', '62219', 39034 '6222', '6223', '6224', '6225', '6226', '6227', '6228', 39035 '62290', '62291', '622920', '622921', '622922', '622923', 39036 '622924', '622925', '644', '645', '646', '647', '648', 39037 '649', '65'] 39038 }, 39039 ELO: { 39040 length: [16], 39041 prefix: ['4011', '4312', '4389', '4514', '4573', '4576', 39042 '5041', '5066', '5067', '509', 39043 '6277', '6362', '6363', '650', '6516', '6550'] 39044 }, 39045 FORBRUGSFORENINGEN: { 39046 length: [16], 39047 prefix: ['600722'] 39048 }, 39049 JCB: { 39050 length: [16], 39051 prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358'] 39052 }, 39053 LASER: { 39054 length: [16, 17, 18, 19], 39055 prefix: ['6304', '6706', '6771', '6709'] 39056 }, 39057 MAESTRO: { 39058 length: [12, 13, 14, 15, 16, 17, 18, 19], 39059 prefix: ['5018', '5020', '5038', '5868', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766'] 39060 }, 39061 MASTERCARD: { 39062 length: [16], 39063 prefix: ['51', '52', '53', '54', '55'] 39064 }, 39065 SOLO: { 39066 length: [16, 18, 19], 39067 prefix: ['6334', '6767'] 39068 }, 39069 UNIONPAY: { 39070 length: [16, 17, 18, 19], 39071 prefix: ['622126', '622127', '622128', '622129', '62213', '62214', 39072 '62215', '62216', '62217', '62218', '62219', '6222', '6223', 39073 '6224', '6225', '6226', '6227', '6228', '62290', '62291', 39074 '622920', '622921', '622922', '622923', '622924', '622925'] 39075 }, 39076 VISA_ELECTRON: { 39077 length: [16], 39078 prefix: ['4026', '417500', '4405', '4508', '4844', '4913', '4917'] 39079 }, 39080 VISA: { 39081 length: [16], 39082 prefix: ['4'] 39083 } 39084 }; 39085 39086 var type, i; 39087 for (type in cards) { 39088 for (i in cards[type].prefix) { 39089 if (value.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i] // Check the prefix 39090 && $.inArray(value.length, cards[type].length) !== -1) // and length 39091 { 39092 return { 39093 valid: true, 39094 type: type 39095 }; 39096 } 39097 } 39098 } 39099 39100 return false; 39101 } 39102 }; 39103}(jQuery)); 39104;(function($) { 39105 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39106 'en_US': { 39107 date: { 39108 'default': 'Please enter a valid date', 39109 min: 'Please enter a date after %s', 39110 max: 'Please enter a date before %s', 39111 range: 'Please enter a date in the range %s - %s' 39112 } 39113 } 39114 }); 39115 39116 FormValidation.Validator.date = { 39117 html5Attributes: { 39118 message: 'message', 39119 format: 'format', 39120 min: 'min', 39121 max: 'max', 39122 separator: 'separator' 39123 }, 39124 39125 /** 39126 * Return true if the input value is valid date 39127 * 39128 * @param {FormValidation.Base} validator The validator plugin instance 39129 * @param {jQuery} $field Field element 39130 * @param {Object} options Can consist of the following keys: 39131 * - message: The invalid message 39132 * - min: the minimum date 39133 * - max: the maximum date 39134 * - separator: Use to separate the date, month, and year. 39135 * By default, it is / 39136 * - format: The date format. Default is MM/DD/YYYY 39137 * The format can be: 39138 * 39139 * i) date: Consist of DD, MM, YYYY parts which are separated by the separator option 39140 * ii) date and time: 39141 * The time can consist of h, m, s parts which are separated by : 39142 * ii) date, time and A (indicating AM or PM) 39143 * @returns {Boolean|Object} 39144 */ 39145 validate: function(validator, $field, options, validatorName) { 39146 var value = validator.getFieldValue($field, validatorName); 39147 if (value === '') { 39148 return true; 39149 } 39150 39151 options.format = options.format || 'MM/DD/YYYY'; 39152 39153 // #683: Force the format to YYYY-MM-DD as the default browser behaviour when using type="date" attribute 39154 if ($field.attr('type') === 'date') { 39155 options.format = 'YYYY-MM-DD'; 39156 } 39157 39158 var locale = validator.getLocale(), 39159 message = options.message || FormValidation.I18n[locale].date['default'], 39160 formats = options.format.split(' '), 39161 dateFormat = formats[0], 39162 timeFormat = (formats.length > 1) ? formats[1] : null, 39163 amOrPm = (formats.length > 2) ? formats[2] : null, 39164 sections = value.split(' '), 39165 date = sections[0], 39166 time = (sections.length > 1) ? sections[1] : null; 39167 39168 if (formats.length !== sections.length) { 39169 return { 39170 valid: false, 39171 message: message 39172 }; 39173 } 39174 39175 // Determine the separator 39176 var separator = options.separator; 39177 if (!separator) { 39178 separator = (date.indexOf('/') !== -1) 39179 ? '/' 39180 : ((date.indexOf('-') !== -1) ? '-' : ((date.indexOf('.') !== -1) ? '.' : null)); 39181 } 39182 if (separator === null || date.indexOf(separator) === -1) { 39183 return { 39184 valid: false, 39185 message: message 39186 }; 39187 } 39188 39189 // Determine the date 39190 date = date.split(separator); 39191 dateFormat = dateFormat.split(separator); 39192 if (date.length !== dateFormat.length) { 39193 return { 39194 valid: false, 39195 message: message 39196 }; 39197 } 39198 39199 var year = date[$.inArray('YYYY', dateFormat)], 39200 month = date[$.inArray('MM', dateFormat)], 39201 day = date[$.inArray('DD', dateFormat)]; 39202 39203 if (!year || !month || !day || year.length !== 4) { 39204 return { 39205 valid: false, 39206 message: message 39207 }; 39208 } 39209 39210 // Determine the time 39211 var minutes = null, hours = null, seconds = null; 39212 if (timeFormat) { 39213 timeFormat = timeFormat.split(':'); 39214 time = time.split(':'); 39215 39216 if (timeFormat.length !== time.length) { 39217 return { 39218 valid: false, 39219 message: message 39220 }; 39221 } 39222 39223 hours = time.length > 0 ? time[0] : null; 39224 minutes = time.length > 1 ? time[1] : null; 39225 seconds = time.length > 2 ? time[2] : null; 39226 39227 if (hours === '' || minutes === '' || seconds === '') { 39228 return { 39229 valid: false, 39230 message: message 39231 }; 39232 } 39233 39234 // Validate seconds 39235 if (seconds) { 39236 if (isNaN(seconds) || seconds.length > 2) { 39237 return { 39238 valid: false, 39239 message: message 39240 }; 39241 } 39242 seconds = parseInt(seconds, 10); 39243 if (seconds < 0 || seconds > 60) { 39244 return { 39245 valid: false, 39246 message: message 39247 }; 39248 } 39249 } 39250 39251 // Validate hours 39252 if (hours) { 39253 if (isNaN(hours) || hours.length > 2) { 39254 return { 39255 valid: false, 39256 message: message 39257 }; 39258 } 39259 hours = parseInt(hours, 10); 39260 if (hours < 0 || hours >= 24 || (amOrPm && hours > 12)) { 39261 return { 39262 valid: false, 39263 message: message 39264 }; 39265 } 39266 } 39267 39268 // Validate minutes 39269 if (minutes) { 39270 if (isNaN(minutes) || minutes.length > 2) { 39271 return { 39272 valid: false, 39273 message: message 39274 }; 39275 } 39276 minutes = parseInt(minutes, 10); 39277 if (minutes < 0 || minutes > 59) { 39278 return { 39279 valid: false, 39280 message: message 39281 }; 39282 } 39283 } 39284 } 39285 39286 // Validate day, month, and year
39287 var valid = FormValidation.Helper.date(year, month, day), 39288 min = null, 39289 max = null, 39290 minOption = options.min, 39291 maxOption = options.max; 39292 39293 if (minOption) { 39294 min = (minOption instanceof Date) 39295 ? minOption 39296 : (this._parseDate(minOption, dateFormat, separator) || 39297 this._parseDate(validator.getDynamicOption($field, minOption), dateFormat, separator)); 39298 39299 // In order to avoid displaying a date string like "Mon Dec 08 2014 19:14:12 GMT+0000 (WET)" 39300 minOption = this._formatDate(min, options.format); 39301 } 39302 39303 if (maxOption) { 39304 max = (maxOption instanceof Date) 39305 ? maxOption 39306 : (this._parseDate(maxOption, dateFormat, separator) || 39307 this._parseDate(validator.getDynamicOption($field, maxOption), dateFormat, separator)); 39308 39309 // In order to avoid displaying a date string like "Mon Dec 08 2014 19:14:12 GMT+0000 (WET)" 39310 maxOption = this._formatDate(max, options.format); 39311 } 39312 39313 date = new Date(year, month -1, day, hours, minutes, seconds); 39314 39315 switch (true) { 39316 case (minOption && !maxOption && valid): 39317 valid = date.getTime() >= min.getTime(); 39318 message = options.message || FormValidation.Helper.format(FormValidation.I18n[locale].date.min, minOption); 39319 break; 39320 39321 case (maxOption && !minOption && valid): 39322 valid = date.getTime() <= max.getTime(); 39323 message = options.message || FormValidation.Helper.format(FormValidation.I18n[locale].date.max, maxOption); 39324 break; 39325 39326 case (maxOption && minOption && valid): 39327 valid = date.getTime() <= max.getTime() && date.getTime() >= min.getTime(); 39328 message = options.message || FormValidation.Helper.format(FormValidation.I18n[locale].date.range, [minOption, maxOption]); 39329 break; 39330 39331 default: 39332 break; 39333 } 39334 39335 return { 39336 valid: valid, 39337 date: date, 39338 message: message 39339 }; 39340 }, 39341 39342 /** 39343 * Return a date object after parsing the date string 39344 * 39345 * @param {Date|String} date The date string to parse 39346 * @param {String} format The date format 39347 * The format can be: 39348 * - date: Consist of DD, MM, YYYY parts which are separated by the separator option 39349 * - date and time: 39350 * The time can consist of h, m, s parts which are separated by : 39351 * @param {String} separator The separator used to separate the date, month, and year 39352 * @returns {Date} 39353 */ 39354 _parseDate: function(date, format, separator) { 39355 if (date instanceof Date) { 39356 return date; 39357 } 39358 if (typeof date !== 'string') { 39359 return null; 39360 } 39361 39362 // Ensure that the format must consist of year, month and day patterns 39363 var yearIndex = $.inArray('YYYY', format), 39364 monthIndex = $.inArray('MM', format), 39365 dayIndex = $.inArray('DD', format); 39366 if (yearIndex === -1 || monthIndex === -1 || dayIndex === -1) { 39367 return null; 39368 } 39369 39370 var minutes = 0, hours = 0, seconds = 0, 39371 sections = date.split(' '), 39372 dateSection = sections[0].split(separator); 39373 if (dateSection.length < 3) { 39374 return null; 39375 } 39376 39377 if (sections.length > 1) { 39378 var timeSection = sections[1].split(':'); 39379 hours = timeSection.length > 0 ? timeSection[0] : null; 39380 minutes = timeSection.length > 1 ? timeSection[1] : null; 39381 seconds = timeSection.length > 2 ? timeSection[2] : null; 39382 } 39383 39384 return new Date(dateSection[yearIndex], dateSection[monthIndex] - 1, dateSection[dayIndex], 39385 hours, minutes, seconds); 39386 }, 39387 39388 /** 39389 * Format date 39390 * 39391 * @param {Date} date The date object to format 39392 * @param {String} format The date format 39393 * The format can consist of the following tokens: 39394 * d Day of the month without leading zeros (1 through 31) 39395 * dd Day of the month with leading zeros (01 through 31) 39396 * m Month without leading zeros (1 through 12) 39397 * mm Month with leading zeros (01 through 12) 39398 * yy Last two digits of year (for example: 14) 39399 * yyyy Full four digits of year (for example: 2014) 39400 * h Hours without leading zeros (1 through 12) 39401 * hh Hours with leading zeros (01 through 12) 39402 * H Hours without leading zeros (0 through 23) 39403 * HH Hours with leading zeros (00 through 23) 39404 * M Minutes without leading zeros (0 through 59) 39405 * MM Minutes with leading zeros (00 through 59) 39406 * s Seconds without leading zeros (0 through 59) 39407 * ss Seconds with leading zeros (00 through 59) 39408 * @returns {String} 39409 */ 39410 _formatDate: function(date, format) { 39411 format = format 39412 .replace(/Y/g, 'y') 39413 .replace(/M/g, 'm') 39414 .replace(/D/g, 'd') 39415 .replace(/:m/g, ':M') 39416 .replace(/:mm/g, ':MM') 39417 .replace(/:S/, ':s') 39418 .replace(/:SS/, ':ss'); 39419 39420 var replacer = { 39421 d: function(date) { 39422 return date.getDate(); 39423 }, 39424 dd: function(date) { 39425 var d = date.getDate(); 39426 return (d < 10) ? '0' + d : d; 39427 }, 39428 m: function(date) { 39429 return date.getMonth() + 1; 39430 }, 39431 mm: function(date) { 39432 var m = date.getMonth() + 1; 39433 return m < 10 ? '0' + m : m; 39434 }, 39435 yy: function(date) { 39436 return ('' + date.getFullYear()).substr(2); 39437 }, 39438 yyyy: function(date) { 39439 return date.getFullYear(); 39440 }, 39441 h: function(date) { 39442 return date.getHours() % 12 || 12; 39443 }, 39444 hh: function(date) { 39445 var h = date.getHours() % 12 || 12; 39446 return h < 10 ? '0' + h : h; 39447 }, 39448 H: function(date) { 39449 return date.getHours(); 39450 }, 39451 HH: function(date) { 39452 var H = date.getHours(); 39453 return H < 10 ? '0' + H : H; 39454 }, 39455 M: function(date) { 39456 return date.getMinutes(); 39457 }, 39458 MM: function(date) { 39459 var M = date.getMinutes(); 39460 return M < 10 ? '0' + M : M; 39461 }, 39462 s: function(date) { 39463 return date.getSeconds(); 39464 }, 39465 ss: function(date) { 39466 var s = date.getSeconds(); 39467 return s < 10 ? '0' + s : s; 39468 } 39469 }; 39470 39471 return format.replace(/d{1,4}|m{1,4}|yy(?:yy)?|([HhMs])\1?|"[^"]*"|'[^']*'/g, function(match) { 39472 return replacer[match] ? replacer[match](date) : match.slice(1, match.length - 1); 39473 }); 39474 } 39475 }; 39476}(jQuery)); 39477;(function($) { 39478 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39479 'en_US': { 39480 different: { 39481 'default': 'Please enter a different value' 39482 } 39483 } 39484 }); 39485 39486 FormValidation.Validator.different = { 39487 html5Attributes: { 39488 message: 'message', 39489 field: 'field' 39490 }, 39491 39492 /** 39493 * Bind the validator on the live change of the field to compare with current one 39494 * 39495 * @param {FormValidation.Base} validator The validator plugin instance 39496 * @param {jQuery} $field Field element 39497 * @param {Object} options Consists of the following key: 39498 * - field: The name of field that will be used to compare with current one 39499 */
39500 init: function(validator, $field, options, validatorName) { 39501 var fields = options.field.split(','); 39502 for (var i = 0; i < fields.length; i++) { 39503 var compareWith = validator.getFieldElements($.trim(fields[i])); 39504 validator.onLiveChange(compareWith, 'live_' + validatorName, function() { 39505 var status = validator.getStatus($field, validatorName); 39506 if (status !== validator.STATUS_NOT_VALIDATED) { 39507 validator.revalidateField($field); 39508 } 39509 }); 39510 } 39511 }, 39512 39513 /** 39514 * Unbind the validator on the live change of the field to compare with current one 39515 * 39516 * @param {FormValidation.Base} validator The validator plugin instance 39517 * @param {jQuery} $field Field element 39518 * @param {Object} options Consists of the following key: 39519 * - field: The name of field that will be used to compare with current one 39520 */ 39521 destroy: function(validator, $field, options, validatorName) { 39522 var fields = options.field.split(','); 39523 for (var i = 0; i < fields.length; i++) { 39524 var compareWith = validator.getFieldElements($.trim(fields[i])); 39525 validator.offLiveChange(compareWith, 'live_' + validatorName); 39526 } 39527 }, 39528 39529 /** 39530 * Return true if the input value is different with given field's value 39531 * 39532 * @param {FormValidation.Base} validator The validator plugin instance 39533 * @param {jQuery} $field Field element 39534 * @param {Object} options Consists of the following key: 39535 * - field: The name of field that will be used to compare with current one 39536 * - message: The invalid message 39537 * @returns {Boolean} 39538 */ 39539 validate: function(validator, $field, options, validatorName) { 39540 var value = validator.getFieldValue($field, validatorName); 39541 if (value === '') { 39542 return true; 39543 } 39544 39545 var fields = options.field.split(','), 39546 isValid = true; 39547 39548 for (var i = 0; i < fields.length; i++) { 39549 var compareWith = validator.getFieldElements($.trim(fields[i])); 39550 if (compareWith == null || compareWith.length === 0) { 39551 continue; 39552 } 39553 39554 var compareValue = validator.getFieldValue(compareWith, validatorName); 39555 if (value === compareValue) { 39556 isValid = false; 39557 } else if (compareValue !== '') { 39558 validator.updateStatus(compareWith, validator.STATUS_VALID, validatorName); 39559 } 39560 } 39561 39562 return isValid; 39563 } 39564 }; 39565}(jQuery)); 39566;(function($) { 39567 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39568 'en_US': { 39569 digits: { 39570 'default': 'Please enter only digits' 39571 } 39572 } 39573 }); 39574 39575 FormValidation.Validator.digits = { 39576 /** 39577 * Return true if the input value contains digits only 39578 * 39579 * @param {FormValidation.Base} validator Validate plugin instance 39580 * @param {jQuery} $field Field element 39581 * @param {Object} [options] 39582 * @returns {Boolean} 39583 */ 39584 validate: function(validator, $field, options, validatorName) { 39585 var value = validator.getFieldValue($field, validatorName); 39586 if (value === '') { 39587 return true; 39588 } 39589 39590 return /^\d+$/.test(value); 39591 } 39592 }; 39593}(jQuery)); 39594;(function($) { 39595 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39596 'en_US': { 39597 emailAddress: { 39598 'default': 'Please enter a valid email address' 39599 } 39600 } 39601 }); 39602 39603 FormValidation.Validator.emailAddress = { 39604 html5Attributes: { 39605 message: 'message', 39606 multiple: 'multiple', 39607 separator: 'separator' 39608 }, 39609 39610 enableByHtml5: function($field) { 39611 return ('email' === $field.attr('type')); 39612 }, 39613 39614 /** 39615 * Return true if and only if the input value is a valid email address 39616 * 39617 * @param {FormValidation.Base} validator Validate plugin instance 39618 * @param {jQuery} $field Field element 39619 * @param {Object} [options] 39620 * - multiple: Allow multiple email addresses, separated by a comma or semicolon; default is false. 39621 * - separator: Regex for character or characters expected as separator between addresses; default is comma /[,;]/, i.e. comma or semicolon. 39622 * @returns {Boolean} 39623 */
vendor: 4,440 bytes, lines 39624-39734
39624 validate: function(validator, $field, options, validatorName) { 39625 var value = validator.getFieldValue($field, validatorName); 39626 if (value === '') { 39627 return true; 39628 } 39629 39630 // Email address regular expression 39631 // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript 39632 var emailRegExp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, 39633 allowMultiple = options.multiple === true || options.multiple === 'true'; 39634 39635 if (allowMultiple) { 39636 var separator = options.separator || /[,;]/, 39637 addresses = this._splitEmailAddresses(value, separator); 39638 39639 for (var i = 0; i < addresses.length; i++) { 39640 if (!emailRegExp.test(addresses[i])) { 39641 return false; 39642 } 39643 } 39644 39645 return true; 39646 } else { 39647 return emailRegExp.test(value); 39648 } 39649 }, 39650 39651 _splitEmailAddresses: function(emailAddresses, separator) { 39652 var quotedFragments = emailAddresses.split(/"/), 39653 quotedFragmentCount = quotedFragments.length, 39654 emailAddressArray = [], 39655 nextEmailAddress = ''; 39656 39657 for (var i = 0; i < quotedFragmentCount; i++) { 39658 if (i % 2 === 0) { 39659 var splitEmailAddressFragments = quotedFragments[i].split(separator), 39660 splitEmailAddressFragmentCount = splitEmailAddressFragments.length; 39661 39662 if (splitEmailAddressFragmentCount === 1) { 39663 nextEmailAddress += splitEmailAddressFragments[0]; 39664 } else { 39665 emailAddressArray.push(nextEmailAddress + splitEmailAddressFragments[0]); 39666 39667 for (var j = 1; j < splitEmailAddressFragmentCount - 1; j++) { 39668 emailAddressArray.push(splitEmailAddressFragments[j]); 39669 } 39670 nextEmailAddress = splitEmailAddressFragments[splitEmailAddressFragmentCount - 1]; 39671 } 39672 } else { 39673 nextEmailAddress += '"' + quotedFragments[i]; 39674 if (i < quotedFragmentCount - 1) { 39675 nextEmailAddress += '"'; 39676 } 39677 } 39678 } 39679 39680 emailAddressArray.push(nextEmailAddress); 39681 return emailAddressArray; 39682 } 39683 }; 39684}(jQuery)); 39685;(function($) { 39686 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39687 'en_US': { 39688 file: { 39689 'default': 'Please choose a valid file' 39690 } 39691 } 39692 }); 39693 39694 FormValidation.Validator.file = { 39695 Error: { 39696 EXTENSION: 'EXTENSION', 39697 MAX_FILES: 'MAX_FILES', 39698 MAX_SIZE: 'MAX_SIZE', 39699 MAX_TOTAL_SIZE: 'MAX_TOTAL_SIZE', 39700 MIN_FILES: 'MIN_FILES', 39701 MIN_SIZE: 'MIN_SIZE', 39702 MIN_TOTAL_SIZE: 'MIN_TOTAL_SIZE', 39703 TYPE: 'TYPE' 39704 }, 39705 39706 html5Attributes: { 39707 extension: 'extension', 39708 maxfiles: 'maxFiles', 39709 minfiles: 'minFiles', 39710 maxsize: 'maxSize', 39711 minsize: 'minSize', 39712 maxtotalsize: 'maxTotalSize', 39713 mintotalsize: 'minTotalSize', 39714 message: 'message', 39715 type: 'type' 39716 }, 39717 39718 /** 39719 * Validate upload file. Use HTML 5 API if the browser supports 39720 * 39721 * @param {FormValidation.Base} validator The validator plugin instance 39722 * @param {jQuery} $field Field element 39723 * @param {Object} options Can consist of the following keys: 39724 * - extension: The allowed extensions, separated by a comma 39725 * - maxFiles: The maximum number of files 39726 * - minFiles: The minimum number of files 39727 * - maxSize: The maximum size in bytes 39728 * - minSize: The minimum size in bytes 39729 * - maxTotalSize: The maximum size in bytes for all files 39730 * - minTotalSize: The minimum size in bytes for all files 39731 * - message: The invalid message 39732 * - type: The allowed MIME type, separated by a comma 39733 * @returns {Boolean|Object} 39734 */
39735 validate: function(validator, $field, options, validatorName) { 39736 var value = validator.getFieldValue($field, validatorName); 39737 if (value === '') { 39738 return true; 39739 } 39740 39741 var ext, 39742 extensions = options.extension ? options.extension.toLowerCase().split(',') : null, 39743 types = options.type ? options.type.toLowerCase().split(',') : null, 39744 html5 = (window.File && window.FileList && window.FileReader); 39745 39746 if (html5) { 39747 // Get FileList instance 39748 var files = $field.get(0).files, 39749 total = files.length, 39750 totalSize = 0; 39751 39752 // Check the maxFiles 39753 if (options.maxFiles && total > parseInt(options.maxFiles, 10)) { 39754 return { 39755 valid: false, 39756 error: this.Error.MAX_FILES 39757 }; 39758 } 39759 39760 // Check the minFiles 39761 if (options.minFiles && total < parseInt(options.minFiles, 10)) { 39762 return { 39763 valid: false, 39764 error: this.Error.MIN_FILES 39765 }; 39766 } 39767 39768 var metaData = {}; 39769 for (var i = 0; i < total; i++) { 39770 totalSize += files[i].size; 39771 ext = files[i].name.substr(files[i].name.lastIndexOf('.') + 1); 39772 metaData = { 39773 file: files[i], 39774 size: files[i].size, 39775 ext: ext, 39776 type: files[i].type 39777 }; 39778 39779 // Check the minSize 39780 if (options.minSize && files[i].size < parseInt(options.minSize, 10)) { 39781 return { 39782 valid: false, 39783 error: this.Error.MIN_SIZE, 39784 metaData: metaData 39785 }; 39786 } 39787 39788 // Check the maxSize 39789 if (options.maxSize && files[i].size > parseInt(options.maxSize, 10)) { 39790 return { 39791 valid: false, 39792 error: this.Error.MAX_SIZE, 39793 metaData: metaData 39794 }; 39795 } 39796 39797 // Check file extension 39798 if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) { 39799 return { 39800 valid: false, 39801 error: this.Error.EXTENSION, 39802 metaData: metaData 39803 }; 39804 } 39805 39806 // Check file type 39807 if (files[i].type && types && $.inArray(files[i].type.toLowerCase(), types) === -1) { 39808 return { 39809 valid: false, 39810 error: this.Error.TYPE, 39811 metaData: metaData 39812 }; 39813 } 39814 } 39815 39816 // Check the maxTotalSize 39817 if (options.maxTotalSize && totalSize > parseInt(options.maxTotalSize, 10)) { 39818 return { 39819 valid: false, 39820 error: this.Error.MAX_TOTAL_SIZE, 39821 metaData: { 39822 totalSize: totalSize 39823 } 39824 }; 39825 } 39826 39827 // Check the minTotalSize 39828 if (options.minTotalSize && totalSize < parseInt(options.minTotalSize, 10)) { 39829 return { 39830 valid: false, 39831 error: this.Error.MIN_TOTAL_SIZE, 39832 metaData: { 39833 totalSize: totalSize 39834 } 39835 }; 39836 } 39837 } else { 39838 // Check file extension 39839 ext = value.substr(value.lastIndexOf('.') + 1); 39840 if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) { 39841 return { 39842 valid: false, 39843 error: this.Error.EXTENSION, 39844 metaData: { 39845 ext: ext 39846 } 39847 }; 39848 } 39849 } 39850 39851 return true; 39852 } 39853 }; 39854}(jQuery)); 39855;(function($) { 39856 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39857 'en_US': { 39858 greaterThan: { 39859 'default': 'Please enter a value greater than or equal to %s', 39860 notInclusive: 'Please enter a value greater than %s' 39861 } 39862 } 39863 }); 39864 39865 FormValidation.Validator.greaterThan = { 39866 html5Attributes: { 39867 message: 'message', 39868 value: 'value', 39869 inclusive: 'inclusive' 39870 }, 39871 39872 enableByHtml5: function($field) { 39873 var type = $field.attr('type'), 39874 min = $field.attr('min'); 39875 if (min && type !== 'date') { 39876 return { 39877 value: min 39878 }; 39879 } 39880 39881 return false;
39882 }, 39883 39884 /** 39885 * Return true if the input value is greater than or equals to given number 39886 * 39887 * @param {FormValidation.Base} validator Validate plugin instance 39888 * @param {jQuery} $field Field element 39889 * @param {Object} options Can consist of the following keys: 39890 * - value: Define the number to compare with. It can be 39891 * - A number 39892 * - Name of field which its value defines the number 39893 * - Name of callback function that returns the number 39894 * - A callback function that returns the number 39895 * 39896 * - inclusive [optional]: Can be true or false. Default is true 39897 * - message: The invalid message 39898 * @returns {Boolean|Object} 39899 */ 39900 validate: function(validator, $field, options, validatorName) { 39901 var value = validator.getFieldValue($field, validatorName); 39902 if (value === '') { 39903 return true; 39904 } 39905 39906 value = this._format(value); 39907 39908 var locale = validator.getLocale(), 39909 compareTo = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value), 39910 compareToValue = this._format(compareTo); 39911 39912 return (options.inclusive === true || options.inclusive === undefined) 39913 ? { 39914 valid: $.isNumeric(value) && parseFloat(value) >= compareToValue, 39915 message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].greaterThan['default'], compareTo) 39916 } 39917 : { 39918 valid: $.isNumeric(value) && parseFloat(value) > compareToValue, 39919 message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].greaterThan.notInclusive, compareTo) 39920 }; 39921 }, 39922 39923 _format: function(value) { 39924 return (value + '').replace(',', '.'); 39925 } 39926 }; 39927}(jQuery)); 39928;(function($) { 39929 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 39930 'en_US': { 39931 identical: { 39932 'default': 'Please enter the same value' 39933 } 39934 } 39935 }); 39936 39937 FormValidation.Validator.identical = { 39938 html5Attributes: { 39939 message: 'message', 39940 field: 'field' 39941 }, 39942 39943 /** 39944 * Bind the validator on the live change of the field to compare with current one 39945 * 39946 * @param {FormValidation.Base} validator The validator plugin instance 39947 * @param {jQuery} $field Field element 39948 * @param {Object} options Consists of the following key: 39949 * - field: The name of field that will be used to compare with current one 39950 */ 39951 init: function(validator, $field, options, validatorName) { 39952 var compareWith = validator.getFieldElements(options.field); 39953 validator.onLiveChange(compareWith, 'live_' + validatorName, function() { 39954 var status = validator.getStatus($field, validatorName); 39955 if (status !== validator.STATUS_NOT_VALIDATED) { 39956 validator.revalidateField($field); 39957 } 39958 }); 39959 }, 39960 39961 /** 39962 * Unbind the validator on the live change of the field to compare with current one 39963 * 39964 * @param {FormValidation.Base} validator The validator plugin instance 39965 * @param {jQuery} $field Field element 39966 * @param {Object} options Consists of the following key: 39967 * - field: The name of field that will be used to compare with current one 39968 */ 39969 destroy: function(validator, $field, options, validatorName) { 39970 var compareWith = validator.getFieldElements(options.field); 39971 validator.offLiveChange(compareWith, 'live_' + validatorName); 39972 }, 39973 39974 /** 39975 * Check if input value equals to value of particular one 39976 * 39977 * @param {FormValidation.Base} validator The validator plugin instance 39978 * @param {jQuery} $field Field element 39979 * @param {Object} options Consists of the following key: 39980 * - field: The name of field that will be used to compare with current one 39981 * @returns {Boolean} 39982 */
39983 validate: function(validator, $field, options, validatorName) { 39984 var value = validator.getFieldValue($field, validatorName), 39985 compareWith = validator.getFieldElements(options.field); 39986 if (compareWith === null || compareWith.length === 0) { 39987 return true; 39988 } 39989 39990 var compareValue = validator.getFieldValue(compareWith, validatorName); 39991 if (value === compareValue) { 39992 validator.updateStatus(compareWith, validator.STATUS_VALID, validatorName); 39993 return true; 39994 } 39995 39996 return false; 39997 } 39998 }; 39999}(jQuery)); 40000;(function($) { 40001 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40002 'en_US': { 40003 integer: { 40004 'default': 'Please enter a valid number' 40005 } 40006 } 40007 }); 40008 40009 FormValidation.Validator.integer = { 40010 html5Attributes: { 40011 message: 'message', 40012 thousandsseparator: 'thousandsSeparator', 40013 decimalseparator: 'decimalSeparator' 40014 }, 40015 40016 enableByHtml5: function($field) { 40017 return ('number' === $field.attr('type')) && ($field.attr('step') === undefined || $field.attr('step') % 1 === 0); 40018 }, 40019 40020 /** 40021 * Return true if the input value is an integer 40022 * 40023 * @param {FormValidation.Base} validator The validator plugin instance 40024 * @param {jQuery} $field Field element 40025 * @param {Object} options Can consist of the following key: 40026 * - message: The invalid message 40027 * - thousandsSeparator: The thousands separator. It's empty by default 40028 * - decimalSeparator: The decimal separator. It's '.' by default 40029 * @returns {Boolean} 40030 */ 40031 validate: function(validator, $field, options, validatorName) { 40032 if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) { 40033 return false; 40034 } 40035 40036 var value = validator.getFieldValue($field, validatorName); 40037 if (value === '') { 40038 return true; 40039 } 40040 40041 var decimalSeparator = options.decimalSeparator || '.', 40042 thousandsSeparator = options.thousandsSeparator || ''; 40043 decimalSeparator = (decimalSeparator === '.') ? '\\.' : decimalSeparator; 40044 thousandsSeparator = (thousandsSeparator === '.') ? '\\.' : thousandsSeparator; 40045 40046 var testRegexp = new RegExp('^-?[0-9]{1,3}(' + thousandsSeparator + '[0-9]{3})*(' + decimalSeparator + '[0-9]+)?$'), 40047 thousandsReplacer = new RegExp(thousandsSeparator, 'g'); 40048 40049 if (!testRegexp.test(value)) { 40050 return false; 40051 } 40052 40053 // Replace thousands separator with blank 40054 if (thousandsSeparator) { 40055 value = value.replace(thousandsReplacer, ''); 40056 } 40057 // Replace decimal separator with a dot 40058 if (decimalSeparator) { 40059 value = value.replace(decimalSeparator, '.'); 40060 } 40061 40062 if (isNaN(value) || !isFinite(value)) { 40063 return false; 40064 } 40065 // TODO: Use Number.isInteger() if available 40066 value = parseFloat(value); 40067 return Math.floor(value) === value; 40068 } 40069 }; 40070}(jQuery)); 40071;(function($) { 40072 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40073 'en_US': { 40074 lessThan: { 40075 'default': 'Please enter a value less than or equal to %s', 40076 notInclusive: 'Please enter a value less than %s' 40077 } 40078 } 40079 }); 40080 40081 FormValidation.Validator.lessThan = { 40082 html5Attributes: { 40083 message: 'message', 40084 value: 'value', 40085 inclusive: 'inclusive' 40086 }, 40087 40088 enableByHtml5: function($field) { 40089 var type = $field.attr('type'), 40090 max = $field.attr('max'); 40091 if (max && type !== 'date') { 40092 return { 40093 value: max 40094 }; 40095 } 40096 40097 return false;
vendor: 4,751 bytes, lines 40098-40218
40098 }, 40099 40100 /** 40101 * Return true if the input value is less than or equal to given number 40102 * 40103 * @param {FormValidation.Base} validator The validator plugin instance 40104 * @param {jQuery} $field Field element 40105 * @param {Object} options Can consist of the following keys: 40106 * - value: The number used to compare to. It can be 40107 * - A number 40108 * - Name of field which its value defines the number 40109 * - Name of callback function that returns the number 40110 * - A callback function that returns the number 40111 * 40112 * - inclusive [optional]: Can be true or false. Default is true 40113 * - message: The invalid message 40114 * @returns {Boolean|Object} 40115 */ 40116 validate: function(validator, $field, options, validatorName) { 40117 var value = validator.getFieldValue($field, validatorName); 40118 if (value === '') { 40119 return true; 40120 } 40121 40122 value = this._format(value); 40123 40124 var locale = validator.getLocale(), 40125 compareTo = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value), 40126 compareToValue = this._format(compareTo); 40127 40128 return (options.inclusive === true || options.inclusive === undefined) 40129 ? { 40130 valid: $.isNumeric(value) && parseFloat(value) <= compareToValue, 40131 message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].lessThan['default'], compareTo) 40132 } 40133 : { 40134 valid: $.isNumeric(value) && parseFloat(value) < compareToValue, 40135 message: FormValidation.Helper.format(options.message || FormValidation.I18n[locale].lessThan.notInclusive, compareTo) 40136 }; 40137 }, 40138 40139 _format: function(value) { 40140 return (value + '').replace(',', '.'); 40141 } 40142 }; 40143}(jQuery)); 40144;(function($) { 40145 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40146 'en_US': { 40147 notEmpty: { 40148 'default': 'Please enter a value' 40149 } 40150 } 40151 }); 40152 40153 FormValidation.Validator.notEmpty = { 40154 enableByHtml5: function($field) { 40155 var required = $field.attr('required') + ''; 40156 return ('required' === required || 'true' === required); 40157 }, 40158 40159 /** 40160 * Check if input value is empty or not 40161 * 40162 * @param {FormValidation.Base} validator The validator plugin instance 40163 * @param {jQuery} $field Field element 40164 * @param {Object} options 40165 * @returns {Boolean} 40166 */ 40167 validate: function(validator, $field, options, validatorName) { 40168 var type = $field.attr('type'); 40169 if ('radio' === type || 'checkbox' === type) { 40170 var ns = validator.getNamespace(); 40171 return validator 40172 .getFieldElements($field.attr('data-' + ns + '-field')) 40173 .filter(':checked') 40174 .length > 0; 40175 } 40176 40177 if ('number' === type && $field.get(0).validity && $field.get(0).validity.badInput === true) { 40178 return true; 40179 } 40180 40181 var value = validator.getFieldValue($field, validatorName); 40182 return $.trim(value) !== ''; 40183 } 40184 }; 40185}(jQuery)); 40186;(function($) { 40187 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40188 'en_US': { 40189 numeric: { 40190 'default': 'Please enter a valid float number' 40191 } 40192 } 40193 }); 40194 40195 FormValidation.Validator.numeric = { 40196 html5Attributes: { 40197 message: 'message', 40198 separator: 'separator', // deprecated 40199 thousandsseparator: 'thousandsSeparator', 40200 decimalseparator: 'decimalSeparator' 40201 }, 40202 40203 enableByHtml5: function($field) { 40204 return ('number' === $field.attr('type')) && ($field.attr('step') !== undefined) && ($field.attr('step') % 1 !== 0); 40205 }, 40206 40207 /** 40208 * Validate decimal number 40209 * 40210 * @param {FormValidation.Base} validator The validator plugin instance 40211 * @param {jQuery} $field Field element 40212 * @param {Object} options Consist of key: 40213 * - message: The invalid message 40214 * - thousandsSeparator: The thousands separator. It's empty by default 40215 * - separator, decimalSeparator: The decimal separator. It's '.' by default 40216 * The separator option is deprecated and should be replaced with decimalSeparator 40217 * @returns {Boolean} 40218 */
40219 validate: function(validator, $field, options, validatorName) { 40220 if (this.enableByHtml5($field) && $field.get(0).validity && $field.get(0).validity.badInput === true) { 40221 return false; 40222 } 40223 40224 var value = validator.getFieldValue($field, validatorName); 40225 if (value === '') { 40226 return true; 40227 } 40228 40229 var decimalSeparator = options.separator || options.decimalSeparator || '.', 40230 thousandsSeparator = options.thousandsSeparator || ''; 40231 40232 // Support preceding zero numbers such as .5, -.5 40233 if (value.substr(0, 1) === decimalSeparator) { 40234 value = '0' + decimalSeparator + value.substr(1); 40235 } else if (value.substr(0, 2) === '-' + decimalSeparator) { 40236 value = '-0' + decimalSeparator + value.substr(2); 40237 } 40238 40239 decimalSeparator = (decimalSeparator === '.') ? '\\.' : decimalSeparator; 40240 thousandsSeparator = (thousandsSeparator === '.') ? '\\.' : thousandsSeparator; 40241 40242 var testRegexp = new RegExp('^-?[0-9]{1,3}(' + thousandsSeparator + '[0-9]{3})*(' + decimalSeparator + '[0-9]+)?$'), 40243 thousandsReplacer = new RegExp(thousandsSeparator, 'g'); 40244 40245 if (!testRegexp.test(value)) { 40246 return false; 40247 } 40248 40249 // Replace thousands separator with blank 40250 if (thousandsSeparator) { 40251 value = value.replace(thousandsReplacer, ''); 40252 } 40253 // Replace decimal separator with a dot 40254 if (decimalSeparator) { 40255 value = value.replace(decimalSeparator, '.'); 40256 } 40257 40258 return !isNaN(parseFloat(value)) && isFinite(value); 40259 } 40260 }; 40261}(jQuery)); 40262;(function($) { 40263 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40264 'en_US': { 40265 promise: { 40266 'default': 'Please enter a valid value' 40267 } 40268 } 40269 }); 40270 40271 FormValidation.Validator.promise = { 40272 priority: 999, 40273 40274 html5Attributes: { 40275 message: 'message', 40276 promise: 'promise' 40277 }, 40278 40279 /** 40280 * Return result from a jQuery's Deferred object 40281 * 40282 * @param {FormValidation.Base} validator The validator plugin instance 40283 * @param {jQuery} $field Field element 40284 * @param {Object} options Can consist of the following keys: 40285 * - promise: The method that passes parameters: 40286 * promise: function(fieldValue, validator, $field) { 40287 * // fieldValue is the value of field 40288 * // validator is instance of FormValidation.Base 40289 * // $field is the field element 40290 * 40291 * var dfd = new $.Deferred(); 40292 * 40293 * // Do something ... 40294 * 40295 * // Resolve when particular task is done 40296 * dfd.resolve({ 40297 * valid: true or false, // Required 40298 * message: 'Other message', // Optional 40299 * key: value // You can attach more data to reuse later 40300 * }); 40301 * 40302 * // You can reject if there's error 40303 * dfd.reject({ 40304 * message: 'Other message', // Optional 40305 * key: value // You can attach more data to reuse later 40306 * }); 40307 * 40308 * return dfd.promise(); 40309 * } 40310 * - message: The invalid message 40311 * @returns {Deferred} 40312 */ 40313 validate: function(validator, $field, options, validatorName) { 40314 var value = validator.getFieldValue($field, validatorName), 40315 dfd = new $.Deferred(), 40316 promise = FormValidation.Helper.call(options.promise, [value, validator, $field]); 40317 40318 promise 40319 .done(function(result) { 40320 dfd.resolve($field, validatorName, result); 40321 }) 40322 .fail(function(result) { 40323 result = result || {}; 40324 result.valid = false;
40325 dfd.resolve($field, validatorName, result); 40326 }); 40327 40328 return dfd; 40329 } 40330 }; 40331}(jQuery)); 40332;(function($) { 40333 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40334 'en_US': { 40335 regexp: { 40336 'default': 'Please enter a value matching the pattern' 40337 } 40338 } 40339 }); 40340 40341 FormValidation.Validator.regexp = { 40342 html5Attributes: { 40343 message: 'message', 40344 flags: 'flags', 40345 regexp: 'regexp' 40346 }, 40347 40348 enableByHtml5: function($field) { 40349 var pattern = $field.attr('pattern'); 40350 if (pattern) { 40351 return { 40352 regexp: pattern 40353 }; 40354 } 40355 40356 return false; 40357 }, 40358 40359 /** 40360 * Check if the element value matches given regular expression 40361 * 40362 * @param {FormValidation.Base} validator The validator plugin instance 40363 * @param {jQuery} $field Field element 40364 * @param {Object} options Consists of the following key: 40365 * - regexp: The regular expression you need to check 40366 * - flags: If specified, flags can have any combination of Javascript regular expression flags such as: 40367 * g: global match 40368 * i: ignore case 40369 * m: multiple line 40370 * @returns {Boolean} 40371 */ 40372 validate: function(validator, $field, options, validatorName) { 40373 var value = validator.getFieldValue($field, validatorName); 40374 if (value === '') { 40375 return true; 40376 } 40377 40378 var regexp = ('string' === typeof options.regexp) 40379 ? (options.flags ? new RegExp(options.regexp, options.flags) : new RegExp(options.regexp)) 40380 : options.regexp; 40381 return regexp.test(value); 40382 } 40383 }; 40384}(jQuery)); 40385;(function($) { 40386 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40387 'en_US': { 40388 remote: { 40389 'default': 'Please enter a valid value' 40390 } 40391 } 40392 }); 40393 40394 FormValidation.Validator.remote = { 40395 priority: 1000, 40396 40397 html5Attributes: { 40398 async: 'async', 40399 crossdomain: 'crossDomain', 40400 data: 'data', 40401 datatype: 'dataType', 40402 delay: 'delay', 40403 message: 'message', 40404 name: 'name', 40405 type: 'type', 40406 url: 'url', 40407 validkey: 'validKey' 40408 }, 40409 40410 /** 40411 * Destroy the timer when destroying the FormValidation (using validator.destroy() method) 40412 */ 40413 destroy: function(validator, $field, options, validatorName) { 40414 var ns = validator.getNamespace(), 40415 timer = $field.data(ns + '.' + validatorName + '.timer'); 40416 if (timer) { 40417 clearTimeout(timer); 40418 $field.removeData(ns + '.' + validatorName + '.timer'); 40419 } 40420 }, 40421 40422 /** 40423 * Request a remote server to check the input value 40424 * 40425 * @param {FormValidation.Base} validator Plugin instance 40426 * @param {jQuery} $field Field element 40427 * @param {Object} options Can consist of the following keys: 40428 * - async {Boolean} [optional] Indicate the Ajax request will be asynchronous or not. It's true by default 40429 * - crossDomain {Boolean} [optional] 40430 * - data {Object|Function} [optional]: By default, it will take the value 40431 * { 40432 * <fieldName>: <fieldValue> 40433 * } 40434 * - dataType {String} [optional]: The type of data which is returned by remote server. 40435 * It can be json (default), text, script 40436 * - delay {Number} [optional] 40437 * - headers {String[]} [optional]: Additional headers 40438 * - message {String} [optional]: The invalid message 40439 * - name {String} [optional]: Override the field name for the request. 40440 * - type {String} [optional] Can be GET or POST (default) 40441 * - url {String|Function} 40442 * - validKey {String} [optional]: The valid key. It's "valid" by default 40443 * This is useful when connecting to external remote server or APIs provided by 3rd parties 40444 * @returns {Deferred} 40445 */
40446 validate: function(validator, $field, options, validatorName) { 40447 var ns = validator.getNamespace(), 40448 value = validator.getFieldValue($field, validatorName), 40449 dfd = new $.Deferred(); 40450 if (value === '') { 40451 dfd.resolve($field, validatorName, { valid: true }); 40452 return dfd; 40453 } 40454 var name = $field.attr('data-' + ns + '-field'), 40455 data = options.data || {}, 40456 url = options.url, 40457 validKey = options.validKey || 'valid'; 40458 40459 // Support dynamic data 40460 if ('function' === typeof data) { 40461 data = data.call(this, validator, $field, value); 40462 } 40463 40464 // Parse string data from HTML5 attribute 40465 if ('string' === typeof data) { 40466 data = JSON.parse(data); 40467 } 40468 40469 // Support dynamic url 40470 if ('function' === typeof url) { 40471 url = url.call(this, validator, $field, value); 40472 } 40473 40474 data[options.name || name] = value; 40475 40476 var ajaxOptions = { 40477 async: options.async === null || options.async === true || options.async === 'true', 40478 data: data, 40479 dataType: options.dataType || 'json', 40480 headers: options.headers || {}, 40481 type: options.type || 'GET', 40482 url: url 40483 }; 40484 if (options.crossDomain !== null) { 40485 ajaxOptions.crossDomain = (options.crossDomain === true || options.crossDomain === 'true'); 40486 } 40487 40488 function runCallback() { 40489 var xhr = $.ajax(ajaxOptions); 40490 40491 xhr 40492 .success(function(response) { 40493 response.valid = (response[validKey] === true || response[validKey] === 'true') 40494 ? true 40495 : (response[validKey] === false || response[validKey] === 'false' ? false : null); 40496 dfd.resolve($field, validatorName, response); 40497 }) 40498 .error(function(response) { 40499 dfd.resolve($field, validatorName, { 40500 valid: false 40501 }); 40502 }); 40503 40504 dfd.fail(function() { 40505 xhr.abort(); 40506 }); 40507 40508 return dfd; 40509 } 40510 40511 if (options.delay) { 40512 // Since the form might have multiple fields with the same name 40513 // I have to attach the timer to the field element 40514 if ($field.data(ns + '.' + validatorName + '.timer')) { 40515 clearTimeout($field.data(ns + '.' + validatorName + '.timer')); 40516 } 40517 40518 $field.data(ns + '.' + validatorName + '.timer', setTimeout(runCallback, options.delay)); 40519 return dfd; 40520 } else { 40521 return runCallback(); 40522 } 40523 } 40524 }; 40525}(jQuery)); 40526;(function($) { 40527 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40528 'en_US': { 40529 stringLength: { 40530 'default': 'Please enter a value with valid length', 40531 less: 'Please enter less than %s characters', 40532 more: 'Please enter more than %s characters', 40533 between: 'Please enter value between %s and %s characters long' 40534 } 40535 } 40536 }); 40537 40538 FormValidation.Validator.stringLength = { 40539 html5Attributes: { 40540 message: 'message', 40541 min: 'min', 40542 max: 'max', 40543 trim: 'trim', 40544 utf8bytes: 'utf8Bytes' 40545 }, 40546 40547 enableByHtml5: function($field) { 40548 var options = {}, 40549 maxLength = $field.attr('maxlength'), 40550 minLength = $field.attr('minlength'); 40551 if (maxLength) { 40552 options.max = parseInt(maxLength, 10); 40553 } 40554 if (minLength) { 40555 options.min = parseInt(minLength, 10); 40556 } 40557 40558 return $.isEmptyObject(options) ? false : options; 40559 }, 40560 40561 /** 40562 * Check if the length of element value is less or more than given number 40563 * 40564 * @param {FormValidation.Base} validator The validator plugin instance 40565 * @param {jQuery} $field Field element 40566 * @param {Object} options Consists of following keys: 40567 * - min 40568 * - max 40569 * At least one of two keys is required
40570 * The min, max keys define the number which the field value compares to. min, max can be 40571 * - A number 40572 * - Name of field which its value defines the number 40573 * - Name of callback function that returns the number 40574 * - A callback function that returns the number 40575 * 40576 * - message: The invalid message 40577 * - trim: Indicate the length will be calculated after trimming the value or not. It is false, by default 40578 * - utf8bytes: Evaluate string length in UTF-8 bytes, default to false 40579 * @returns {Object} 40580 */ 40581 validate: function(validator, $field, options, validatorName) { 40582 var value = validator.getFieldValue($field, validatorName); 40583 if (options.trim === true || options.trim === 'true') { 40584 value = $.trim(value); 40585 } 40586 40587 if (value === '') { 40588 return true; 40589 } 40590 40591 var locale = validator.getLocale(), 40592 min = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min), 40593 max = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max), 40594 // Credit to http://stackoverflow.com/a/23329386 (@lovasoa) for UTF-8 byte length code 40595 utf8Length = function(str) { 40596 var s = str.length; 40597 for (var i = str.length - 1; i >= 0; i--) { 40598 var code = str.charCodeAt(i); 40599 if (code > 0x7f && code <= 0x7ff) { 40600 s++; 40601 } else if (code > 0x7ff && code <= 0xffff) { 40602 s += 2; 40603 } 40604 if (code >= 0xDC00 && code <= 0xDFFF) { 40605 i--; 40606 } 40607 } 40608 return s; 40609 }, 40610 length = options.utf8Bytes ? utf8Length(value) : value.length, 40611 isValid = true, 40612 message = options.message || FormValidation.I18n[locale].stringLength['default']; 40613 40614 if ((min && length < parseInt(min, 10)) || (max && length > parseInt(max, 10))) { 40615 isValid = false; 40616 } 40617 40618 switch (true) { 40619 case (!!min && !!max): 40620 message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.between, [parseInt(min, 10), parseInt(max, 10)]); 40621 break; 40622 40623 case (!!min): 40624 message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.more, parseInt(min, 10) - 1); 40625 break; 40626 40627 case (!!max): 40628 message = FormValidation.Helper.format(options.message || FormValidation.I18n[locale].stringLength.less, parseInt(max, 10) + 1); 40629 break; 40630 40631 default: 40632 break; 40633 } 40634 40635 return { 40636 valid: isValid, 40637 message: message 40638 }; 40639 } 40640 }; 40641}(jQuery)); 40642;(function($) { 40643 FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, { 40644 'en_US': { 40645 uri: { 40646 'default': 'Please enter a valid URI' 40647 } 40648 } 40649 }); 40650 40651 FormValidation.Validator.uri = { 40652 html5Attributes: { 40653 message: 'message', 40654 allowlocal: 'allowLocal', 40655 allowemptyprotocol: 'allowEmptyProtocol', 40656 protocol: 'protocol' 40657 }, 40658 40659 enableByHtml5: function($field) { 40660 return ('url' === $field.attr('type')); 40661 }, 40662 40663 /** 40664 * Return true if the input value is a valid URL 40665 * 40666 * @param {FormValidation.Base} validator The validator plugin instance 40667 * @param {jQuery} $field Field element 40668 * @param {Object} options 40669 * - message: The error message 40670 * - allowLocal: Allow the private and local network IP. Default to false 40671 * - allowEmptyProtocol: Allow the URI without protocol. Default to false 40672 * - protocol: The protocols, separated by a comma. Default to "http, https, ftp" 40673 * @returns {Boolean} 40674 */
40675 validate: function(validator, $field, options, validatorName) { 40676 var value = validator.getFieldValue($field, validatorName); 40677 if (value === '') { 40678 return true; 40679 } 40680 40681 // Credit to https://gist.github.com/dperini/729294 40682 // 40683 // Regular Expression for URL validation 40684 // 40685 // Author: Diego Perini 40686 // Updated: 2010/12/05 40687 // 40688 // the regular expression composed & commented 40689 // could be easily tweaked for RFC compliance, 40690 // it was expressly modified to fit & satisfy 40691 // these test for an URL shortener: 40692 // 40693 // http://mathiasbynens.be/demo/url-regex 40694 // 40695 // Notes on possible differences from a standard/generic validation: 40696 // 40697 // - utf-8 char class take in consideration the full Unicode range 40698 // - TLDs are mandatory unless `allowLocal` is true 40699 // - protocols have been restricted to ftp, http and https only as requested 40700 // 40701 // Changes: 40702 // 40703 // - IP address dotted notation validation, range: 1.0.0.0 - 223.255.255.255 40704 // first and last IP address of each class is considered invali
40704d 40705 // (since they are broadcast/network addresses) 40706 // 40707 // - Added exclusion of private, reserved and/or local networks ranges 40708 // unless `allowLocal` is true 40709 // 40710 // - Added possibility of choosing a custom protocol 40711 // 40712 // - Add option to validate without protocol 40713 // 40714 var allowLocal = options.allowLocal === true || options.allowLocal === 'true', 40715 allowEmptyProtocol = options.allowEmptyProtocol === true || options.allowEmptyProtocol === 'true', 40716 protocol = (options.protocol || 'http, https, ftp').split(',').join('|').replace(/\s/g, ''), 40717 urlExp = new RegExp( 40718 "^" + 40719 // protocol identifier 40720 "(?:(?:" + protocol + ")://)" + 40721 // allow empty protocol 40722 (allowEmptyProtocol ? '?' : '') + 40723 // user:pass authentication 40724 "(?:\\S+(?::\\S*)?@)?" + 40725 "(?:" + 40726 // IP address exclusion 40727 // private & local networks 40728 (allowLocal 40729 ? '' 40730 : ("(?!(?:10|127)(?:\\.\\d{1,3}){3})" + 40731 "(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" + 40732 "(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})")) + 40733 // IP address dotted notation octets 40734 // excludes loopback network 0.0.0.0 40735 // excludes reserved space >= 224.0.0.0 40736 // excludes network & broadcast addresses 40737 // (first & last IP address of each class) 40738 "(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" + 40739 "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" + 40740 "(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + 40741 "|" + 40742 // host name 40743 "(?:(?:[a-z\\u00a1-\\uffff0-9]-?)*[a-z\\u00a1-\\uffff0-9]+)" + 40744 // domain name 40745 "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-?)*[a-z\\u00a1-\\uffff0-9])*" + 40746 // TLD identifier 40747 "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" + 40748 // Allow intranet sites (no TLD) if `allowLocal` is true 40749 (allowLocal ? '?' : '') + 40750 ")" + 40751 // port number 40752 "(?::\\d{2,5})?" + 40753 // resource path 40754 "(?:/[^\\s]*)?" + 40755 "$", "i" 40756 ); 40757 40758 return urlExp.test(value); 40759 } 40760 }; 40761}(jQuery)); 40762 40763/** 40764 * FormValidation (http://formvalidation.io) 40765 * The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks 40766 * 40767 * @author https://twitter.com/formvalidation 40768 * @copyright (c) 2013 - 2016 Nguyen Huu Phuoc 40769 * @license http://formvalidation.io/license/ 40770 */ 40771 40772/** 40773 * This class supports validating Bootstrap 4 alpha form (http://v4-alpha.getbootstrap.com/) 40774 */ 40775(function($) { 40776 FormValidation.Framework.Bootstrap4 = function(element, options, namespace) { 40777 options = $.extend(true, { 40778 button: { 40779 selector: '[type="submit"]:not([formnovalidate])', 40780 // The class of disabled button 40781 disabled: 'disabled' 40782 }, 40783 err: { 40784 // http://v4-alpha.getbootstrap.com/components/forms/#validation 40785 clazz: 'form-control-feedback', 40786 parent: '^(.*)(col|offset)-(xs|sm|md|lg)-[0-9]+(.*)$' 40787 }, 40788 // - Use FontAwesome icons: 40789 // icon: { 40790 // valid: 'fa fa-check', 40791 // invalid: 'fa fa-times', 40792 // validating: 'fa fa-refresh', 40793 // feedback: 'form-control-feedback' 40794 // } 40795 icon: { 40796 valid: null, 40797 invalid: null, 40798 validating: null, 40799 feedback: 'fv-control-feedback' 40800 }, 40801 row: { 40802 // By default, each field is placed inside the <div class="form-group"></div> 40803 // http://v4-alpha.getbootstrap.com/components/forms/#form-groups 40804 selector: '.form-group', 40805 valid: 'has-success', 40806 invalid: 'has-warning', 40807 feedback: 'fv-has-feedback' 40808 } 40809 }, options); 40810 40811 FormValidation.Base.apply(this, [element, options, namespace]); 40812 }; 40813 40814 FormValidation.Framework.Bootstrap4.prototype = $.extend({}, FormValidation.Base.prototype, { 40815 /** 40816 * Specific framework might need to adjust the icon position 40817 * 40818 * @param {jQuery} $field The field element 40819 * @param {jQuery} $icon The icon element 40820 */ 40821 _fixIcon: function($field, $icon) { 40822 var ns = this._namespace, 40823 type = $field.attr('type'), 40824 field = $field.attr('data-' + ns + '-field'), 40825 row = this.options.fields[field].row || this.options.row.selector, 40826 $parent = $field.closest(row); 40827 40828 // Place it after the container of checkbox/radio 40829 // so when clicking the icon, it doesn't effect to the checkbox/radio element
40830 if ('checkbox' === type || 'radio' === type) { 40831 var $fieldParent = $field.parent(); 40832 if ($fieldParent.hasClass('form-check')) { 40833 $icon.insertAfter($fieldParent); 40834 } else if ($fieldParent.parent().hasClass('form-check')) { 40835 $icon.insertAfter($fieldParent.parent()); 40836 } 40837 } 40838 40839 // Fix feedback icons in input-group 40840 if ($parent.find('.input-group').length !== 0) { 40841 $icon.addClass('fv-bootstrap-icon-input-group') 40842 .insertAfter($parent.find('.input-group').eq(0)); 40843 } 40844 }, 40845 40846 /** 40847 * Create a tooltip or popover 40848 * It will be shown when focusing on the field 40849 * 40850 * @param {jQuery} $field The field element 40851 * @param {String} message The message 40852 * @param {String} type Can be 'tooltip' or 'popover' 40853 */ 40854 _createTooltip: function($field, message, type) { 40855 var ns = this._namespace, 40856 $icon = $field.data(ns + '.icon'); 40857 if ($icon) { 40858 switch (type) { 40859 case 'popover': 40860 $icon 40861 .css({ 40862 'cursor': 'pointer', 40863 'pointer-events': 'auto' 40864 }) 40865 .popover('destroy') 40866 .popover({ 40867 container: 'body', 40868 content: message, 40869 html: true, 40870 placement: 'top', 40871 trigger: 'hover click' 40872 }); 40873 break; 40874 40875 case 'tooltip': 40876 /* falls through */ 40877 default: 40878 $icon 40879 .css({ 40880 'cursor': 'pointer', 40881 'pointer-events': 'auto' 40882 }) 40883 .tooltip('dispose') 40884 .tooltip({ 40885 container: 'body', 40886 html: true, 40887 placement: 'top', 40888 title: message 40889 }); 40890 break; 40891 } 40892 } 40893 }, 40894 40895 /** 40896 * Destroy the tooltip or popover 40897 * 40898 * @param {jQuery} $field The field element 40899 * @param {String} type Can be 'tooltip' or 'popover' 40900 */ 40901 _destroyTooltip: function($field, type) { 40902 var ns = this._namespace, 40903 $icon = $field.data(ns + '.icon'); 40904 if ($icon) { 40905 switch (type) { 40906 case 'popover': 40907 $icon 40908 .css({ 40909 'cursor': '', 40910 'pointer-events': 'none' 40911 }) 40912 .popover('destroy'); 40913 break; 40914 40915 case 'tooltip': 40916 /* falls through */ 40917 default: 40918 $icon 40919 .css({ 40920 'cursor': '', 40921 'pointer-events': 'none' 40922 }) 40923 .tooltip('dispose'); 40924 break; 40925 } 40926 } 40927 }, 40928 40929 /** 40930 * Hide a tooltip or popover 40931 * 40932 * @param {jQuery} $field The field element 40933 * @param {String} type Can be 'tooltip' or 'popover' 40934 */ 40935 _hideTooltip: function($field, type) { 40936 var ns = this._namespace, 40937 $icon = $field.data(ns + '.icon'); 40938 if ($icon) { 40939 switch (type) { 40940 case 'popover': 40941 $icon.popover('hide'); 40942 break; 40943 40944 case 'tooltip': 40945 /* falls through */ 40946 default: 40947 $icon.tooltip('hide'); 40948 break; 40949 } 40950 } 40951 }, 40952 40953 /** 40954 * Show a tooltip or popover 40955 * 40956 * @param {jQuery} $field The field element 40957 * @param {String} type Can be 'tooltip' or 'popover' 40958 */ 40959 _showTooltip: function($field, type) { 40960 var ns = this._namespace, 40961 $icon = $field.data(ns + '.icon'); 40962 if ($icon) { 40963 switch (type) { 40964 case 'popover': 40965 $icon.popover('show'); 40966 break; 40967 40968 case 'tooltip': 40969 /* falls through */ 40970 default: 40971 $icon.tooltip('show'); 40972 break; 40973 } 40974 } 40975 } 40976 }); 40977}(jQuery)); 40978 40979(function($) { 40980 /** 40981 * Default English package. It's included in the dist, so you do NOT need to include it to your head tag 40982 * The only reason I put it here is that you can clone it, and translate it into your language 40983 */ 40984 FormValidation.I18n = $.extend(true, FormValidation.I18n, { 40985 'en_US': { 40986 base64: { 40987 'default': 'Please enter a valid base 64 encoded' 40988 }, 40989 between: { 40990 'default': 'Please enter a value between %s and %s', 40991 notInclusive: 'Please enter a value between %s and %s strictly' 40992 }, 40993 bic: { 40994 'default': 'Please enter a valid BIC number' 40995 }, 40996 callback: { 40997 'default': 'Please enter a valid value' 40998 }, 40999 choice: { 41000 'default': 'Please enter a valid value', 41001 less: 'Please choose %s options at minimum', 41002 more: 'Please choose %s options at maximum', 41003 between: 'Please choose %s - %s options' 41004 }, 41005 color: { 41006 'default': 'Please enter a valid color' 41007 }, 41008 creditCard: { 41009 'default': 'Please enter a valid credit card number' 41010 }, 41011 cusip: { 41012 'default': 'Please enter a valid CUSIP number' 41013 }, 41014 cvv: { 41015 'default': 'Please enter a valid CVV number' 41016 }, 41017 date: { 41018 'default': 'Please enter a valid date', 41019 min: 'Please enter a date after %s', 41020 max: 'Please enter a date before %s', 41021 range: 'Please enter a date in the range %s - %s' 41022 }, 41023 different: { 41024 'default': 'Please enter a different value' 41025 }, 41026 digits: { 41027 'default': 'Please enter only digits' 41028 }, 41029 ean: { 41030 'default': 'Please enter a valid EAN number' 41031 }, 41032 ein: { 41033 'default': 'Please enter a valid EIN number' 41034 }, 41035 emailAddress: { 41036 'default': 'Please enter a valid email address' 41037 }, 41038 file: { 41039 'default': 'Please choose a valid file' 41040 }, 41041 greaterThan: { 41042 'default': 'Please enter a value greater than or equal to %s', 41043 notInclusive: 'Please enter a value greater than %s' 41044 }, 41045 grid: { 41046 'default': 'Please enter a valid GRId number' 41047 }, 41048 hex: { 41049 'default': 'Please enter a valid hexadecimal number' 41050 }, 41051 iban: { 41052 'default': 'Please enter a valid IBAN number', 41053 country: 'Please enter a valid IBAN number in %s', 41054 countries: { 41055 AD: 'Andorra', 41056 AE: 'United Arab Emirates', 41057 AL: 'Albania', 41058 AO: 'Angola', 41059 AT: 'Austria', 41060 AZ: 'Azerbaijan', 41061 BA: 'Bosnia and Herzegovina', 41062 BE: 'Belgium', 41063 BF: 'Burkina Faso', 41064 BG: 'Bulgaria', 41065 BH: 'Bahrain', 41066 BI: 'Burundi', 41067 BJ: 'Benin', 41068 BR: 'Brazil', 41069 CH: 'Switzerland', 41070 CI: 'Ivory Coast', 41071 CM: 'Cameroon', 41072 CR: 'Costa Rica', 41073 CV: 'Cape Verde', 41074 CY: 'Cyprus', 41075 CZ: 'Czech Republic', 41076 DE: 'Germany', 41077 DK: 'Denmark', 41078 DO: 'Dominican Republic', 41079 DZ: 'Algeria', 41080 EE: 'Estonia', 41081 ES: 'Spain', 41082 FI: 'Finland', 41083 FO: 'Faroe Islands', 41084 FR: 'France', 41085 GB: 'United Kingdom', 41086 GE: 'Georgia', 41087 GI: 'Gibraltar', 41088 GL: 'Greenland', 41089 GR: 'Greece', 41090 GT: 'Guatemala', 41091 HR: 'Croatia', 41092 HU: 'Hungary', 41093 IE: 'Ireland', 41094 IL: 'Israel', 41095 IR: 'Iran', 41096 IS: 'Iceland', 41097 IT: 'Italy', 41098 JO: 'Jordan', 41099 KW: 'Kuwait',
41100 KZ: 'Kazakhstan', 41101 LB: 'Lebanon', 41102 LI: 'Liechtenstein', 41103 LT: 'Lithuania', 41104 LU: 'Luxembourg', 41105 LV: 'Latvia', 41106 MC: 'Monaco', 41107 MD: 'Moldova', 41108 ME: 'Montenegro', 41109 MG: 'Madagascar', 41110 MK: 'Macedonia', 41111 ML: 'Mali', 41112 MR: 'Mauritania', 41113 MT: 'Malta', 41114 MU: 'Mauritius', 41115 MZ: 'Mozambique', 41116 NL: 'Netherlands', 41117 NO: 'Norway', 41118 PK: 'Pakistan', 41119 PL: 'Poland', 41120 PS: 'Palestine', 41121 PT: 'Portugal', 41122 QA: 'Qatar', 41123 RO: 'Romania', 41124 RS: 'Serbia', 41125 SA: 'Saudi Arabia', 41126 SE: 'Sweden', 41127 SI: 'Slovenia', 41128 SK: 'Slovakia', 41129 SM: 'San Marino', 41130 SN: 'Senegal', 41131 TL: 'East Timor', 41132 TN: 'Tunisia', 41133 TR: 'Turkey', 41134 VG: 'Virgin Islands, British', 41135 XK: 'Republic of Kosovo' 41136 } 41137 }, 41138 id: { 41139 'default': 'Please enter a valid identification number', 41140 country: 'Please enter a valid identification number in %s', 41141 countries: { 41142 BA: 'Bosnia and Herzegovina', 41143 BG: 'Bulgaria', 41144 BR: 'Brazil', 41145 CH: 'Switzerland', 41146 CL: 'Chile', 41147 CN: 'China', 41148 CZ: 'Czech Republic', 41149 DK: 'Denmark', 41150 EE: 'Estonia', 41151 ES: 'Spain', 41152 FI: 'Finland', 41153 HR: 'Croatia', 41154 IE: 'Ireland', 41155 IS: 'Iceland', 41156 LT: 'Lithuania', 41157 LV: 'Latvia', 41158 ME: 'Montenegro', 41159 MK: 'Macedonia', 41160 NL: 'Netherlands', 41161 PL: 'Poland', 41162 RO: 'Romania', 41163 RS: 'Serbia', 41164 SE: 'Sweden', 41165 SI: 'Slovenia', 41166 SK: 'Slovakia', 41167 SM: 'San Marino', 41168 TH: 'Thailand', 41169 TR: 'Turkey', 41170 ZA: 'South Africa' 41171 } 41172 }, 41173 identical: { 41174 'default': 'Please enter the same value' 41175 }, 41176 imei: { 41177 'default': 'Please enter a valid IMEI number' 41178 }, 41179 imo: { 41180 'default': 'Please enter a valid IMO number' 41181 }, 41182 integer: { 41183 'default': 'Please enter a valid number' 41184 }, 41185 ip: { 41186 'default': 'Please enter a valid IP address', 41187 ipv4: 'Please enter a valid IPv4 address', 41188 ipv6: 'Please enter a valid IPv6 address' 41189 }, 41190 isbn: { 41191 'default': 'Please enter a valid ISBN number' 41192 }, 41193 isin: { 41194 'default': 'Please enter a valid ISIN number' 41195 }, 41196 ismn: { 41197 'default': 'Please enter a valid ISMN number' 41198 }, 41199 issn: { 41200 'default': 'Please enter a valid ISSN number' 41201 }, 41202 lessThan: { 41203 'default': 'Please enter a value less than or equal to %s', 41204 notInclusive: 'Please enter a value less than %s' 41205 }, 41206 mac: { 41207 'default': 'Please enter a valid MAC address' 41208 }, 41209 meid: { 41210 'default': 'Please enter a valid MEID number' 41211 }, 41212 notEmpty: { 41213 'default': 'Please enter a value' 41214 }, 41215 numeric: { 41216 'default': 'Please enter a valid float number' 41217 }, 41218 phone: { 41219 'default': 'Please enter a valid phone number', 41220 country: 'Please enter a valid phone number in %s', 41221 countries: { 41222 AE: 'United Arab Emirates', 41223 BG: 'Bulgaria', 41224 BR: 'Brazil', 41225 CN: 'China', 41226 CZ: 'Czech Republic', 41227 DE: 'Germany', 41228 DK: 'Denmark', 41229 ES: 'Spain', 41230 FR: 'France', 41231 GB: 'United Kingdom', 41232 IN: 'India', 41233 MA: 'Morocco', 41234 NL: 'Netherlands', 41235 PK: 'Pakistan', 41236 RO: 'Romania', 41237 RU: 'Russia', 41238 SK: 'Slovakia', 41239 TH: 'Thailand', 41240 US: 'USA', 41241 VE: 'Venezuela' 41242 } 41243 }, 41244 promise: { 41245 'default': 'Please enter a valid value' 41246 }, 41247 regexp: { 41248 'default': 'Please enter a value matching the pattern' 41249 }, 41250 remote: { 41251 'default': 'Please enter a valid value' 41252 }, 41253 rtn: { 41254 'default': 'Please enter a valid RTN number' 41255 }, 41256 sedol: { 41257 'default': 'Please enter a valid SEDOL number' 41258 }, 41259 siren: { 41260 'default': 'Please enter a valid SIREN number' 41261 }, 41262 siret: { 41263 'default': 'Please enter a valid SIRET number' 41264 }, 41265 step: { 41266 'default': 'Please enter a valid step of %s' 41267 },
41268 stringCase: { 41269 'default': 'Please enter only lowercase characters', 41270 upper: 'Please enter only uppercase characters' 41271 }, 41272 stringLength: { 41273 'default': 'Please enter a value with valid length', 41274 less: 'Please enter less than %s characters', 41275 more: 'Please enter more than %s characters', 41276 between: 'Please enter value between %s and %s characters long' 41277 }, 41278 uri: { 41279 'default': 'Please enter a valid URI' 41280 }, 41281 uuid: { 41282 'default': 'Please enter a valid UUID number', 41283 version: 'Please enter a valid UUID version %s number' 41284 }, 41285 vat: { 41286 'default': 'Please enter a valid VAT number', 41287 country: 'Please enter a valid VAT number in %s', 41288 countries: { 41289 AT: 'Austria', 41290 BE: 'Belgium', 41291 BG: 'Bulgaria', 41292 BR: 'Brazil', 41293 CH: 'Switzerland', 41294 CY: 'Cyprus', 41295 CZ: 'Czech Republic', 41296 DE: 'Germany', 41297 DK: 'Denmark', 41298 EE: 'Estonia', 41299 ES: 'Spain', 41300 FI: 'Finland', 41301 FR: 'France', 41302 GB: 'United Kingdom', 41303 GR: 'Greece', 41304 EL: 'Greece', 41305 HU: 'Hungary', 41306 HR: 'Croatia', 41307 IE: 'Ireland', 41308 IS: 'Iceland', 41309 IT: 'Italy', 41310 LT: 'Lithuania', 41311 LU: 'Luxembourg', 41312 LV: 'Latvia', 41313 MT: 'Malta', 41314 NL: 'Netherlands', 41315 NO: 'Norway', 41316 PL: 'Poland', 41317 PT: 'Portugal', 41318 RO: 'Romania', 41319 RU: 'Russia', 41320 RS: 'Serbia', 41321 SE: 'Sweden', 41322 SI: 'Slovenia', 41323 SK: 'Slovakia', 41324 VE: 'Venezuela', 41325 ZA: 'South Africa' 41326 } 41327 }, 41328 vin: { 41329 'default': 'Please enter a valid VIN number' 41330 }, 41331 zipCode: { 41332 'default': 'Please enter a valid postal code', 41333 country: 'Please enter a valid postal code in %s', 41334 countries: { 41335 AT: 'Austria', 41336 BG: 'Bulgaria', 41337 BR: 'Brazil', 41338 CA: 'Canada', 41339 CH: 'Switzerland', 41340 CZ: 'Czech Republic', 41341 DE: 'Germany', 41342 DK: 'Denmark', 41343 ES: 'Spain', 41344 FR: 'France', 41345 GB: 'United Kingdom', 41346 IE: 'Ireland', 41347 IN: 'India', 41348 IT: 'Italy', 41349 MA: 'Morocco', 41350 NL: 'Netherlands', 41351 PL: 'Poland', 41352 PT: 'Portugal', 41353 RO: 'Romania', 41354 RU: 'Russia', 41355 SE: 'Sweden', 41356 SG: 'Singapore', 41357 SK: 'Slovakia', 41358 US: 'USA' 41359 } 41360 } 41361 } 41362 }); 41363}(jQuery)); 41364 41365function skCookieConsent(options) { 41366 function renderTemplate(template, params) { 41367 var html = template; 41368 41369 $.each(params, function (key, value) { 41370 html = html.replace('%' + key + '%', value); 41371 }); 41372 41373 return html; 41374 } 41375 41376 function createPopup() { 41377 var infoLinkHtml = renderTemplate(settings.infoLinkTemplate, { 41378 'url': settings.infoLinkUrl, 41379 'label': settings.infoLinkLabel 41380 }); 41381 41382 var acceptButtonHtml = renderTemplate(settings.acceptButtonTemplate, { 41383 'label': settings.acceptButtonLabel 41384 });
41385 var refuseButtonHtml = renderTemplate(settings.refuseButtonTemplate, { 41386 'label': settings.refuseButtonLabel 41387 }); 41388 var closeButtonHtml = renderTemplate(settings.closeButtonTemplate, { 41389 'label': settings.closeButtonLabel 41390 }); 41391 41392 var popupHtml = renderTemplate(settings.popupTemplate, { 41393 'message': settings.message, 41394 'infoLink': infoLinkHtml, 41395 'acceptButton': acceptButtonHtml, 41396 'refuseButton': refuseButtonHtml, 41397 'closeButton': closeButtonHtml 41398 }); 41399 41400 var wrapperHtml = renderTemplate(settings.wrapperTemplate, { 41401 'popup': popupHtml 41402 }); 41403 41404 $wrapper = $(wrapperHtml); 41405 $wrapper.attr('id', 'teha-cookie-consent'); 41406 $('body').append($wrapper); 41407 $wrapper.find('.cookie-consent-accept-button').on('click', onAcceptClick); 41408 $wrapper.find('.cookie-consent-refuse-button').on('click', onRefuseClick); 41409 $wrapper.find('.cookie-consent-close-button').on('click', onCloseButtonClick); 41410 } 41411 41412 function onAcceptClick(e) { 41413 e.preventDefault(); 41414 createConsentCookie(); 41415 triggerCookieConsentEvent(); 41416 closePopup(); 41417 } 41418 41419 function onRefuseClick(e) { 41420 e.preventDefault(); 41421 localStorage.setItem(settings.cookieRefusalName, settings.cookieRefusalValue); 41422 closePopup(); 41423 } 41424 41425 function onCloseButtonClick(e) { 41426 e.preventDefault(); 41427 closePopup(); 41428 } 41429 41430 function triggerCookieConsentEvent() { 41431 log('Triggering event "teha.cookie.consent" on body'); 41432 $('body').trigger('teha.cookie.consent'); 41433 loadHtmlElements(); 41434 } 41435 41436 function loadHtmlElements() { 41437 if (typeof tehaCookieConsentLoad === 'object') { 41438 $.each(tehaCookieConsentLoad, function(index, loader) { 41439 log('Adding cookie consent HTML element: ', loader); 41440 41441 if (typeof loader !== 'object') { 41442 console.error('[CookieConsent] Loader object is not an object: ', loader); 41443 } else { 41444 var valid = true; 41445 41446 if (!loader.hasOwnProperty('id')) { 41447 console.error('[CookieConsent] Loader object has no "id" property: ', loader); 41448 valid = false; 41449 } 41450 41451 if (!loader.hasOwnProperty('html')) { 41452 console.error('[CookieConsent] Loader object has no "html" property: ', loader); 41453 valid = false; 41454 } 41455 41456 if (valid) { 41457 var html = loader.html; 41458 log('Adding HTML element :' + html); 41459 $('#' + loader.id).replaceWith($(html)); 41460 } 41461 } 41462 }) 41463 } 41464 } 41465 41466 function loadersExist() { 41467 return typeof tehaCookieConsentLoad === 'object' && tehaCookieConsentLoad.length > 0; 41468 } 41469 41470 function closePopup() { 41471 $wrapper.fadeOut('fast'); 41472 if (location.hash === '#show-cookie-bar') { 41473 location.hash = '#hide-cookie-bar'; 41474 } 41475 } 41476 41477 function createConsentCookie() { 41478 log('Creating consent cookie'); 41479 setCookie(settings.cookieName, settings.cookieValue, settings.cookieDays); 41480 } 41481 41482 function setCookie(name, value, days) { 41483 var expires = ""; 41484 if (days) { 41485 var date = new Date(); 41486 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 41487 expires = "; expires=" + date.toUTCString(); 41488 } 41489 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 41490 } 41491 41492 function getCookie(name) { 41493 var nameEQ = name + "="; 41494 var ca = document.cookie.split(';'); 41495 for (var i = 0; i < ca.length; i++) { 41496 var c = ca[i]; 41497 while (c.charAt(0) === ' ') c = c.substring(1, c.length); 41498 if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); 41499 } 41500 return null; 41501 } 41502 41503 function init() { 41504 var cookieValue = getCookie(settings.cookieName); 41505 log('Value of consent cookie "' + settings.cookieName + '" is: ', cookieValue); 41506 var storageValue = localStorage.getItem(settings.cookieRefusalName); 41507 log('Value of local storage variable "' + settings.cookieRefusalName + '" is: ', storageValue); 41508 if (cookieValue == settings.cookieValue) { 41509 log('Consent has already been given'); 41510 triggerCookieConsentEvent(); 41511 } else if (storageValue == settings.cookieRefusalValue) { 41512 log('User refused cookies before.'); 41513 } else { 41514 log('Consent has not been given or refused yet. Checked for c
41514ookie value: '+ settings.cookieValue + ' and storage value: ' + settings.cookieRefusalValue) ; 41515 createPopup(); 41516 } 41517 41518 $('a.show-cookie-bar').on('click', function(e){ 41519 e.preventDefault(); 41520 location.hash = 'show-cookie-bar'; 41521 }); 41522 41523 window.onhashchange = function() { 41524 if (location.hash === '#show-cookie-bar') { 41525 log('Show cookie bar again - delete cookie and locale storage and reload page.'); 41526 localStorage.removeItem(settings.cookieRefusalName); 41527 setCookie(settings.cookieName, '', -100); 41528 location.reload(); 41529 } 41530 } 41531 } 41532 41533 function log(message, params) { 41534 if (settings.debug) { 41535 if (typeof params === 'undefined') { 41536 console.log('[CookieConsent] ' + message); 41537 } else { 41538 console.log('[CookieConsent] ' + message, params); 41539 } 41540 } 41541 } 41542 41543 function translate(messageId, fallback) { 41544 var translation = fallback; 41545 41546 if (translator) { 41547 messageId = 'cookie-consent.' + messageId; 41548 41549 var translatedMessage = translator.translate(messageId, 'Teha.Neos.SiteKit'); 41550 41551 if (translatedMessage !== null && translatedMessage !== messageId) { 41552 translation = translatedMessage; 41553 } 41554 } 41555 41556 return translation; 41557 } 41558 41559 var translator = null; 41560 41561 if (typeof SiteKit === 'object' && typeof SiteKit.Translator === 'object') { 41562 translator = SiteKit.Translator; 41563 } 41564 41565 var defaultSettings = { 41566 infoLinkUrl: translate('info-link-url', '/privacy'), 41567 infoLinkLabel: translate('info-link-label', 'Privacy Statement'), 41568 acceptButtonLabel: translate('accept-button-label', 'Enable cookies'), 41569 refuseButtonLabel: translate('refuse-button-label', 'Disable cookies'), 41570 closeButtonLabel: '×', 41571 message: translate('message', 'This website uses cookies to ensure you get the best experience on our website.'), 41572 wrapperTemplate: '<div class="cookie-consent-wrapper">%popup%</div>', 41573 popupTemplate: 41574 '<div class="cookie-consent-popup">' + 41575 ' %closeButton%' + 41576 ' <div class="cookie-consent-message">%message%</div>' + 41577 ' <div class="cookie-consent-info">%infoLink%</div>' + 41578 ' <div class="cookie-consent-accept">%acceptButton% %refuseButton%</div>' + 41579 '</div>', 41580 acceptButtonTemplate: '<button type="button" class="cookie-consent-accept-button">%label%</button>', 41581 refuseButtonTemplate: '<button type="button" class="cookie-consent-refuse-button">%label%</button>', 41582 infoLinkTemplate: '<a target="_blank" href="%url%">%label%</a>', 41583 closeButtonTemplate: '<button class="cookie-consent-close-button">%label%</button>', 41584 41585 cookieName: 'cookie.consent', 41586 cookieValue: 1, 41587 cookieDays: 90, 41588 cookieRefusalName: 'cookie.refusal', 41589 cookieRefusalValue: 1, 41590 debug: window.location.hash.match('debug-site-kit-js') 41591 }; 41592 var settings = $.extend({}, defaultSettings, options); 41593 41594 var $wrapper; 41595 41596 log('Initializing with the following settings: ', settings); 41597 init(); 41598 41599 return this; 41600} 41601 41602(function ($) { 41603 function setCookie(name, value, days) { 41604 var expires = ""; 41605 if (days) { 41606 var date = new Date(); 41607 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 41608 expires = "; expires=" + date.toUTCString(); 41609 } 41610 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 41611 } 41612 41613 function getCookie(name) { 41614 var nameEQ = name + "="; 41615 var ca = document.cookie.split(';'); 41616 for (var i = 0; i < ca.length; i++) { 41617 var c = ca[i]; 41618 while (c.charAt(0) === ' ') c = c.substring(1, c.length); 41619 if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); 41620 } 41621 return null; 41622 } 41623 41624 function showPrivacyDialog(onAccept, settings) {
41625 var $dialog = $('#sk-embed-video-dialog'); 41626 41627 if ($dialog.length === 0) { 41628 var translate = function(messageId, args) { 41629 return SiteKit.Translator.translate(messageId, 'Teha.Neos.SiteKit', args); 41630 }; 41631 41632 var privacyUrl = translate('embed-video.privacy-url'); 41633 41634 var dialogHtml = 41635 '<div class="modal fade" tabindex="-1" role="dialog" id="sk-embed-video-dialog">' + 41636 ' <div class="modal-dialog" role="document">' + 41637 ' <div class="modal-content">' + 41638 ' <div class="modal-header">' + 41639 ' <h5 class="modal-title">' + translate('embed-video.headline') + '</h5>' + 41640 ' <button type="button" class="close" data-dismiss="modal" aria-label="Close">' + 41641 ' <span aria-hidden="true">×</span>' + 41642 ' </button>' + 41643 ' </div>' + 41644 ' <div class="modal-body">' + translate('embed-video.message', { 0: privacyUrl }) + '</div>' + 41645 ' <div class="modal-footer">' + 41646 ' <button type="button" class="btn btn-secondary" data-dismiss="modal">' + translate('embed-video.close') + '</button>' + 41647 ' <button type="button" class="btn btn-primary accept" data-dismiss="modal">' + translate('embed-video.accept') + '</button>' + 41648 ' </div>' + 41649 ' </div>' + 41650 ' </div>' + 41651 '</div>'; 41652 41653 $dialog = $(dialogHtml); 41654 $dialog.appendTo($('body')); 41655 $dialog.modal({ show: false }); 41656 $dialog.find('button.accept').on('click', function() { 41657 setCookie(settings.cookieName, settings.cookieValue, settings.cookieDays); 41658 onAccept(); 41659 }); 41660 } 41661 41662 $dialog.modal('show'); 41663 } 41664 41665 function cookieHasBeenAccepted(settings) { 41666 var cookieValue = getCookie(settings.cookieName); 41667 return cookieValue == settings.cookieValue; 41668 } 41669 41670 $.fn.skEmbedVideo = function (options) { 41671 return this.each(function () { 41672 var $iFrameContainer = $(this).find('.iframe-container'); 41673 var iFrameHtml = $iFrameContainer.attr('data-iframe'); 41674 var $button = $iFrameContainer.find('.play-button'); 41675 41676 if (iFrameHtml) { 41677 var settings = $.extend({}, $.fn.skEmbedVideo.defaults, options); 41678 41679 function loadVideo(autoplay) { 41680 $iFrameContainer.addClass('loading'); 41681 $button.prop('disabled', true); 41682 41683 var html = iFrameHtml; 41684 if (autoplay) { 41685 html = html.replace(/\ssrc="([^"]+)"/, ' src="$1&autoplay=1"'); 41686 } 41687 41688 console.log('skEmbedVideo: Creating iFrame: ', html); 41689 41690 var $iFrame = $(html); 41691 41692 $iFrame.on('load', function() { 41693 $iFrameContainer.removeClass('loading').addClass('loaded'); 41694 }); 41695 41696 $iFrameContainer.append($iFrame); 41697 } 41698 41699 $button.on('click', function() { 41700 if (settings.privacyInfoEnabled && !cookieHasBeenAccepted(settings)) { 41701 showPrivacyDialog(function() { 41702 loadVideo(true); 41703 }, settings); 41704 } else { 41705 loadVideo(true); 41706 } 41707 }); 41708 41709 if (cookieHasBeenAccepted(settings)) { 41710 loadVideo(false); 41711 } 41712 } 41713 }); 41714 }; 41715 41716 $.fn.skEmbedVideo.defaults = { 41717 privacyInfoEnabled: true, 41718 cookieName: 'sk.embed.videos', 41719 cookieValue: 1, 41720 cookieDays: 90 41721 }; 41722}(jQuery)); 41723 41724(function ($) { 41725 var pluginName = 'skFullPage'; 41726 41727 var SkMobileMenu = function ($self, options) { 41728 this.$self = $self; 41729 var me = this; 41730 var settings = $.extend({}, $.fn.skFullPage.defaults, options); 41731 41732 var $controls = null; 41733 var $sections = $self.find(settings.sectionSelector);
41734 var $mainMenu = $(settings.mainMenuSelector); 41735 41736 init(); 41737 41738 function sectionChanged($targetSection) { 41739 var layout = $targetSection.attr('data-layout'); 41740 41741 console.log('Section changed. Changing layout to: ' + layout); 41742 41743 $controls.skChangeLayout($targetSection.attr('data-layout-controls')); 41744 41745 $mainMenu.skChangeLayout($targetSection.attr('data-layout-main-menu')) 41746 .toggleClass('opacity-none', $targetSection.attr('data-hide-main-menu') == '1'); 41747 } 41748 41749 function addCellClass($section) { 41750 var cellClass = $section.attr('data-cell-class'); 41751 if (cellClass != '') { 41752 $section.find('.fp-tableCell').addClass(cellClass); 41753 } 41754 } 41755 41756 function createScrollIndicator($section) { 41757 $('<a/>', { 41758 'class': 'scroll-indicator', 41759 'href': '#' 41760 }).text('Scroll') 41761 .on('click', function (e) { 41762 e.preventDefault(); 41763 $.fn.fullpage.moveTo(2); 41764 }) 41765 .appendTo($section); 41766 } 41767 41768 function initFullPageFrontend() { 41769 $self.fullpage({ 41770 navigation: true, 41771 41772 onLeave: function(fromIndex, toIndex, direction) { 41773 var $fromSection = $(this); 41774 var $toSection = $sections.eq(toIndex - 1); 41775 41776 sectionChanged($toSection); 41777 41778 $self.trigger('section-changed', { 41779 fromIndex: fromIndex, 41780 toIndex: toIndex, 41781 $fromSection: $fromSection, 41782 $toSection: $toSection 41783 }); 41784 }, 41785 41786 afterRender: function() { 41787 console.log('afterRender'); 41788 setTimeout(function() { 41789 $self.addClass('loading-complete'); 41790 $('body').addClass('loading-complete'); 41791 }, 50); 41792 41793 $controls = $('#fp-nav'); 41794 41795 var $sections = $self.find('.fp-section'); 41796 var sectionCount = $sections.length; 41797 41798 $sections.each(function(index) { 41799 var $section = $(this); 41800 41801 if (sectionCount > 1 && index === 0) { 41802 createScrollIndicator($section); 41803 } 41804 41805 addCellClass($section); 41806 }); 41807 } 41808 }); 41809 41810 sectionChanged($sections.first()); 41811 } 41812 41813 function initFullPageBackend() { 41814 console.log('Initializing FullPage in Backend mode'); 41815 $sections 41816 .addClass('fp-section') 41817 .addClass('fp-table') 41818 .find('.full-page-content').wrap('<div class="fp-tableCell"></div>'); 41819 41820 $sections.each(function () { 41821 addCellClass($(this)); 41822 }); 41823 } 41824 41825 function init() { 41826 if ($('body').hasClass('neos-backend')) { 41827 initFullPageBackend(); 41828 } else { 41829 initFullPageFrontend(); 41830 } 41831 } 41832 }; 41833 41834 41835 $.fn.skFullPage = function (option) { 41836 var options = typeof option == "object" && option; 41837 41838 return this.each(function () { 41839 var $this = $(this); 41840 var fullPluginName = 'teha.' + pluginName; 41841 var skFullPage = $this.data(fullPluginName); 41842 41843 if (!skFullPage) { 41844 skFullPage = new SkMobileMenu($this, options); 41845 $this.data(fullPluginName, skFullPage); 41846 } 41847 41848 if (typeof option == 'string') { 41849 if (skFullPage[option]) { 41850 skFullPage[option](); 41851 } else { 41852 $.error('Unknown plugin method: ' + pluginName + '.' + option); 41853 } 41854 } 41855 }); 41856 }; 41857 41858 $.fn.skFullPage.defaults = { 41859 mainMenuSelector: '#main-menu', 41860 sectionSelector: '.section' 41861 }; 41862 41863})(jQuery); 41864 41865(function ($) { 41866 41867 $.fn.skInitForm = function () { 41868 return this.each(function() { 41869 var $form = $(this); 41870 41871 $form.find('select').skStyleSelect(); 41872 41873 $form.find('.placeholder-input.is-required').each(function() { 41874 $(this).find(':input[placeholder]').attr('placeholder', function(i, value) { 41875 return value + ' *'; 41876 }); 41877 41878 var $select = $(this).find('select'); 41879 $select.find('option[value=""]').html(function(i, value) { 41880 return value + ' *'; 41881 }); 41882 $select.skStyleSelect('updateLabel'); 41883 }); 41884 41885 $('body').trigger('sk.init-form', [ $form ]); 41886 }); 41887 }; 41888 41889}(jQuery)); 41890 41891(function ($) { 41892 var pluginName = 'skInvisibleReCaptcha'; 41893 var scriptAdded = false;
41894 41895 window.reCaptchaCallback = function() { 41896 console.log('InvisibleReCaptcha: Submitting after reCAPTCHA using window.reCaptchaSubmit(): ', window.reCaptchaSubmit); 41897 window.reCaptchaSubmit(); 41898 }; 41899 41900 window.reCaptchaSubmit = null; 41901 41902 var InvisibleReCaptcha = function ($self, options) { 41903 this.$self = $self; 41904 var me = this; 41905 41906 var settings = $.extend({}, $.fn.skInvisibleReCaptcha.defaults, options); 41907 41908 if (!scriptAdded) { 41909 $('body').append($('
vendor: 75 bytes, line 41909
41909<script src="https://www.google.com/recaptcha/api.js" async defer></script>
41909')); 41910 scriptAdded = true; 41911 } 41912 41913 var $form = $($self.parents('form')); 41914 41915 console.log('InvisibleReCaptcha: Init field: ', $self.get(0)); 41916 console.log('InvisibleReCaptcha: Init form: ', $form.get(0)); 41917 41918 $form.on('success.form.fv', function(e) { 41919 e.preventDefault(); 41920 41921 var formValidation = $form.data('formValidation'); 41922 41923 window.reCaptchaSubmit = function() { 41924 var response = $('#g-recaptcha-response').val(); 41925 console.log('InvisibleReCaptcha: Executing formValidation.defaultSubmit() with response:' + response); 41926 $self.val(response); 41927 formValidation.defaultSubmit(); 41928 }; 41929 41930 console.log('InvisibleReCaptcha: Executing grecaptcha.execute()'); 41931 grecaptcha.execute(); 41932 }); 41933 }; 41934 41935 41936 $.fn.skInvisibleReCaptcha = function (option) { 41937 var options = typeof option == "object" && option; 41938 41939 return this.each(function () { 41940 var $this = $(this); 41941 var fullPluginName = 'teha.' + pluginName; 41942 var skInvisibleReCaptcha = $this.data(fullPluginName); 41943 41944 if (!skInvisibleReCaptcha) { 41945 skInvisibleReCaptcha = new InvisibleReCaptcha($this, options); 41946 $this.data(fullPluginName, skInvisibleReCaptcha); 41947 } 41948 41949 if (typeof option == 'string') { 41950 if (skInvisibleReCaptcha[option]) { 41951 skInvisibleReCaptcha[option](); 41952 } else { 41953 $.error('Unknown plugin method: ' + pluginName + '.' + option); 41954 } 41955 } 41956 }); 41957 }; 41958 41959 $.fn.skInvisibleReCaptcha.defaults = { 41960 }; 41961 41962})(jQuery); 41963 41964(function ($) { 41965 $.fn.skChangeLayout = function (layout) { 41966 if (layout == null) { 41967 console.log('Not changing layout to null'); 41968 return this; 41969 } 41970 41971 return this.each(function () { 41972 var $element = $(this); 41973 var classes = $element.attr('class').split(/\s+/); 41974 41975 $.each(classes, function(index, className) { 41976 if (className.match(/^layout-/)) { 41977 console.log('Removing layout class: ' + className, $element); 41978 $element.removeClass(className); 41979 } 41980 }); 41981 41982 console.log('Setting layout class: layout-' + layout, $element); 41983 $element.addClass('layout-' + layout); 41984 }); 41985 }; 41986})(jQuery); 41987 41988(function ($) { 41989 $.fn.skLoadVideo = function (method) { 41990 return this.each(function() { 41991 var $container = $(this); 41992 var $loadingPlaceholder = $container.find('.loading-placeholder'); 41993 41994 var videoId = $(this).attr('data-video-id'); 41995 var provider = $(this).attr('data-video-provider'); 41996 41997 console.log('Loading video "' + videoId + '" from provider "' + provider + '"'); 41998 if (videoId && provider) { 41999 var url = $.fn.skLoadVideo.infoUrl.replace('{provider}', provider).replace('{videoId}', videoId); 42000 $.getJSON(url, function (response) { 42001 var $iframe = $(response.info.html); 42002 var ratio = response.info.height / (response.info.width / 100); 42003 console.log('Got video info from ' + url + ':', response); 42004 console.log('Ratio is ' + ratio + '%'); 42005 $container.css('padding-bottom', ratio + '%'); 42006 $iframe.on('load', function() { 42007 $loadingPlaceholder.remove(); 42008 }); 42009 $iframe.removeAttr('width').removeAttr('height'); 42010 $iframe.appendTo($container); 42011 }); 42012 } 42013 }); 42014 }; 42015 42016 $.fn.skLoadVideo.infoUrl = '/site-kit/oembed/info/{provider}/{videoId}'; 42017}(jQuery)); 42018 42019(function ($) { 42020 var pluginName = 'skMobileMenu'; 42021 var transitionEnd = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd'; 42022 42023 var SkMobileMenu = function ($self, options) { 42024 this.$self = $self; 42025 var me = this; 42026 42027 var settings = $.extend({}, $.fn.skMobileMenu.defaults, options); 42028
42029 var $overlay = $('#' + settings.overlayId); 42030 var $sidebar = $self.find('.sidebar'); 42031 var $closeMenuButton = $self.find('.close-menu'); 42032 42033 createOverlayIfMissing(); 42034 initEvents(); 42035 42036 function initEvents() { 42037 $overlay.on('click', onCloseMenuClick); 42038 $closeMenuButton.on('click', onCloseMenuClick); 42039 $self.find('.open-sub-menu').on('click', onOpenSubMenuClick); 42040 $self.find('.close-sub-menu, .sub-menu-label').on('click', onCloseSubMenuClick); 42041 } 42042 42043 function onCloseMenuClick() { 42044 me.hide(); 42045 } 42046 42047 function onOpenSubMenuClick() { 42048 var $subMenu = $(this).closest('li').find('.sub-menu').first(); 42049 $subMenu.show(); 42050 setTimeout(function() { 42051 $subMenu.addClass('open'); 42052 }, 10); 42053 } 42054 42055 function onCloseSubMenuClick() { 42056 var $subMenu = $(this).closest('.sub-menu'); 42057 $subMenu.one(transitionEnd, function() { 42058 $subMenu.hide(); 42059 }).removeClass('open'); 42060 } 42061 42062 function createOverlayIfMissing() { 42063 if ($overlay.length == 0) { 42064 console.log('Creating overlay'); 42065 $overlay = $('<div/>', { 42066 class: settings.overlayClasses, 42067 id: settings.overlayId 42068 }).appendTo($('body')); 42069 } 42070 } 42071 42072 function closeAllSubMenus() { 42073 $self.find('.sub-menu').removeClass('open'); 42074 } 42075 42076 this.show = function () { 42077 $overlay.addClass('visible'); 42078 $self.one(transitionEnd, function () { 42079 $closeMenuButton.addClass('open'); 42080 }).addClass('open'); 42081 }; 42082 42083 this.hide = function () { 42084 $overlay.removeClass('visible'); 42085 $closeMenuButton.removeClass('open'); 42086 $self.removeClass('open'); 42087 } 42088 }; 42089 42090 42091 $.fn.skMobileMenu = function (option) { 42092 var options = typeof option == "object" && option; 42093 42094 return this.each(function () { 42095 var $this = $(this); 42096 var fullPluginName = 'teha.' + pluginName; 42097 var skMobileMenu = $this.data(fullPluginName); 42098 42099 if (!skMobileMenu) { 42100 skMobileMenu = new SkMobileMenu($this, options); 42101 $this.data(fullPluginName, skMobileMenu); 42102 } 42103 42104 if (typeof option == 'string') { 42105 if (skMobileMenu[option]) { 42106 skMobileMenu[option](); 42107 } else { 42108 $.error('Unknown plugin method: ' + pluginName + '.' + option); 42109 } 42110 } 42111 }); 42112 }; 42113 42114 $.fn.skMobileMenu.defaults = { 42115 overlayId: 'mobile-menu-slide-in-overlay', 42116 overlayClasses: 'slide-in-overlay' 42117 }; 42118 42119})(jQuery); 42120 42121(function ($) { 42122 var pluginName = 'skSocialStream'; 42123 var transitionEnd = 'transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd'; 42124 42125 var SkSocialStream = function ($self, options) { 42126 this.$self = $self; 42127 var me = this; 42128 var settings = $.extend({}, $.fn.skSocialStream.defaults, options); 42129 var contentLoaded = false; 42130
42131 var $overlay = $('#' + settings.overlayId); 42132 var $closeButton = $self.find('.close-button'); 42133 var $loading = $self.find('.loading'); 42134 42135 createOverlayIfMissing(); 42136 initEvents(); 42137 42138 function onCloseButtonClick() { 42139 me.hide(); 42140 } 42141 42142 function createOverlayIfMissing() { 42143 if ($overlay.length == 0) { 42144 console.log('Creating overlay'); 42145 $overlay = $('<div/>', { 42146 class: settings.overlayClasses, 42147 id: settings.overlayId 42148 }).appendTo($('body')); 42149 } 42150 } 42151 42152 function initEvents() { 42153 $overlay.on('click', onCloseButtonClick); 42154 $closeButton.on('click', onCloseButtonClick); 42155 } 42156 42157 function loadContent() { 42158 42159 if (!contentLoaded) { 42160 var $iframe = $self.find('iframe'); 42161 $iframe.on('load', function() { 42162 $loading.hide(); 42163 $iframe.css('display', 'block'); 42164 contentLoaded = true; 42165 }); 42166 $iframe.attr('src', $self.attr('data-url')); 42167 } 42168 } 42169 42170 this.show = function () { 42171 $overlay.addClass('visible'); 42172 $self.one(transitionEnd, function () { 42173 $closeButton.addClass('open'); 42174 loadContent(); 42175 }).addClass('open'); 42176 42177 $('body').css('overflow', 'hidden'); 42178 }; 42179 42180 this.hide = function () { 42181 $overlay.removeClass('visible'); 42182 $closeButton.removeClass('open'); 42183 $self.removeClass('open'); 42184 $('body').css('overflow', 'auto'); 42185 } 42186 }; 42187 42188 42189 $.fn.skSocialStream = function (option) { 42190 var options = typeof option == "object" && option; 42191 42192 return this.each(function () { 42193 var $this = $(this); 42194 var fullPluginName = 'teha.' + pluginName; 42195 var skSocialStream = $this.data(fullPluginName); 42196 42197 if (!skSocialStream) { 42198 skSocialStream = new SkSocialStream($this, options); 42199 $this.data(fullPluginName, skSocialStream); 42200 } 42201 42202 if (typeof option == 'string') { 42203 if (skSocialStream[option]) { 42204 skSocialStream[option](); 42205 } else { 42206 $.error('Unknown plugin method: ' + pluginName + '.' + option); 42207 } 42208 } 42209 }); 42210 }; 42211 42212 $.fn.skSocialStream.defaults = { 42213 url: '/social-stream/', 42214 overlayId: 'social-stream-slide-in-overlay', 42215 overlayClasses: 'slide-in-overlay' 42216 }; 42217 42218})(jQuery); 42219 42220(function ($) { 42221 function SelectBox($select) { 42222 function updateLabel() { 42223 var selectedText = $select.find(":selected").text(); 42224 console.log('Update label to [' + selectedText + '] hasClearButton = ', hasClearButton); 42225 $innerLabel.text(selectedText).toggleClass('placeholder', $select.val() == ''); 42226 42227 if (hasClearButton && $select.val().length > 0) { 42228 showClearButton(); 42229 } 42230 42231 $select.trigger('sk.style-select.updated'); 42232 } 42233 42234 function clearValue() { 42235 $select.val(null); 42236 updateLabel(); 42237 hideClearButton(); 42238 $select.trigger('change'); 42239 } 42240 42241 function showClearButton() { 42242 $wrapper.addClass('clear-button-visible'); 42243 $select.attr('tabIndex', -1); 42244 } 42245 42246 function hideClearButton() { 42247 $wrapper.removeClass('clear-button-visible'); 42248 $select.removeAttr('tabIndex'); 42249 } 42250 42251 var $label, $clearButton, $wrapper, $innerLabel; 42252 var hasClearButton; 42253 42254 $label = $select.next(); 42255 hasClearButton = $select.attr('data-clear-button') === 'true'; 42256 42257 $wrapper = $select.parent(); 42258 42259 if (!$wrapper.hasClass('select-wrapper')) { 42260 $select.wrap('<div class="select-wrapper"></div>'); 42261 $wrapper = $select.parent(); 42262 } 42263 42264 if (!$label.hasClass('select-label')) { 42265 $label = $('<span class="select-label"></span>'); 42266 $select.after($label); 42267 } 42268 42269 $innerLabel = $label.find('span'); 42270 if ($innerLabel.length === 0) { 42271 $innerLabel = $('<span class="select-label-inner"></span>');
42272 $label.append($innerLabel); 42273 } 42274 42275 $clearButton = $label.next('.clear-button'); 42276 if (hasClearButton && $clearButton.length === 0) { 42277 $clearButton = $('<button type="button" class="clear-button"><span>×</span></button>'); 42278 $wrapper.append($clearButton); 42279 } 42280 42281 if ($clearButton.length !== 0) { 42282 $clearButton.on('click', function() { 42283 clearValue(); 42284 }); 42285 } 42286 42287 $wrapper.addClass('initialized'); 42288 42289 $select.on('change', function() { 42290 updateLabel(); 42291 }); 42292 42293 updateLabel(); 42294 42295 return { 42296 updateLabel: updateLabel 42297 } 42298 } 42299 42300 42301 $.fn.skStyleSelect = function (method) { 42302 return this.each(function() { 42303 var $select = $(this); 42304 var selectBox = $select.data('skSelectBox'); 42305 42306 if (!selectBox) { 42307 selectBox = new SelectBox($select); 42308 $select.data('skSelectBox', selectBox); 42309 } 42310 42311 if (method === 'updateLabel') { 42312 selectBox.updateLabel(); 42313 } 42314 }); 42315 }; 42316 42317}(jQuery)); 42318 42319(function ($) { 42320 var tabsInitialized = false; 42321 var activeTabs = []; 42322 42323 function updateHash() { 42324 var hash = 'tabs.'; 42325 for(var tabContainerId in activeTabs) { 42326 var tabId = activeTabs[tabContainerId]; 42327 hash += tabId + '.'; 42328 } 42329 hash = hash.substring(0, hash.length - 1); 42330 42331 console.log('New hash', hash); 42332 window.location.hash = encodeURIComponent(hash); 42333 } 42334 42335 $.fn.skTabs = function () { 42336 var me = this.each(function() { 42337 var $tabContainer = $(this); 42338 42339 $tabContainer.find('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 42340 var tabContainerId = $tabContainer.attr('id'); 42341 var tabId = $(e.target).attr('href').replace(/^#tab--/, ''); 42342 42343 console.log('Tab shown: ' + tabContainerId + '.' + tabId); 42344 activeTabs[tabContainerId] = tabId; 42345 42346 updateHash(); 42347 }); 42348 }); 42349 42350 $.skInitTabs(); 42351 42352 return me; 42353 }; 42354 42355 $.skInitTabs = function () { 42356 if (tabsInitialized) { 42357 return; 42358 } 42359 42360 var hash = window.location.hash.replace(/^#/, ''); 42361 if (hash.length > 0) { 42362 var decodedHash = decodeURIComponent(hash); 42363 console.log('Initializing tabs with hash: ', decodedHash); 42364 42365 if (decodedHash.match(/^tabs\./, decodedHash)) { 42366 var tabIds = decodedHash.substring(5).split('.'); 42367 var $firstTab = null; 42368 42369 for(var i = 0; i < tabIds.length; i++) { 42370 var tabId = tabIds[i]; 42371 var $tab = $('a[href="#tab--' + tabId + '"]'); 42372 console.log('Activating tab', $tab); 42373 $tab.tab('show'); 42374 42375 if ($firstTab === null) { 42376 $firstTab = $tab; 42377 } 42378 } 42379 42380 if ($firstTab !== null) { 42381 console.log('Scrolling to tab: ', $firstTab); 42382 $('html, body').animate({ 42383 scrollTop: $firstTab.offset().top - 50 42384 }, 200); 42385 } 42386 42387 } 42388 } 42389 42390 tabsInitialized = true; 42391 }; 42392}(jQuery)); 42393var SiteKit = SiteKit || {}; 42394 42395SiteKit.executeReadyStack = function() { 42396 for(var i = 0; i < window.readyStack.length; i++) { 42397 var callback = window.readyStack[i]; 42398 42399 console.log('Executing ready stack callback function ' + i); 42400 callback($); 42401 } 42402 42403 window.readyStack = []; 42404}; 42405 42406jQuery(function ($) { 42407 var imageOverlaysToLoad = {}; 42408 42409 SiteKit.onWindowResize = function() { 42410 console.log('SiteKit: Resize overlay images'); 42411 42412 SiteKit.$imageOverlays.each(function() { 42413 var $imageOverlay = $(this); 42414 var imageWidth = $imageOverlay.data('image-overlay-width'); 42415 var imageHeight = $imageOverlay.data('image-overlay-height'); 42416 42417 if (imageWidth > 0 && imageHeight > 0) { 42418 console.log('Image overlay resize: ', $imageOverlay, imageWidth, imageHeight); 42419 42420 if ($imageOverlay.outerWidth() > imageWidth && $imageOverlay.outerHeight() > imageHeight) { 42421 console.log('Image overlay auto: ', $imageOverlay); 42422 $imageOverlay.css('background-size', 'auto'); 42423 } else { 42424 console.log('Image overlay contain: ', $imageOverlay); 42425 $imageOverlay.css('background-size', 'contain'); 42426 } 42427 } 42428 }); 42429 }; 42430
42431 SiteKit.$imageOverlays = $('.bg-size-contain-no-upscale'); 42432 SiteKit.$imageOverlays.each(function() { 42433 var $imageOverlay = $(this); 42434 var css = $imageOverlay.css('background-image'); 42435 if (css.length > 0 && css !== 'none') { 42436 var backgroundImageUrl = css 42437 .replace(/^\s*url\(["']?/, '') 42438 .replace(/["']?\)\s*$/, ''); 42439 42440 if (backgroundImageUrl) { 42441 console.log('Image overlay found: ', backgroundImageUrl); 42442 imageOverlaysToLoad[backgroundImageUrl] = true; 42443 42444 var image = new Image(); 42445 image.onload = function() { 42446 console.log('Image loaded', image.src, image.naturalWidth, image.naturalHeight); 42447 42448 $imageOverlay.data('image-overlay-width', image.naturalWidth); 42449 $imageOverlay.data('image-overlay-height', image.naturalHeight); 42450 42451 delete imageOverlaysToLoad[backgroundImageUrl]; 42452 42453 if ($.isEmptyObject(imageOverlaysToLoad)) { 42454 console.log('All images loaded, trigger resize'); 42455 SiteKit.onWindowResize(); 42456 } 42457 }; 42458 image.src = backgroundImageUrl; 42459 } 42460 } 42461 }); 42462 42463 $(window).on('resize', $.throttle(300, SiteKit.onWindowResize)); 42464 42465 // if (typeof document.addEventListener === 'function') { 42466 // document.addEventListener('Neos.PageLoaded', function(event) { 42467 // }, false); 42468 // } 42469 42470 SiteKit.executeReadyStack(); 42471 SiteKit.onWindowResize(); 42472}); 42473 42474 42475//! moment.js 42476 42477;(function (global, factory) { 42478 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 42479 typeof define === 'function' && define.amd ? define(factory) : 42480 global.moment = factory()
vendor: 35,273 bytes, lines 42480-43619
42480 42481}(this, (function () { 'use strict'; 42482 42483 var hookCallback; 42484 42485 function hooks () { 42486 return hookCallback.apply(null, arguments); 42487 } 42488 42489 // This is done to register the method called with moment() 42490 // without creating circular dependencies. 42491 function setHookCallback (callback) { 42492 hookCallback = callback; 42493 } 42494 42495 function isArray(input) { 42496 return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; 42497 } 42498 42499 function isObject(input) { 42500 // IE8 will treat undefined and null as object if it wasn't for 42501 // input != null 42502 return input != null && Object.prototype.toString.call(input) === '[object Object]'; 42503 } 42504 42505 function isObjectEmpty(obj) { 42506 if (Object.getOwnPropertyNames) { 42507 return (Object.getOwnPropertyNames(obj).length === 0); 42508 } else { 42509 var k; 42510 for (k in obj) { 42511 if (obj.hasOwnProperty(k)) { 42512 return false; 42513 } 42514 } 42515 return true; 42516 } 42517 } 42518 42519 function isUndefined(input) { 42520 return input === void 0; 42521 } 42522 42523 function isNumber(input) { 42524 return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]'; 42525 } 42526 42527 function isDate(input) { 42528 return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; 42529 } 42530 42531 function map(arr, fn) { 42532 var res = [], i; 42533 for (i = 0; i < arr.length; ++i) { 42534 res.push(fn(arr[i], i)); 42535 } 42536 return res; 42537 } 42538 42539 function hasOwnProp(a, b) { 42540 return Object.prototype.hasOwnProperty.call(a, b); 42541 } 42542 42543 function extend(a, b) { 42544 for (var i in b) { 42545 if (hasOwnProp(b, i)) { 42546 a[i] = b[i]; 42547 } 42548 } 42549 42550 if (hasOwnProp(b, 'toString')) { 42551 a.toString = b.toString; 42552 } 42553 42554 if (hasOwnProp(b, 'valueOf')) { 42555 a.valueOf = b.valueOf; 42556 } 42557 42558 return a; 42559 } 42560 42561 function createUTC (input, format, locale, strict) { 42562 return createLocalOrUTC(input, format, locale, strict, true).utc(); 42563 } 42564 42565 function defaultParsingFlags() { 42566 // We need to deep clone this object. 42567 return { 42568 empty : false, 42569 unusedTokens : [], 42570 unusedInput : [], 42571 overflow : -2, 42572 charsLeftOver : 0, 42573 nullInput : false, 42574 invalidMonth : null, 42575 invalidFormat : false, 42576 userInvalidated : false, 42577 iso : false, 42578 parsedDateParts : [], 42579 meridiem : null, 42580 rfc2822 : false, 42581 weekdayMismatch : false 42582 }; 42583 } 42584 42585 function getParsingFlags(m) { 42586 if (m._pf == null) { 42587 m._pf = defaultParsingFlags(); 42588 } 42589 return m._pf; 42590 } 42591 42592 var some; 42593 if (Array.prototype.some) { 42594 some = Array.prototype.some; 42595 } else { 42596 some = function (fun) { 42597 var t = Object(this); 42598 var len = t.length >>> 0; 42599 42600 for (var i = 0; i < len; i++) { 42601 if (i in t && fun.call(this, t[i], i, t)) { 42602 return true; 42603 } 42604 } 42605 42606 return false; 42607 }; 42608 } 42609 42610 function isValid(m) { 42611 if (m._isValid == null) { 42612 var flags = getParsingFlags(m); 42613 var parsedParts = some.call(flags.parsedDateParts, function (i) { 42614 return i != null; 42615 }); 42616 var isNowValid = !isNaN(m._d.getTime()) && 42617 flags.overflow < 0 && 42618 !flags.empty && 42619 !flags.invalidMonth && 42620 !flags.invalidWeekday && 42621 !flags.weekdayMismatch && 42622 !flags.nullInput && 42623 !flags.invalidFormat && 42624 !flags.userInvalidated && 42625 (!flags.meridiem || (flags.meridiem && parsedParts)); 42626 42627 if (m._strict) { 42628 isNowValid = isNowValid && 42629 flags.charsLeftOver === 0 && 42630 flags.unusedTokens.length === 0 && 42631 flags.bigHour === undefined; 42632 } 42633 42634 if (Object.isFrozen == null || !Object.isFrozen(m)) { 42635 m._isValid = isNowValid; 42636 } 42637 else { 42638 return isNowValid; 42639 } 42640 } 42641 return m._isValid; 42642 } 42643 42644 function createInvalid (flags) { 42645 var m = createUTC(NaN); 42646 if (flags != null) { 42647 extend(getParsingFlags(m), flags); 42648 } 42649 else { 42650 getParsingFlags(m).userInvalidated = true; 42651 } 42652 42653 return m; 42654 } 42655 42656 // Plugins that add properties should also add the key here (null value), 42657 // so we can properly clone ourselves. 42658 var momentProperties = hooks.momentProperties = []; 42659 42660 function copyConfig(to, from) { 42661 var i, prop, val; 42662 42663 if (!isUndefined(from._isAMomentObject)) { 42664 to._isAMomentObject = from._isAMomentObject; 42665 } 42666 if (!isUndefined(from._i)) { 42667 to._i = from._i; 42668 } 42669 if (!isUndefined(from._f)) { 42670 to._f = from._f; 42671 } 42672 if (!isUndefined(from._l)) { 42673 to._l = from._l; 42674 } 42675 if (!isUndefined(from._strict)) { 42676 to._strict = from._strict; 42677 } 42678 if (!isUndefined(from._tzm)) { 42679 to._tzm = from._tzm; 42680 } 42681 if (!isUndefined(from._isUTC)) { 42682 to._isUTC = from._isUTC; 42683 } 42684 if (!isUndefined(from._offset)) { 42685 to._offset = from._offset; 42686 } 42687 if (!isUndefined(from._pf)) { 42688 to._pf = getParsingFlags(from); 42689 } 42690 if (!isUndefined(from._locale)) { 42691 to._locale = from._locale; 42692 } 42693 42694 if (momentProperties.length > 0) { 42695 for (i = 0; i < momentProperties.length; i++) { 42696 prop = momentProperties[i]; 42697 val = from[prop]; 42698 if (!isUndefined(val)) { 42699 to[prop] = val; 42700 } 42701 } 42702 } 42703 42704 return to; 42705 } 42706 42707 var updateInProgress = false; 42708 42709 // Moment prototype object 42710 function Moment(config) { 42711 copyConfig(this, config); 42712 this._d = new Date(config._d != null ? config._d.getTime() : NaN); 42713 if (!this.isValid()) { 42714 this._d = new Date(NaN); 42715 } 42716 // Prevent infinite loop in case updateOffset creates new moment 42717 // objects. 42718 if (updateInProgress === false) { 42719 updateInProgress = true; 42720 hooks.updateOffset(this); 42721 updateInProgress = false; 42722 } 42723 } 42724 42725 function isMoment (obj) { 42726 return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); 42727 } 42728 42729 function absFloor (number) { 42730 if (number < 0) { 42731 // -0 -> 0 42732 return Math.ceil(number) || 0; 42733 } else { 42734 return Math.floor(number); 42735 } 42736 } 42737 42738 function toInt(argumentForCoercion) { 42739 var coercedNumber = +argumentForCoercion, 42740 value = 0; 42741 42742 if (coercedNumber !== 0 && isFinite(coercedNumber)) { 42743 value = absFloor(coercedNumber); 42744 } 42745 42746 return value; 42747 } 42748 42749 // compare two arrays, return the number of differences 42750 function compareArrays(array1, array2, dontConvert) { 42751 var len = Math.min(array1.length, array2.length), 42752 lengthDiff = Math.abs(array1.length - array2.length), 42753 diffs = 0, 42754 i; 42755 for (i = 0; i < len; i++) { 42756 if ((dontConvert && array1[i] !== array2[i]) || 42757 (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { 42758 diffs++; 42759 } 42760 } 42761 return diffs + lengthDiff; 42762 } 42763 42764 function warn(msg) { 42765 if (hooks.suppressDeprecationWarnings === false && 42766 (typeof console !== 'undefined') && console.warn) { 42767 console.warn('Deprecation warning: ' + msg); 42768 } 42769 } 42770 42771 function deprecate(msg, fn) { 42772 var firstTime = true; 42773 42774 return extend(function () { 42775 if (hooks.deprecationHandler != null) { 42776 hooks.deprecationHandler(null, msg); 42777 } 42778 if (firstTime) { 42779 var args = []; 42780 var arg; 42781 for (var i = 0; i < arguments.length; i++) { 42782 arg = ''; 42783 if (typeof arguments[i] === 'object') { 42784 arg += '\n[' + i + '] '; 42785 for (var key in arguments[0]) { 42786 arg += key + ': ' + arguments[0][key] + ', '; 42787 } 42788 arg = arg.slice(0, -2); // Remove trailing comma and space 42789 } else { 42790 arg = arguments[i]; 42791 } 42792 args.push(arg); 42793 } 42794 warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); 42795 firstTime = false; 42796 } 42797 return fn.apply(this, arguments); 42798 }, fn); 42799 } 42800 42801 var deprecations = {}; 42802 42803 function deprecateSimple(name, msg) { 42804 if (hooks.deprecationHandler != null) { 42805 hooks.deprecationHandler(name, msg); 42806 } 42807 if (!deprecations[name]) { 42808 warn(msg); 42809 deprecations[name] = true; 42810 } 42811 } 42812 42813 hooks.suppressDeprecationWarnings = false; 42814 hooks.deprecationHandler = null; 42815 42816 function isFunction(input) { 42817 return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; 42818 } 42819 42820 function set (config) { 42821 var prop, i; 42822 for (i in config) { 42823 prop = config[i]; 42824 if (isFunction(prop)) { 42825 this[i] = prop; 42826 } else { 42827 this['_' + i] = prop; 42828 } 42829 } 42830 this._config = config; 42831 // Lenient ordinal parsing accepts just a number in addition to 42832 // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. 42833 // TODO: Remove "ordinalParse" fallback in next major release. 42834 this._dayOfMonthOrdinalParseLenient = new RegExp( 42835 (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + 42836 '|' + (/\d{1,2}/).source); 42837 } 42838 42839 function mergeConfigs(parentConfig, childConfig) { 42840 var res = extend({}, parentConfig), prop; 42841 for (prop in childConfig) { 42842 if (hasOwnProp(childConfig, prop)) { 42843 if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { 42844 res[prop] = {}; 42845 extend(res[prop], parentConfig[prop]); 42846 extend(res[prop], childConfig[prop]); 42847 } else if (childConfig[prop] != null) { 42848 res[prop] = childConfig[prop]; 42849 } else { 42850 delete res[prop]; 42851 } 42852 } 42853 } 42854 for (prop in parentConfig) { 42855 if (hasOwnProp(parentConfig, prop) && 42856 !hasOwnProp(childConfig, prop) && 42857 isObject(parentConfig[prop])) { 42858 // make sure changes to properties don't modify parent config 42859 res[prop] = extend({}, res[prop]); 42860 } 42861 } 42862 return res; 42863 } 42864 42865 function Locale(config) { 42866 if (config != null) { 42867 this.set(config); 42868 } 42869 } 42870 42871 var keys; 42872 42873 if (Object.keys) { 42874 keys = Object.keys; 42875 } else { 42876 keys = function (obj) { 42877 var i, res = []; 42878 for (i in obj) { 42879 if (hasOwnProp(obj, i)) { 42880 res.push(i); 42881 } 42882 } 42883 return res; 42884 }; 42885 } 42886 42887 var defaultCalendar = { 42888 sameDay : '[Today at] LT', 42889 nextDay : '[Tomorrow at] LT', 42890 nextWeek : 'dddd [at] LT', 42891 lastDay : '[Yesterday at] LT', 42892 lastWeek : '[Last] dddd [at] LT', 42893 sameElse : 'L' 42894 }; 42895 42896 function calendar (key, mom, now) { 42897 var output = this._calendar[key] || this._calendar['sameElse']; 42898 return isFunction(output) ? output.call(mom, now) : output; 42899 } 42900 42901 var defaultLongDateFormat = { 42902 LTS : 'h:mm:ss A', 42903 LT : 'h:mm A', 42904 L : 'MM/DD/YYYY', 42905 LL : 'MMMM D, YYYY', 42906 LLL : 'MMMM D, YYYY h:mm A', 42907 LLLL : 'dddd, MMMM D, YYYY h:mm A' 42908 }; 42909 42910 function longDateFormat (key) { 42911 var format = this._longDateFormat[key], 42912 formatUpper = this._longDateFormat[key.toUpperCase()]; 42913 42914 if (format || !formatUpper) { 42915 return format; 42916 } 42917 42918 this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { 42919 return val.slice(1); 42920 }); 42921 42922 return this._longDateFormat[key]; 42923 } 42924 42925 var defaultInvalidDate = 'Invalid date'; 42926 42927 function invalidDate () { 42928 return this._invalidDate; 42929 } 42930 42931 var defaultOrdinal = '%d'; 42932 var defaultDayOfMonthOrdinalParse = /\d{1,2}/; 42933 42934 function ordinal (number) { 42935 return this._ordinal.replace('%d', number); 42936 } 42937 42938 var defaultRelativeTime = { 42939 future : 'in %s', 42940 past : '%s ago', 42941 s : 'a few seconds', 42942 ss : '%d seconds', 42943 m : 'a minute', 42944 mm : '%d minutes', 42945 h : 'an hour', 42946 hh : '%d hours', 42947 d : 'a day', 42948 dd : '%d days', 42949 M : 'a month', 42950 MM : '%d months', 42951 y : 'a year', 42952 yy : '%d years' 42953 }; 42954 42955 function relativeTime (number, withoutSuffix, string, isFuture) { 42956 var output = this._relativeTime[string]; 42957 return (isFunction(output)) ? 42958 output(number, withoutSuffix, string, isFuture) : 42959 output.replace(/%d/i, number); 42960 } 42961 42962 function pastFuture (diff, output) { 42963 var format = this._relativeTime[diff > 0 ? 'future' : 'past']; 42964 return isFunction(format) ? format(output) : format.replace(/%s/i, output); 42965 } 42966 42967 var aliases = {}; 42968 42969 function addUnitAlias (unit, shorthand) { 42970 var lowerCase = unit.toLowerCase(); 42971 aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; 42972 } 42973 42974 function normalizeUnits(units) { 42975 return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; 42976 } 42977 42978 function normalizeObjectUnits(inputObject) { 42979 var normalizedInput = {}, 42980 normalizedProp, 42981 prop; 42982 42983 for (prop in inputObject) { 42984 if (hasOwnProp(inputObject, prop)) { 42985 normalizedProp = normalizeUnits(prop); 42986 if (normalizedProp) { 42987 normalizedInput[normalizedProp] = inputObject[prop]; 42988 } 42989 } 42990 } 42991 42992 return normalizedInput; 42993 } 42994 42995 var priorities = {}; 42996 42997 function addUnitPriority(unit, priority) { 42998 priorities[unit] = priority; 42999 } 43000 43001 function getPrioritizedUnits(unitsObj) { 43002 var units = []; 43003 for (var u in unitsObj) { 43004 units.push({unit: u, priority: priorities[u]}); 43005 } 43006 units.sort(function (a, b) { 43007 return a.priority - b.priority; 43008 }); 43009 return units; 43010 } 43011 43012 function zeroFill(number, targetLength, forceSign) { 43013 var absNumber = '' + Math.abs(number), 43014 zerosToFill = targetLength - absNumber.length, 43015 sign = number >= 0; 43016 return (sign ? (forceSign ? '+' : '') : '-') + 43017 Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; 43018 } 43019 43020 var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; 43021 43022 var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; 43023 43024 var formatFunctions = {}; 43025 43026 var formatTokenFunctions = {}; 43027 43028 // token: 'M' 43029 // padded: ['MM', 2] 43030 // ordinal: 'Mo' 43031 // callback: function () { this.month() + 1 } 43032 function addFormatToken (token, padded, ordinal, callback) { 43033 var func = callback; 43034 if (typeof callback === 'string') { 43035 func = function () { 43036 return this[callback](); 43037 }; 43038 } 43039 if (token) { 43040 formatTokenFunctions[token] = func; 43041 } 43042 if (padded) { 43043 formatTokenFunctions[padded[0]] = function () { 43044 return zeroFill(func.apply(this, arguments), padded[1], padded[2]); 43045 }; 43046 } 43047 if (ordinal) { 43048 formatTokenFunctions[ordinal] = function () { 43049 return this.localeData().ordinal(func.apply(this, arguments), token); 43050 }; 43051 } 43052 } 43053 43054 function removeFormattingTokens(input) { 43055 if (input.match(/\[[\s\S]/)) { 43056 return input.replace(/^\[|\]$/g, ''); 43057 } 43058 return input.replace(/\\/g, ''); 43059 } 43060 43061 function makeFormatFunction(format) { 43062 var array = format.match(formattingTokens), i, length; 43063 43064 for (i = 0, length = array.length; i < length; i++) { 43065 if (formatTokenFunctions[array[i]]) { 43066 array[i] = formatTokenFunctions[array[i]]; 43067 } else { 43068 array[i] = removeFormattingTokens(array[i]); 43069 } 43070 } 43071 43072 return function (mom) { 43073 var output = '', i; 43074 for (i = 0; i < length; i++) { 43075 output += isFunction(array[i]) ? array[i].call(mom, format) : array[i]; 43076 } 43077 return output; 43078 }; 43079 } 43080 43081 // format date using native date object 43082 function formatMoment(m, format) { 43083 if (!m.isValid()) { 43084 return m.localeData().invalidDate(); 43085 } 43086 43087 format = expandFormat(format, m.localeData()); 43088 formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); 43089 43090 return formatFunctions[format](m); 43091 } 43092 43093 function expandFormat(format, locale) { 43094 var i = 5; 43095 43096 function replaceLongDateFormatTokens(input) { 43097 return locale.longDateFormat(input) || input; 43098 } 43099 43100 localFormattingTokens.lastIndex = 0; 43101 while (i >= 0 && localFormattingTokens.test(format)) { 43102 format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); 43103 localFormattingTokens.lastIndex = 0; 43104 i -= 1; 43105 } 43106 43107 return format; 43108 } 43109 43110 var match1 = /\d/; // 0 - 9 43111 var match2 = /\d\d/; // 00 - 99 43112 var match3 = /\d{3}/; // 000 - 999 43113 var match4 = /\d{4}/; // 0000 - 9999 43114 var match6 = /[+-]?\d{6}/; // -999999 - 999999 43115 var match1to2 = /\d\d?/; // 0 - 99 43116 var match3to4 = /\d\d\d\d?/; // 999 - 9999 43117 var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 43118 var match1to3 = /\d{1,3}/; // 0 - 999 43119 var match1to4 = /\d{1,4}/; // 0 - 9999 43120 var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 43121 43122 var matchUnsigned = /\d+/; // 0 - inf 43123 var matchSigned = /[+-]?\d+/; // -inf - inf 43124 43125 var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z 43126 var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z 43127 43128 var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 43129 43130 // any word (or two) characters or numbers including two/three word month in arabic. 43131 // includes scottish gaelic two word and hyphenated months 43132 var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i; 43133 43134 var regexes = {}; 43135 43136 function addRegexToken (token, regex, strictRegex) { 43137 regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { 43138 return (isStrict && strictRegex) ? strictRegex : regex; 43139 }; 43140 } 43141 43142 function getParseRegexForToken (token, config) { 43143 if (!hasOwnProp(regexes, token)) { 43144 return new RegExp(unescapeFormat(token)); 43145 } 43146 43147 return regexes[token](config._strict, config._locale); 43148 } 43149 43150 // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript 43151 function unescapeFormat(s) { 43152 return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { 43153 return p1 || p2 || p3 || p4; 43154 })); 43155 } 43156 43157 function regexEscape(s) { 43158 return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 43159 } 43160 43161 var tokens = {}; 43162 43163 function addParseToken (token, callback) { 43164 var i, func = callback; 43165 if (typeof token === 'string') { 43166 token = [token]; 43167 } 43168 if (isNumber(callback)) { 43169 func = function (input, array) { 43170 array[callback] = toInt(input); 43171 }; 43172 } 43173 for (i = 0; i < token.length; i++) { 43174 tokens[token[i]] = func; 43175 } 43176 } 43177 43178 function addWeekParseToken (token, callback) { 43179 addParseToken(token, function (input, array, config, token) { 43180 config._w = config._w || {}; 43181 callback(input, config._w, config, token); 43182 }); 43183 } 43184 43185 function addTimeToArrayFromToken(token, input, config) { 43186 if (input != null && hasOwnProp(tokens, token)) { 43187 tokens[token](input, config._a, config, token); 43188 } 43189 } 43190 43191 var YEAR = 0; 43192 var MONTH = 1; 43193 var DATE = 2; 43194 var HOUR = 3; 43195 var MINUTE = 4; 43196 var SECOND = 5; 43197 var MILLISECOND = 6; 43198 var WEEK = 7; 43199 var WEEKDAY = 8; 43200 43201 // FORMATTING 43202 43203 addFormatToken('Y', 0, 0, function () { 43204 var y = this.year(); 43205 return y <= 9999 ? '' + y : '+' + y; 43206 }); 43207 43208 addFormatToken(0, ['YY', 2], 0, function () { 43209 return this.year() % 100; 43210 }); 43211 43212 addFormatToken(0, ['YYYY', 4], 0, 'year'); 43213 addFormatToken(0, ['YYYYY', 5], 0, 'year'); 43214 addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); 43215 43216 // ALIASES 43217 43218 addUnitAlias('year', 'y'); 43219 43220 // PRIORITIES 43221 43222 addUnitPriority('year', 1); 43223 43224 // PARSING 43225 43226 addRegexToken('Y', matchSigned); 43227 addRegexToken('YY', match1to2, match2); 43228 addRegexToken('YYYY', match1to4, match4); 43229 addRegexToken('YYYYY', match1to6, match6); 43230 addRegexToken('YYYYYY', match1to6, match6); 43231 43232 addParseToken(['YYYYY', 'YYYYYY'], YEAR); 43233 addParseToken('YYYY', function (input, array) { 43234 array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); 43235 }); 43236 addParseToken('YY', function (input, array) { 43237 array[YEAR] = hooks.parseTwoDigitYear(input); 43238 }); 43239 addParseToken('Y', function (input, array) { 43240 array[YEAR] = parseInt(input, 10); 43241 }); 43242 43243 // HELPERS 43244 43245 function daysInYear(year) { 43246 return isLeapYear(year) ? 366 : 365; 43247 } 43248 43249 function isLeapYear(year) { 43250 return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; 43251 } 43252 43253 // HOOKS 43254 43255 hooks.parseTwoDigitYear = function (input) { 43256 return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); 43257 }; 43258 43259 // MOMENTS 43260 43261 var getSetYear = makeGetSet('FullYear', true); 43262 43263 function getIsLeapYear () { 43264 return isLeapYear(this.year()); 43265 } 43266 43267 function makeGetSet (unit, keepTime) { 43268 return function (value) { 43269 if (value != null) { 43270 set$1(this, unit, value); 43271 hooks.updateOffset(this, keepTime); 43272 return this; 43273 } else { 43274 return get(this, unit); 43275 } 43276 }; 43277 } 43278 43279 function get (mom, unit) { 43280 return mom.isValid() ? 43281 mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; 43282 } 43283 43284 function set$1 (mom, unit, value) { 43285 if (mom.isValid() && !isNaN(value)) { 43286 if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) { 43287 mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month())); 43288 } 43289 else { 43290 mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); 43291 } 43292 } 43293 } 43294 43295 // MOMENTS 43296 43297 function stringGet (units) { 43298 units = normalizeUnits(units); 43299 if (isFunction(this[units])) { 43300 return this[units](); 43301 } 43302 return this; 43303 } 43304 43305 43306 function stringSet (units, value) { 43307 if (typeof units === 'object') { 43308 units = normalizeObjectUnits(units); 43309 var prioritized = getPrioritizedUnits(units); 43310 for (var i = 0; i < prioritized.length; i++) { 43311 this[prioritized[i].unit](units[prioritized[i].unit]); 43312 } 43313 } else { 43314 units = normalizeUnits(units); 43315 if (isFunction(this[units])) { 43316 return this[units](value); 43317 } 43318 } 43319 return this; 43320 } 43321 43322 function mod(n, x) { 43323 return ((n % x) + x) % x; 43324 } 43325 43326 var indexOf; 43327 43328 if (Array.prototype.indexOf) { 43329 indexOf = Array.prototype.indexOf; 43330 } else { 43331 indexOf = function (o) { 43332 // I know 43333 var i; 43334 for (i = 0; i < this.length; ++i) { 43335 if (this[i] === o) { 43336 return i; 43337 } 43338 } 43339 return -1; 43340 }; 43341 } 43342 43343 function daysInMonth(year, month) { 43344 if (isNaN(year) || isNaN(month)) { 43345 return NaN; 43346 } 43347 var modMonth = mod(month, 12); 43348 year += (month - modMonth) / 12; 43349 return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2); 43350 } 43351 43352 // FORMATTING 43353 43354 addFormatToken('M', ['MM', 2], 'Mo', function () { 43355 return this.month() + 1; 43356 }); 43357 43358 addFormatToken('MMM', 0, 0, function (format) { 43359 return this.localeData().monthsShort(this, format); 43360 }); 43361 43362 addFormatToken('MMMM', 0, 0, function (format) { 43363 return this.localeData().months(this, format); 43364 }); 43365 43366 // ALIASES 43367 43368 addUnitAlias('month', 'M'); 43369 43370 // PRIORITY 43371 43372 addUnitPriority('month', 8); 43373 43374 // PARSING 43375 43376 addRegexToken('M', match1to2); 43377 addRegexToken('MM', match1to2, match2); 43378 addRegexToken('MMM', function (isStrict, locale) { 43379 return locale.monthsShortRegex(isStrict); 43380 }); 43381 addRegexToken('MMMM', function (isStrict, locale) { 43382 return locale.monthsRegex(isStrict); 43383 }); 43384 43385 addParseToken(['M', 'MM'], function (input, array) { 43386 array[MONTH] = toInt(input) - 1; 43387 }); 43388 43389 addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { 43390 var month = config._locale.monthsParse(input, token, config._strict); 43391 // if we didn't find a month name, mark the date as invalid. 43392 if (month != null) { 43393 array[MONTH] = month; 43394 } else { 43395 getParsingFlags(config).invalidMonth = input; 43396 } 43397 }); 43398 43399 // LOCALES 43400 43401 var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/; 43402 var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); 43403 function localeMonths (m, format) { 43404 if (!m) { 43405 return isArray(this._months) ? this._months : 43406 this._months['standalone']; 43407 } 43408 return isArray(this._months) ? this._months[m.month()] : 43409 this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; 43410 } 43411 43412 var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); 43413 function localeMonthsShort (m, format) { 43414 if (!m) { 43415 return isArray(this._monthsShort) ? this._monthsShort : 43416 this._monthsShort['standalone']; 43417 } 43418 return isArray(this._monthsShort) ? this._monthsShort[m.month()] : 43419 this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; 43420 } 43421 43422 function handleStrictParse(monthName, format, strict) { 43423 var i, ii, mom, llc = monthName.toLocaleLowerCase(); 43424 if (!this._monthsParse) { 43425 // this is not used 43426 this._monthsParse = []; 43427 this._longMonthsParse = []; 43428 this._shortMonthsParse = []; 43429 for (i = 0; i < 12; ++i) { 43430 mom = createUTC([2000, i]); 43431 this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); 43432 this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); 43433 } 43434 } 43435 43436 if (strict) { 43437 if (format === 'MMM') { 43438 ii = indexOf.call(this._shortMonthsParse, llc); 43439 return ii !== -1 ? ii : null; 43440 } else { 43441 ii = indexOf.call(this._longMonthsParse, llc); 43442 return ii !== -1 ? ii : null; 43443 } 43444 } else { 43445 if (format === 'MMM') { 43446 ii = indexOf.call(this._shortMonthsParse, llc); 43447 if (ii !== -1) { 43448 return ii; 43449 } 43450 ii = indexOf.call(this._longMonthsParse, llc); 43451 return ii !== -1 ? ii : null; 43452 } else { 43453 ii = indexOf.call(this._longMonthsParse, llc); 43454 if (ii !== -1) { 43455 return ii; 43456 } 43457 ii = indexOf.call(this._shortMonthsParse, llc); 43458 return ii !== -1 ? ii : null; 43459 } 43460 } 43461 } 43462 43463 function localeMonthsParse (monthName, format, strict) { 43464 var i, mom, regex; 43465 43466 if (this._monthsParseExact) { 43467 return handleStrictParse.call(this, monthName, format, strict); 43468 } 43469 43470 if (!this._monthsParse) { 43471 this._monthsParse = []; 43472 this._longMonthsParse = []; 43473 this._shortMonthsParse = []; 43474 } 43475 43476 // TODO: add sorting 43477 // Sorting makes sure if one month (or abbr) is a prefix of another 43478 // see sorting in computeMonthsParse 43479 for (i = 0; i < 12; i++) { 43480 // make the regex if we don't have it already 43481 mom = createUTC([2000, i]); 43482 if (strict && !this._longMonthsParse[i]) { 43483 this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); 43484 this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); 43485 } 43486 if (!strict && !this._monthsParse[i]) { 43487 regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); 43488 this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); 43489 } 43490 // test the regex 43491 if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { 43492 return i; 43493 } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { 43494 return i; 43495 } else if (!strict && this._monthsParse[i].test(monthName)) { 43496 return i; 43497 } 43498 } 43499 } 43500 43501 // MOMENTS 43502 43503 function setMonth (mom, value) { 43504 var dayOfMonth; 43505 43506 if (!mom.isValid()) { 43507 // No op 43508 return mom; 43509 } 43510 43511 if (typeof value === 'string') { 43512 if (/^\d+$/.test(value)) { 43513 value = toInt(value); 43514 } else { 43515 value = mom.localeData().monthsParse(value); 43516 // TODO: Another silent failure? 43517 if (!isNumber(value)) { 43518 return mom; 43519 } 43520 } 43521 } 43522 43523 dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); 43524 mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); 43525 return mom; 43526 } 43527 43528 function getSetMonth (value) { 43529 if (value != null) { 43530 setMonth(this, value); 43531 hooks.updateOffset(this, true); 43532 return this; 43533 } else { 43534 return get(this, 'Month'); 43535 } 43536 } 43537 43538 function getDaysInMonth () { 43539 return daysInMonth(this.year(), this.month()); 43540 } 43541 43542 var defaultMonthsShortRegex = matchWord; 43543 function monthsShortRegex (isStrict) { 43544 if (this._monthsParseExact) { 43545 if (!hasOwnProp(this, '_monthsRegex')) { 43546 computeMonthsParse.call(this); 43547 } 43548 if (isStrict) { 43549 return this._monthsShortStrictRegex; 43550 } else { 43551 return this._monthsShortRegex; 43552 } 43553 } else { 43554 if (!hasOwnProp(this, '_monthsShortRegex')) { 43555 this._monthsShortRegex = defaultMonthsShortRegex; 43556 } 43557 return this._monthsShortStrictRegex && isStrict ? 43558 this._monthsShortStrictRegex : this._monthsShortRegex; 43559 } 43560 } 43561 43562 var defaultMonthsRegex = matchWord; 43563 function monthsRegex (isStrict) { 43564 if (this._monthsParseExact) { 43565 if (!hasOwnProp(this, '_monthsRegex')) { 43566 computeMonthsParse.call(this); 43567 } 43568 if (isStrict) { 43569 return this._monthsStrictRegex; 43570 } else { 43571 return this._monthsRegex; 43572 } 43573 } else { 43574 if (!hasOwnProp(this, '_monthsRegex')) { 43575 this._monthsRegex = defaultMonthsRegex; 43576 } 43577 return this._monthsStrictRegex && isStrict ? 43578 this._monthsStrictRegex : this._monthsRegex; 43579 } 43580 } 43581 43582 function computeMonthsParse () { 43583 function cmpLenRev(a, b) { 43584 return b.length - a.length; 43585 } 43586 43587 var shortPieces = [], longPieces = [], mixedPieces = [], 43588 i, mom; 43589 for (i = 0; i < 12; i++) { 43590 // make the regex if we don't have it already 43591 mom = createUTC([2000, i]); 43592 shortPieces.push(this.monthsShort(mom, '')); 43593 longPieces.push(this.months(mom, '')); 43594 mixedPieces.push(this.months(mom, '')); 43595 mixedPieces.push(this.monthsShort(mom, '')); 43596 } 43597 // Sorting makes sure if one month (or abbr) is a prefix of another it 43598 // will match the longer piece. 43599 shortPieces.sort(cmpLenRev); 43600 longPieces.sort(cmpLenRev); 43601 mixedPieces.sort(cmpLenRev); 43602 for (i = 0; i < 12; i++) { 43603 shortPieces[i] = regexEscape(shortPieces[i]); 43604 longPieces[i] = regexEscape(longPieces[i]); 43605 } 43606 for (i = 0; i < 24; i++) { 43607 mixedPieces[i] = regexEscape(mixedPieces[i]); 43608 } 43609 43610 this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 43611 this._monthsShortRegex = this._monthsRegex; 43612 this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); 43613 this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); 43614 } 43615 43616 function createDate (y, m, d, h, M, s, ms) { 43617 // can't just apply() to create a date: 43618 // https://stackoverflow.com/q/181348 43619 var date
vendor: 3,190 bytes, lines 43619-43721
43619 = new Date(y, m, d, h, M, s, ms); 43620 43621 // the date constructor remaps years 0-99 to 1900-1999 43622 if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { 43623 date.setFullYear(y); 43624 } 43625 return date; 43626 } 43627 43628 function createUTCDate (y) { 43629 var date = new Date(Date.UTC.apply(null, arguments)); 43630 43631 // the Date.UTC function remaps years 0-99 to 1900-1999 43632 if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { 43633 date.setUTCFullYear(y); 43634 } 43635 return date; 43636 } 43637 43638 // start-of-first-week - start-of-year 43639 function firstWeekOffset(year, dow, doy) { 43640 var // first-week day -- which january is always in the first week (4 for iso, 1 for other) 43641 fwd = 7 + dow - doy, 43642 // first-week day local weekday -- which local weekday is fwd 43643 fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; 43644 43645 return -fwdlw + fwd - 1; 43646 } 43647 43648 // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday 43649 function dayOfYearFromWeeks(year, week, weekday, dow, doy) { 43650 var localWeekday = (7 + weekday - dow) % 7, 43651 weekOffset = firstWeekOffset(year, dow, doy), 43652 dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, 43653 resYear, resDayOfYear; 43654 43655 if (dayOfYear <= 0) { 43656 resYear = year - 1; 43657 resDayOfYear = daysInYear(resYear) + dayOfYear; 43658 } else if (dayOfYear > daysInYear(year)) { 43659 resYear = year + 1; 43660 resDayOfYear = dayOfYear - daysInYear(year); 43661 } else { 43662 resYear = year; 43663 resDayOfYear = dayOfYear; 43664 } 43665 43666 return { 43667 year: resYear, 43668 dayOfYear: resDayOfYear 43669 }; 43670 } 43671 43672 function weekOfYear(mom, dow, doy) { 43673 var weekOffset = firstWeekOffset(mom.year(), dow, doy), 43674 week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, 43675 resWeek, resYear; 43676 43677 if (week < 1) { 43678 resYear = mom.year() - 1; 43679 resWeek = week + weeksInYear(resYear, dow, doy); 43680 } else if (week > weeksInYear(mom.year(), dow, doy)) { 43681 resWeek = week - weeksInYear(mom.year(), dow, doy); 43682 resYear = mom.year() + 1; 43683 } else { 43684 resYear = mom.year(); 43685 resWeek = week; 43686 } 43687 43688 return { 43689 week: resWeek, 43690 year: resYear 43691 }; 43692 } 43693 43694 function weeksInYear(year, dow, doy) { 43695 var weekOffset = firstWeekOffset(year, dow, doy), 43696 weekOffsetNext = firstWeekOffset(year + 1, dow, doy); 43697 return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; 43698 } 43699 43700 // FORMATTING 43701 43702 addFormatToken('w', ['ww', 2], 'wo', 'week'); 43703 addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); 43704 43705 // ALIASES 43706 43707 addUnitAlias('week', 'w'); 43708 addUnitAlias('isoWeek', 'W'); 43709 43710 // PRIORITIES 43711 43712 addUnitPriority('week', 5); 43713 addUnitPriority('isoWeek', 5); 43714 43715 // PARSING 43716 43717 addRegexToken('w', match1to2); 43718 addRegexToken('ww', match1to2, match2); 43719 addRegexToken('W', match1to2); 43720 addRegexToken('WW', match1to2, match2); 43721
vendor: 16,384 bytes, lines 43722-44204
43722 addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { 43723 week[token.substr(0, 1)] = toInt(input); 43724 }); 43725 43726 // HELPERS 43727 43728 // LOCALES 43729 43730 function localeWeek (mom) { 43731 return weekOfYear(mom, this._week.dow, this._week.doy).week; 43732 } 43733 43734 var defaultLocaleWeek = { 43735 dow : 0, // Sunday is the first day of the week. 43736 doy : 6 // The week that contains Jan 1st is the first week of the year. 43737 }; 43738 43739 function localeFirstDayOfWeek () { 43740 return this._week.dow; 43741 } 43742 43743 function localeFirstDayOfYear () { 43744 return this._week.doy; 43745 } 43746 43747 // MOMENTS 43748 43749 function getSetWeek (input) { 43750 var week = this.localeData().week(this); 43751 return input == null ? week : this.add((input - week) * 7, 'd'); 43752 } 43753 43754 function getSetISOWeek (input) { 43755 var week = weekOfYear(this, 1, 4).week; 43756 return input == null ? week : this.add((input - week) * 7, 'd'); 43757 } 43758 43759 // FORMATTING 43760 43761 addFormatToken('d', 0, 'do', 'day'); 43762 43763 addFormatToken('dd', 0, 0, function (format) { 43764 return this.localeData().weekdaysMin(this, format); 43765 }); 43766 43767 addFormatToken('ddd', 0, 0, function (format) { 43768 return this.localeData().weekdaysShort(this, format); 43769 }); 43770 43771 addFormatToken('dddd', 0, 0, function (format) { 43772 return this.localeData().weekdays(this, format); 43773 }); 43774 43775 addFormatToken('e', 0, 0, 'weekday'); 43776 addFormatToken('E', 0, 0, 'isoWeekday'); 43777 43778 // ALIASES 43779 43780 addUnitAlias('day', 'd'); 43781 addUnitAlias('weekday', 'e'); 43782 addUnitAlias('isoWeekday', 'E'); 43783 43784 // PRIORITY 43785 addUnitPriority('day', 11); 43786 addUnitPriority('weekday', 11); 43787 addUnitPriority('isoWeekday', 11); 43788 43789 // PARSING 43790 43791 addRegexToken('d', match1to2); 43792 addRegexToken('e', match1to2); 43793 addRegexToken('E', match1to2); 43794 addRegexToken('dd', function (isStrict, locale) { 43795 return locale.weekdaysMinRegex(isStrict); 43796 }); 43797 addRegexToken('ddd', function (isStrict, locale) { 43798 return locale.weekdaysShortRegex(isStrict); 43799 }); 43800 addRegexToken('dddd', function (isStrict, locale) { 43801 return locale.weekdaysRegex(isStrict); 43802 }); 43803 43804 addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { 43805 var weekday = config._locale.weekdaysParse(input, token, config._strict); 43806 // if we didn't get a weekday name, mark the date as invalid 43807 if (weekday != null) { 43808 week.d = weekday; 43809 } else { 43810 getParsingFlags(config).invalidWeekday = input; 43811 } 43812 }); 43813 43814 addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { 43815 week[token] = toInt(input); 43816 }); 43817 43818 // HELPERS 43819 43820 function parseWeekday(input, locale) { 43821 if (typeof input !== 'string') { 43822 return input; 43823 } 43824 43825 if (!isNaN(input)) { 43826 return parseInt(input, 10); 43827 } 43828 43829 input = locale.weekdaysParse(input); 43830 if (typeof input === 'number') { 43831 return input; 43832 } 43833 43834 return null; 43835 } 43836 43837 function parseIsoWeekday(input, locale) { 43838 if (typeof input === 'string') { 43839 return locale.weekdaysParse(input) % 7 || 7; 43840 } 43841 return isNaN(input) ? null : input; 43842 } 43843 43844 // LOCALES 43845 43846 var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); 43847 function localeWeekdays (m, format) { 43848 if (!m) { 43849 return isArray(this._weekdays) ? this._weekdays : 43850 this._weekdays['standalone']; 43851 } 43852 return isArray(this._weekdays) ? this._weekdays[m.day()] : 43853 this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; 43854 } 43855 43856 var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); 43857 function localeWeekdaysShort (m) { 43858 return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; 43859 } 43860 43861 var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); 43862 function localeWeekdaysMin (m) { 43863 return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; 43864 } 43865 43866 function handleStrictParse$1(weekdayName, format, strict) { 43867 var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); 43868 if (!this._weekdaysParse) { 43869 this._weekdaysParse = []; 43870 this._shortWeekdaysParse = []; 43871 this._minWeekdaysParse = []; 43872 43873 for (i = 0; i < 7; ++i) { 43874 mom = createUTC([2000, 1]).day(i); 43875 this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); 43876 this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); 43877 this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); 43878 } 43879 } 43880 43881 if (strict) { 43882 if (format === 'dddd') { 43883 ii = indexOf.call(this._weekdaysParse, llc); 43884 return ii !== -1 ? ii : null; 43885 } else if (format === 'ddd') { 43886 ii = indexOf.call(this._shortWeekdaysParse, llc); 43887 return ii !== -1 ? ii : null; 43888 } else { 43889 ii = indexOf.call(this._minWeekdaysParse, llc); 43890 return ii !== -1 ? ii : null; 43891 } 43892 } else { 43893 if (format === 'dddd') { 43894 ii = indexOf.call(this._weekdaysParse, llc); 43895 if (ii !== -1) { 43896 return ii; 43897 } 43898 ii = indexOf.call(this._shortWeekdaysParse, llc); 43899 if (ii !== -1) { 43900 return ii; 43901 } 43902 ii = indexOf.call(this._minWeekdaysParse, llc); 43903 return ii !== -1 ? ii : null; 43904 } else if (format === 'ddd') { 43905 ii = indexOf.call(this._shortWeekdaysParse, llc); 43906 if (ii !== -1) { 43907 return ii; 43908 } 43909 ii = indexOf.call(this._weekdaysParse, llc); 43910 if (ii !== -1) { 43911 return ii; 43912 } 43913 ii = indexOf.call(this._minWeekdaysParse, llc); 43914 return ii !== -1 ? ii : null; 43915 } else { 43916 ii = indexOf.call(this._minWeekdaysParse, llc); 43917 if (ii !== -1) { 43918 return ii; 43919 } 43920 ii = indexOf.call(this._weekdaysParse, llc); 43921 if (ii !== -1) { 43922 return ii; 43923 } 43924 ii = indexOf.call(this._shortWeekdaysParse, llc); 43925 return ii !== -1 ? ii : null; 43926 } 43927 } 43928 } 43929 43930 function localeWeekdaysParse (weekdayName, format, strict) { 43931 var i, mom, regex; 43932 43933 if (this._weekdaysParseExact) { 43934 return handleStrictParse$1.call(this, weekdayName, format, strict); 43935 } 43936 43937 if (!this._weekdaysParse) { 43938 this._weekdaysParse = []; 43939 this._minWeekdaysParse = []; 43940 this._shortWeekdaysParse = []; 43941 this._fullWeekdaysParse = []; 43942 } 43943 43944 for (i = 0; i < 7; i++) { 43945 // make the regex if we don't have it already 43946 43947 mom = createUTC([2000, 1]).day(i); 43948 if (strict && !this._fullWeekdaysParse[i]) { 43949 this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i'); 43950 this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i'); 43951 this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i'); 43952 } 43953 if (!this._weekdaysParse[i]) { 43954 regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); 43955 this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); 43956 } 43957 // test the regex 43958 if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { 43959 return i; 43960 } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { 43961 return i; 43962 } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { 43963 return i; 43964 } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { 43965 return i; 43966 } 43967 } 43968 } 43969 43970 // MOMENTS 43971 43972 function getSetDayOfWeek (input) { 43973 if (!this.isValid()) { 43974 return input != null ? this : NaN; 43975 } 43976 var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); 43977 if (input != null) { 43978 input = parseWeekday(input, this.localeData()); 43979 return this.add(input - day, 'd'); 43980 } else { 43981 return day; 43982 } 43983 } 43984 43985 function getSetLocaleDayOfWeek (input) { 43986 if (!this.isValid()) { 43987 return input != null ? this : NaN; 43988 } 43989 var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; 43990 return input == null ? weekday : this.add(input - weekday, 'd'); 43991 } 43992 43993 function getSetISODayOfWeek (input) { 43994 if (!this.isValid()) { 43995 return input != null ? this : NaN; 43996 } 43997 43998 // behaves the same as moment#day except 43999 // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) 44000 // as a setter, sunday should belong to the previous week. 44001 44002 if (input != null) { 44003 var weekday = parseIsoWeekday(input, this.localeData()); 44004 return this.day(this.day() % 7 ? weekday : weekday - 7); 44005 } else { 44006 return this.day() || 7; 44007 } 44008 } 44009 44010 var defaultWeekdaysRegex = matchWord; 44011 function weekdaysRegex (isStrict) { 44012 if (this._weekdaysParseExact) { 44013 if (!hasOwnProp(this, '_weekdaysRegex')) { 44014 computeWeekdaysParse.call(this); 44015 } 44016 if (isStrict) { 44017 return this._weekdaysStrictRegex; 44018 } else { 44019 return this._weekdaysRegex; 44020 } 44021 } else { 44022 if (!hasOwnProp(this, '_weekdaysRegex')) { 44023 this._weekdaysRegex = defaultWeekdaysRegex; 44024 } 44025 return this._weekdaysStrictRegex && isStrict ? 44026 this._weekdaysStrictRegex : this._weekdaysRegex; 44027 } 44028 } 44029 44030 var defaultWeekdaysShortRegex = matchWord; 44031 function weekdaysShortRegex (isStrict) { 44032 if (this._weekdaysParseExact) { 44033 if (!hasOwnProp(this, '_weekdaysRegex')) { 44034 computeWeekdaysParse.call(this); 44035 } 44036 if (isStrict) { 44037 return this._weekdaysShortStrictRegex; 44038 } else { 44039 return this._weekdaysShortRegex; 44040 } 44041 } else { 44042 if (!hasOwnProp(this, '_weekdaysShortRegex')) { 44043 this._weekdaysShortRegex = defaultWeekdaysShortRegex; 44044 } 44045 return this._weekdaysShortStrictRegex && isStrict ? 44046 this._weekdaysShortStrictRegex : this._weekdaysShortRegex; 44047 } 44048 } 44049 44050 var defaultWeekdaysMinRegex = matchWord; 44051 function weekdaysMinRegex (isStrict) { 44052 if (this._weekdaysParseExact) { 44053 if (!hasOwnProp(this, '_weekdaysRegex')) { 44054 computeWeekdaysParse.call(this); 44055 } 44056 if (isStrict) { 44057 return this._weekdaysMinStrictRegex; 44058 } else { 44059 return this._weekdaysMinRegex; 44060 } 44061 } else { 44062 if (!hasOwnProp(this, '_weekdaysMinRegex')) { 44063 this._weekdaysMinRegex = defaultWeekdaysMinRegex; 44064 } 44065 return this._weekdaysMinStrictRegex && isStrict ? 44066 this._weekdaysMinStrictRegex : this._weekdaysMinRegex; 44067 } 44068 } 44069 44070 44071 function computeWeekdaysParse () { 44072 function cmpLenRev(a, b) { 44073 return b.length - a.length; 44074 } 44075 44076 var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], 44077 i, mom, minp, shortp, longp; 44078 for (i = 0; i < 7; i++) { 44079 // make the regex if we don't have it already 44080 mom = createUTC([2000, 1]).day(i); 44081 minp = this.weekdaysMin(mom, ''); 44082 shortp = this.weekdaysShort(mom, ''); 44083 longp = this.weekdays(mom, ''); 44084 minPieces.push(minp); 44085 shortPieces.push(shortp); 44086 longPieces.push(longp); 44087 mixedPieces.push(minp); 44088 mixedPieces.push(shortp); 44089 mixedPieces.push(longp); 44090 } 44091 // Sorting makes sure if one weekday (or abbr) is a prefix of another it 44092 // will match the longer piece. 44093 minPieces.sort(cmpLenRev); 44094 shortPieces.sort(cmpLenRev); 44095 longPieces.sort(cmpLenRev); 44096 mixedPieces.sort(cmpLenRev); 44097 for (i = 0; i < 7; i++) { 44098 shortPieces[i] = regexEscape(shortPieces[i]); 44099 longPieces[i] = regexEscape(longPieces[i]); 44100 mixedPieces[i] = regexEscape(mixedPieces[i]); 44101 } 44102 44103 this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); 44104 this._weekdaysShortRegex = this._weekdaysRegex; 44105 this._weekdaysMinRegex = this._weekdaysRegex; 44106 44107 this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); 44108 this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); 44109 this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); 44110 } 44111 44112 // FORMATTING 44113 44114 function hFormat() { 44115 return this.hours() % 12 || 12; 44116 } 44117 44118 function kFormat() { 44119 return this.hours() || 24; 44120 } 44121 44122 addFormatToken('H', ['HH', 2], 0, 'hour'); 44123 addFormatToken('h', ['hh', 2], 0, hFormat); 44124 addFormatToken('k', ['kk', 2], 0, kFormat); 44125 44126 addFormatToken('hmm', 0, 0, function () { 44127 return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); 44128 }); 44129 44130 addFormatToken('hmmss', 0, 0, function () { 44131 return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + 44132 zeroFill(this.seconds(), 2); 44133 }); 44134 44135 addFormatToken('Hmm', 0, 0, function () { 44136 return '' + this.hours() + zeroFill(this.minutes(), 2); 44137 }); 44138 44139 addFormatToken('Hmmss', 0, 0, function () { 44140 return '' + this.hours() + zeroFill(this.minutes(), 2) + 44141 zeroFill(this.seconds(), 2); 44142 }); 44143 44144 function meridiem (token, lowercase) { 44145 addFormatToken(token, 0, 0, function () { 44146 return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); 44147 }); 44148 } 44149 44150 meridiem('a', true); 44151 meridiem('A', false); 44152 44153 // ALIASES 44154 44155 addUnitAlias('hour', 'h'); 44156 44157 // PRIORITY 44158 addUnitPriority('hour', 13); 44159 44160 // PARSING 44161 44162 function matchMeridiem (isStrict, locale) { 44163 return locale._meridiemParse; 44164 } 44165 44166 addRegexToken('a', matchMeridiem); 44167 addRegexToken('A', matchMeridiem); 44168 addRegexToken('H', match1to2); 44169 addRegexToken('h', match1to2); 44170 addRegexToken('k', match1to2); 44171 addRegexToken('HH', match1to2, match2); 44172 addRegexToken('hh', match1to2, match2); 44173 addRegexToken('kk', match1to2, match2); 44174 44175 addRegexToken('hmm', match3to4); 44176 addRegexToken('hmmss', match5to6); 44177 addRegexToken('Hmm', match3to4); 44178 addRegexToken('Hmmss', match5to6); 44179 44180 addParseToken(['H', 'HH'], HOUR); 44181 addParseToken(['k', 'kk'], function (input, array, config) { 44182 var kInput = toInt(input); 44183 array[HOUR] = kInput === 24 ? 0 : kInput; 44184 }); 44185 addParseToken(['a', 'A'], function (input, array, config) { 44186 config._isPm = config._locale.isPM(input); 44187 config._meridiem = input; 44188 }); 44189 addParseToken(['h', 'hh'], function (input, array, config) { 44190 array[HOUR] = toInt(input); 44191 getParsingFlags(config).bigHour = true; 44192 }); 44193 addParseToken('hmm', function (input, array, config) { 44194 var pos = input.length - 2; 44195 array[HOUR] = toInt(input.substr(0, pos)); 44196 array[MINUTE] = toInt(input.substr(pos)); 44197 getParsingFlags(config).bigHour = true; 44198 }); 44199 addParseToken('hmmss', function (input, array, config) { 44200 var pos1 = input.length - 4; 44201 var pos2 = input.length - 2; 44202 array[HOUR] = toInt(input.substr(0, pos1)); 44203 array[MINUTE] = toInt(input.substr(pos1, 2)); 44204 array[SECOND] = toInt(input
vendor: 14,721 bytes, lines 44204-44618
44204.substr(pos2)); 44205 getParsingFlags(config).bigHour = true; 44206 }); 44207 addParseToken('Hmm', function (input, array, config) { 44208 var pos = input.length - 2; 44209 array[HOUR] = toInt(input.substr(0, pos)); 44210 array[MINUTE] = toInt(input.substr(pos)); 44211 }); 44212 addParseToken('Hmmss', function (input, array, config) { 44213 var pos1 = input.length - 4; 44214 var pos2 = input.length - 2; 44215 array[HOUR] = toInt(input.substr(0, pos1)); 44216 array[MINUTE] = toInt(input.substr(pos1, 2)); 44217 array[SECOND] = toInt(input.substr(pos2)); 44218 }); 44219 44220 // LOCALES 44221 44222 function localeIsPM (input) { 44223 // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays 44224 // Using charAt should be more compatible. 44225 return ((input + '').toLowerCase().charAt(0) === 'p'); 44226 } 44227 44228 var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; 44229 function localeMeridiem (hours, minutes, isLower) { 44230 if (hours > 11) { 44231 return isLower ? 'pm' : 'PM'; 44232 } else { 44233 return isLower ? 'am' : 'AM'; 44234 } 44235 } 44236 44237 44238 // MOMENTS 44239 44240 // Setting the hour should keep the time, because the user explicitly 44241 // specified which hour they want. So trying to maintain the same hour (in 44242 // a new timezone) makes sense. Adding/subtracting hours does not follow 44243 // this rule. 44244 var getSetHour = makeGetSet('Hours', true); 44245 44246 var baseConfig = { 44247 calendar: defaultCalendar, 44248 longDateFormat: defaultLongDateFormat, 44249 invalidDate: defaultInvalidDate, 44250 ordinal: defaultOrdinal, 44251 dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, 44252 relativeTime: defaultRelativeTime, 44253 44254 months: defaultLocaleMonths, 44255 monthsShort: defaultLocaleMonthsShort, 44256 44257 week: defaultLocaleWeek, 44258 44259 weekdays: defaultLocaleWeekdays, 44260 weekdaysMin: defaultLocaleWeekdaysMin, 44261 weekdaysShort: defaultLocaleWeekdaysShort, 44262 44263 meridiemParse: defaultLocaleMeridiemParse 44264 }; 44265 44266 // internal storage for locale config files 44267 var locales = {}; 44268 var localeFamilies = {}; 44269 var globalLocale; 44270 44271 function normalizeLocale(key) { 44272 return key ? key.toLowerCase().replace('_', '-') : key; 44273 } 44274 44275 // pick the locale from the array 44276 // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each 44277 // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root 44278 function chooseLocale(names) { 44279 var i = 0, j, next, locale, split; 44280 44281 while (i < names.length) { 44282 split = normalizeLocale(names[i]).split('-'); 44283 j = split.length; 44284 next = normalizeLocale(names[i + 1]); 44285 next = next ? next.split('-') : null; 44286 while (j > 0) { 44287 locale = loadLocale(split.slice(0, j).join('-')); 44288 if (locale) { 44289 return locale; 44290 } 44291 if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { 44292 //the next array item is better than a shallower substring of this one 44293 break; 44294 } 44295 j--; 44296 } 44297 i++; 44298 } 44299 return globalLocale; 44300 } 44301 44302 function loadLocale(name) { 44303 var oldLocale = null; 44304 // TODO: Find a better way to register and load all the locales in Node 44305 if (!locales[name] && (typeof module !== 'undefined') && 44306 module && module.exports) { 44307 try { 44308 oldLocale = globalLocale._abbr; 44309 var aliasedRequire = require; 44310 aliasedRequire('./locale/' + name); 44311 getSetGlobalLocale(oldLocale); 44312 } catch (e) {} 44313 } 44314 return locales[name]; 44315 } 44316 44317 // This function will load locale and then set the global locale. If 44318 // no arguments are passed in, it will simply return the current global 44319 // locale key. 44320 function getSetGlobalLocale (key, values) { 44321 var data; 44322 if (key) { 44323 if (isUndefined(values)) { 44324 data = getLocale(key); 44325 } 44326 else { 44327 data = defineLocale(key, values); 44328 } 44329 44330 if (data) { 44331 // moment.duration._locale = moment._locale = data; 44332 globalLocale = data; 44333 } 44334 else { 44335 if ((typeof console !== 'undefined') && console.warn) { 44336 //warn user if arguments are passed but the locale could not be set 44337 console.warn('Locale ' + key + ' not found. Did you forget to load it?'); 44338 } 44339 } 44340 } 44341 44342 return globalLocale._abbr; 44343 } 44344 44345 function defineLocale (name, config) { 44346 if (config !== null) { 44347 var locale, parentConfig = baseConfig; 44348 config.abbr = name; 44349 if (locales[name] != null) { 44350 deprecateSimple('defineLocaleOverride', 44351 'use moment.updateLocale(localeName, config) to change ' + 44352 'an existing locale. moment.defineLocale(localeName, ' + 44353 'config) should only be used for creating a new locale ' + 44354 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); 44355 parentConfig = locales[name]._config; 44356 } else if (config.parentLocale != null) { 44357 if (locales[config.parentLocale] != null) { 44358 parentConfig = locales[config.parentLocale]._config; 44359 } else { 44360 locale = loadLocale(config.parentLocale); 44361 if (locale != null) { 44362 parentConfig = locale._config; 44363 } else { 44364 if (!localeFamilies[config.parentLocale]) { 44365 localeFamilies[config.parentLocale] = []; 44366 } 44367 localeFamilies[config.parentLocale].push({ 44368 name: name, 44369 config: config 44370 }); 44371 return null; 44372 } 44373 } 44374 } 44375 locales[name] = new Locale(mergeConfigs(parentConfig, config)); 44376 44377 if (localeFamilies[name]) { 44378 localeFamilies[name].forEach(function (x) { 44379 defineLocale(x.name, x.config); 44380 }); 44381 } 44382 44383 // backwards compat for now: also set the locale 44384 // make sure we set the locale AFTER all child locales have been 44385 // created, so we won't end up with the child locale set. 44386 getSetGlobalLocale(name); 44387 44388 44389 return locales[name]; 44390 } else { 44391 // useful for testing 44392 delete locales[name]; 44393 return null; 44394 } 44395 } 44396 44397 function updateLocale(name, config) { 44398 if (config != null) { 44399 var locale, tmpLocale, parentConfig = baseConfig; 44400 // MERGE 44401 tmpLocale = loadLocale(name); 44402 if (tmpLocale != null) { 44403 parentConfig = tmpLocale._config; 44404 } 44405 config = mergeConfigs(parentConfig, config); 44406 locale = new Locale(config); 44407 locale.parentLocale = locales[name]; 44408 locales[name] = locale; 44409 44410 // backwards compat for now: also set the locale 44411 getSetGlobalLocale(name); 44412 } else { 44413 // pass null for config to unupdate, useful for tests 44414 if (locales[name] != null) { 44415 if (locales[name].parentLocale != null) { 44416 locales[name] = locales[name].parentLocale; 44417 } else if (locales[name] != null) { 44418 delete locales[name]; 44419 } 44420 } 44421 } 44422 return locales[name]; 44423 } 44424 44425 // returns locale data 44426 function getLocale (key) { 44427 var locale; 44428 44429 if (key && key._locale && key._locale._abbr) { 44430 key = key._locale._abbr; 44431 } 44432 44433 if (!key) { 44434 return globalLocale; 44435 } 44436 44437 if (!isArray(key)) { 44438 //short-circuit everything else 44439 locale = loadLocale(key); 44440 if (locale) { 44441 return locale; 44442 } 44443 key = [key]; 44444 } 44445 44446 return chooseLocale(key); 44447 } 44448 44449 function listLocales() { 44450 return keys(locales); 44451 } 44452 44453 function checkOverflow (m) { 44454 var overflow; 44455 var a = m._a; 44456 44457 if (a && getParsingFlags(m).overflow === -2) { 44458 overflow = 44459 a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : 44460 a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : 44461 a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : 44462 a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : 44463 a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : 44464 a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : 44465 -1; 44466 44467 if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { 44468 overflow = DATE; 44469 } 44470 if (getParsingFlags(m)._overflowWeeks && overflow === -1) { 44471 overflow = WEEK; 44472 } 44473 if (getParsingFlags(m)._overflowWeekday && overflow === -1) { 44474 overflow = WEEKDAY; 44475 } 44476 44477 getParsingFlags(m).overflow = overflow; 44478 } 44479 44480 return m; 44481 } 44482 44483 // Pick the first defined of two or three arguments. 44484 function defaults(a, b, c) { 44485 if (a != null) { 44486 return a; 44487 } 44488 if (b != null) { 44489 return b; 44490 } 44491 return c; 44492 } 44493 44494 function currentDateArray(config) { 44495 // hooks is actually the exported moment object 44496 var nowValue = new Date(hooks.now()); 44497 if (config._useUTC) { 44498 return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; 44499 } 44500 return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; 44501 } 44502 44503 // convert an array to a date. 44504 // the array should mirror the parameters below 44505 // note: all values past the year are optional and will default to the lowest possible value. 44506 // [year, month, day , hour, minute, second, millisecond] 44507 function configFromArray (config) { 44508 var i, date, input = [], currentDate, expectedWeekday, yearToUse; 44509 44510 if (config._d) { 44511 return; 44512 } 44513 44514 currentDate = currentDateArray(config); 44515 44516 //compute day of the year from weeks and weekdays 44517 if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { 44518 dayOfYearFromWeekInfo(config); 44519 } 44520 44521 //if the day of the year is set, figure out what it is 44522 if (config._dayOfYear != null) { 44523 yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); 44524 44525 if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) { 44526 getParsingFlags(config)._overflowDayOfYear = true; 44527 } 44528 44529 date = createUTCDate(yearToUse, 0, config._dayOfYear); 44530 config._a[MONTH] = date.getUTCMonth(); 44531 config._a[DATE] = date.getUTCDate(); 44532 } 44533 44534 // Default to current date. 44535 // * if no year, month, day of month are given, default to today 44536 // * if day of month is given, default month and year 44537 // * if month is given, default only year 44538 // * if year is given, don't default anything 44539 for (i = 0; i < 3 && config._a[i] == null; ++i) { 44540 config._a[i] = input[i] = currentDate[i]; 44541 } 44542 44543 // Zero out whatever was not defaulted, including time 44544 for (; i < 7; i++) { 44545 config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; 44546 } 44547 44548 // Check for 24:00:00.000 44549 if (config._a[HOUR] === 24 && 44550 config._a[MINUTE] === 0 && 44551 config._a[SECOND] === 0 && 44552 config._a[MILLISECOND] === 0) { 44553 config._nextDay = true; 44554 config._a[HOUR] = 0; 44555 } 44556 44557 config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); 44558 expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); 44559 44560 // Apply timezone offset from input. The actual utcOffset can be changed 44561 // with parseZone. 44562 if (config._tzm != null) { 44563 config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); 44564 } 44565 44566 if (config._nextDay) { 44567 config._a[HOUR] = 24; 44568 } 44569 44570 // check for mismatching day of week 44571 if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) { 44572 getParsingFlags(config).weekdayMismatch = true; 44573 } 44574 } 44575 44576 function dayOfYearFromWeekInfo(config) { 44577 var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; 44578 44579 w = config._w; 44580 if (w.GG != null || w.W != null || w.E != null) { 44581 dow = 1; 44582 doy = 4; 44583 44584 // TODO: We need to take the current isoWeekYear, but that depends on 44585 // how we interpret now (local, utc, fixed offset). So create 44586 // a now version of current config (take local/utc/offset flags, and 44587 // create now). 44588 weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year); 44589 week = defaults(w.W, 1); 44590 weekday = defaults(w.E, 1); 44591 if (weekday < 1 || weekday > 7) { 44592 weekdayOverflow = true; 44593 } 44594 } else { 44595 dow = config._locale._week.dow; 44596 doy = config._locale._week.doy; 44597 44598 var curWeek = weekOfYear(createLocal(), dow, doy); 44599 44600 weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); 44601 44602 // Default to current week. 44603 week = defaults(w.w, curWeek.week); 44604 44605 if (w.d != null) { 44606 // weekday -- low day numbers are considered next week 44607 weekday = w.d; 44608 if (weekday < 0 || weekday > 6) { 44609 weekdayOverflow = true; 44610 } 44611 } else if (w.e != null) { 44612 // local weekday -- counting starts from begining of week 44613 weekday = w.e + dow; 44614 if (w.e < 0 || w.e > 6) { 44615 weekdayOverflow = true; 44616 } 44617 } else { 44618 // default to begi
vendor: 19,665 bytes, lines 44618-45212
44618ning of week 44619 weekday = dow; 44620 } 44621 } 44622 if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { 44623 getParsingFlags(config)._overflowWeeks = true; 44624 } else if (weekdayOverflow != null) { 44625 getParsingFlags(config)._overflowWeekday = true; 44626 } else { 44627 temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); 44628 config._a[YEAR] = temp.year; 44629 config._dayOfYear = temp.dayOfYear; 44630 } 44631 } 44632 44633 // iso 8601 regex 44634 // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) 44635 var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; 44636 var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; 44637 44638 var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; 44639 44640 var isoDates = [ 44641 ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], 44642 ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], 44643 ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], 44644 ['GGGG-[W]WW', /\d{4}-W\d\d/, false], 44645 ['YYYY-DDD', /\d{4}-\d{3}/], 44646 ['YYYY-MM', /\d{4}-\d\d/, false], 44647 ['YYYYYYMMDD', /[+-]\d{10}/], 44648 ['YYYYMMDD', /\d{8}/], 44649 // YYYYMM is NOT allowed by the standard 44650 ['GGGG[W]WWE', /\d{4}W\d{3}/], 44651 ['GGGG[W]WW', /\d{4}W\d{2}/, false], 44652 ['YYYYDDD', /\d{7}/] 44653 ]; 44654 44655 // iso time formats and regexes 44656 var isoTimes = [ 44657 ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], 44658 ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], 44659 ['HH:mm:ss', /\d\d:\d\d:\d\d/], 44660 ['HH:mm', /\d\d:\d\d/], 44661 ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], 44662 ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], 44663 ['HHmmss', /\d\d\d\d\d\d/], 44664 ['HHmm', /\d\d\d\d/], 44665 ['HH', /\d\d/] 44666 ]; 44667 44668 var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; 44669 44670 // date from iso format 44671 function configFromISO(config) { 44672 var i, l, 44673 string = config._i, 44674 match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), 44675 allowTime, dateFormat, timeFormat, tzFormat; 44676 44677 if (match) { 44678 getParsingFlags(config).iso = true; 44679 44680 for (i = 0, l = isoDates.length; i < l; i++) { 44681 if (isoDates[i][1].exec(match[1])) { 44682 dateFormat = isoDates[i][0]; 44683 allowTime = isoDates[i][2] !== false; 44684 break; 44685 } 44686 } 44687 if (dateFormat == null) { 44688 config._isValid = false; 44689 return; 44690 } 44691 if (match[3]) { 44692 for (i = 0, l = isoTimes.length; i < l; i++) { 44693 if (isoTimes[i][1].exec(match[3])) { 44694 // match[2] should be 'T' or space 44695 timeFormat = (match[2] || ' ') + isoTimes[i][0]; 44696 break; 44697 } 44698 } 44699 if (timeFormat == null) { 44700 config._isValid = false; 44701 return; 44702 } 44703 } 44704 if (!allowTime && timeFormat != null) { 44705 config._isValid = false; 44706 return; 44707 } 44708 if (match[4]) { 44709 if (tzRegex.exec(match[4])) { 44710 tzFormat = 'Z'; 44711 } else { 44712 config._isValid = false; 44713 return; 44714 } 44715 } 44716 config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); 44717 configFromStringAndFormat(config); 44718 } else { 44719 config._isValid = false; 44720 } 44721 } 44722 44723 // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 44724 var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/; 44725 44726 function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { 44727 var result = [ 44728 untruncateYear(yearStr), 44729 defaultLocaleMonthsShort.indexOf(monthStr), 44730 parseInt(dayStr, 10), 44731 parseInt(hourStr, 10), 44732 parseInt(minuteStr, 10) 44733 ]; 44734 44735 if (secondStr) { 44736 result.push(parseInt(secondStr, 10)); 44737 } 44738 44739 return result; 44740 } 44741 44742 function untruncateYear(yearStr) { 44743 var year = parseInt(yearStr, 10); 44744 if (year <= 49) { 44745 return 2000 + year; 44746 } else if (year <= 999) { 44747 return 1900 + year; 44748 } 44749 return year; 44750 } 44751 44752 function preprocessRFC2822(s) { 44753 // Remove comments and folding whitespace and replace multiple-spaces with a single space 44754 return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 44755 } 44756 44757 function checkWeekday(weekdayStr, parsedInput, config) { 44758 if (weekdayStr) { 44759 // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check. 44760 var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), 44761 weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay(); 44762 if (weekdayProvided !== weekdayActual) { 44763 getParsingFlags(config).weekdayMismatch = true; 44764 config._isValid = false; 44765 return false; 44766 } 44767 } 44768 return true; 44769 } 44770 44771 var obsOffsets = { 44772 UT: 0, 44773 GMT: 0, 44774 EDT: -4 * 60, 44775 EST: -5 * 60, 44776 CDT: -5 * 60, 44777 CST: -6 * 60, 44778 MDT: -6 * 60, 44779 MST: -7 * 60, 44780 PDT: -7 * 60, 44781 PST: -8 * 60 44782 }; 44783 44784 function calculateOffset(obsOffset, militaryOffset, numOffset) { 44785 if (obsOffset) { 44786 return obsOffsets[obsOffset]; 44787 } else if (militaryOffset) { 44788 // the only allowed military tz is Z 44789 return 0; 44790 } else { 44791 var hm = parseInt(numOffset, 10); 44792 var m = hm % 100, h = (hm - m) / 100; 44793 return h * 60 + m; 44794 } 44795 } 44796 44797 // date and time from ref 2822 format 44798 function configFromRFC2822(config) { 44799 var match = rfc2822.exec(preprocessRFC2822(config._i)); 44800 if (match) { 44801 var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]); 44802 if (!checkWeekday(match[1], parsedArray, config)) { 44803 return; 44804 } 44805 44806 config._a = parsedArray; 44807 config._tzm = calculateOffset(match[8], match[9], match[10]); 44808 44809 config._d = createUTCDate.apply(null, config._a); 44810 config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); 44811 44812 getParsingFlags(config).rfc2822 = true; 44813 } else { 44814 config._isValid = false; 44815 } 44816 } 44817 44818 // date from iso format or fallback 44819 function configFromString(config) { 44820 var matched = aspNetJsonRegex.exec(config._i); 44821 44822 if (matched !== null) { 44823 config._d = new Date(+matched[1]); 44824 return; 44825 } 44826 44827 configFromISO(config); 44828 if (config._isValid === false) { 44829 delete config._isValid; 44830 } else { 44831 return; 44832 } 44833 44834 configFromRFC2822(config); 44835 if (config._isValid === false) { 44836 delete config._isValid; 44837 } else { 44838 return; 44839 } 44840 44841 // Final attempt, use Input Fallback 44842 hooks.createFromInputFallback(config); 44843 } 44844 44845 hooks.createFromInputFallback = deprecate( 44846 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 44847 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 44848 'discouraged and will be removed in an upcoming major release. Please refer to ' + 44849 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', 44850 function (config) { 44851 config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); 44852 } 44853 ); 44854 44855 // constant that refers to the ISO standard 44856 hooks.ISO_8601 = function () {}; 44857 44858 // constant that refers to the RFC 2822 form 44859 hooks.RFC_2822 = function () {}; 44860 44861 // date from string and format string 44862 function configFromStringAndFormat(config) { 44863 // TODO: Move this to another part of the creation flow to prevent circular deps 44864 if (config._f === hooks.ISO_8601) { 44865 configFromISO(config); 44866 return; 44867 } 44868 if (config._f === hooks.RFC_2822) { 44869 configFromRFC2822(config); 44870 return; 44871 } 44872 config._a = []; 44873 getParsingFlags(config).empty = true; 44874 44875 // This array is used to make a Date, either with `new Date` or `Date.UTC` 44876 var string = '' + config._i, 44877 i, parsedInput, tokens, token, skipped, 44878 stringLength = string.length, 44879 totalParsedInputLength = 0; 44880 44881 tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; 44882 44883 for (i = 0; i < tokens.length; i++) { 44884 token = tokens[i]; 44885 parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; 44886 // console.log('token', token, 'parsedInput', parsedInput, 44887 // 'regex', getParseRegexForToken(token, config)); 44888 if (parsedInput) { 44889 skipped = string.substr(0, string.indexOf(parsedInput)); 44890 if (skipped.length > 0) { 44891 getParsingFlags(config).unusedInput.push(skipped); 44892 } 44893 string = string.slice(string.indexOf(parsedInput) + parsedInput.length); 44894 totalParsedInputLength += parsedInput.length; 44895 } 44896 // don't parse if it's not a known token 44897 if (formatTokenFunctions[token]) { 44898 if (parsedInput) { 44899 getParsingFlags(config).empty = false; 44900 } 44901 else { 44902 getParsingFlags(config).unusedTokens.push(token); 44903 } 44904 addTimeToArrayFromToken(token, parsedInput, config); 44905 } 44906 else if (config._strict && !parsedInput) { 44907 getParsingFlags(config).unusedTokens.push(token); 44908 } 44909 } 44910 44911 // add remaining unparsed input length to the string 44912 getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; 44913 if (string.length > 0) { 44914 getParsingFlags(config).unusedInput.push(string); 44915 } 44916 44917 // clear _12h flag if hour is <= 12 44918 if (config._a[HOUR] <= 12 && 44919 getParsingFlags(config).bigHour === true && 44920 config._a[HOUR] > 0) { 44921 getParsingFlags(config).bigHour = undefined; 44922 } 44923 44924 getParsingFlags(config).parsedDateParts = config._a.slice(0); 44925 getParsingFlags(config).meridiem = config._meridiem; 44926 // handle meridiem 44927 config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); 44928 44929 configFromArray(config); 44930 checkOverflow(config); 44931 } 44932 44933 44934 function meridiemFixWrap (locale, hour, meridiem) { 44935 var isPm; 44936 44937 if (meridiem == null) { 44938 // nothing to do 44939 return hour; 44940 } 44941 if (locale.meridiemHour != null) { 44942 return locale.meridiemHour(hour, meridiem); 44943 } else if (locale.isPM != null) { 44944 // Fallback 44945 isPm = locale.isPM(meridiem); 44946 if (isPm && hour < 12) { 44947 hour += 12; 44948 } 44949 if (!isPm && hour === 12) { 44950 hour = 0; 44951 } 44952 return hour; 44953 } else { 44954 // this is not supposed to happen 44955 return hour; 44956 } 44957 } 44958 44959 // date from string and array of format strings 44960 function configFromStringAndArray(config) { 44961 var tempConfig, 44962 bestMoment, 44963 44964 scoreToBeat, 44965 i, 44966 currentScore; 44967 44968 if (config._f.length === 0) { 44969 getParsingFlags(config).invalidFormat = true; 44970 config._d = new Date(NaN); 44971 return; 44972 } 44973 44974 for (i = 0; i < config._f.length; i++) { 44975 currentScore = 0; 44976 tempConfig = copyConfig({}, config); 44977 if (config._useUTC != null) { 44978 tempConfig._useUTC = config._useUTC; 44979 } 44980 tempConfig._f = config._f[i]; 44981 configFromStringAndFormat(tempConfig); 44982 44983 if (!isValid(tempConfig)) { 44984 continue; 44985 } 44986 44987 // if there is any input that was not parsed add a penalty for that format 44988 currentScore += getParsingFlags(tempConfig).charsLeftOver; 44989 44990 //or tokens 44991 currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; 44992 44993 getParsingFlags(tempConfig).score = currentScore; 44994 44995 if (scoreToBeat == null || currentScore < scoreToBeat) { 44996 scoreToBeat = currentScore; 44997 bestMoment = tempConfig; 44998 } 44999 } 45000 45001 extend(config, bestMoment || tempConfig); 45002 } 45003 45004 function configFromObject(config) { 45005 if (config._d) { 45006 return; 45007 } 45008 45009 var i = normalizeObjectUnits(config._i); 45010 config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { 45011 return obj && parseInt(obj, 10); 45012 }); 45013 45014 configFromArray(config); 45015 } 45016 45017 function createFromConfig (config) { 45018 var res = new Moment(checkOverflow(prepareConfig(config))); 45019 if (res._nextDay) { 45020 // Adding is smart enough around DST 45021 res.add(1, 'd'); 45022 res._nextDay = undefined; 45023 } 45024 45025 return res; 45026 } 45027 45028 function prepareConfig (config) { 45029 var input = config._i, 45030 format = config._f; 45031 45032 config._locale = config._locale || getLocale(config._l); 45033 45034 if (input === null || (format === undefined && input === '')) { 45035 return createInvalid({nullInput: true}); 45036 } 45037 45038 if (typeof input === 'string') { 45039 config._i = input = config._locale.preparse(input); 45040 } 45041 45042 if (isMoment(input)) { 45043 return new Moment(checkOverflow(input)); 45044 } else if (isDate(input)) { 45045 config._d = input; 45046 } else if (isArray(format)) { 45047 configFromStringAndArray(config); 45048 } else if (format) { 45049 configFromStringAndFormat(config); 45050 } else { 45051 configFromInput(config); 45052 } 45053 45054 if (!isValid(config)) { 45055 config._d = null; 45056 } 45057 45058 return config; 45059 } 45060 45061 function configFromInput(config) { 45062 var input = config._i; 45063 if (isUndefined(input)) { 45064 config._d = new Date(hooks.now()); 45065 } else if (isDate(input)) { 45066 config._d = new Date(input.valueOf()); 45067 } else if (typeof input === 'string') { 45068 configFromString(config); 45069 } else if (isArray(input)) { 45070 config._a = map(input.slice(0), function (obj) { 45071 return parseInt(obj, 10); 45072 }); 45073 configFromArray(config); 45074 } else if (isObject(input)) { 45075 configFromObject(config); 45076 } else if (isNumber(input)) { 45077 // from milliseconds 45078 config._d = new Date(input); 45079 } else { 45080 hooks.createFromInputFallback(config); 45081 } 45082 } 45083 45084 function createLocalOrUTC (input, format, locale, strict, isUTC) { 45085 var c = {}; 45086 45087 if (locale === true || locale === false) { 45088 strict = locale; 45089 locale = undefined; 45090 } 45091 45092 if ((isObject(input) && isObjectEmpty(input)) || 45093 (isArray(input) && input.length === 0)) { 45094 input = undefined; 45095 } 45096 // object construction must be done this way. 45097 // https://github.com/moment/moment/issues/1423 45098 c._isAMomentObject = true; 45099 c._useUTC = c._isUTC = isUTC; 45100 c._l = locale; 45101 c._i = input; 45102 c._f = format; 45103 c._strict = strict; 45104 45105 return createFromConfig(c); 45106 } 45107 45108 function createLocal (input, format, locale, strict) { 45109 return createLocalOrUTC(input, format, locale, strict, false); 45110 } 45111 45112 var prototypeMin = deprecate( 45113 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', 45114 function () { 45115 var other = createLocal.apply(null, arguments); 45116 if (this.isValid() && other.isValid()) { 45117 return other < this ? this : other; 45118 } else { 45119 return createInvalid(); 45120 } 45121 } 45122 ); 45123 45124 var prototypeMax = deprecate( 45125 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', 45126 function () { 45127 var other = createLocal.apply(null, arguments); 45128 if (this.isValid() && other.isValid()) { 45129 return other > this ? this : other; 45130 } else { 45131 return createInvalid(); 45132 } 45133 } 45134 ); 45135 45136 // Pick a moment m from moments so that m[fn](other) is true for all 45137 // other. This relies on the function fn to be transitive. 45138 // 45139 // moments should either be an array of moment objects or an array, whose 45140 // first element is an array of moment objects. 45141 function pickBy(fn, moments) { 45142 var res, i; 45143 if (moments.length === 1 && isArray(moments[0])) { 45144 moments = moments[0]; 45145 } 45146 if (!moments.length) { 45147 return createLocal(); 45148 } 45149 res = moments[0]; 45150 for (i = 1; i < moments.length; ++i) { 45151 if (!moments[i].isValid() || moments[i][fn](res)) { 45152 res = moments[i]; 45153 } 45154 } 45155 return res; 45156 } 45157 45158 // TODO: Use [].sort instead? 45159 function min () { 45160 var args = [].slice.call(arguments, 0); 45161 45162 return pickBy('isBefore', args); 45163 } 45164 45165 function max () { 45166 var args = [].slice.call(arguments, 0); 45167 45168 return pickBy('isAfter', args); 45169 } 45170 45171 var now = function () { 45172 return Date.now ? Date.now() : +(new Date()); 45173 }; 45174 45175 var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; 45176 45177 function isDurationValid(m) { 45178 for (var key in m) { 45179 if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) { 45180 return false; 45181 } 45182 } 45183 45184 var unitHasDecimal = false; 45185 for (var i = 0; i < ordering.length; ++i) { 45186 if (m[ordering[i]]) { 45187 if (unitHasDecimal) { 45188 return false; // only allow non-integers for smallest unit 45189 } 45190 if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { 45191 unitHasDecimal = true; 45192 } 45193 } 45194 } 45195 45196 return true; 45197 } 45198 45199 function isValid$1() { 45200 return this._isValid; 45201 } 45202 45203 function createInvalid$1() { 45204 return createDuration(NaN); 45205 } 45206 45207 function Duration (duration) { 45208 var normalizedInput = normalizeObjectUnits(duration), 45209 years = normalizedInput.year || 0, 45210 quarters = normalizedInput.quarter || 0, 45211 months = normalizedInput.month || 0, 45212 weeks = normalizedInput.week ||
vendor: 4,158 bytes, lines 45212-45339
452120, 45213 days = normalizedInput.day || 0, 45214 hours = normalizedInput.hour || 0, 45215 minutes = normalizedInput.minute || 0, 45216 seconds = normalizedInput.second || 0, 45217 milliseconds = normalizedInput.millisecond || 0; 45218 45219 this._isValid = isDurationValid(normalizedInput); 45220 45221 // representation for dateAddRemove 45222 this._milliseconds = +milliseconds + 45223 seconds * 1e3 + // 1000 45224 minutes * 6e4 + // 1000 * 60 45225 hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 45226 // Because of dateAddRemove treats 24 hours as different from a 45227 // day when working around DST, we need to store them separately 45228 this._days = +days + 45229 weeks * 7; 45230 // It is impossible to translate months into days without knowing 45231 // which months you are are talking about, so we have to store 45232 // it separately. 45233 this._months = +months + 45234 quarters * 3 + 45235 years * 12; 45236 45237 this._data = {}; 45238 45239 this._locale = getLocale(); 45240 45241 this._bubble(); 45242 } 45243 45244 function isDuration (obj) { 45245 return obj instanceof Duration; 45246 } 45247 45248 function absRound (number) { 45249 if (number < 0) { 45250 return Math.round(-1 * number) * -1; 45251 } else { 45252 return Math.round(number); 45253 } 45254 } 45255 45256 // FORMATTING 45257 45258 function offset (token, separator) { 45259 addFormatToken(token, 0, 0, function () { 45260 var offset = this.utcOffset(); 45261 var sign = '+'; 45262 if (offset < 0) { 45263 offset = -offset; 45264 sign = '-'; 45265 } 45266 return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); 45267 }); 45268 } 45269 45270 offset('Z', ':'); 45271 offset('ZZ', ''); 45272 45273 // PARSING 45274 45275 addRegexToken('Z', matchShortOffset); 45276 addRegexToken('ZZ', matchShortOffset); 45277 addParseToken(['Z', 'ZZ'], function (input, array, config) { 45278 config._useUTC = true; 45279 config._tzm = offsetFromString(matchShortOffset, input); 45280 }); 45281 45282 // HELPERS 45283 45284 // timezone chunker 45285 // '+10:00' > ['10', '00'] 45286 // '-1530' > ['-15', '30'] 45287 var chunkOffset = /([\+\-]|\d\d)/gi; 45288 45289 function offsetFromString(matcher, string) { 45290 var matches = (string || '').match(matcher); 45291 45292 if (matches === null) { 45293 return null; 45294 } 45295 45296 var chunk = matches[matches.length - 1] || []; 45297 var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; 45298 var minutes = +(parts[1] * 60) + toInt(parts[2]); 45299 45300 return minutes === 0 ? 45301 0 : 45302 parts[0] === '+' ? minutes : -minutes; 45303 } 45304 45305 // Return a moment from input, that is local/utc/zone equivalent to model. 45306 function cloneWithOffset(input, model) { 45307 var res, diff; 45308 if (model._isUTC) { 45309 res = model.clone(); 45310 diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); 45311 // Use low-level api, because this fn is low-level api. 45312 res._d.setTime(res._d.valueOf() + diff); 45313 hooks.updateOffset(res, false); 45314 return res; 45315 } else { 45316 return createLocal(input).local(); 45317 } 45318 } 45319 45320 function getDateOffset (m) { 45321 // On Firefox.24 Date#getTimezoneOffset returns a floating point. 45322 // https://github.com/moment/moment/pull/1871 45323 return -Math.round(m._d.getTimezoneOffset() / 15) * 15; 45324 } 45325 45326 // HOOKS 45327 45328 // This function will be called whenever a moment is mutated. 45329 // It is intended to keep the offset in sync with the timezone. 45330 hooks.updateOffset = function () {}; 45331 45332 // MOMENTS 45333 45334 // keepLocalTime = true means only change the timezone, without 45335 // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> 45336 // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset 45337 // +0200, so we adjust the time as needed, to be valid. 45338 // 45339 // Keeping the time actually adds/subtracts (one hour)
vendor: 20,735 bytes, lines 45340-45946
45340 // from the actual represented time. That is why we call updateOffset 45341 // a second time. In case it wants us to change the offset again 45342 // _changeInProgress == true case, then we have to adjust, because 45343 // there is no such time in the given timezone. 45344 function getSetOffset (input, keepLocalTime, keepMinutes) { 45345 var offset = this._offset || 0, 45346 localAdjust; 45347 if (!this.isValid()) { 45348 return input != null ? this : NaN; 45349 } 45350 if (input != null) { 45351 if (typeof input === 'string') { 45352 input = offsetFromString(matchShortOffset, input); 45353 if (input === null) { 45354 return this; 45355 } 45356 } else if (Math.abs(input) < 16 && !keepMinutes) { 45357 input = input * 60; 45358 } 45359 if (!this._isUTC && keepLocalTime) { 45360 localAdjust = getDateOffset(this); 45361 } 45362 this._offset = input; 45363 this._isUTC = true; 45364 if (localAdjust != null) { 45365 this.add(localAdjust, 'm'); 45366 } 45367 if (offset !== input) { 45368 if (!keepLocalTime || this._changeInProgress) { 45369 addSubtract(this, createDuration(input - offset, 'm'), 1, false); 45370 } else if (!this._changeInProgress) { 45371 this._changeInProgress = true; 45372 hooks.updateOffset(this, true); 45373 this._changeInProgress = null; 45374 } 45375 } 45376 return this; 45377 } else { 45378 return this._isUTC ? offset : getDateOffset(this); 45379 } 45380 } 45381 45382 function getSetZone (input, keepLocalTime) { 45383 if (input != null) { 45384 if (typeof input !== 'string') { 45385 input = -input; 45386 } 45387 45388 this.utcOffset(input, keepLocalTime); 45389 45390 return this; 45391 } else { 45392 return -this.utcOffset(); 45393 } 45394 } 45395 45396 function setOffsetToUTC (keepLocalTime) { 45397 return this.utcOffset(0, keepLocalTime); 45398 } 45399 45400 function setOffsetToLocal (keepLocalTime) { 45401 if (this._isUTC) { 45402 this.utcOffset(0, keepLocalTime); 45403 this._isUTC = false; 45404 45405 if (keepLocalTime) { 45406 this.subtract(getDateOffset(this), 'm'); 45407 } 45408 } 45409 return this; 45410 } 45411 45412 function setOffsetToParsedOffset () { 45413 if (this._tzm != null) { 45414 this.utcOffset(this._tzm, false, true); 45415 } else if (typeof this._i === 'string') { 45416 var tZone = offsetFromString(matchOffset, this._i); 45417 if (tZone != null) { 45418 this.utcOffset(tZone); 45419 } 45420 else { 45421 this.utcOffset(0, true); 45422 } 45423 } 45424 return this; 45425 } 45426 45427 function hasAlignedHourOffset (input) { 45428 if (!this.isValid()) { 45429 return false; 45430 } 45431 input = input ? createLocal(input).utcOffset() : 0; 45432 45433 return (this.utcOffset() - input) % 60 === 0; 45434 } 45435 45436 function isDaylightSavingTime () { 45437 return ( 45438 this.utcOffset() > this.clone().month(0).utcOffset() || 45439 this.utcOffset() > this.clone().month(5).utcOffset() 45440 ); 45441 } 45442 45443 function isDaylightSavingTimeShifted () { 45444 if (!isUndefined(this._isDSTShifted)) { 45445 return this._isDSTShifted; 45446 } 45447 45448 var c = {}; 45449 45450 copyConfig(c, this); 45451 c = prepareConfig(c); 45452 45453 if (c._a) { 45454 var other = c._isUTC ? createUTC(c._a) : createLocal(c._a); 45455 this._isDSTShifted = this.isValid() && 45456 compareArrays(c._a, other.toArray()) > 0; 45457 } else { 45458 this._isDSTShifted = false; 45459 } 45460 45461 return this._isDSTShifted; 45462 } 45463 45464 function isLocal () { 45465 return this.isValid() ? !this._isUTC : false; 45466 } 45467 45468 function isUtcOffset () { 45469 return this.isValid() ? this._isUTC : false; 45470 } 45471 45472 function isUtc () { 45473 return this.isValid() ? this._isUTC && this._offset === 0 : false; 45474 } 45475 45476 // ASP.NET json date format regex 45477 var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; 45478 45479 // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html 45480 // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere 45481 // and further modified to allow for strings containing both week and day 45482 var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; 45483 45484 function createDuration (input, key) { 45485 var duration = input, 45486 // matching against regexp is expensive, do it on demand 45487 match = null, 45488 sign, 45489 ret, 45490 diffRes; 45491 45492 if (isDuration(input)) { 45493 duration = { 45494 ms : input._milliseconds, 45495 d : input._days, 45496 M : input._months 45497 }; 45498 } else if (isNumber(input)) { 45499 duration = {}; 45500 if (key) { 45501 duration[key] = input; 45502 } else { 45503 duration.milliseconds = input; 45504 } 45505 } else if (!!(match = aspNetRegex.exec(input))) { 45506 sign = (match[1] === '-') ? -1 : 1; 45507 duration = { 45508 y : 0, 45509 d : toInt(match[DATE]) * sign, 45510 h : toInt(match[HOUR]) * sign, 45511 m : toInt(match[MINUTE]) * sign, 45512 s : toInt(match[SECOND]) * sign, 45513 ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match 45514 }; 45515 } else if (!!(match = isoRegex.exec(input))) { 45516 sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1; 45517 duration = { 45518 y : parseIso(match[2], sign), 45519 M : parseIso(match[3], sign), 45520 w : parseIso(match[4], sign), 45521 d : parseIso(match[5], sign), 45522 h : parseIso(match[6], sign), 45523 m : parseIso(match[7], sign), 45524 s : parseIso(match[8], sign) 45525 }; 45526 } else if (duration == null) {// checks for null or undefined 45527 duration = {}; 45528 } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { 45529 diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to)); 45530 45531 duration = {}; 45532 duration.ms = diffRes.milliseconds; 45533 duration.M = diffRes.months; 45534 } 45535 45536 ret = new Duration(duration); 45537 45538 if (isDuration(input) && hasOwnProp(input, '_locale')) { 45539 ret._locale = input._locale; 45540 } 45541 45542 return ret; 45543 } 45544 45545 createDuration.fn = Duration.prototype; 45546 createDuration.invalid = createInvalid$1; 45547 45548 function parseIso (inp, sign) { 45549 // We'd normally use ~~inp for this, but unfortunately it also 45550 // converts floats to ints. 45551 // inp may be undefined, so careful calling replace on it. 45552 var res = inp && parseFloat(inp.replace(',', '.')); 45553 // apply sign while we're at it 45554 return (isNaN(res) ? 0 : res) * sign; 45555 } 45556 45557 function positiveMomentsDifference(base, other) { 45558 var res = {milliseconds: 0, months: 0}; 45559 45560 res.months = other.month() - base.month() + 45561 (other.year() - base.year()) * 12; 45562 if (base.clone().add(res.months, 'M').isAfter(other)) { 45563 --res.months; 45564 } 45565 45566 res.milliseconds = +other - +(base.clone().add(res.months, 'M')); 45567 45568 return res; 45569 } 45570 45571 function momentsDifference(base, other) { 45572 var res; 45573 if (!(base.isValid() && other.isValid())) { 45574 return {milliseconds: 0, months: 0}; 45575 } 45576 45577 other = cloneWithOffset(other, base); 45578 if (base.isBefore(other)) { 45579 res = positiveMomentsDifference(base, other); 45580 } else { 45581 res = positiveMomentsDifference(other, base); 45582 res.milliseconds = -res.milliseconds; 45583 res.months = -res.months; 45584 } 45585 45586 return res; 45587 } 45588 45589 // TODO: remove 'name' arg after deprecation is removed 45590 function createAdder(direction, name) { 45591 return function (val, period) { 45592 var dur, tmp; 45593 //invert the arguments, but complain about it 45594 if (period !== null && !isNaN(+period)) { 45595 deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 45596 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); 45597 tmp = val; val = period; period = tmp; 45598 } 45599 45600 val = typeof val === 'string' ? +val : val; 45601 dur = createDuration(val, period); 45602 addSubtract(this, dur, direction); 45603 return this; 45604 }; 45605 } 45606 45607 function addSubtract (mom, duration, isAdding, updateOffset) { 45608 var milliseconds = duration._milliseconds, 45609 days = absRound(duration._days), 45610 months = absRound(duration._months); 45611 45612 if (!mom.isValid()) { 45613 // No op 45614 return; 45615 } 45616 45617 updateOffset = updateOffset == null ? true : updateOffset; 45618 45619 if (months) { 45620 setMonth(mom, get(mom, 'Month') + months * isAdding); 45621 } 45622 if (days) { 45623 set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); 45624 } 45625 if (milliseconds) { 45626 mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); 45627 } 45628 if (updateOffset) { 45629 hooks.updateOffset(mom, days || months); 45630 } 45631 } 45632 45633 var add = createAdder(1, 'add'); 45634 var subtract = createAdder(-1, 'subtract'); 45635 45636 function getCalendarFormat(myMoment, now) { 45637 var diff = myMoment.diff(now, 'days', true); 45638 return diff < -6 ? 'sameElse' : 45639 diff < -1 ? 'lastWeek' : 45640 diff < 0 ? 'lastDay' : 45641 diff < 1 ? 'sameDay' : 45642 diff < 2 ? 'nextDay' : 45643 diff < 7 ? 'nextWeek' : 'sameElse'; 45644 } 45645 45646 function calendar$1 (time, formats) { 45647 // We want to compare the start of today, vs this. 45648 // Getting start-of-today depends on whether we're local/utc/offset or not. 45649 var now = time || createLocal(), 45650 sod = cloneWithOffset(now, this).startOf('day'), 45651 format = hooks.calendarFormat(this, sod) || 'sameElse'; 45652 45653 var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); 45654 45655 return this.format(output || this.localeData().calendar(format, this, createLocal(now))); 45656 } 45657 45658 function clone () { 45659 return new Moment(this); 45660 } 45661 45662 function isAfter (input, units) { 45663 var localInput = isMoment(input) ? input : createLocal(input); 45664 if (!(this.isValid() && localInput.isValid())) { 45665 return false; 45666 } 45667 units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); 45668 if (units === 'millisecond') { 45669 return this.valueOf() > localInput.valueOf(); 45670 } else { 45671 return localInput.valueOf() < this.clone().startOf(units).valueOf(); 45672 } 45673 } 45674 45675 function isBefore (input, units) { 45676 var localInput = isMoment(input) ? input : createLocal(input); 45677 if (!(this.isValid() && localInput.isValid())) { 45678 return false; 45679 } 45680 units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); 45681 if (units === 'millisecond') { 45682 return this.valueOf() < localInput.valueOf(); 45683 } else { 45684 return this.clone().endOf(units).valueOf() < localInput.valueOf(); 45685 } 45686 } 45687 45688 function isBetween (from, to, units, inclusivity) { 45689 inclusivity = inclusivity || '()'; 45690 return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && 45691 (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); 45692 } 45693 45694 function isSame (input, units) { 45695 var localInput = isMoment(input) ? input : createLocal(input), 45696 inputMs; 45697 if (!(this.isValid() && localInput.isValid())) { 45698 return false; 45699 } 45700 units = normalizeUnits(units || 'millisecond'); 45701 if (units === 'millisecond') { 45702 return this.valueOf() === localInput.valueOf(); 45703 } else { 45704 inputMs = localInput.valueOf(); 45705 return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); 45706 } 45707 } 45708 45709 function isSameOrAfter (input, units) { 45710 return this.isSame(input, units) || this.isAfter(input,units); 45711 } 45712 45713 function isSameOrBefore (input, units) { 45714 return this.isSame(input, units) || this.isBefore(input,units); 45715 } 45716 45717 function diff (input, units, asFloat) { 45718 var that, 45719 zoneDelta, 45720 output; 45721 45722 if (!this.isValid()) { 45723 return NaN; 45724 } 45725 45726 that = cloneWithOffset(input, this); 45727 45728 if (!that.isValid()) { 45729 return NaN; 45730 } 45731 45732 zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; 45733 45734 units = normalizeUnits(units); 45735 45736 switch (units) { 45737 case 'year': output = monthDiff(this, that) / 12; break; 45738 case 'month': output = monthDiff(this, that); break; 45739 case 'quarter': output = monthDiff(this, that) / 3; break; 45740 case 'second': output = (this - that) / 1e3; break; // 1000 45741 case 'minute': output = (this - that) / 6e4; break; // 1000 * 60 45742 case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60 45743 case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst 45744 case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst 45745 default: output = this - that; 45746 } 45747 45748 return asFloat ? output : absFloor(output); 45749 } 45750 45751 function monthDiff (a, b) { 45752 // difference in months 45753 var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), 45754 // b is in (anchor - 1 month, anchor + 1 month) 45755 anchor = a.clone().add(wholeMonthDiff, 'months'), 45756 anchor2, adjust; 45757 45758 if (b - anchor < 0) { 45759 anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); 45760 // linear across the month 45761 adjust = (b - anchor) / (anchor - anchor2); 45762 } else { 45763 anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); 45764 // linear across the month 45765 adjust = (b - anchor) / (anchor2 - anchor); 45766 } 45767 45768 //check for negative zero, return zero if negative zero 45769 return -(wholeMonthDiff + adjust) || 0; 45770 } 45771 45772 hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; 45773 hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; 45774 45775 function toString () { 45776 return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); 45777 } 45778 45779 function toISOString(keepOffset) { 45780 if (!this.isValid()) { 45781 return null; 45782 } 45783 var utc = keepOffset !== true; 45784 var m = utc ? this.clone().utc() : this; 45785 if (m.year() < 0 || m.year() > 9999) { 45786 return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'); 45787 } 45788 if (isFunction(Date.prototype.toISOString)) { 45789 // native implementation is ~50x faster, use it when we can 45790 if (utc) { 45791 return this.toDate().toISOString(); 45792 } else { 45793 return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z')); 45794 } 45795 } 45796 return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'); 45797 } 45798 45799 /** 45800 * Return a human readable representation of a moment that can 45801 * also be evaluated to get a new moment which is the same 45802 * 45803 * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects 45804 */ 45805 function inspect () { 45806 if (!this.isValid()) { 45807 return 'moment.invalid(/* ' + this._i + ' */)'; 45808 } 45809 var func = 'moment'; 45810 var zone = ''; 45811 if (!this.isLocal()) { 45812 func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; 45813 zone = 'Z'; 45814 } 45815 var prefix = '[' + func + '("]'; 45816 var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY'; 45817 var datetime = '-MM-DD[T]HH:mm:ss.SSS'; 45818 var suffix = zone + '[")]'; 45819 45820 return this.format(prefix + year + datetime + suffix); 45821 } 45822 45823 function format (inputString) { 45824 if (!inputString) { 45825 inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat; 45826 } 45827 var output = formatMoment(this, inputString); 45828 return this.localeData().postformat(output); 45829 } 45830 45831 function from (time, withoutSuffix) { 45832 if (this.isValid() && 45833 ((isMoment(time) && time.isValid()) || 45834 createLocal(time).isValid())) { 45835 return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); 45836 } else { 45837 return this.localeData().invalidDate(); 45838 } 45839 } 45840 45841 function fromNow (withoutSuffix) { 45842 return this.from(createLocal(), withoutSuffix); 45843 } 45844 45845 function to (time, withoutSuffix) { 45846 if (this.isValid() && 45847 ((isMoment(time) && time.isValid()) || 45848 createLocal(time).isValid())) { 45849 return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); 45850 } else { 45851 return this.localeData().invalidDate(); 45852 } 45853 } 45854 45855 function toNow (withoutSuffix) { 45856 return this.to(createLocal(), withoutSuffix); 45857 } 45858 45859 // If passed a locale key, it will set the locale for this 45860 // instance. Otherwise, it will return the locale configuration 45861 // variables for this instance. 45862 function locale (key) { 45863 var newLocaleData; 45864 45865 if (key === undefined) { 45866 return this._locale._abbr; 45867 } else { 45868 newLocaleData = getLocale(key); 45869 if (newLocaleData != null) { 45870 this._locale = newLocaleData; 45871 } 45872 return this; 45873 } 45874 } 45875 45876 var lang = deprecate( 45877 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', 45878 function (key) { 45879 if (key === undefined) { 45880 return this.localeData(); 45881 } else { 45882 return this.locale(key); 45883 } 45884 } 45885 ); 45886 45887 function localeData () { 45888 return this._locale; 45889 } 45890 45891 function startOf (units) { 45892 units = normalizeUnits(units); 45893 // the following switch intentionally omits break keywords 45894 // to utilize falling through the cases. 45895 switch (units) { 45896 case 'year': 45897 this.month(0); 45898 /* falls through */ 45899 case 'quarter': 45900 case 'month': 45901 this.date(1); 45902 /* falls through */ 45903 case 'week': 45904 case 'isoWeek': 45905 case 'day': 45906 case 'date': 45907 this.hours(0); 45908 /* falls through */ 45909 case 'hour': 45910 this.minutes(0); 45911 /* falls through */ 45912 case 'minute': 45913 this.seconds(0); 45914 /* falls through */ 45915 case 'second': 45916 this.milliseconds(0); 45917 } 45918 45919 // weeks are a special case 45920 if (units === 'week') { 45921 this.weekday(0); 45922 } 45923 if (units === 'isoWeek') { 45924 this.isoWeekday(1); 45925 } 45926 45927 // quarters are also special 45928 if (units === 'quarter') { 45929 this.month(Math.floor(this.month() / 3) * 3); 45930 } 45931 45932 return this; 45933 } 45934 45935 function endOf (units) { 45936 units = normalizeUnits(units); 45937 if (units === undefined || units === 'millisecond') { 45938 return this; 45939 } 45940 45941 // 'date' is an alias for 'day', so it should be considered as such. 45942 if (units === 'date') { 45943 units = 'day'; 45944 } 45945 45946 return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms')
vendor: 20,515 bytes, lines 45946-46652
45946; 45947 } 45948 45949 function valueOf () { 45950 return this._d.valueOf() - ((this._offset || 0) * 60000); 45951 } 45952 45953 function unix () { 45954 return Math.floor(this.valueOf() / 1000); 45955 } 45956 45957 function toDate () { 45958 return new Date(this.valueOf()); 45959 } 45960 45961 function toArray () { 45962 var m = this; 45963 return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; 45964 } 45965 45966 function toObject () { 45967 var m = this; 45968 return { 45969 years: m.year(), 45970 months: m.month(), 45971 date: m.date(), 45972 hours: m.hours(), 45973 minutes: m.minutes(), 45974 seconds: m.seconds(), 45975 milliseconds: m.milliseconds() 45976 }; 45977 } 45978 45979 function toJSON () { 45980 // new Date(NaN).toJSON() === null 45981 return this.isValid() ? this.toISOString() : null; 45982 } 45983 45984 function isValid$2 () { 45985 return isValid(this); 45986 } 45987 45988 function parsingFlags () { 45989 return extend({}, getParsingFlags(this)); 45990 } 45991 45992 function invalidAt () { 45993 return getParsingFlags(this).overflow; 45994 } 45995 45996 function creationData() { 45997 return { 45998 input: this._i, 45999 format: this._f, 46000 locale: this._locale, 46001 isUTC: this._isUTC, 46002 strict: this._strict 46003 }; 46004 } 46005 46006 // FORMATTING 46007 46008 addFormatToken(0, ['gg', 2], 0, function () { 46009 return this.weekYear() % 100; 46010 }); 46011 46012 addFormatToken(0, ['GG', 2], 0, function () { 46013 return this.isoWeekYear() % 100; 46014 }); 46015 46016 function addWeekYearFormatToken (token, getter) { 46017 addFormatToken(0, [token, token.length], 0, getter); 46018 } 46019 46020 addWeekYearFormatToken('gggg', 'weekYear'); 46021 addWeekYearFormatToken('ggggg', 'weekYear'); 46022 addWeekYearFormatToken('GGGG', 'isoWeekYear'); 46023 addWeekYearFormatToken('GGGGG', 'isoWeekYear'); 46024 46025 // ALIASES 46026 46027 addUnitAlias('weekYear', 'gg'); 46028 addUnitAlias('isoWeekYear', 'GG'); 46029 46030 // PRIORITY 46031 46032 addUnitPriority('weekYear', 1); 46033 addUnitPriority('isoWeekYear', 1); 46034 46035 46036 // PARSING 46037 46038 addRegexToken('G', matchSigned); 46039 addRegexToken('g', matchSigned); 46040 addRegexToken('GG', match1to2, match2); 46041 addRegexToken('gg', match1to2, match2); 46042 addRegexToken('GGGG', match1to4, match4); 46043 addRegexToken('gggg', match1to4, match4); 46044 addRegexToken('GGGGG', match1to6, match6); 46045 addRegexToken('ggggg', match1to6, match6); 46046 46047 addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { 46048 week[token.substr(0, 2)] = toInt(input); 46049 }); 46050 46051 addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { 46052 week[token] = hooks.parseTwoDigitYear(input); 46053 }); 46054 46055 // MOMENTS 46056 46057 function getSetWeekYear (input) { 46058 return getSetWeekYearHelper.call(this, 46059 input, 46060 this.week(), 46061 this.weekday(), 46062 this.localeData()._week.dow, 46063 this.localeData()._week.doy); 46064 } 46065 46066 function getSetISOWeekYear (input) { 46067 return getSetWeekYearHelper.call(this, 46068 input, this.isoWeek(), this.isoWeekday(), 1, 4); 46069 } 46070 46071 function getISOWeeksInYear () { 46072 return weeksInYear(this.year(), 1, 4); 46073 } 46074 46075 function getWeeksInYear () { 46076 var weekInfo = this.localeData()._week; 46077 return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); 46078 } 46079 46080 function getSetWeekYearHelper(input, week, weekday, dow, doy) { 46081 var weeksTarget; 46082 if (input == null) { 46083 return weekOfYear(this, dow, doy).year; 46084 } else { 46085 weeksTarget = weeksInYear(input, dow, doy); 46086 if (week > weeksTarget) { 46087 week = weeksTarget; 46088 } 46089 return setWeekAll.call(this, input, week, weekday, dow, doy); 46090 } 46091 } 46092 46093 function setWeekAll(weekYear, week, weekday, dow, doy) { 46094 var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), 46095 date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); 46096 46097 this.year(date.getUTCFullYear()); 46098 this.month(date.getUTCMonth()); 46099 this.date(date.getUTCDate()); 46100 return this; 46101 } 46102 46103 // FORMATTING 46104 46105 addFormatToken('Q', 0, 'Qo', 'quarter'); 46106 46107 // ALIASES 46108 46109 addUnitAlias('quarter', 'Q'); 46110 46111 // PRIORITY 46112 46113 addUnitPriority('quarter', 7); 46114 46115 // PARSING 46116 46117 addRegexToken('Q', match1); 46118 addParseToken('Q', function (input, array) { 46119 array[MONTH] = (toInt(input) - 1) * 3; 46120 }); 46121 46122 // MOMENTS 46123 46124 function getSetQuarter (input) { 46125 return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); 46126 } 46127 46128 // FORMATTING 46129 46130 addFormatToken('D', ['DD', 2], 'Do', 'date'); 46131 46132 // ALIASES 46133 46134 addUnitAlias('date', 'D'); 46135 46136 // PRIORITY 46137 addUnitPriority('date', 9); 46138 46139 // PARSING 46140 46141 addRegexToken('D', match1to2); 46142 addRegexToken('DD', match1to2, match2); 46143 addRegexToken('Do', function (isStrict, locale) { 46144 // TODO: Remove "ordinalParse" fallback in next major release. 46145 return isStrict ? 46146 (locale._dayOfMonthOrdinalParse || locale._ordinalParse) : 46147 locale._dayOfMonthOrdinalParseLenient; 46148 }); 46149 46150 addParseToken(['D', 'DD'], DATE); 46151 addParseToken('Do', function (input, array) { 46152 array[DATE] = toInt(input.match(match1to2)[0]); 46153 }); 46154 46155 // MOMENTS 46156 46157 var getSetDayOfMonth = makeGetSet('Date', true); 46158 46159 // FORMATTING 46160 46161 addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); 46162 46163 // ALIASES 46164 46165 addUnitAlias('dayOfYear', 'DDD'); 46166 46167 // PRIORITY 46168 addUnitPriority('dayOfYear', 4); 46169 46170 // PARSING 46171 46172 addRegexToken('DDD', match1to3); 46173 addRegexToken('DDDD', match3); 46174 addParseToken(['DDD', 'DDDD'], function (input, array, config) { 46175 config._dayOfYear = toInt(input); 46176 }); 46177 46178 // HELPERS 46179 46180 // MOMENTS 46181 46182 function getSetDayOfYear (input) { 46183 var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; 46184 return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); 46185 } 46186 46187 // FORMATTING 46188 46189 addFormatToken('m', ['mm', 2], 0, 'minute'); 46190 46191 // ALIASES 46192 46193 addUnitAlias('minute', 'm'); 46194 46195 // PRIORITY 46196 46197 addUnitPriority('minute', 14); 46198 46199 // PARSING 46200 46201 addRegexToken('m', match1to2); 46202 addRegexToken('mm', match1to2, match2); 46203 addParseToken(['m', 'mm'], MINUTE); 46204 46205 // MOMENTS 46206 46207 var getSetMinute = makeGetSet('Minutes', false); 46208 46209 // FORMATTING 46210 46211 addFormatToken('s', ['ss', 2], 0, 'second'); 46212 46213 // ALIASES 46214 46215 addUnitAlias('second', 's'); 46216 46217 // PRIORITY 46218 46219 addUnitPriority('second', 15); 46220 46221 // PARSING 46222 46223 addRegexToken('s', match1to2); 46224 addRegexToken('ss', match1to2, match2); 46225 addParseToken(['s', 'ss'], SECOND); 46226 46227 // MOMENTS 46228 46229 var getSetSecond = makeGetSet('Seconds', false); 46230 46231 // FORMATTING 46232 46233 addFormatToken('S', 0, 0, function () { 46234 return ~~(this.millisecond() / 100); 46235 }); 46236 46237 addFormatToken(0, ['SS', 2], 0, function () { 46238 return ~~(this.millisecond() / 10); 46239 }); 46240 46241 addFormatToken(0, ['SSS', 3], 0, 'millisecond'); 46242 addFormatToken(0, ['SSSS', 4], 0, function () { 46243 return this.millisecond() * 10; 46244 }); 46245 addFormatToken(0, ['SSSSS', 5], 0, function () { 46246 return this.millisecond() * 100; 46247 }); 46248 addFormatToken(0, ['SSSSSS', 6], 0, function () { 46249 return this.millisecond() * 1000; 46250 }); 46251 addFormatToken(0, ['SSSSSSS', 7], 0, function () { 46252 return this.millisecond() * 10000; 46253 }); 46254 addFormatToken(0, ['SSSSSSSS', 8], 0, function () { 46255 return this.millisecond() * 100000; 46256 }); 46257 addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { 46258 return this.millisecond() * 1000000; 46259 }); 46260 46261 46262 // ALIASES 46263 46264 addUnitAlias('millisecond', 'ms'); 46265 46266 // PRIORITY 46267 46268 addUnitPriority('millisecond', 16); 46269 46270 // PARSING 46271 46272 addRegexToken('S', match1to3, match1); 46273 addRegexToken('SS', match1to3, match2); 46274 addRegexToken('SSS', match1to3, match3); 46275 46276 var token; 46277 for (token = 'SSSS'; token.length <= 9; token += 'S') { 46278 addRegexToken(token, matchUnsigned); 46279 } 46280 46281 function parseMs(input, array) { 46282 array[MILLISECOND] = toInt(('0.' + input) * 1000); 46283 } 46284 46285 for (token = 'S'; token.length <= 9; token += 'S') { 46286 addParseToken(token, parseMs); 46287 } 46288 // MOMENTS 46289 46290 var getSetMillisecond = makeGetSet('Milliseconds', false); 46291 46292 // FORMATTING 46293 46294 addFormatToken('z', 0, 0, 'zoneAbbr'); 46295 addFormatToken('zz', 0, 0, 'zoneName'); 46296 46297 // MOMENTS 46298 46299 function getZoneAbbr () { 46300 return this._isUTC ? 'UTC' : ''; 46301 } 46302 46303 function getZoneName () { 46304 return this._isUTC ? 'Coordinated Universal Time' : ''; 46305 } 46306 46307 var proto = Moment.prototype; 46308 46309 proto.add = add; 46310 proto.calendar = calendar$1; 46311 proto.clone = clone; 46312 proto.diff = diff; 46313 proto.endOf = endOf; 46314 proto.format = format; 46315 proto.from = from; 46316 proto.fromNow = fromNow; 46317 proto.to = to; 46318 proto.toNow = toNow; 46319 proto.get = stringGet; 46320 proto.invalidAt = invalidAt; 46321 proto.isAfter = isAfter; 46322 proto.isBefore = isBefore; 46323 proto.isBetween = isBetween; 46324 proto.isSame = isSame; 46325 proto.isSameOrAfter = isSameOrAfter; 46326 proto.isSameOrBefore = isSameOrBefore; 46327 proto.isValid = isValid$2; 46328 proto.lang = lang; 46329 proto.locale = locale; 46330 proto.localeData = localeData; 46331 proto.max = prototypeMax; 46332 proto.min = prototypeMin; 46333 proto.parsingFlags = parsingFlags; 46334 proto.set = stringSet; 46335 proto.startOf = startOf; 46336 proto.subtract = subtract; 46337 proto.toArray = toArray; 46338 proto.toObject = toObject; 46339 proto.toDate = toDate; 46340 proto.toISOString = toISOString; 46341 proto.inspect = inspect; 46342 proto.toJSON = toJSON; 46343 proto.toString = toString; 46344 proto.unix = unix; 46345 proto.valueOf = valueOf; 46346 proto.creationData = creationData; 46347 proto.year = getSetYear; 46348 proto.isLeapYear = getIsLeapYear; 46349 proto.weekYear = getSetWeekYear; 46350 proto.isoWeekYear = getSetISOWeekYear; 46351 proto.quarter = proto.quarters = getSetQuarter; 46352 proto.month = getSetMonth; 46353 proto.daysInMonth = getDaysInMonth; 46354 proto.week = proto.weeks = getSetWeek; 46355 proto.isoWeek = proto.isoWeeks = getSetISOWeek; 46356 proto.weeksInYear = getWeeksInYear; 46357 proto.isoWeeksInYear = getISOWeeksInYear; 46358 proto.date = getSetDayOfMonth; 46359 proto.day = proto.days = getSetDayOfWeek; 46360 proto.weekday = getSetLocaleDayOfWeek; 46361 proto.isoWeekday = getSetISODayOfWeek; 46362 proto.dayOfYear = getSetDayOfYear; 46363 proto.hour = proto.hours = getSetHour; 46364 proto.minute = proto.minutes = getSetMinute; 46365 proto.second = proto.seconds = getSetSecond; 46366 proto.millisecond = proto.milliseconds = getSetMillisecond; 46367 proto.utcOffset = getSetOffset; 46368 proto.utc = setOffsetToUTC; 46369 proto.local = setOffsetToLocal; 46370 proto.parseZone = setOffsetToParsedOffset; 46371 proto.hasAlignedHourOffset = hasAlignedHourOffset; 46372 proto.isDST = isDaylightSavingTime; 46373 proto.isLocal = isLocal; 46374 proto.isUtcOffset = isUtcOffset; 46375 proto.isUtc = isUtc; 46376 proto.isUTC = isUtc; 46377 proto.zoneAbbr = getZoneAbbr; 46378 proto.zoneName = getZoneName; 46379 proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); 46380 proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); 46381 proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); 46382 proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); 46383 proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); 46384 46385 function createUnix (input) { 46386 return createLocal(input * 1000); 46387 } 46388 46389 function createInZone () { 46390 return createLocal.apply(null, arguments).parseZone(); 46391 } 46392 46393 function preParsePostFormat (string) { 46394 return string; 46395 } 46396 46397 var proto$1 = Locale.prototype; 46398 46399 proto$1.calendar = calendar; 46400 proto$1.longDateFormat = longDateFormat; 46401 proto$1.invalidDate = invalidDate; 46402 proto$1.ordinal = ordinal; 46403 proto$1.preparse = preParsePostFormat; 46404 proto$1.postformat = preParsePostFormat; 46405 proto$1.relativeTime = relativeTime; 46406 proto$1.pastFuture = pastFuture; 46407 proto$1.set = set; 46408 46409 proto$1.months = localeMonths; 46410 proto$1.monthsShort = localeMonthsShort; 46411 proto$1.monthsParse = localeMonthsParse; 46412 proto$1.monthsRegex = monthsRegex; 46413 proto$1.monthsShortRegex = monthsShortRegex; 46414 proto$1.week = localeWeek; 46415 proto$1.firstDayOfYear = localeFirstDayOfYear; 46416 proto$1.firstDayOfWeek = localeFirstDayOfWeek; 46417 46418 proto$1.weekdays = localeWeekdays; 46419 proto$1.weekdaysMin = localeWeekdaysMin; 46420 proto$1.weekdaysShort = localeWeekdaysShort; 46421 proto$1.weekdaysParse = localeWeekdaysParse; 46422 46423 proto$1.weekdaysRegex = weekdaysRegex; 46424 proto$1.weekdaysShortRegex = weekdaysShortRegex; 46425 proto$1.weekdaysMinRegex = weekdaysMinRegex; 46426 46427 proto$1.isPM = localeIsPM; 46428 proto$1.meridiem = localeMeridiem; 46429 46430 function get$1 (format, index, field, setter) { 46431 var locale = getLocale(); 46432 var utc = createUTC().set(setter, index); 46433 return locale[field](utc, format); 46434 } 46435 46436 function listMonthsImpl (format, index, field) { 46437 if (isNumber(format)) { 46438 index = format; 46439 format = undefined; 46440 } 46441 46442 format = format || ''; 46443 46444 if (index != null) { 46445 return get$1(format, index, field, 'month'); 46446 } 46447 46448 var i; 46449 var out = []; 46450 for (i = 0; i < 12; i++) { 46451 out[i] = get$1(format, i, field, 'month'); 46452 } 46453 return out; 46454 } 46455 46456 // () 46457 // (5) 46458 // (fmt, 5) 46459 // (fmt) 46460 // (true) 46461 // (true, 5) 46462 // (true, fmt, 5) 46463 // (true, fmt) 46464 function listWeekdaysImpl (localeSorted, format, index, field) { 46465 if (typeof localeSorted === 'boolean') { 46466 if (isNumber(format)) { 46467 index = format; 46468 format = undefined; 46469 } 46470 46471 format = format || ''; 46472 } else { 46473 format = localeSorted; 46474 index = format; 46475 localeSorted = false; 46476 46477 if (isNumber(format)) { 46478 index = format; 46479 format = undefined; 46480 } 46481 46482 format = format || ''; 46483 } 46484 46485 var locale = getLocale(), 46486 shift = localeSorted ? locale._week.dow : 0; 46487 46488 if (index != null) { 46489 return get$1(format, (index + shift) % 7, field, 'day'); 46490 } 46491 46492 var i; 46493 var out = []; 46494 for (i = 0; i < 7; i++) { 46495 out[i] = get$1(format, (i + shift) % 7, field, 'day'); 46496 } 46497 return out; 46498 } 46499 46500 function listMonths (format, index) { 46501 return listMonthsImpl(format, index, 'months'); 46502 } 46503 46504 function listMonthsShort (format, index) { 46505 return listMonthsImpl(format, index, 'monthsShort'); 46506 } 46507 46508 function listWeekdays (localeSorted, format, index) { 46509 return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); 46510 } 46511 46512 function listWeekdaysShort (localeSorted, format, index) { 46513 return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); 46514 } 46515 46516 function listWeekdaysMin (localeSorted, format, index) { 46517 return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); 46518 } 46519 46520 getSetGlobalLocale('en', { 46521 dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, 46522 ordinal : function (number) { 46523 var b = number % 10, 46524 output = (toInt(number % 100 / 10) === 1) ? 'th' : 46525 (b === 1) ? 'st' : 46526 (b === 2) ? 'nd' : 46527 (b === 3) ? 'rd' : 'th'; 46528 return number + output; 46529 } 46530 }); 46531 46532 // Side effect imports 46533 46534 hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale); 46535 hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale); 46536 46537 var mathAbs = Math.abs; 46538 46539 function abs () { 46540 var data = this._data; 46541 46542 this._milliseconds = mathAbs(this._milliseconds); 46543 this._days = mathAbs(this._days); 46544 this._months = mathAbs(this._months); 46545 46546 data.milliseconds = mathAbs(data.milliseconds); 46547 data.seconds = mathAbs(data.seconds); 46548 data.minutes = mathAbs(data.minutes); 46549 data.hours = mathAbs(data.hours); 46550 data.months = mathAbs(data.months); 46551 data.years = mathAbs(data.years); 46552 46553 return this; 46554 } 46555 46556 function addSubtract$1 (duration, input, value, direction) { 46557 var other = createDuration(input, value); 46558 46559 duration._milliseconds += direction * other._milliseconds; 46560 duration._days += direction * other._days; 46561 duration._months += direction * other._months; 46562 46563 return duration._bubble(); 46564 } 46565 46566 // supports only 2.0-style add(1, 's') or add(duration) 46567 function add$1 (input, value) { 46568 return addSubtract$1(this, input, value, 1); 46569 } 46570 46571 // supports only 2.0-style subtract(1, 's') or subtract(duration) 46572 function subtract$1 (input, value) { 46573 return addSubtract$1(this, input, value, -1); 46574 } 46575 46576 function absCeil (number) { 46577 if (number < 0) { 46578 return Math.floor(number); 46579 } else { 46580 return Math.ceil(number); 46581 } 46582 } 46583 46584 function bubble () { 46585 var milliseconds = this._milliseconds; 46586 var days = this._days; 46587 var months = this._months; 46588 var data = this._data; 46589 var seconds, minutes, hours, years, monthsFromDays; 46590 46591 // if we have a mix of positive and negative values, bubble down first 46592 // check: https://github.com/moment/moment/issues/2166 46593 if (!((milliseconds >= 0 && days >= 0 && months >= 0) || 46594 (milliseconds <= 0 && days <= 0 && months <= 0))) { 46595 milliseconds += absCeil(monthsToDays(months) + days) * 864e5; 46596 days = 0; 46597 months = 0; 46598 } 46599 46600 // The following code bubbles up values, see the tests for 46601 // examples of what that means. 46602 data.milliseconds = milliseconds % 1000; 46603 46604 seconds = absFloor(milliseconds / 1000); 46605 data.seconds = seconds % 60; 46606 46607 minutes = absFloor(seconds / 60); 46608 data.minutes = minutes % 60; 46609 46610 hours = absFloor(minutes / 60); 46611 data.hours = hours % 24; 46612 46613 days += absFloor(hours / 24); 46614 46615 // convert days to months 46616 monthsFromDays = absFloor(daysToMonths(days)); 46617 months += monthsFromDays; 46618 days -= absCeil(monthsToDays(monthsFromDays)); 46619 46620 // 12 months -> 1 year 46621 years = absFloor(months / 12); 46622 months %= 12; 46623 46624 data.days = days; 46625 data.months = months; 46626 data.years = years; 46627 46628 return this; 46629 } 46630 46631 function daysToMonths (days) { 46632 // 400 years have 146097 days (taking into account leap year rules) 46633 // 400 years have 12 months === 4800 46634 return days * 4800 / 146097; 46635 } 46636 46637 function monthsToDays (months) { 46638 // the reverse of daysToMonths 46639 return months * 146097 / 4800; 46640 } 46641 46642 function as (units) { 46643 if (!this.isValid()) { 46644 return NaN; 46645 } 46646 var days; 46647 var months; 46648 var milliseconds = this._milliseconds; 46649 46650 units = normalizeUnits(units); 46651 46652 if (units === 'month' || units === '
vendor: 1,721 bytes, lines 46652-46697
46652year') { 46653 days = this._days + milliseconds / 864e5; 46654 months = this._months + daysToMonths(days); 46655 return units === 'month' ? months : months / 12; 46656 } else { 46657 // handle milliseconds separately because of floating point math errors (issue #1867) 46658 days = this._days + Math.round(monthsToDays(this._months)); 46659 switch (units) { 46660 case 'week' : return days / 7 + milliseconds / 6048e5; 46661 case 'day' : return days + milliseconds / 864e5; 46662 case 'hour' : return days * 24 + milliseconds / 36e5; 46663 case 'minute' : return days * 1440 + milliseconds / 6e4; 46664 case 'second' : return days * 86400 + milliseconds / 1000; 46665 // Math.floor prevents floating point math errors here 46666 case 'millisecond': return Math.floor(days * 864e5) + milliseconds; 46667 default: throw new Error('Unknown unit ' + units); 46668 } 46669 } 46670 } 46671 46672 // TODO: Use this.as('ms')? 46673 function valueOf$1 () { 46674 if (!this.isValid()) { 46675 return NaN; 46676 } 46677 return ( 46678 this._milliseconds + 46679 this._days * 864e5 + 46680 (this._months % 12) * 2592e6 + 46681 toInt(this._months / 12) * 31536e6 46682 ); 46683 } 46684 46685 function makeAs (alias) { 46686 return function () { 46687 return this.as(alias); 46688 }; 46689 } 46690 46691 var asMilliseconds = makeAs('ms'); 46692 var asSeconds = makeAs('s'); 46693 var asMinutes = makeAs('m'); 46694 var asHours = makeAs('h'); 46695 var asDays = makeAs('d'); 46696 var asWeeks = makeAs('w'); 46697 var asMonths = makeAs('M
vendor: 6,605 bytes, lines 46697-46889
46697'); 46698 var asYears = makeAs('y'); 46699 46700 function clone$1 () { 46701 return createDuration(this); 46702 } 46703 46704 function get$2 (units) { 46705 units = normalizeUnits(units); 46706 return this.isValid() ? this[units + 's']() : NaN; 46707 } 46708 46709 function makeGetter(name) { 46710 return function () { 46711 return this.isValid() ? this._data[name] : NaN; 46712 }; 46713 } 46714 46715 var milliseconds = makeGetter('milliseconds'); 46716 var seconds = makeGetter('seconds'); 46717 var minutes = makeGetter('minutes'); 46718 var hours = makeGetter('hours'); 46719 var days = makeGetter('days'); 46720 var months = makeGetter('months'); 46721 var years = makeGetter('years'); 46722 46723 function weeks () { 46724 return absFloor(this.days() / 7); 46725 } 46726 46727 var round = Math.round; 46728 var thresholds = { 46729 ss: 44, // a few seconds to seconds 46730 s : 45, // seconds to minute 46731 m : 45, // minutes to hour 46732 h : 22, // hours to day 46733 d : 26, // days to month 46734 M : 11 // months to year 46735 }; 46736 46737 // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize 46738 function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { 46739 return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); 46740 } 46741 46742 function relativeTime$1 (posNegDuration, withoutSuffix, locale) { 46743 var duration = createDuration(posNegDuration).abs(); 46744 var seconds = round(duration.as('s')); 46745 var minutes = round(duration.as('m')); 46746 var hours = round(duration.as('h')); 46747 var days = round(duration.as('d')); 46748 var months = round(duration.as('M')); 46749 var years = round(duration.as('y')); 46750 46751 var a = seconds <= thresholds.ss && ['s', seconds] || 46752 seconds < thresholds.s && ['ss', seconds] || 46753 minutes <= 1 && ['m'] || 46754 minutes < thresholds.m && ['mm', minutes] || 46755 hours <= 1 && ['h'] || 46756 hours < thresholds.h && ['hh', hours] || 46757 days <= 1 && ['d'] || 46758 days < thresholds.d && ['dd', days] || 46759 months <= 1 && ['M'] || 46760 months < thresholds.M && ['MM', months] || 46761 years <= 1 && ['y'] || ['yy', years]; 46762 46763 a[2] = withoutSuffix; 46764 a[3] = +posNegDuration > 0; 46765 a[4] = locale; 46766 return substituteTimeAgo.apply(null, a); 46767 } 46768 46769 // This function allows you to set the rounding function for relative time strings 46770 function getSetRelativeTimeRounding (roundingFunction) { 46771 if (roundingFunction === undefined) { 46772 return round; 46773 } 46774 if (typeof(roundingFunction) === 'function') { 46775 round = roundingFunction; 46776 return true; 46777 } 46778 return false; 46779 } 46780 46781 // This function allows you to set a threshold for relative time strings 46782 function getSetRelativeTimeThreshold (threshold, limit) { 46783 if (thresholds[threshold] === undefined) { 46784 return false; 46785 } 46786 if (limit === undefined) { 46787 return thresholds[threshold]; 46788 } 46789 thresholds[threshold] = limit; 46790 if (threshold === 's') { 46791 thresholds.ss = limit - 1; 46792 } 46793 return true; 46794 } 46795 46796 function humanize (withSuffix) { 46797 if (!this.isValid()) { 46798 return this.localeData().invalidDate(); 46799 } 46800 46801 var locale = this.localeData(); 46802 var output = relativeTime$1(this, !withSuffix, locale); 46803 46804 if (withSuffix) { 46805 output = locale.pastFuture(+this, output); 46806 } 46807 46808 return locale.postformat(output); 46809 } 46810 46811 var abs$1 = Math.abs; 46812 46813 function sign(x) { 46814 return ((x > 0) - (x < 0)) || +x; 46815 } 46816 46817 function toISOString$1() { 46818 // for ISO strings we do not use the normal bubbling rules: 46819 // * milliseconds bubble up until they become hours 46820 // * days do not bubble at all 46821 // * months bubble up until they become years 46822 // This is because there is no context-free conversion between hours and days 46823 // (think of clock changes) 46824 // and also not between days and months (28-31 days per month) 46825 if (!this.isValid()) { 46826 return this.localeData().invalidDate(); 46827 } 46828 46829 var seconds = abs$1(this._milliseconds) / 1000; 46830 var days = abs$1(this._days); 46831 var months = abs$1(this._months); 46832 var minutes, hours, years; 46833 46834 // 3600 seconds -> 60 minutes -> 1 hour 46835 minutes = absFloor(seconds / 60); 46836 hours = absFloor(minutes / 60); 46837 seconds %= 60; 46838 minutes %= 60; 46839 46840 // 12 months -> 1 year 46841 years = absFloor(months / 12); 46842 months %= 12; 46843 46844 46845 // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js 46846 var Y = years; 46847 var M = months; 46848 var D = days; 46849 var h = hours; 46850 var m = minutes; 46851 var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; 46852 var total = this.asSeconds(); 46853 46854 if (!total) { 46855 // this is the same as C#'s (Noda) and python (isodate)... 46856 // but not other JS (goog.date) 46857 return 'P0D'; 46858 } 46859 46860 var totalSign = total < 0 ? '-' : ''; 46861 var ymSign = sign(this._months) !== sign(total) ? '-' : ''; 46862 var daysSign = sign(this._days) !== sign(total) ? '-' : ''; 46863 var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; 46864 46865 return totalSign + 'P' + 46866 (Y ? ymSign + Y + 'Y' : '') + 46867 (M ? ymSign + M + 'M' : '') + 46868 (D ? daysSign + D + 'D' : '') + 46869 ((h || m || s) ? 'T' : '') + 46870 (h ? hmsSign + h + 'H' : '') + 46871 (m ? hmsSign + m + 'M' : '') + 46872 (s ? hmsSign + s + 'S' : ''); 46873 } 46874 46875 var proto$2 = Duration.prototype; 46876 46877 proto$2.isValid = isValid$1; 46878 proto$2.abs = abs; 46879 proto$2.add = add$1; 46880 proto$2.subtract = subtract$1; 46881 proto$2.as = as; 46882 proto$2.asMilliseconds = asMilliseconds; 46883 proto$2.asSeconds = asSeconds; 46884 proto$2.asMinutes = asMinutes; 46885 proto$2.asHours = asHours; 46886 proto$2.asDays = asDays; 46887 proto$2.asWeeks = asWeeks; 46888 proto$2.asMonths = asMonths; 46889 proto$2.as
46889Years = asYears; 46890 proto$2.valueOf = valueOf$1; 46891 proto$2._bubble = bubble; 46892 proto$2.clone = clone$1; 46893 proto$2.get = get$2; 46894 proto$2.milliseconds = milliseconds; 46895 proto$2.seconds = seconds; 46896 proto$2.minutes = minutes; 46897 proto$2.hours = hours; 46898 proto$2.days = days; 46899 proto$2.weeks = weeks; 46900 proto$2.months = months; 46901 proto$2.years = years; 46902 proto$2.humanize = humanize; 46903 proto$2.toISOString = toISOString$1; 46904 proto$2.toString = toISOString$1; 46905 proto$2.toJSON = toISOString$1; 46906 proto$2.locale = locale; 46907 proto$2.localeData = localeData; 46908 46909 proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1); 46910 proto$2.lang = lang; 46911 46912 // Side effect imports 46913 46914 // FORMATTING 46915 46916 addFormatToken('X', 0, 0, 'unix'); 46917 addFormatToken('x', 0, 0, 'valueOf'); 46918 46919 // PARSING 46920 46921 addRegexToken('x', matchSigned); 46922 addRegexToken('X', matchTimestamp); 46923 addParseToken('X', function (input, array, config) { 46924 config._d = new Date(parseFloat(input, 10) * 1000); 46925 }); 46926 addParseToken('x', function (input, array, config) { 46927 config._d = new Date(toInt(input)); 46928 }); 46929 46930 // Side effect imports 46931 46932 46933 hooks.version = '2.22.2'; 46934 46935 setHookCallback(createLocal); 46936 46937 hooks.fn = proto; 46938 hooks.min = min; 46939 hooks.max = max; 46940 hooks.now = now; 46941 hooks.utc = createUTC; 46942 hooks.unix = createUnix; 46943 hooks.months = listMonths; 46944 hooks.isDate = isDate; 46945 hooks.locale = getSetGlobalLocale; 46946 hooks.invalid = createInvalid; 46947 hooks.duration = createDuration; 46948 hooks.isMoment = isMoment; 46949 hooks.weekdays = listWeekdays; 46950 hooks.parseZone = createInZone; 46951 hooks.localeData = getLocale; 46952 hooks.isDuration = isDuration; 46953 hooks.monthsShort = listMonthsShort; 46954 hooks.weekdaysMin = listWeekdaysMin; 46955 hooks.defineLocale = defineLocale; 46956 hooks.updateLocale = updateLocale; 46957 hooks.locales = listLocales; 46958 hooks.weekdaysShort = listWeekdaysShort; 46959 hooks.normalizeUnits = normalizeUnits; 46960 hooks.relativeTimeRounding = getSetRelativeTimeRounding; 46961 hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; 46962 hooks.calendarFormat = getCalendarFormat; 46963 hooks.prototype = proto; 46964 46965 // currently HTML5 input type only supports 24-hour formats 46966 hooks.HTML5_FMT = { 46967 DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" /> 46968 DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" /> 46969 DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" /> 46970 DATE: 'YYYY-MM-DD', // <input type="date" /> 46971 TIME: 'HH:mm', // <input type="time" /> 46972 TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" /> 46973 TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" /> 46974 WEEK: 'YYYY-[W]WW', // <input type="week" /> 46975 MONTH: 'YYYY-MM' // <input type="month" /> 46976 }; 46977 46978 return hooks; 46979 46980}))); 46981 46982function AfagForm($form, formName) { 46983 function toggleDisplayBasedOfValue($select, $elementToShow, showValue) { 46984 $select.on('change', function() { 46985 var doShow = $select.val() === showValue; 46986 $elementToShow.toggle(doShow); 46987 }); 46988 46989 $elementToShow.toggle($select.val() === showValue); 46990 } 46991 46992 function removeGlobalErrors() { 46993 $globalFormErrors.html(''); 46994 } 46995 46996 function showGlobalErrors(formErrors) { 46997 removeGlobalErrors(); 46998 46999 $.each(formErrors, function(fieldName, fieldErrors) { 47000 var $fieldErrors = $('<div/>', { class: 'alert alert-danger'}); 47001 $fieldErrors.append($('<strong/>', { class: 'field-label' }).text(fieldErrors.label + ':')); 47002 47003 $.each(fieldErrors.errors, function(index, fieldError) { 47004 $fieldErrors.append($('<div/>', { class: 'error-message' }).text(fieldError)); 47005 }); 47006 47007 $globalFormErrors.append($fieldErrors); 47008 }); 47009 } 47010 47011 47012 function submit($submitButton, url, onValid) { 47013 var formData = $form.serialize() + '&--' + formName + '[__currentPage]=1'; 47014 $submitButton.addClass('loading'); 47015 $globalFormErrors.html(''); 47016 47017 $.ajax({ 47018 url: url, 47019 type: 'POST', 47020 data: formData, 47021 dataType: 'json', 47022 success: function(result) { 47023 if (result.valid) { 47024 if (typeof onValid === 'function') { 47025 onValid(); 47026 } 47027 } else { 47028 showGlobalErrors(result.errors); 47029 } 47030 }, 47031 complete: function() { 47032 $submitButton.removeClass('loading'); 47033 } 47034 }); 47035 } 47036 47037 function addValidators(fieldKey, validators) { 47038 var $field = $('#' + formName + '-' + fieldKey); 47039 var fieldOptions = formValidation.getOptions($field); 47040 var isNewField = false;
47041 47042 if (!fieldOptions) { 47043 console.log('AfagForm.addValidators: Creating new validation field: ' + fieldKey); 47044 isNewField = true; 47045 fieldOptions = {}; 47046 } 47047 47048 if (!fieldOptions.hasOwnProperty('validators')) { 47049 fieldOptions.validators = {}; 47050 } 47051 47052 for(var key in validators) { 47053 if (validators.hasOwnProperty(key)) { 47054 fieldOptions.validators[key] = validators[key]; 47055 } 47056 } 47057 47058 console.log('Setting new field options for field [' + fieldKey + '] to: ', fieldOptions); 47059 47060 if (!isNewField) { 47061 formValidation.removeField($field); 47062 } 47063 47064 formValidation.addField($field, fieldOptions); 47065 } 47066 47067 function addPhonePrefixValidator(fieldKey) { 47068 addValidators(fieldKey, { 47069 regexp: { 47070 regexp: /^\+\d+$/i, 47071 message: 'Vennligst oppgi et gyldig internasjonalt forvalg, f.eks +47' 47072 } 47073 }); 47074 } 47075 47076 function addPhoneNumberValidator(fieldKey) { 47077 addValidators(fieldKey, { 47078 regexp: { 47079 regexp: /^[\d ]+$/, 47080 message: 'Vennligst benytt kun tall og mellomrom' 47081 } 47082 }); 47083 } 47084 47085 function addGraduationYearValidator(fieldKey) { 47086 addValidators(fieldKey, { 47087 callback: { 47088 callback: function(value, validator, $field) { 47089 if (value === '') { 47090 // The NotEmptyValidator will handle this case 47091 return true; 47092 } 47093 47094 var year = parseInt(value); 47095 return year >= 1900 && year <= moment().year() + 20; 47096 }, 47097 message: 'Vennligst oppgi et gyldig årstall (fire siffer)' 47098 } 47099 }); 47100 } 47101 47102 47103 47104 var $globalFormErrors = $('#global-form-errors'); 47105 var formValidation = $form.data('formValidation'); 47106 47107 if ($globalFormErrors.length === 0) { 47108 console.error('AfagForm: Required HTML element not found: #global-form-errors'); 47109 } 47110 47111 if (!formName) { 47112 console.error('AfagForm: Missing required parameter: formName'); 47113 } 47114 47115 $form.skInitForm(); 47116 47117 return { 47118 submit: submit, 47119 toggleDisplayBasedOfValue: toggleDisplayBasedOfValue, 47120 addValidators: addValidators, 47121 addPhonePrefixValidator: addPhonePrefixValidator, 47122 addPhoneNumberValidator: addPhoneNumberValidator, 47123 addGraduationYearValidator: addGraduationYearValidator 47124 }; 47125} 47126 47127(function ($) { 47128 function AfagMap($container, options) { 47129 47130 47131 function onMapsApiLoaded() { 47132 console.log('Init map:', $map.get(0)); 47133 47134 geocoder = new google.maps.Geocoder(); 47135 47136 map = new google.maps.Map($map.get(0), { 47137 zoom: 15, 47138 center: new google.maps.LatLng(options.latitude, options.longitude), 47139 mapTypeId: google.maps.MapTypeId.ROADMAP, 47140 mapTypeControl: true, 47141 mapTypeControlOptions: { 47142 position: google.maps.ControlPosition.TOP_RIGHT, 47143 mapTypeIds: ['styled_map', google.maps.MapTypeId.HYBRID] 47144 } 47145 }); 47146 var mapStyles = options.styles ? options.styles : afagMapStyle; 47147 map.mapTypes.set('styled_map', new google.maps.StyledMapType(mapStyles, { name: 'Map' })); 47148 map.setMapTypeId('styled_map'); 47149 47150 markerIcon = new google.maps.MarkerImage(options.markerUrl, null, null, null, new google.maps.Size(22, 31)); 47151 var marker = new google.maps.Marker({ 47152 position: new google.maps.LatLng(options.latitude, options.longitude), 47153 icon: markerIcon, 47154 map: map 47155 }); 47156 } 47157 47158 47159 var $map = $container.find('.map'); 47160 47161 var map; 47162 var markerIcon; 47163 47164 var geocoder; 47165 47166 window.googleMapsInitFunctions.push(onMapsApiLoaded); 47167 window.loadGoogleMaps(options.apiKey); 47168 } 47169 47170 $.fn.afagMap = function(options) { 47171 47172 var opts = $.extend({}, $.fn.afagMap.defaults, options); 47173 47174 this.each(function() { 47175 new AfagMap($(this), $.extend({}, opts, $(this).data())); 47176 }); 47177 }; 47178 47179 var afagMapStyle = [ 47180 { 47181 "featureType": "administrative.country", 47182 "elementType": "all", 47183 "stylers": [ 47184 {"visibility": "off"},{"saturation": 52},{"lightness": 43},{"gamma": 9.99}] 47185 }, { 47186 "featureType": "water", 47187 "elementType": "all", 47188 "stylers": [{"visibility": "simplified"},{"hue": "#e9ebed"},{"saturation": -78},{"lightness": 67}] 47189 }, { 47190 "featureType": "landscape", 47191 "elementType": "all", 47192 "stylers": [{"visibility": "simplified"},{"hue": "#ffffff"},{"saturation": -100},{"lightness": 100}] 47193 }, { 47194 "featureType": "road", 47195 "elementType": "geometry", 47196 "stylers": [{"visibility": "simplified"}, {"hue": "#bbc0c4"}
47196, {"saturation": -93}, {"lightness": 31}] 47197 }, { 47198 "featureType": "poi", 47199 "elementType": "all", 47200 "stylers": [{"visibility": "off"}, {"hue": "#ffffff"}, {"saturation": -100}, {"lightness": 100}] 47201 }, { 47202 "featureType": "road.local", 47203 "elementType": "geometry", 47204 "stylers": [{"visibility": "simplified"}, {"hue": "#e9ebed"}, {"saturation": -90}, {"lightness": -8}] 47205 }, { 47206 "featureType": "administrative.locality", 47207 "elementType": "all", 47208 "stylers": [{"visibility": "on"}, {"hue": "#2c2e33"}, {"saturation": 7}, {"lightness": 19}] 47209 }, { 47210 "featureType": "road", 47211 "elementType": "labels", 47212 "stylers": [{"visibility": "on"}, {"hue": "#bbc0c4"}, {"saturation": -93}, {"lightness": 31}] 47213 }, { 47214 "featureType": "road.arterial", 47215 "elementType": "labels", 47216 "stylers": [{"visibility": "simplified"}, {"hue": "#bbc0c4"}, {"saturation": -93}, {"lightness": -2}] 47217 }, { 47218 "featureType": "transit.line", 47219 "elementType": "all", 47220 "stylers": [{"lightness": 67}] 47221 }, { 47222 "featureType": "transit", 47223 "elementType": "labels", 47224 "stylers": [{"weight": 1}, {"hue": "#ffffff"}, {"saturation": -100}, {"lightness": -5}] 47225 }]; 47226 47227 $.fn.afagMap.defaults = { 47228 styles: afagMapStyle, 47229 markerUrl: null, 47230 apiKey: null, 47231 latitude: 59.9196829, 47232 longitude: 10.7280745 47233 }; 47234}(jQuery)); 47235 47236 47237function isValidBirthNumber(birthNumber) { 47238 function error(message) { 47239 console.log('Invalid birth number: ' + message); 47240 } 47241 47242 if (birthNumber.length !== 11) { 47243 error('Not 11 digits long'); 47244 return false; 47245 } 47246 47247 if (!/^\d+$/.test(birthNumber)) { 47248 error('Does not contain digits only'); 47249 return false; 47250 } 47251 47252 var day = birthNumber.substring(0, 2); 47253 var dayNumber = parseFloat(day); 47254 if (dayNumber > 31) { 47255 // D-numbers 47256 dayNumber = dayNumber - 40; 47257 if (dayNumber < 1) { 47258 error('[D-Number] Day [' + dayNumber + '] is less than 1'); 47259 return false; 47260 } 47261 47262 if (dayNumber >= 10) { 47263 day = '' + dayNumber; 47264 } else { 47265 day = '0' + dayNumber; 47266 } 47267 } 47268 47269 var month = birthNumber.substring(2, 4); 47270 var year = birthNumber.substring(4, 6); 47271 47272 var fullDate = year + '-' + month + '-' + day; 47273 if (!moment(fullDate, 'YY-MM-DD').isValid()) { 47274 error('Invalid date: ' + fullDate); 47275 return false; 47276 } 47277 47278 var personNumber = birthNumber.substring(6, 11); 47279 if (personNumber === '00100' || personNumber === '00200') { 47280 return true; 47281 } 47282 47283 var d1 = parseInt(birthNumber.substring(0, 1)); 47284 var d2 = parseInt(birthNumber.substring(1, 2)); 47285 var m1 = parseInt(birthNumber.substring(2, 3)); 47286 var m2 = parseInt(birthNumber.substring(3, 4)); 47287 var y1 = parseInt(birthNumber.substring(4, 5)); 47288 var y2 = parseInt(birthNumber.substring(5, 6)); 47289 var i1 = parseInt(birthNumber.substring(6, 7)); 47290 var i2 = parseInt(birthNumber.substring(7, 8)); 47291 var i3 = parseInt(birthNumber.substring(8, 9)); 47292 47293 var k1 = parseInt(birthNumber.substring(9, 10)); 47294 var k2 = parseInt(birthNumber.substring(10, 11)); 47295 47296 var controlValue1 = 11 - (((3 * d1) + (7 * d2) + (6 * m1) + m2 + (8 * y1) + (9 * y2) + (4 * i1) + (5 * i2) + (2 * i3)) % 11); 47297 47298 if (controlValue1 === 11) { 47299 controlValue1 = 0; 47300 } 47301 47302 if (k1 !== controlValue1) { 47303 error('Control 1 is wrong'); 47304 return false; 47305 } 47306 47307 var controlValue2 = 11 - (((5 * d1) + (4 * d2) + (3 * m1) + (2 * m2) + (7 * y1) + (6 * y2) + (5 * i1) + (4 * i2) + (3 * i3) + (2 * controlValue1)) % 11); 47308 47309 if (controlValue2 === 11) { 47310 controlValue2 = 0; 47311 } 47312 47313 if (k2 !== controlValue2) { 47314 error('Control 2 is wrong'); 47315 return false; 47316 } 47317 47318 return true; 47319} 47320 47321(function ($) { 47322 function Calendar($container, options) { 47323 47324 var $calendar = $container.find('.calendar-datepicker'); 47325 47326 $calendar.datepicker({ 47327 changeYear: true, 47328 defaultDate:new Date(setDatePicker), 47329 monthNames: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "
47329November", "Desember"], 47330 monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], 47331 dayNames: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], 47332 dayNamesMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"], 47333 dayNamesShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"], 47334 firstDay: 1, 47335 beforeShowDay: function( date ) { 47336 var dateCal = new Date(date); 47337 var highlight = eventDates[dateCal.toLocaleDateString()]; 47338 if( highlight ) { 47339 return [true, "has-event", '']; 47340 } else { 47341 return [true, '', '']; 47342 } 47343 }, 47344 onChangeMonthYear: function(year, month) { 47345 var selectedYear = new Date(year+"").getTime(); 47346 var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime(); 47347 $('#filter-year').val(selectedYear); 47348 $('#filter-month').val(selectedMonth); 47349 $('#filter-day').val(''); 47350 $("#calendar-form").trigger('submit'); 47351 }, 47352 onSelect: function(dateText) { 47353 var date = $(this).datepicker('getDate'), 47354 day = date.getDate(), 47355 month = date.getMonth() + 1, 47356 year = date.getFullYear(); 47357 47358 var selectedYear = new Date(year+"").getTime(); 47359 var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime(); 47360 var selectedDay = new Date(1970,month-1,day,08,0,0).getTime(); 47361 $('#filter-year').val(selectedYear); 47362 $('#filter-month').val(selectedMonth); 47363 $('#filter-day').val(selectedDay); 47364 $("#calendar-form").trigger('submit'); 47365 } 47366 }); 47367 } 47368 47369 $.fn.siteCalendarList = function(options) { 47370 console.log('siteCalendarList'); 47371 var opts = $.extend({}, $.fn.siteCalendarList.defaults, options); 47372 47373 this.each(function() { 47374 47375 new Calendar($(this), $.extend({}, opts, $(this).data())); 47376 }); 47377 }; 47378 47379 $.fn.siteCalendarList.defaults = { 47380 }; 47381}(jQuery)); 47382 47383 47384 47385(function ($) { 47386 function CalendarEvent($container, options) { 47387 function loadNewContent(url) { 47388 console.log('Loading new content: ', url); 47389 47390 enableLoading(); 47391 47392 url = url.replace(/https?:\/\/[^/]+\//, '/'); 47393 47394 $.ajax({ 47395 method: 'get', 47396 url: url, 47397 cache: true 47398 }).done(function(html) { 47399 var windowUrl = window.location.href.replace(/https?:\/\/[^/]+\//, '/'); 47400 47401 if (windowUrl !== url) { 47402 var stateObj = { url: url }; 47403 history.pushState(stateObj, '', url); 47404 } 47405 47406 var $html = $(html); 47407 var $newListContainer = $html.find('.list-container'); 47408 47409 $listContainer.replaceWith($newListContainer); 47410 $listContainer = $newListContainer; 47411 47412 pagesChanged($html.find('.page-navigation')); 47413 47414 disableLoading(); 47415 }); 47416 } 47417 47418 function onPageClick(e) { 47419 e.preventDefault(); 47420 47421 var offsetTop = $filterWrapper.offset().top; 47422 var scrollTop = $(window).scrollTop(); 47423 var windowHeight = $(window).height(); 47424 var topIsVisible = offsetTop >= scrollTop && offsetTop < windowHeight; 47425 47426 if (!topIsVisible) { 47427 $(window).scrollTop($filterWrapper.offset().top); 47428 } 47429 47430 loadNewContent($(this).attr('href')); 47431 } 47432 47433 function pagesChanged($pageNavigation) { 47434 currentPage = parseInt($pageNavigation.attr('data-current-page')); 47435 lastPage = parseInt($pageNavigation.attr('data-last-page')); 47436 console.log('Current page is: ', currentPage); 47437 } 47438 47439 function enableLoading() { 47440 $container.addClass('loading'); 47441 $filterWrapper.find(':input').prop('disabled', true); 47442 $filterWrapper.addClass('loading'); 47443 $loading.addClass('active'); 47444 } 47445 47446 function disableLoading() { 47447 $loading.removeClass('active'); 47448 $filterWrapper.removeClass('loading'); 47449 $filterWrapper.find(':input').prop('disabled', false); 47450 $container.removeClass('loading'); 47451 } 47452 47453 function onFilterFormSubmit(e) { 47454 e.preventDefault(); 47455 var url = $(this).attr('action'); 47456 var data = $(this).serialize(); 47457 var newUrl = url; 47458 47459 if (url.indexOf('?') === -1) { 47460 newUrl += '?' + data; 47461 } else { 47462 newUrl += '&' + data; 47463 } 47464 47465 loadNewContent(newUrl); 47466 } 47467 47468 function onSelectChange() { 47469 console.log('Select change: ' + $(this).attr('name')); 47470 $(this.form).trigger('submit'); 47471 } 47472 47473 function onFormResetClick(e) { 47474 e.preventDefault(); 47475 loadNewContent($(this).attr('href')); 47476 } 47477 47478 function onPopState(e) { 47479 if (e.state && e.state.url.length > 0) { 47480 loadNewContent(e.state.url); 47481 } 47482 } 47483 47484 var $window = $(window); 47485 var $listContainer = $container.find('.list-container'); 47486 var $filterWrapper = $container.find('.filter-wrapper'); 47487 var $calendarEvent = $container.find('.calendar-datepicker'); 47488 var $loading = $('#global-loading'); 47489 47490 var currentPage; 47491 var lastPage; 47492 pagesChanged($listContainer.find('.pagination')); 47493 47494 $calendarEvent.datepicker({ 47495 changeYear: true, 47496 defaultDate:new Date(setDatePicker), 47497 monthNames: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "
47497November", "Desember"], 47498 monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], 47499 dayNames: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], 47500 dayNamesMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø"], 47501 dayNamesShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"], 47502 firstDay: 1, 47503 beforeShowDay: function( date ) { 47504 var dateCal = new Date(date); 47505 var highlight = eventDates[dateCal.toLocaleDateString()]; 47506 if( highlight ) { 47507 return [true, "has-event", '']; 47508 } else { 47509 return [true, '', '']; 47510 } 47511 }, 47512 onChangeMonthYear: function(year, month) { 47513 var selectedYear = new Date(year+"").getTime(); 47514 var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime(); 47515 $('#filter-year').val(selectedYear); 47516 $('#filter-month').val(selectedMonth); 47517 $('#filter-day').val(''); 47518 $("#calendar-form").trigger('submit'); 47519 }, 47520 onSelect: function(dateText) { 47521 var date = $(this).datepicker('getDate'), 47522 day = date.getDate(), 47523 month = date.getMonth() + 1, 47524 year = date.getFullYear(); 47525 47526 var selectedYear = new Date(year+"").getTime(); 47527 var selectedMonth = new Date(1970,month-1,01,08,0,0).getTime(); 47528 var selectedDay = new Date(1970,month-1,day,08,0,0).getTime(); 47529 $('#filter-year').val(selectedYear); 47530 $('#filter-month').val(selectedMonth); 47531 $('#filter-day').val(selectedDay); 47532 $("#calendar-form").trigger('submit'); 47533 } 47534 }); 47535 47536 47537 $filterWrapper.on('submit', '.filter-form', onFilterFormSubmit); 47538 $filterWrapper.on('change', 'select', onSelectChange); 47539 $filterWrapper.on('click', '.form-reset', onFormResetClick); 47540 $container.on('click', '.pagination a', onPageClick); 47541 window.onpopstate = onPopState; 47542 } 47543 47544 $.fn.siteCalendarEventList = function(options) { 47545 var opts = $.extend({}, $.fn.siteCalendarEventList.defaults, options); 47546 47547 this.each(function() { 47548 47549 new CalendarEvent($(this), $.extend({}, opts, $(this).data())); 47550 }); 47551 }; 47552 47553 $.fn.siteCalendarEventList.defaults = { 47554 }; 47555}(jQuery)); 47556 47557 47558 47559(function ($) { 47560 function FilterList($container, options) { 47561 function loadNewContent(url) { 47562 console.log('Loading new content: ', url); 47563 47564 enableLoading(); 47565 47566 url = url.replace(/https?:\/\/[^/]+\//, '/'); 47567 47568 $.ajax({ 47569 method: 'get', 47570 url: url, 47571 cache: true 47572 }).done(function(html) { 47573 var windowUrl = window.location.href.replace(/https?:\/\/[^/]+\//, '/'); 47574 47575 if (windowUrl !== url) { 47576 var stateObj = { url: url }; 47577 history.pushState(stateObj, '', url); 47578 } 47579 47580 var $html = $(html); 47581 var $newListContainer = $html.find('.list-container'); 47582 47583 $listContainer.replaceWith($newListContainer); 47584 $listContainer = $newListContainer; 47585 47586 $filterWrapper.html('').append($html.find('#filter-wrapper').find('.filter')); 47587 $filterWrapper.find('select').skStyleSelect(); 47588 47589 pagesChanged($html.find('.page-navigation')); 47590 47591 disableLoading(); 47592 }); 47593 } 47594 47595 function onPageClick(e) { 47596 e.preventDefault(); 47597 47598 var offsetTop = $filterWrapper.offset().top; 47599 var scrollTop = $(window).scrollTop(); 47600 var windowHeight = $(window).height(); 47601 var topIsVisible = offsetTop >= scrollTop && offsetTop < windowHeight; 47602 47603 if (!topIsVisible) { 47604 $(window).scrollTop($filterWrapper.offset().top); 47605 } 47606 47607 loadNewContent($(this).attr('href')); 47608 } 47609 47610 function pagesChanged($pageNavigation) { 47611 currentPage = parseInt($pageNavigation.attr('data-current-page')); 47612 lastPage = parseInt($pageNavigation.attr('data-last-page')); 47613 console.log('Current page is: ', currentPage); 47614 } 47615 47616 function enableLoading() { 47617 $container.addClass('loading'); 47618 $filterWrapper.find(':input').prop('disabled', true); 47619 $filterWrapper.addClass('loading'); 47620 $loading.addClass('active'); 47621 } 47622 47623 function disableLoading() { 47624 $loading.removeClass('active'); 47625 $filterWrapper.removeClass('loading'); 47626 $filterWrapper.find(':input').prop('disabled', false); 47627 $container.removeClass('loading'); 47628 } 47629 47630 function onFilterFormSubmit(e) { 47631 e.preventDefault(); 47632 47633 var url = $(this).attr('action'); 47634 var data = $(this).serialize(); 47635 var newUrl = url; 47636 47637 if (url.indexOf('?') === -1) { 47638 newUrl += '?' + data; 47639 } else { 47640 newUrl += '&' + data; 47641 } 47642 47643 loadNewContent(newUrl); 47644 } 47645 47646 function onSelectChange() { 47647 console.log('Select change: ' + $(this).attr('name')); 47648 $(this.form).trigger('submit'); 47649 } 47650 47651 function onFormResetClick(e) { 47652 e.preventDefault(); 47653 loadNewContent($(this).attr('href')); 47654 } 47655 47656 function onPopState(e) { 47657 if (e.state && e.state.url.length > 0) { 47658 loadNewContent(e.state.url); 47659 } 47660 } 47661 47662 var $window = $(window); 47663 var $listContainer = $container.find('.list-container'); 47664 var $filterWrapper = $container.find('.filter-wrapper'); 47665 var $loading = $('#global-loading'); 47666 47667 var currentPage; 47668 var lastPage; 47669 47670 pagesChanged($listContainer.find('.pagination')); 47671 47672 $filterWrapper.on('submit', '.filter-form', onFilterFormSubmit); 47673 $filterWrapper.on('change', 'select', onSelectChange); 47674 $filterWrapper.on('click', '.form-reset', onFormResetClick); 47675 $container.on('click', '.pagination a', onPageClick); 47676 window.onpopstate = onPopState; 47677 } 47678 47679 $.fn.siteFilterList = function(options) { 47680 var opts = $.extend({}, $.fn.siteFilterList.defaults, options); 47681 47682 this.each(function() { 47683 new FilterList($(this), $.extend({}, opts, $(this).data())); 47684 }); 47685 }; 47686 47687 $.fn.siteFilterList.defaults = { 47688 }; 47689}(jQuery)); 47690 47691 47692 47693(function ($) { 47694 window.googleMapsInitFunctions = []; 47695 47696 window.loadGoogleMaps = function(apiKey) { 47697 var scriptId = 'sk-google-maps-script'; 47698 var $script = $('#' + scriptId); 47699 if ($script.length > 0) { 47700 console.log('Google Maps script element has already been created'); 47701 return; 47702 } 47703
47704 var url = 'https://maps.googleapis.com/maps/api/js?key=' + apiKey + '&libraries=geometry,places&callback=skInitAllGoogleMaps'; 47705 console.log('Creating Google Maps script element with url: ' + url); 47706 $script = $('<script/>') 47707 .prop('async', true) 47708 .prop('defer', true) 47709 .attr('src', url) 47710 .attr('id', scriptId) 47711 .appendTo($('body')); 47712 }; 47713 47714 window.skInitAllGoogleMaps = function() { 47715 window.googleMapsInitialized = true; 47716 47717 google.maps.Map.prototype.setCenterWithOffset = function(latlng, offsetX, offsetY) { 47718 var map = this; 47719 var ov = new google.maps.OverlayView(); 47720 ov.onAdd = function() { 47721 var proj = this.getProjection(); 47722 var aPoint = proj.fromLatLngToContainerPixel(latlng); 47723 aPoint.x = aPoint.x+offsetX; 47724 aPoint.y = aPoint.y+offsetY; 47725 map.setCenter(proj.fromContainerPixelToLatLng(aPoint)); 47726 }; 47727 ov.draw = function() {}; 47728 ov.setMap(this); 47729 }; 47730 47731 $.each(window.googleMapsInitFunctions, function(index, callback) { 47732 callback(); 47733 }); 47734 }; 47735 47736 function initSingleGoogleMap($map) { 47737 console.log('Initializing Google Map [' + $map.attr('id') + ']'); 47738 47739 var styleString = $map.attr('data-map-style'); 47740 var style = null; 47741 if (styleString.trim() !== '') { 47742 style = JSON.parse(styleString.trim()); 47743 } 47744 47745 47746 var zoom = $map.attr('data-zoom') ? parseInt($map.attr('data-zoom')) : 16; 47747 var map = new google.maps.Map($map.get(0), { 47748 zoom: zoom, 47749 styles: style 47750 }); 47751 47752 $map.removeClass('loading'); 47753 } 47754 47755 $.fn.skGoogleMaps = function () { 47756 return this.each(function() { 47757 var $map = $(this); 47758 console.log('Creating Google Map initialization for element [#' + $map.attr('id') + ']'); 47759 47760 window.googleMapsInitFunctions.push(function() { 47761 initSingleGoogleMap($map); 47762 }); 47763 47764 window.loadGoogleMaps($map.attr('data-api-key')); 47765 }); 47766 }; 47767}(jQuery)); 47768 47769(function ($) { 47770 function toggleLabelVisibility($input) { 47771 var $formGroup = $input.parents('.form-group'); 47772 47773 if ($formGroup.length > 0) { 47774 var showLabel = $input.val() !== '' || $input.is(":focus"); 47775 $formGroup.toggleClass('label-shown', showLabel); 47776 47777 if (showLabel) { 47778 $input.attr('placeholder', ''); 47779 } else { 47780 $input.attr('placeholder', $input.attr('data-placeholder')); 47781 } 47782 } 47783 } 47784 47785 function updateStyledSelectBox($input) { 47786 var $formGroup = $input.parents('.form-group'); 47787 47788 if ($formGroup.length > 0) { 47789 var showLabel = $input.val() !== ''; 47790 $formGroup.toggleClass('label-shown', showLabel); 47791 } 47792 } 47793 47794 $.fn.labelPlaceholder = function(options) { 47795 this.each(function() { 47796 $(this).find('input').each(function() { 47797 $(this).attr('data-placeholder', $(this).attr('placeholder')); 47798 toggleLabelVisibility($(this)); 47799 }).on('keyup focus blur change', function() { 47800 toggleLabelVisibility($(this)); 47801 }); 47802 47803 $(this).find('select').on('sk.style-select.updated', function() { 47804 updateStyledSelectBox($(this)); 47805 }); 47806 }); 47807 }; 47808}(jQuery)); 47809 47810 47811function initMemberEditForm($form) { 47812 var formName = 'teha-site-member-edit-form'; 47813 var idPrefix = formName + '-'; 47814 var afagForm = new AfagForm($form, formName); 47815 var $validation = $form.data('formValidation'); 47816 var $submitButton = $form.find('button[type=submit]'); 47817 var $successMessage = $form.find('.success-message'); 47818 var $isTillitsvalgt = $('#' + idPrefix + 'isTillitsvalgt'); 47819 var $isTillitsvalgtVara = $('#' + idPrefix + 'isTillitsvalgtVara'); 47820 var $hasTillitsvalgtopplaring = $('#' + idPrefix + 'hasTillitsvalgtopplaring'); 47821 47822 var $memberShipType = $('#' + idPrefix + 'membershipType'); 47823 47824 $isTillitsvalgt.on('click', function() { 47825 uncheckCheckBox('isTillitsvalgtVara'); 47826 }); 47827 47828 $isTillitsvalgtVara.on('click', function() { 47829 uncheckCheckBox('isTillitsvalgt'); 47830 }); 47831 47832 $form 47833 .on('err.field.fv success.field.fv', function(e, data) { 47834 // Always enable submit button 47835 if (data.fv.getSubmitButton()) { 47836 data.fv.disableSubmitButtons(false); 47837 } 47838 }).on('success.form.fv', function(e) { 47839 e.preventDefault(); 47840 47841 afagForm.submit($submitButton, '/_afag/member/edit-submit', function() { 47842 $successMessage.show(); 47843 $form.find('.form-content').hide(); 47844 }); 47845 }); 47846 47847 afagForm.addPhonePrefixValidator('prefixMobile'); 47848 afagForm.addPhonePrefixValidator('prefixPhonePrivate'); 47849 afagForm.addPhonePrefixValidator('prefixPhoneWork'); 47850 47851 afagForm.addPhoneNumberValidator('mobile'); 47852 afagForm.addPhoneNumberValidator('phonePrivate'); 47853 afagForm.addPhoneNumberValidator('phoneWork'); 47854 47855 afagForm.addGraduationYearValidator('graduationYear'); 47856 47857 function uncheckCheckBox($ident) { 47858 if ($ident == 'isTillitsvalgt') { 47859 $isTillitsvalgt.prop('checked', false); 47860 } 47861 47862 if ($ident == 'isTillitsvalgtVara') { 47863 $isTillitsvalgtVara.prop('checked', false); 47864 } 47865 47866 if ($ident == 'hasTillitsvalgtopplaring') { 47867 $hasTillitsvalgtopplaring.prop('checked', false); 47868 } 47869 } 47870} 47871 47872function initMemberRegistrationForm($form) { 47873 function createSummaryRow(label, value) { 47874 label = label.replace(/\s*\*$/, '') + ':'; 47875 47876 console.log('Creating summary row: ', label, value); 47877 47878 var $value = $('<div/>', { 'class': 'summary-label col-6 col-md-8 col-lg-8'}); 47879 $value.text(value); 47880 var htmlValue = $value.html(); 47881 $value.html(value.replace(/\n/g, '<br/>')); 47882 47883 return $('<div/>', { 'class': 'row summary-row' }) 47884 .append($('<div/>', { 'class': 'summary-value col-6 col-md-4 col-lg-4'}).text(label)) 47885 .append($value); 47886 } 47887 47888 function createSummaryRowByKey(key, label) { 47889 var id = idPrefix + key; 47890 var $input = $('#' + id); 47891 var value = $input.val(); 47892 var $label = $input.parents('.form-group').find('label[for="' + id + '"]'); 47893 47894 if (typeof label === 'undefined' && $label.length === 1) { 47895 label = $label.text(); 47896 } 47897 47898 if (typeof label === 'undefined') { 47899 console.error('Could not find label for field #' + id); 47900 } 47901 47902 return createSummaryRow(label, value); 47903 } 47904 47905 function createSummaryRowByKeyAndValue(key, value) { 47906 var id = idPrefix + key; 47907 var $input = $('#' + id); 47908 var label; 47909 47910 var $label = $input.parents('.form-group').find('label[for="' + id + '"]'); 47911 47912 if (typeof label === 'undefined' && $label.length === 1) { 47913 label = $label.text(); 47914 } 47915 47916 if (typeof label === 'undefined') { 47917 console.error('Could not find label for field #' + id); 47918 } 47919 47920 return createSummaryRow(label, value); 47921 } 47922 47923 function createPhoneSummaryRow(key) { 47924 var id = idPrefix + key; 47925 var $input = $('#' + id); 47926 var $label = $input.parents('.form-group').find('label[for="' + id + '"]'); 47927 47928 var prefixId = idPrefix + 'prefix' + key[0].toUpperCase() + key.substring(1); 47929 var $prefixInput = $('#' + prefixId); 47930 47931 var value = $prefixInput.val() + ' ' + $input.val(); 47932 47933 return createSummaryRow($label.text(), value); 47934 } 47935 47936 function createDependantSummaryRow(key, otherValue) { 47937 var id = idPrefix + key; 47938 var $input = $('#' + id); 47939 var $label = $input.parents('.form-group').find('label[for="' + id + '"]'); 47940 var value = $input.val(); 47941 47942 if (value === otherValue) { 47943 var otherValueId = idPrefix + key + 'Other'; 47944 var $otherValue = $('#' + otherValueId); 47945 value += ': ' + $otherValue.val(); 47946 } 47947 47948 return createSummaryRow($label.text(), value); 47949 } 47950 47951 function createMultiCheckboxSummaryRow(key) { 47952 var $mainLabel = $form.find('label[for="' + idPrefix + key + '"]'); 47953 var $formGroup = $mainLabel.parents('.form-group'); 47954 var values = []; 47955 47956 $formGroup.find('.form-check').each(function() { 47957 var $formCheck = $(this); 47958 var $label = $formCheck.find('label'); 47959 var $input = $formCheck.find('#' + $label.attr('for')); 47960 47961 if ($input.prop('checked')) { 47962 values.push($label.text().trim()); 47963 } 47964 }); 47965 47966 return createSummaryRow($mainLabel.text().trim(), values.join(', ')); 47967 } 47968 47969 47970 function createSummaryHeader(label) { 47971 return $('<div/>', { 'class': 'summary-header' }).html(label); 47972 } 47973 47974 function updateFieldSummary() { 47975 $fieldSummary.html(''); 47976 47977 $fieldSummary.append(createSummaryHeader('Om Meg')); 47978 $fieldSummary.append(createSummaryRowByKey('membershipType', 'Medlemskap')); 47979 $fieldSummary.append(createSummaryRowByKey('firstName')); 47980 $fieldSummary.append(createSummaryRowByKey('lastName')); 47981 $fieldSummary.append(createSummaryRowByKey('birthNumber')); 47982 $fieldSummary.append(createSummaryRowByKey('address')); 47983 47984 if ($country.val() === defaultCountry) { 47985 $fieldSummary.append(createSummaryRowByKey('zipCode')); 47986 } 47987 $fieldSummary.append(createSummaryRowByKey('country')); 47988 47989 $fieldSummary.append(createSummaryHeader('Kontaktinfo')); 47990 $fieldSummary.append(createPhoneSummaryRow('mobile')); 47991 $fieldSummary.append(createPhoneSummaryRow('phonePrivate')); 47992 $fieldSummary.append(createPhoneSummaryRow('phoneWork')); 47993 $fieldSummary.append(createSummaryRowByKey('email')); 47994
47995 if ($memberShipType.val() === employeeValue) { 47996 $fieldSummary.append(createSummaryHeader('Jobb')); 47997 $fieldSummary.append(createSummaryRowByKey('employer')); 47998 47999 if (!$nonNorwegianEmployer.prop('checked')) { 48000 $fieldSummary.append(createSummaryRowByKey('employerAddress')); 48001 $fieldSummary.append(createSummaryRowByKey('employerZipCode')); 48002 } 48003 } 48004 48005 $fieldSummary.append(createSummaryHeader('Utdanning')); 48006 $fieldSummary.append(createDependantSummaryRow('educationDegree', 'Annet')); 48007 $fieldSummary.append(createDependantSummaryRow('education', 'Annet')); 48008 $fieldSummary.append(createDependantSummaryRow('educationLocation', 'Annet')); 48009 $fieldSummary.append(createSummaryRowByKey('graduationYear')); 48010 48011 if ($memberShipType.val() === differentApplicantValue) { 48012 $fieldSummary.append(createSummaryRowByKey('differentApplicantComment')); 48013 } 48014 if ($isTillitsvalgt.prop('checked')) { 48015 $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgt', 'Ja')); 48016 } else { 48017 $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgt','Nei')); 48018 } 48019 if ($isTillitsvalgtVara.prop('checked')) { 48020 $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgtVara','Ja')); 48021 } else { 48022 $fieldSummary.append(createSummaryRowByKeyAndValue('isTillitsvalgtVara','Nei')); 48023 } 48024 if ($hasTillitsvalgtopplaring.prop('checked')) { 48025 $fieldSummary.append(createSummaryRowByKeyAndValue('hasTillitsvalgtopplaring','Ja')); 48026 } else { 48027 $fieldSummary.append(createSummaryRowByKeyAndValue('hasTillitsvalgtopplaring','Nei')); 48028 } 48029 $fieldSummary.append(createMultiCheckboxSummaryRow('memberOfOtherOrganizations')); 48030 48031 } 48032 48033 function switchToStep2IfValid() { 48034 $validation.validateContainer($step1); 48035 var isValid = $validation.isValidContainer($step1); 48036 console.log('Step 1 valid? ', isValid); 48037 48038 if (!isValid) { 48039 var firstInvalidTop = $form.find('[data-fv-result=INVALID]:first').offset().top - 120; 48040 48041 console.log('Scroll?', $(window).scrollTop(), $(window).height(), firstInvalidTop); 48042 48043 if (firstInvalidTop < $(window).scrollTop() || firstInvalidTop > $(window).height()) { 48044 scrollTo(firstInvalidTop); 48045 } 48046 } else { 48047 switchToStep2(); 48048 } 48049 } 48050 48051 function switchToStep1() { 48052 $step1.show(); 48053 $step2.hide(); 48054 currentStep = 1; 48055 scrollTo($form.offset().top - 50); 48056 } 48057 48058 function switchToStep2() { 48059 updateFieldSummary(); 48060 $step2.show(); 48061 $step1.hide(); 48062 currentStep = 2; 48063 scrollTo($form.offset().top - 50); 48064 } 48065 48066 function showSuccessMessage() { 48067 $step1.hide(); 48068 $step2.hide(); 48069 $successMessage.show(); 48070 } 48071 48072 function updateCountryBasedFieldsDisplay() { 48073 if ($nonNorwegianResident.prop('checked')) { 48074 $country.val('').trigger('change'); 48075 $country.parents('.display-container').show(); 48076 $zipCode.val('').trigger('change'); 48077 $zipCode.parents('.display-container').hide(); 48078 $cityName.text(''); 48079 } else { 48080 $country.val(defaultCountry).trigger('change'); 48081 $country.parents('.display-container').hide(); 48082 $zipCode.parents('.display-container').show(); 48083 } 48084 } 48085 48086 function uncheckCheckBox($ident) { 48087 if ($ident == 'isTillitsvalgt') { 48088 $isTillitsvalgt.prop('checked', false); 48089 } 48090 48091 if ($ident == 'isTillitsvalgtVara') { 48092 $isTillitsvalgtVara.prop('checked', false); 48093 } 48094 48095 if ($ident == 'hasTillitsvalgtopplaring') { 48096 $hasTillitsvalgtopplaring.prop('checked', false); 48097 } 48098 } 48099 48100 function updateEmployeeCountryBasedFieldsDisplay() { 48101 console.log('update employee country based fields'); 48102 if ($nonNorwegianEmployer.prop('checked')) { 48103 $zipCodeEmployer.val('').trigger('change'); 48104 $zipCodeEmployer.parents('.display-container').hide(); 48105 $cityNameEmployer.text(''); 48106 $addressEmployer.val('').trigger('change'); 48107 $addressEmployer.parents('.display-container').hide(); 48108 } else { 48109 $zipCodeEmployer.parents('.display-container').show(); 48110 $addressEmployer.parents('.display-container').show(); 48111 } 48112 } 48113 48114 function scrollTo(px) { 48115 $('html, body').animate({ 48116 scrollTop: px 48117 }); 48118 } 48119 48120 function loadZipCodes() { 48121 $zipCode.prop('readonly', true); 48122 48123 var url = '/_Resources/Static/Packages/Teha.Site/ZipCodes/ZipCodes.json'; 48124 console.log('Loading zip codes from:', url); 48125 48126 $.getJSON(url, function(result) { 48127 zipCodes = result; 48128 48129 $zipCode.prop('readonly', false); 48130 48131 updateNameCityFromZipCode($zipCode.val(), $cityName); 48132 updateNameCityFromZipCode($zipCodeEmployer.val(), $cityNameEmployer); 48133 }); 48134 } 48135 48136 function updateNameCityFromZipCode(value, $cityName) { 48137 if (zipCodes === null || !zipCodes.hasOwnProperty(value)) { 48138 $cityName.text(''); 48139 $cityName.parent().hide(); 48140 } 48141 48142 var city = zipCodes[value]; 48143 console.log('Found city [' + city + '] for zip code [' + value + ']'); 48144 $cityName.text(city); 48145 $cityName.parent().show(); 48146 } 48147 48148 var formName = 'teha-site-member-registration-form'; 48149 var afagForm = new AfagForm($form, formName); 48150 var $validation = $form.data('formValidation'); 48151 var $step1 = $form.find('.wizard-step[data-step=1]'); 48152 var $step2 = $form.find('.wizard-step[data-step=2]');
48153 var $nextButton = $form.find('#next-button'); 48154 var $prevButton = $form.find('#prev-button'); 48155 var $fieldSummary = $form.find('.field-summary'); 48156 var $successMessage = $form.find('#success-message'); 48157 var $submitButton = $form.find('button[type="submit"]'); 48158 var idPrefix = formName + '-'; 48159 var $nonNorwegianResident = $('#' + idPrefix + 'nonNorwegianResident'); 48160 var $nonNorwegianEmployer = $('#' + idPrefix + 'nonNorwegianEmployer'); 48161 var $isTillitsvalgt = $('#' + idPrefix + 'isTillitsvalgt'); 48162 var $isTillitsvalgtVara = $('#' + idPrefix + 'isTillitsvalgtVara'); 48163 var $hasTillitsvalgtopplaring = $('#' + idPrefix + 'hasTillitsvalgtopplaring'); 48164 var $educationDegree = $('#' + idPrefix + 'educationDegree'); 48165 var $memberShipType = $('#' + idPrefix + 'membershipType'); 48166 var $zipCode = $('#' + idPrefix + 'zipCode'); 48167 var $country = $('#' + idPrefix + 'country'); 48168 var $cityName = $('#city-name'); 48169 var $zipCodeEmployer = $('#' + idPrefix + 'employerZipCode'); 48170 var $addressEmployer = $('#' + idPrefix + 'employerAddress'); 48171 var $cityNameEmployer = $('#city-name-employer'); 48172 var currentStep = 1; 48173 var defaultCountry = 'Norge'; 48174 var differentApplicantValue = 'Særskilt søker'; 48175 var employeeValue = 'Ansatt'; 48176 var studentValue = 'Student'; 48177 var zipCodes = null; 48178 var fv = $form.data('formValidation'); 48179 48180 loadZipCodes(); 48181 48182 $zipCode 48183 .attr('maxlength', 4) 48184 .attr('pattern', '\\d*') 48185 ; 48186 $zipCodeEmployer 48187 .attr('maxlength', 4) 48188 .attr('pattern', '\\d*') 48189 ; 48190 48191 $('#' + idPrefix + 'birthNumber').attr('pattern', '\\d*'); 48192 48193 window.createDummyData = function() { 48194 var dummyData = { 48195 'membershipType': 'Pensjonist', 48196 'differentApplicantComment': "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent volutpat vehicula tempus. Morbi posuere justo tortor, eget interdum eros egestas a. Fusce laoreet arcu ac neque tincidunt, in posuere dolor varius. Phasellus sed volutpat dui. Nunc aliquam ornare leo sit amet tristique. Proin tristique lacinia ullamcorper. Donec augue est, malesuada nec lobortis eget, ultrices ut tortor.\nAenean tempor luctus ullamcorper. Quisque porttitor fermentum eros non fringilla.\nMorbi ac erat non velit blandit ultrices a id urna.\n\nInteger tempor tortor vel magna posuere gravida.", 48197 'firstName': 'Marina', 48198 'lastName': 'Testhødi-Schmidt', 48199 'birthNumber': '12128800200', 48200 'address': 'Some street 123', 48201 'zipCode': '0308', 48202 'email': '[email protected]', 48203 'prefixMobile': '+47', 48204 'mobile': '666777888', 48205 'prefixPhoneWork': '+46', 48206 'phoneWork': '222111', 48207 'prefixPhonePrivate': '+49', 48208 'phonePrivate': '444555', 48209 'educationDegree': 'Master', 48210 'education': 'Arkitektur', 48211 'educationLocation': 'Annet', 48212 'educationLocationOther': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 48213 'graduationYear': '2011', 48214 'memberOfOtherOrganizations-option-0': true, 48215 'memberOfOtherOrganizations-option-2': true 48216 }; 48217 48218 $.each(dummyData, function(key, value) { 48219 var selector = '#' + idPrefix + key; 48220 console.log(selector, value); 48221 if (value === true) { 48222 $(selector).prop('checked', true); 48223 } else { 48224 $(selector).val(value).trigger('change'); 48225 } 48226 }); 48227 48228 $form.find('select').skStyleSelect('updateLabel'); 48229 }; 48230 48231 if (window.location.href.match(/[?&]createDummyData/)) { 48232 createDummyData(); 48233 48234 if (window.location.href.match(/[?&]switchToStep2/)) { 48235 $nextButton.trigger('click'); 48236 } 48237 } 48238 48239 afagForm.toggleDisplayBasedOfValue($educationDegree, $('#' + idPrefix + 'educationDegreeOther'), 'Annet'); 48240 afagForm.toggleDisplayBasedOfValue($educationDegree, $('#different-applicant-fields'), differentApplicantValue); 48241 afagForm.toggleDisplayBasedOfValue($('#' + idPrefix + 'education'), $('#' + idPrefix + 'educationOther'), 'Annet'); 48242 afagForm.toggleDisplayBasedOfValue($('#' + idPrefix + 'educationLocation'), $('#' + idPrefix + 'educationLocationOther'), 'Annet'); 48243 afagForm.toggleDisplayBasedOfValue($memberShipType, $('#employer-fields'), employee
48243Value); 48244 afagForm.toggleDisplayBasedOfValue($memberShipType, $('#employee-union-representative'), employeeValue); 48245 afagForm.toggleDisplayBasedOfValue($memberShipType, $('#insurance-field'), studentValue); 48246 48247 $nextButton.on('click', function() { 48248 switchToStep2IfValid(); 48249 }); 48250 48251 $prevButton.on('click', function() { 48252 switchToStep1(); 48253 }); 48254 48255 $nonNorwegianResident.on('click', function() { 48256 updateCountryBasedFieldsDisplay(); 48257 }); 48258 updateCountryBasedFieldsDisplay(); 48259 48260 $nonNorwegianEmployer.on('click', function() { 48261 updateEmployeeCountryBasedFieldsDisplay(); 48262 }); 48263 updateEmployeeCountryBasedFieldsDisplay(); 48264 48265 $isTillitsvalgt.on('click', function() { 48266 uncheckCheckBox('isTillitsvalgtVara'); 48267 updateTrainingCourseDisplay(); 48268 }); 48269 48270 $isTillitsvalgtVara.on('click', function() { 48271 uncheckCheckBox('isTillitsvalgt'); 48272 updateTrainingCourseDisplay(); 48273 }); 48274 48275 $form.on('submit', function(e) { 48276 if (currentStep === 1) { 48277 e.preventDefault(); 48278 switchToStep2IfValid(); 48279 } 48280 }).on('err.field.fv success.field.fv', function(e, data) { 48281 // Always enable submit button 48282 if (data.fv.getSubmitButton()) { 48283 grecaptcha.reset(); 48284 data.fv.disableSubmitButtons(false); 48285 } 48286 }).on('success.form.fv', function(e) { 48287 e.preventDefault(); 48288 48289 window.memberFormSubmit = function(token) { 48290 disableSubmitButtons(true); 48291 afagForm.submit($submitButton, '/_afag/member/registration-submit', function() { 48292 showSuccessMessage(); 48293 }); 48294 }; 48295 48296 grecaptcha.execute(); 48297 disableSubmitButtons(false); 48298 }); 48299 48300 afagForm.addValidators('birthNumber', { 48301 callback: { 48302 callback: function(value, validator, $field) { 48303 if (value === '') { 48304 // The NotEmptyValidator will handle this case 48305 return true; 48306 } 48307 48308 var normalizedValue = value.replace(/\s/g, ''); 48309 if (normalizedValue !== value) { 48310 $field.val(normalizedValue); 48311 } 48312 48313 return isValidBirthNumber(normalizedValue); 48314 }, 48315 message: 'Ugyldig Fødselsnummer' 48316 } 48317 }); 48318 48319 48320 48321 function updateTrainingCourseDisplay() { 48322 if ($isTillitsvalgt.prop('checked') || $isTillitsvalgtVara.prop('checked')) { 48323 $('#training-course').show(); 48324 } else { 48325 uncheckCheckBox('hasTillitsvalgtopplaring'); 48326 $('#training-course').hide(); 48327 } 48328 } 48329 48330 function disableSubmitButtons(disabled) { 48331 var selector = '[type="submit"]:not([formnovalidate])'; 48332 var buttonDisabled = 'disabled'; 48333 if (!disabled) { 48334 $form 48335 .find(selector) 48336 .removeAttr('disabled') 48337 .removeClass(buttonDisabled); 48338 } else { 48339 // Don't disable if the live validating mode is disabled 48340 $form 48341 .find(selector) 48342 .attr('disabled', 'disabled') 48343 .addClass(buttonDisabled); 48344 } 48345 } 48346 48347 function validateZipCode(value, validator, $field) { 48348 var $cityName = $field.parents('.zip-container').find('.city'); 48349 $cityName.text(''); 48350 48351 if (value === '') { 48352 // The NotEmptyValidator will handle this case 48353 return true; 48354 } 48355 48356 if (('' + value).match(/^\d{4}$/) === null) { 48357 fv.updateMessage($field, 'callback', 'Oppgi korrekt postnummer, fire siffer.'); 48358 return false; 48359 } 48360 48361 console.log('Looking up city for zip code [' + value + ']'); 48362 48363 if (zipCodes === null || !zipCodes.hasOwnProperty(value)) { 48364 fv.updateMessage($field, 'callback', 'Ukjent postnummer'); 48365 return false; 48366 } 48367 48368 updateNameCityFromZipCode(value, $cityName); 48369 48370 return true; 48371 } 48372 48373 afagForm.addValidators('zipCode', { 48374 callback: { 48375 callback: validateZipCode 48376 } 48377 }); 48378 afagForm.addValidators('employerZipCode', { 48379 callback: { 48380 callback: validateZipCode 48381 } 48382 }); 48383 48384 afagForm.addPhonePrefixValidator('prefixMobile'); 48385 afagForm.addPhonePrefixValidator('prefixPhonePrivate'); 48386 afagForm.addPhonePrefixValidator('prefixPhoneWork'); 48387 48388 afagForm.addPhoneNumberValidator('mobile'); 48389 afagForm.addPhoneNumberValidator('phonePrivate'); 48390 afagForm.addPhoneNumberValidator('phoneWork'); 48391 48392 afagForm.addGraduationYearValidator('graduationYear'); 48393} 48394 48395/*! 48396 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com 48397 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 48398 */ 48399(function () { 48400'use strict'; 48401 48402var _WINDOW = {}; 48403try { 48404 if (typeof window !== 'undefined') _WINDOW = window; 48405 48406} catch (e) {} 48407 48408var _ref = _WINDOW.navigator || {}; 48409var _ref$userAgent = _ref.userAgent; 48410var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent; 48411 48412var WINDOW = _WINDOW; 48413 48414 48415 48416 48417 48418var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); 48419 48420var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; 48421 48422 48423 48424 48425 48426 48427 48428 48429 48430var PRODUCTION = function () { 48431 try { 48432 return "production" === 'production'; 48433 } catch (e) { 48434 return false;
48435 } 48436}(); 48437 48438var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 48439var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); 48440 48441 48442 48443var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) { 48444 return n + 'x'; 48445})).concat(oneToTwenty.map(function (n) { 48446 return 'w-' + n; 48447})); 48448 48449function bunker(fn) { 48450 try { 48451 fn(); 48452 } catch (e) { 48453 if (!PRODUCTION) { 48454 throw e; 48455 } 48456 } 48457} 48458 48459var w = WINDOW || {}; 48460 48461if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; 48462if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; 48463if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; 48464if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; 48465 48466var namespace = w[NAMESPACE_IDENTIFIER]; 48467 48468var _extends = Object.assign || function (target) { 48469 for (var i = 1; i < arguments.length; i++) { 48470 var source = arguments[i]; 48471 48472 for (var key in source) { 48473 if (Object.prototype.hasOwnProperty.call(source, key)) { 48474 target[key] = source[key]; 48475 } 48476 } 48477 } 48478 48479 return target; 48480}; 48481 48482function define(prefix, icons) { 48483 var normalized = Object.keys(icons).reduce(function (acc, iconName) { 48484 var icon = icons[iconName]; 48485 var expanded = !!icon.icon; 48486 48487 if (expanded) { 48488 acc[icon.iconName] = icon.icon; 48489 } else { 48490 acc[iconName] = icon; 48491 } 48492 return acc; 48493 }, {}); 48494 48495 if (typeof namespace.hooks.addPack === 'function') { 48496 namespace.hooks.addPack(prefix, normalized); 48497 } else { 48498 namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized); 48499 } 48500 48501 /** 48502 * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction 48503 * of new styles we needed to differentiate between them. Prefix `fa` is now an alias 48504 * for `fas` so we'll easy the upgrade process for our users by automatically defining 48505 * this as well. 48506 */ 48507 if (prefix === 'fas') { 48508 define('fa', icons); 48509 } 48510} 48511 48512var icons = { 48513 "address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"], 48514 "address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"], 48515 "adjust": [512, 512, [], "f042", "M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z"], 48516 "air-freshener": [384, 512, [], "f5d0", "M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z"], 48517 "align-center": [448, 512, [], "f037", "M352 44v40c0 8.837-7.163 16-16 16H112c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h224c8.837 0 16 7.163 16 16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm320-200H112c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z"], 48518 "align-justify": [448, 512, [], "f039", "M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm16 144h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0-128h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"], 48519 "align-left": [448, 512, [], "f036", "M288 44v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16zM0 172v40c0 8.837 7.163 16 16 16h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16zm16 312h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm256-200H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16z"], 48520 "align-right": [448, 512, [], "f038", "M160 84V44c0-8.837 7.163-16 16-16h256c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H176c-8.837 0-16-7.163-16-16zM16 228h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 256h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"],
48521 "allergies": [448, 512, [], "f461", "M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], 48522 "ambulance": [640, 512, [], "f0f9", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"], 48523 "american-sign-language-interpreting": [640, 512, [], "f2a3", "M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z"], 48524 "anchor": [576, 512, [], "f13d", "M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z"], 48525 "angle-double-down": [320, 512, [], "f103", "M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"], 48526 "angle-double-left": [448, 512, [], "f100", "M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"], 48527 "angle-double-right": [448, 512, [], "f101", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"], 48528 "angle-double-up": [320, 512, [], "f102", "M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"],
48529 "angle-down": [320, 512, [], "f107", "M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"], 48530 "angle-left": [256, 512, [], "f104", "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"], 48531 "angle-right": [256, 512, [], "f105", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"], 48532 "angle-up": [320, 512, [], "f106", "M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"], 48533 "angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z"], 48534 "apple-alt": [448, 512, [], "f5d1", "M351.18 129.15c-35.53-6.25-98.06 14.36-127.18 30.81-29.12-16.45-91.66-37.07-127.19-30.81-81.24 14.3-107.42 124.49-93.09 205.6C18.05 415.86 65.02 512 160.41 512c12.06 0 24.12-4.61 34.44-10.34 18.08-10.03 40.23-10.03 58.31 0 10.32 5.73 22.38 10.34 34.43 10.34 95.39 0 142.36-96.14 156.68-177.25 14.33-81.11-11.83-191.3-93.09-205.6zm-55.55-41.53C326.19 57.06 319.35.65 319.35.65s-56.41-6.85-86.97 23.72c-30.57 30.57-23.72 86.97-23.72 86.97s56.4 6.85 86.97-23.72z"], 48535 "archive": [512, 512, [], "f187", "M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"], 48536 "archway": [576, 512, [], "f557", "M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"], 48537 "arrow-alt-circle-down": [512, 512, [], "f358", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"], 48538 "arrow-alt-circle-left": [512, 512, [], "f359", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"], 48539 "arrow-alt-circle-right": [512, 512, [], "f35a", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"], 48540 "arrow-alt-circle-up": [512, 512, [], "f35b", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"], 48541 "arrow-circle-down": [512, 512, [], "f0ab", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4
48541-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"], 48542 "arrow-circle-left": [512, 512, [], "f0a8", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"], 48543 "arrow-circle-right": [512, 512, [], "f0a9", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"], 48544 "arrow-circle-up": [512, 512, [], "f0aa", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"], 48545 "arrow-down": [448, 512, [], "f063", "M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"], 48546 "arrow-left": [448, 512, [], "f060", "M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"], 48547 "arrow-right": [448, 512, [], "f061", "M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"], 48548 "arrow-up": [448, 512, [], "f062", "M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"], 48549 "arrows-alt": [512, 512, [], "f0b2", "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"], 48550 "arrows-alt-h": [512, 512, [], "f337", "M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"], 48551 "arrows-alt-v": [256, 512, [], "f338", "M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"], 48552 "assistive-listening-systems": [512, 512, [], "f2a2", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z"], 48553 "asterisk": [512, 512, [], "f069", "M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"], 48554 "at": [512, 512, [], "f1fa", "M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184
48554S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"], 48555 "atlas": [448, 512, [], "f558", "M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z"], 48556 "atom": [448, 512, [], "f5d2", "M413.03 256c40.13-54.89 41.51-98.62 25.14-128-10.91-19.52-40.54-50.73-116.33-41.88C300.36 34.89 267.64 0 224 0s-76.36 34.89-97.84 86.12C50.43 77.34 20.73 108.48 9.83 128c-16.38 29.4-15 73.09 25.14 128-40.13 54.89-41.51 98.62-25.14 128 29.21 52.34 101.68 43.58 116.33 41.88C147.63 477.1 180.36 512 224 512s76.37-34.9 97.84-86.12c14.64 1.7 87.11 10.46 116.33-41.88 16.38-29.4 15-73.09-25.14-128zM63.38 352c-4.03-7.21-.19-24.8 14.95-48.29 6.96 6.53 14.2 12.89 21.87 19.18 1.71 13.71 4 27.08 6.76 40.08-24.56.89-39.89-4.37-43.58-10.97zm36.82-162.88c-7.66 6.29-14.9 12.65-21.87 19.18-15.13-23.5-18.97-41.09-14.95-48.3 3.41-6.14 16.39-11.47 37.92-11.47 1.71 0 3.87.3 5.69.37a472.191 472.191 0 0 0-6.79 40.22zM224 64c9.47 0 22.2 13.52 33.86 37.26-11.19 3.7-22.44 8-33.86 12.86-11.42-4.86-22.67-9.16-33.86-12.86C201.8 77.52 214.53 64 224 64zm0 384c-9.47 0-22.2-13.52-33.86-37.26 11.19-3.7 22.44-8 33.86-12.86 11.42 4.86 22.67 9.16 33.86 12.86C246.2 434.48 233.47 448 224 448zm62.5-157.33c-26.7 19.08-46.14 29.33-62.5 37.48-16.35-8.14-35.8-18.41-62.5-37.48-1.99-27.79-1.99-41.54 0-69.33 26.67-19.05 46.13-29.32 62.5-37.48 16.39 8.17 35.86 18.44 62.5 37.48 1.98 27.78 1.99 41.53 0 69.33zM384.62 352c-3.67 6.62-19 11.82-43.58 10.95 2.76-13 5.05-26.37 6.76-40.06 7.66-6.29 14.9-12.65 21.87-19.18 15.13 23.49 18.97 41.08 14.95 48.29zm-14.95-143.71c-6.96-6.53-14.2-12.89-21.87-19.18a473.535 473.535 0 0 0-6.79-40.22c1.82-.07 3.97-.37 5.69-.37 21.52 0 34.51 5.34 37.92 11.47 4.02 7.22.18 24.81-14.95 48.3zM224 224c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"], 48557 "audio-description": [512, 512, [], "f29e", "M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z"], 48558 "award": [384, 512, [], "f559", "M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.
4855817-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z"], 48559 "backspace": [640, 512, [], "f55a", "M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z"], 48560 "backward": [512, 512, [], "f04a", "M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"], 48561 "balance-scale": [640, 512, [], "f24e", "M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], 48562 "ban": [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"], 48563 "band-aid": [640, 512, [], "f462", "M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z"], 48564 "barcode": [512, 512, [], "f02a", "M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z"], 48565 "bars": [448, 512, [], "f0c9", "M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"], 48566 "baseball-ball": [496, 512, [], "f433", "M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z"], 48567 "basketball-ball": [496, 512, [], "f434", "M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 3
485676-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z"], 48568 "bath": [512, 512, [], "f2cd", "M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"], 48569 "battery-empty": [640, 512, [], "f244", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"], 48570 "battery-full": [640, 512, [], "f240", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"], 48571 "battery-half": [640, 512, [], "f242", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"], 48572 "battery-quarter": [640, 512, [], "f243", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"], 48573 "battery-three-quarters": [640, 512, [], "f241", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"], 48574 "bed": [640, 512, [], "f236", "M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z"], 48575 "beer": [448, 512, [], "f0fc", "M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z"], 48576 "bell": [448, 512, [], "f0f3", "M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"], 48577 "bell-slash": [640, 512, [], "f1f6", "M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"], 48578 "bezier-curve": [640, 512, [], "f55b", "M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"], 48579 "bicycle": [640, 512, [], "f206", "M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 5
485797.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z"], 48580 "binoculars": [512, 512, [], "f1e5", "M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z"], 48581 "birthday-cake": [448, 512, [], "f1fd", "M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z"], 48582 "blender": [512, 512, [], "f517", "M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"], 48583 "blind": [384, 512, [], "f29d", "M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z"], 48584 "bold": [384, 512, [], "f032", "M304.793 243.891c33.639-18.537 53.657-54.16 53.657-95.693 0-48.236-26.25-87.626-68.626-104.179C265.138 34.01 240.849 32 209.661 32H24c-8.837 0-16 7.163-16 16v33.049c0 8.837 7.163 16 16 16h33.113v318.53H24c-8.837 0-16 7.163-16 16V464c0 8.837 7.163 16 16 16h195.69c24.203 0 44.834-1.289 66.866-7.584C337.52 457.193 376 410.647 376 350.014c0-52.168-26.573-91.684-71.207-106.123zM142.217 100.809h67.444c16.294 0 27.536 2.019 37.525 6.717 15.828 8.479 24.906 26.502 24.906 49.446 0 35.029-20.32 56.79-53.029 56.79h-76.846V100.809zm112.642 305.475c-10.14 4.056-22.677 4.907-31.409 4.907h-81.233V281.943h84.367c39.645 0 63.057 25.38 63.057 63.057.001 28.425-13.66 52.483-34.782 61.284z"], 48585 "bolt": [320, 512, [], "f0e7", "M295.973 160H180.572L215.19 30.184C219.25 14.956 207.756 0 192 0H56C43.971 0 33.8 8.905 32.211 20.828l-31.996 240C-1.704 275.217 9.504 288 24.004 288h118.701L96.646 482.466C93.05 497.649 104.659 512 119.992 512c8.35 0 16.376-4.374 20.778-11.978l175.973-303.997c9.244-15.967-2.288-36.025-20.77-36.025z"], 48586 "bomb": [512, 512, [], "f1e2", "M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-
485867.2 16-16z"], 48587 "bone": [640, 512, [], "f5d7", "M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z"], 48588 "bong": [448, 512, [], "f55c", "M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z"], 48589 "book": [448, 512, [], "f02d", "M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"], 48590 "book-open": [576, 512, [], "f518", "M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"], 48591 "book-reader": [512, 512, [], "f5da", "M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z"], 48592 "bookmark": [384, 512, [], "f02e", "M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"], 48593 "bowling-ball": [496, 512, [], "f436", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48594 "box": [512, 512, [], "f466", "M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"], 48595 "box-open": [640, 512, [], "f49e", "M53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9zm585.1 102.8L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9z"], 48596 "boxes": [576, 512, [], "f468", "M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"], 48597 "braille": [640, 512, [], "f2a1", "M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"], 48598 "brain": [576, 512, [], "f5dc", "M208 0c-29.87 0-54.74 20.55-61.8 48.22-.75-.02-1.45-.22-2.2-.22-35.34 0-64 28.65-64 64 0 4.84.64 9.51 1.66 14.04C52.54 138 32
48598166.57 32 200c0 12.58 3.16 24.32 8.34 34.91C16.34 248.72 0 274.33 0 304c0 33.34 20.42 61.88 49.42 73.89-.9 4.57-1.42 9.28-1.42 14.11 0 39.76 32.23 72 72 72 4.12 0 8.1-.55 12.03-1.21C141.61 491.31 168.25 512 200 512c39.77 0 72-32.24 72-72V205.45c-10.91 8.98-23.98 15.45-38.36 18.39-4.97 1.02-9.64-2.82-9.64-7.89v-16.18c0-3.57 2.35-6.78 5.8-7.66 24.2-6.16 42.2-27.95 42.2-54.04V64c0-35.35-28.66-64-64-64zm368 304c0-29.67-16.34-55.28-40.34-69.09 5.17-10.59 8.34-22.33 8.34-34.91 0-33.43-20.54-62-49.66-73.96 1.02-4.53 1.66-9.2 1.66-14.04 0-35.35-28.66-64-64-64-.75 0-1.45.2-2.2.22C422.74 20.55 397.87 0 368 0c-35.34 0-64 28.65-64 64v74.07c0 26.09 17.99 47.88 42.2 54.04 3.46.88 5.8 4.09 5.8 7.66v16.18c0 5.07-4.68 8.91-9.64 7.89-14.38-2.94-27.44-9.41-38.36-18.39V440c0 39.76 32.23 72 72 72 31.75 0 58.39-20.69 67.97-49.21 3.93.67 7.91 1.21 12.03 1.21 39.77 0 72-32.24 72-72 0-4.83-.52-9.54-1.42-14.11 29-12.01 49.42-40.55 49.42-73.89z"], 48599 "briefcase": [512, 512, [], "f0b1", "M320 288h192v144c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V288h192v20c0 6.627 5.373 12 12 12h104c6.627 0 12-5.373 12-12v-20zm192-112v80H0v-80c0-26.51 21.49-48 48-48h80V80c0-26.51 21.49-48 48-48h160c26.51 0 48 21.49 48 48v48h80c26.51 0 48 21.49 48 48zM320 96H192v32h128V96z"], 48600 "briefcase-medical": [512, 512, [], "f469", "M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z"], 48601 "broadcast-tower": [640, 512, [], "f519", "M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z"], 48602 "broom": [512, 512, [], "f51a", "M10.8 247.2C-.7 251.8-3.7 266.7 5 275.4l54.8 54.8 73.2-24.4-24.4 73.2 128 128c8.8 8.8 23.6 5.7 28.2-5.8l98.1-243.7-108.4-108.4-243.7 98.1zM507.3 27.3L484.7 4.7c-6.2-6.3-16.4-6.3-22.6 0L359.8 106.9l-40.4-40.4c-4.2-4.3-11.4-3-13.9 2.5l-27.2 58.6 106.1 106.1 58.6-27.2c5.4-2.5 6.7-9.7 2.5-13.9l-40.4-40.4L507.3 49.9c6.3-6.2 6.3-16.3 0-22.6z"], 48603 "brush": [384, 512, [], "f55d", "M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z"], 48604 "bug": [512, 512, [], "f188", "M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z"], 48605 "building": [448, 512, [], "f1ad", "M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.
48605627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z"], 48606 "bullhorn": [576, 512, [], "f0a1", "M576 224c0-20.896-13.36-38.666-32-45.258V64c0-35.346-28.654-64-64-64-64.985 56-142.031 128-272 128H48c-26.51 0-48 21.49-48 48v96c0 26.51 21.49 48 48 48h43.263c-18.742 64.65 2.479 116.379 18.814 167.44 1.702 5.32 5.203 9.893 9.922 12.88 20.78 13.155 68.355 15.657 93.773 5.151 16.046-6.633 19.96-27.423 7.522-39.537-18.508-18.026-30.136-36.91-19.795-60.858a12.278 12.278 0 0 0-1.045-11.673c-16.309-24.679-3.581-62.107 28.517-72.752C346.403 327.887 418.591 395.081 480 448c35.346 0 64-28.654 64-64V269.258c18.64-6.592 32-24.362 32-45.258zm-96 139.855c-54.609-44.979-125.033-92.94-224-104.982v-69.747c98.967-12.042 169.391-60.002 224-104.982v279.711z"], 48607 "bullseye": [512, 512, [], "f140", "M256 72c101.689 0 184 82.295 184 184 0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-101.689 82.295-184 184-184m0-64C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 184c35.29 0 64 28.71 64 64s-28.71 64-64 64-64-28.71-64-64 28.71-64 64-64m0-64c-70.692 0-128 57.308-128 128s57.308 128 128 128 128-57.308 128-128-57.308-128-128-128z"], 48608 "burn": [384, 512, [], "f46a", "M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z"], 48609 "bus": [512, 512, [], "f207", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"],
48610 "bus-alt": [512, 512, [], "f55e", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48611 "calculator": [448, 512, [], "f1ec", "M0 464V48C0 21.49 21.49 0 48 0h352c26.51 0 48 21.49 48 48v416c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm384-284V76c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v104c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12zM128 308v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm256 128V268c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-256 0v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm128-128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm0 128v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"], 48612 "calendar": [448, 512, [], "f133", "M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z"], 48613 "calendar-alt": [448, 512, [], "f073", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm116 204c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm128 128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40zm0-128c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-40z"], 48614 "calendar-check": [448, 512, [], "f274", "M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l
48614-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z"], 48615 "calendar-minus": [448, 512, [], "f272", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z"], 48616 "calendar-plus": [448, 512, [], "f271", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z"], 48617 "calendar-times": [448, 512, [], "f273", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z"], 48618 "camera": [512, 512, [], "f030", "M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"], 48619 "camera-retro": [512, 512, [], "f083", "M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z"], 48620 "cannabis": [512, 512, [], "f55f", "M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z"], 48621 "capsules": [576, 512, [], "f46b", "M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32
48621112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z"], 48622 "car": [512, 512, [], "f1b9", "M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"], 48623 "car-alt": [480, 512, [], "f5de", "M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"], 48624 "car-battery": [512, 512, [], "f5df", "M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z"], 48625 "car-crash": [640, 512, [], "f5e1", "M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z"], 48626 "car-side": [640, 512, [], "f5e4", "M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"], 48627 "caret-down": [320, 512, [], "f0d7", "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"], 48628 "caret-left": [192, 512, [], "f0d9", "M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"], 48629 "caret-right": [192, 512, [], "f0da", "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284
48629L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"], 48630 "caret-square-down": [448, 512, [], "f150", "M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z"], 48631 "caret-square-left": [448, 512, [], "f191", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z"], 48632 "caret-square-right": [448, 512, [], "f152", "M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z"], 48633 "caret-square-up": [448, 512, [], "f151", "M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z"], 48634 "caret-up": [320, 512, [], "f0d8", "M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"], 48635 "cart-arrow-down": [576, 512, [], "f218", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z"], 48636 "cart-plus": [576, 512, [], "f217", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z"], 48637 "certificate": [512, 512, [], "f0a3", "M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z"], 48638 "chalkboard": [640, 512, [], "f51b", "M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], 48639 "chalkboard-teacher": [640, 512, [], "f51c", "M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z"], 48640 "charging-station": [576, 512, [], "f5e7", "M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"], 48641 "chart-area": [512, 512, [], "f1fe", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.
486416 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"], 48642 "chart-bar": [512, 512, [], "f080", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zm-308-44v-72c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V204c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0V108c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"], 48643 "chart-line": [512, 512, [], "f201", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM456 96H344c-21.4 0-32.1 25.9-17 41l32.9 32.9-72 72.9-55.6-55.6c-4.7-4.7-12.2-4.7-16.9 0L96.4 305c-4.7 4.6-4.8 12.2-.2 16.9l28.5 29.4c4.7 4.8 12.4 4.9 17.1.1l82.1-82.1 55.5 55.5c4.7 4.7 12.3 4.7 17 0l109.2-109.2L439 249c15.1 15.1 41 4.4 41-17V120c0-13.3-10.7-24-24-24z"], 48644 "chart-pie": [576, 512, [], "f200", "M288 12.3V240h227.7c6.9 0 12.3-5.8 12-12.7-6.4-122.4-104.5-220.6-227-227-6.9-.3-12.7 5.1-12.7 12zM552.7 288c6.9 0 12.3 5.8 12 12.7-2.8 53.2-23.2 105.6-61.2 147.8-4.6 5.1-12.6 5.4-17.5.5L325 288h227.7zM401 433c4.8 4.8 4.7 12.8-.4 17.3-42.6 38.4-99 61.7-160.8 61.7C107.6 511.9-.2 403.8 0 271.5.2 143.4 100.8 38.9 227.3 32.3c6.9-.4 12.7 5.1 12.7 12V272l161 161z"], 48645 "check": [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"], 48646 "check-circle": [512, 512, [], "f058", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"], 48647 "check-double": [512, 512, [], "f560", "M504.5 171.95l-36.2-36.41c-10-10.05-26.21-10.05-36.2 0L192 377.02 79.9 264.28c-10-10.06-26.21-10.06-36.2 0L7.5 300.69c-10 10.05-10 26.36 0 36.41l166.4 167.36c10 10.06 26.21 10.06 36.2 0l294.4-296.09c10-10.06 10-26.36 0-36.42zM166.57 282.71c6.84 7.02 18.18 7.02 25.21.18L403.85 72.62c7.02-6.84 7.02-18.18.18-25.21L362.08 5.29c-6.84-7.02-18.18-7.02-25.21-.18L179.71 161.19l-68.23-68.77c-6.84-7.02-18.18-7.02-25.2-.18l-42.13 41.77c-7.02 6.84-7.02 18.18-.18 25.2l122.6 123.5z"], 48648 "check-square": [448, 512, [], "f14a", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z"], 48649 "chess": [512, 512, [], "f439", "M199.821 217.633a6 6 0 0 1 6 6l-.001 20.766a6 6 0 0 1-6 6h-25.805c0 31.715-2.153 96.201 17.398 153.229H64.597C84.54 345.452 82.02 279.245 82.02 250.399H56.183a6 6 0 0 1-6-6l.002-20.766a6 6 0 0 1 6-6h143.636zM41.554 115.088l34.58 95.071h103.734l34.572-95.072c2.846-7.826-2.95-16.101-11.278-16.101H152v-30.22h21.57a6 6 0 0 0 6-6V40.383a6 6 0 0 0-6-6h-28.367V6a6 6 0 0 0-6-6H116.82a6 6 0 0 0-6 6v28.383H82.421a6 6 0 0 0-6 6v22.383a6 6 0 0 0 6 6H104v30.219H52.831c-8.328.001-14.124 8.276-11.277 16.103zM222.678 445.17v-28.067a6 6 0 0 0-6-6H39.322a6 6 0 0 0-6 6v28.067l-22.148 14.164a6 6 0 0 0-2.767 5.055V506a6 6 0 0 0 6 6h227.187a6 6 0 0 0 6-6v-41.612a6 6 0 0 0-2.767-5.055l-22.149-14.163zm90.578-144.225l24.88 16.963c.09 18.124-.167 63.904-11.905 114.522h147.526c-11.713-50.475-11.969-96.324-11.882-114.537l24.859-16.949a3.856 3.856 0 0 0 1.684-3.187v-69.901a3.857 3.857 0 0 0-3.857-3.857h-27.655a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.858-3.857h-52.918a3.857 3.857 0 0 0-3.857 3.857v31.514h-22.737v-31.514a3.857 3.857 0 0 0-3.857-3.857H315.43a3.857 3.857 0 0 0-3.857 3.857v69.901a3.855 3.855 0 0 0 1.683 3.188zm71.585 51.906c0-8.372 6.787-15.158 15.159-15.158s15.158 6.787 15.158 15.158v30.318h-30.317v-30.318zM504.62 470.059l-13.664-10.639v-15.552a3.857 3.857 0 0 0-3.857-3.857H312.915a3.857 3.857 0 0 0-3.857 3.857v15.552l-13.677 10.639a3.857 3.857 0 0 0-1.488 3.044v35.039a3.857 3.857 0 0 0 3.857 3.857h204.5a3.857 3.857 0 0 0 3.857-3.857v-35.04a3.859 3.859 0 0 0-1.487-3.043z"], 48650 "chess-bishop": [320, 512, [], "f43a", "M123.158 77.881C107.369 72.53 96 57.597 96 40c0-22.091 17.909-40 40-40h47.796c22.091 0 40 17.909 40 40 0 17.541-11.295 32.434-27.005 37.829 23.993 16.657 48.577 46.839 68.703 82.05L144.929 280.443a6 6 0 0 0 0 8.485l14.142 14.142a6 6 0 0 0 8.485 0L280.9 189.726c17.758 38.297 29.371 79.443 29.371 114.273 0 53.786-22.897 75.788-58.446 86.033V448H68.174v-57.97C32.631 379.784 9.739 357.781 9.739 304c0-78.029 58.281-187.766 113.419-226.119zM320 500v-24c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12z"], 48651 "chess-board": [512, 512, [], "f43c", "M256 256v64h-64v-64h64zm0-256h-64v64h64V0zm0 256h64v-64h-64v64zM384 0h-64v64h64V0zm0 512h64v-64h-64v64zm128-64v-64h-64v64h64zm-384 64h64v-64h-64v64zm0-512H64v64h64V0zm384 192v-64h-64v64h64zm0 128v-64h-64v64h64zM0 512h64v-64H0v64zM0 64v64h64V64H0zm0 128v64h64v-64H0zm0 128v64h64v-64H0zm256 192h64v-64h-64v64zm-64-128v64h64v-64h-64zm64-192v-64h-64v64h64zM64 384v64h64v-64H64zm64-128H64v64h64v-64zm256 128h64v-64h-64v64zM512 0h-64v64h64V0zM384 256h64v-64h-64v64zm0-192v64h64V64h-64zm-64 320v64h64v-64h-64zm-192-64v64h64v-64h-64zm128 0v64h64v-64h-64zm-64-128h-64v64h64v-64zm-64-64H64v64h64v-64zm192 192h64v-64h-64v64zM192 128V64h-64v64h64zm128 0V64h-64v64h64zm0 64h64v-64h-64v64z"], 48652 "chess-king": [448, 512, [], "f43f", "M416 476v24c0 6.627-5.373 12-12 12H44c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12zm-8.033-324H248v-48h50a6 6 0 0 0 6-6V62a6 6 0 0 0-6-6h-50V6a6 6 0 0 0-6-6h-36a6 6 0 0 0-6 6v50h-50a6 6 0 0 0-6 6v36a6 6 0 0 0 6 6h50v48H40.033
48652c-27.574 0-46.879 27.244-37.738 53.259L87.582 448h272.836l85.287-242.741C454.846 179.244 435.541 152 407.967 152z"], 48653 "chess-knight": [384, 512, [], "f441", "M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"], 48654 "chess-pawn": [320, 512, [], "f443", "M264 448H56s60-42.743 60-176H84c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h40.209C95.721 210.56 76 181.588 76 148c0-46.392 37.608-84 84-84s84 37.608 84 84c0 33.588-19.721 62.56-48.209 76H236c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12h-32c0 133.257 60 176 60 176zm28 16H28c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h264c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12z"], 48655 "chess-queen": [512, 512, [], "f445", "M436 512H76c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12zM255.579 0c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zm204.568 154.634c-5.768-3.045-12.916-.932-16.082 4.77-8.616 15.516-22.747 37.801-44.065 37.801-28.714 0-30.625-19.804-31.686-57.542-.183-6.492-5.501-11.664-11.995-11.664h-41.006c-5.175 0-9.754 3.328-11.388 8.238-8.89 26.709-26.073 40.992-47.925 40.992s-39.034-14.283-47.925-40.992c-1.634-4.91-6.213-8.238-11.388-8.238h-41.005c-6.495 0-11.813 5.174-11.995 11.667-1.052 37.642-2.934 57.539-31.688 57.539-20.691 0-33.817-20.224-44.425-38.025-3.266-5.48-10.258-7.431-15.899-4.453l-39.179 20.679a12 12 0 0 0-5.51 15.145L112 448h288l105.014-257.448a12 12 0 0 0-5.51-15.145l-39.357-20.773z"], 48656 "chess-rook": [384, 512, [], "f447", "M81.241 215.027C80.957 258.92 77.411 348.076 48 448h287.982c-29.4-99.604-32.936-188.912-33.221-232.975l45.418-42.312a11.998 11.998 0 0 0 3.82-8.78V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v44h-48V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v44H96V44c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v119.932c0 3.33 1.384 6.51 3.82 8.78l45.421 42.315zM160 256c0-17.673 14.327-32 32-32 17.673 0 32 14.327 32 32v64.004h-64V256zm224 220v24c0 6.627-5.373 12-12 12H12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12z"], 48657 "chevron-circle-down": [512, 512, [], "f13a", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z"], 48658 "chevron-circle-left": [512, 512, [], "f137", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z"], 48659 "chevron-circle-right": [512, 512, [], "f138", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z"], 48660 "chevron-circle-up": [512, 512, [], "f139", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z"], 48661 "chevron-down": [448, 512, [], "f078", "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"], 48662 "chevron-left": [320, 512, [], "f053", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"], 48663 "chevron-right": [320, 512, [], "f054", "M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522
48663-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"], 48664 "chevron-up": [448, 512, [], "f077", "M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z"], 48665 "child": [384, 512, [], "f1ae", "M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z"], 48666 "church": [640, 512, [], "f51d", "M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z"], 48667 "circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"], 48668 "circle-notch": [512, 512, [], "f1ce", "M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z"], 48669 "clipboard": [384, 512, [], "f328", "M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"], 48670 "clipboard-check": [384, 512, [], "f46c", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"], 48671 "clipboard-list": [384, 512, [], "f46d", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"], 48672 "clock": [512, 512, [], "f017", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z"],
48673 "clone": [512, 512, [], "f24d", "M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z"], 48674 "closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z"], 48675 "cloud": [640, 512, [], "f0c2", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"], 48676 "cloud-download-alt": [640, 512, [], "f381", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z"], 48677 "cloud-upload-alt": [640, 512, [], "f382", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z"], 48678 "cocktail": [576, 512, [], "f561", "M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z"], 48679 "code": [640, 512, [], "f121", "M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"], 48680 "code-branch": [384, 512, [], "f126", "M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"], 48681 "coffee": [640, 512, [], "f0f4", "M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z"], 48682 "cog": [512, 512, [], "f013", "M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"], 48683 "cogs": [640, 512, [], "f085", "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"], 48684 "coins": [512, 512, [], "f51e", "M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z"], 48685 "columns": [512, 512, [], "f0db", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"], 48686 "comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z"], 48687 "comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"], 48688 "comment-dots": [512, 512, [], "f4ad", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48689 "comment-slash": [640, 512, [], "f4b3", "M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"], 48690 "comments": [576, 512, [], "f086", "M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z"], 48691 "compact-disc": [496, 512, [], "f51f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], 48692 "compass": [496, 512, [], "f14e", "M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z"], 48693 "compress": [448, 512, [], "f066", "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm
486930 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"], 48694 "concierge-bell": [512, 512, [], "f562", "M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], 48695 "cookie": [512, 512, [], "f563", "M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48696 "cookie-bite": [512, 512, [], "f564", "M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48697 "copy": [448, 512, [], "f0c5", "M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"], 48698 "copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.95
486987 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z"], 48699 "couch": [640, 512, [], "f4b8", "M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"], 48700 "credit-card": [576, 512, [], "f09d", "M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"], 48701 "crop": [512, 512, [], "f125", "M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"], 48702 "crop-alt": [512, 512, [], "f565", "M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z"], 48703 "crosshairs": [512, 512, [], "f05b", "M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z"], 48704 "crow": [640, 512, [], "f520", "M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], 48705 "crown": [640, 512, [], "f521", "M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z"], 48706 "cube": [512, 512, [], "f1b2", "M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"], 48707 "cubes": [512, 512, [], "f1b3", "M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"], 48708 "cut": [448, 512, [], "f0c4", "M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"], 48709 "database": [448, 512, [], "f1c0", "M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"],
48710 "deaf": [512, 512, [], "f2a4", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z"], 48711 "desktop": [576, 512, [], "f108", "M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"], 48712 "diagnoses": [640, 512, [], "f470", "M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"], 48713 "dice": [640, 512, [], "f522", "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], 48714 "dice-five": [448, 512, [], "f523", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48715 "dice-four": [448, 512, [], "f524", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48716 "dice-one": [448, 512, [], "f525", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48717 "dice-six": [448, 512, [], "f526", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48718 "dice-three": [448, 512, [], "f527", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48719 "dice-two": [448, 512, [], "f528", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 48720 "digital-tachograph": [640, 512, [], "f566", "M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z"], 48721 "directions": [512, 512, [], "f5eb", "M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z"], 48722 "divide": [448, 512, [], "f529", "M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], 48723 "dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z"], 48724 "dna": [448, 512, [], "f471", "M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z"], 48725 "dollar-sign": [288, 512, [], "f155", "M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4
487251.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z"], 48726 "dolly": [576, 512, [], "f472", "M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], 48727 "dolly-flatbed": [640, 512, [], "f474", "M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"], 48728 "donate": [512, 512, [], "f4b9", "M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z"], 48729 "door-closed": [640, 512, [], "f52a", "M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z"], 48730 "door-open": [640, 512, [], "f52b", "M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"], 48731 "dot-circle": [512, 512, [], "f192", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z"], 48732 "dove": [512, 512, [], "f4ba", "M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], 48733 "download": [512, 512, [], "f019", "M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"], 48734 "drafting-compass": [512, 512, [], "f568", "M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.
4873463 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"], 48735 "draw-polygon": [448, 512, [], "f5ee", "M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z"], 48736 "drum": [576, 512, [], "f569", "M458.08 120.88l102.39-61.43c15.16-9.09 20.06-28.75 10.97-43.91C562.34.39 542.7-4.53 527.53 4.57l-160.69 96.41A629.32 629.32 0 0 0 288 96C128.94 96 0 153.31 0 224v160.83c0 30.46 24.03 58.4 64 80.37v-96.37c0-17.6 14.4-32 32-32s32 14.4 32 32v122.41c37.4 11.13 81 18.44 128 20.75V400.84c0-17.6 14.4-32 32-32s32 14.4 32 32V512c47-2.31 90.6-9.62 128-20.75V368.84c0-17.6 14.4-32 32-32s32 14.4 32 32v96.37c39.97-21.97 64-49.91 64-80.37V224.01c-.01-42.38-46.54-79.84-117.92-103.13zM288 304c-132.55 0-240-35.82-240-80s107.45-80 240-80c2.34 0 4.62.1 6.94.12l-87.41 52.44c-15.16 9.09-20.06 28.75-10.97 43.91 9.56 15.93 29.51 19.61 43.91 10.97l162.71-97.62C477.55 167.41 528 193.74 528 224.01 528 268.19 420.54 304 288 304z"], 48737 "drum-steelpan": [576, 512, [], "f56a", "M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z"], 48738 "dumbbell": [640, 512, [], "f44b", "M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"], 48739 "edit": [576, 512, [], "f044", "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"], 48740 "eject": [448, 512, [], "f052", "M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z"], 48741 "ellipsis-h": [512, 512, [], "f141", "M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"], 48742 "ellipsis-v": [192, 512, [], "f142", "M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"], 48743 "envelope": [512, 512, [], "f0e0", "M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.
487436-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"], 48744 "envelope-open": [512, 512, [], "f2b6", "M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z"], 48745 "envelope-square": [448, 512, [], "f199", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"], 48746 "equals": [448, 512, [], "f52c", "M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], 48747 "eraser": [512, 512, [], "f12d", "M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z"], 48748 "euro-sign": [320, 512, [], "f153", "M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z"], 48749 "exchange-alt": [512, 512, [], "f362", "M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"], 48750 "exclamation": [192, 512, [], "f12a", "M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"], 48751 "exclamation-circle": [512, 512, [], "f06a", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418
48751-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"], 48752 "exclamation-triangle": [576, 512, [], "f071", "M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"], 48753 "expand": [448, 512, [], "f065", "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"], 48754 "expand-arrows-alt": [448, 512, [], "f31e", "M448.1 344v112c0 13.3-10.7 24-24 24h-112c-21.4 0-32.1-25.9-17-41l36.2-36.2L224 295.6 116.8 402.9 153 439c15.1 15.1 4.4 41-17 41H24c-13.3 0-24-10.7-24-24V344c0-21.4 25.9-32.1 41-17l36.2 36.2L184.5 256 77.2 148.7 41 185c-15.1 15.1-41 4.4-41-17V56c0-13.3 10.7-24 24-24h112c21.4 0 32.1 25.9 17 41l-36.2 36.2L224 216.4l107.3-107.3L295.1 73c-15.1-15.1-4.4-41 17-41h112c13.3 0 24 10.7 24 24v112c0 21.4-25.9 32.1-41 17l-36.2-36.2L263.6 256l107.3 107.3 36.2-36.2c15.1-15.2 41-4.5 41 16.9z"], 48755 "external-link-alt": [576, 512, [], "f35d", "M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z"], 48756 "external-link-square-alt": [448, 512, [], "f360", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z"], 48757 "eye": [576, 512, [], "f06e", "M569.354 231.631C512.969 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-75.162 0-136-60.827-136-136 0-75.162 60.826-136 136-136 75.162 0 136 60.826 136 136 0 75.162-60.826 136-136 136zm104-136c0 57.438-46.562 104-104 104s-104-46.562-104-104c0-17.708 4.431-34.379 12.236-48.973l-.001.032c0 23.651 19.173 42.823 42.824 42.823s42.824-19.173 42.824-42.823c0-23.651-19.173-42.824-42.824-42.824l-.032.001C253.621 156.431 270.292 152 288 152c57.438 0 104 46.562 104 104z"], 48758 "eye-dropper": [512, 512, [], "f1fb", "M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z"], 48759 "eye-slash": [576, 512, [], "f070", "M286.693 391.984l32.579 46.542A333.958 333.958 0 0 1 288 440C168.19 440 63.031 376.051 6.646 280.369a47.999 47.999 0 0 1 0-48.739c24.023-40.766 56.913-75.775 96.024-102.537l57.077 81.539C154.736 224.82 152 240.087 152 256c0 74.736 60.135 135.282 134.693 135.984zm282.661-111.615c-31.667 53.737-
4875978.747 97.46-135.175 125.475l.011.015 41.47 59.2c7.6 10.86 4.96 25.82-5.9 33.42l-13.11 9.18c-10.86 7.6-25.82 4.96-33.42-5.9L100.34 46.94c-7.6-10.86-4.96-25.82 5.9-33.42l13.11-9.18c10.86-7.6 25.82-4.96 33.42 5.9l51.038 72.617C230.68 75.776 258.905 72 288 72c119.81 0 224.969 63.949 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM424 256c0-75.174-60.838-136-136-136-17.939 0-35.056 3.473-50.729 9.772l19.299 27.058c25.869-8.171 55.044-6.163 80.4 7.41h-.03c-23.65 0-42.82 19.17-42.82 42.82 0 23.626 19.147 42.82 42.82 42.82 23.65 0 42.82-19.17 42.82-42.82v-.03c18.462 34.49 16.312 77.914-8.25 110.95v.01l19.314 27.061C411.496 321.2 424 290.074 424 256zM262.014 356.727l-77.53-110.757c-5.014 52.387 29.314 98.354 77.53 110.757z"], 48760 "fast-backward": [512, 512, [], "f049", "M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z"], 48761 "fast-forward": [512, 512, [], "f050", "M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z"], 48762 "fax": [512, 512, [], "f1ac", "M128 144v320c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V144c0-26.51 21.49-48 48-48h32c26.51 0 48 21.49 48 48zm384 64v256c0 26.51-21.49 48-48 48H192c-26.51 0-48-21.49-48-48V40c0-22.091 17.909-40 40-40h207.432a39.996 39.996 0 0 1 28.284 11.716l48.569 48.569A39.999 39.999 0 0 1 480 88.568v74.174c18.641 6.591 32 24.36 32 45.258zm-320-16h240V96h-24c-13.203 0-24-10.797-24-24V48H192v144zm96 204c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm128 128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zm0-128c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40z"], 48763 "feather": [512, 512, [], "f52d", "M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.5
487637-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z"], 48764 "feather-alt": [512, 512, [], "f56b", "M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"], 48765 "female": [256, 512, [], "f182", "M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z"], 48766 "fighter-jet": [640, 512, [], "f0fb", "M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z"], 48767 "file": [384, 512, [], "f15b", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48768 "file-alt": [384, 512, [], "f15c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48769 "file-archive": [384, 512, [], "f1c6", "M224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32V32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6zm32.7-53c0 14.9-14.5 27-32.4 27S96 378 96 363c0-14.9 14.5-27 32.4-27s32.5 12.1 32.5 27zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48770 "file-audio": [384, 512, [], "f1c7", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48771 "file-code": [384, 512, [], "f1c9", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z"], 48772 "file-contract": [384, 512, [], "f56c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"],
48773 "file-download": [384, 512, [], "f56d", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], 48774 "file-excel": [384, 512, [], "f1c3", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48775 "file-export": [576, 512, [], "f56e", "M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zM192 336v-32c0-8.84 7.16-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.84 0-16-7.16-16-16zm379.05-28.02l-95.7-96.43c-10.06-10.14-27.36-3.01-27.36 11.27V288H384v64h63.99v65.18c0 14.28 17.29 21.41 27.36 11.27l95.7-96.42c6.6-6.66 6.6-17.4 0-24.05z"], 48776 "file-image": [384, 512, [], "f1c5", "M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z"], 48777 "file-import": [512, 512, [], "f56f", "M16 288c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h112v-64H16zm336-152V0H152c-13.3 0-24 10.7-24 24v264h127.99v-65.18c0-14.28 17.29-21.41 27.36-11.27l95.7 96.43c6.6 6.65 6.6 17.39 0 24.04l-95.7 96.42c-10.06 10.14-27.36 3.01-27.36-11.27V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24zm153-31L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], 48778 "file-invoice": [384, 512, [], "f570", "M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z"], 48779 "file-invoice-dollar": [384, 512, [], "f571", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44
48779-42.67 45.07z"], 48780 "file-medical": [384, 512, [], "f477", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z"], 48781 "file-medical-alt": [448, 512, [], "f478", "M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], 48782 "file-pdf": [384, 512, [], "f1c1", "M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"], 48783 "file-powerpoint": [384, 512, [], "f1c4", "M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z"], 48784 "file-prescription": [384, 512, [], "f572", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48785 "file-signature": [576, 512, [], "f573", "M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z"], 48786 "file-upload": [384, 512, [], "f574", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"], 48787 "file-video": [384, 512, [], "f1c8", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z"], 48788 "file-word": [384, 512, [], "f1c2", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"], 48789 "fill": [512, 512, [], "f575", "M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z"], 48790 "fill-drip": [576, 512, [], "f576", "M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z"], 48791 "film": [512, 512, [], "f008", "M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"], 48792 "filter": [512, 512, [], "f0b0", "M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"], 48793 "fingerprint": [512, 512, [], "f577", "M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03
48793134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"], 48794 "fire": [384, 512, [], "f06d", "M216 23.858c0-23.802-30.653-32.765-44.149-13.038C48 191.851 224 200 224 288c0 35.629-29.114 64.458-64.85 63.994C123.98 351.538 96 322.22 96 287.046v-85.51c0-21.703-26.471-32.225-41.432-16.504C27.801 213.158 0 261.332 0 320c0 105.869 86.131 192 192 192s192-86.131 192-192c0-170.29-168-193.003-168-296.142z"], 48795 "fire-extinguisher": [448, 512, [], "f134", "M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"], 48796 "first-aid": [576, 512, [], "f479", "M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"], 48797 "fish": [576, 512, [], "f578", "M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"], 48798 "flag": [512, 512, [], "f024", "M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"], 48799 "flag-checkered": [512, 512, [], "f11e", "M466.515 66.928C487.731 57.074 512 72.551 512 95.944v243.1c0 10.526-5.161 20.407-13.843 26.358-35.837 24.564-74.335 40.858-122.505 40.858-67.373 0-111.63-34.783-165.217-34.783-50.853 0-86.124 10.058-114.435 22.122V488c0 13.255-10.745 24-24 24H56c-13.255 0-24-10.745-24-24V101.945C17.497 91.825 8 75.026 8 56 8 24.296 34.345-1.254 66.338.048c28.468 1.158 51.779 23.968 53.551 52.404.52 8.342-.81 16.31-3.586 23.562C137.039 68.384 159.393 64 184.348 64c67.373 0 111.63 34.783 165.217 34.783 40.496 0 82.612-15.906 116.95-31.855zM96 134.63v70.49c29-10.67 51.18-17.83 73.6-20.91v-71.57c-23.5 2.17-40.44 9.79-73.6 21.99zm220.8 9.19c-26.417-4.672-49.886-13.979-73.6-21.34v67.42c24.175 6.706 47.566 16.444 73.6 22.31v-68.39zm-147.2 40.39v70.04c32.796-2.978 53.91-.635 73.6 3.8V189.9c-25.247-7.035-46.581-9.423-73.6-5.69zm73.6 142.23c26.338 4.652 49.732 13.927 73.6 21.34v-67.41c-24.277-6.746-47.54-16.45-73.6-22.32v68.39zM96 342.1c23.62-8.39 47.79-13.84 73.6-16.56v-71.29c-26.11 2.35-47.36 8.04-73.6 17.36v70.49zm368-221.6c-21.3 8.85-46.59 17.64-73.6 22.47v71.91c27.31-4.36 50.03-14.1 73.6-23.89V120.5zm0 209.96v-70.49c-22.19 14.2-48.78 22.61-73.6 26.02v71.58c25.07-2.38 48.49-11.04 73.6-27.11zM316.8 212.21v68.16c25.664 7.134 46.616 9.342 73.6 5.62v-71.11c-25.999 4.187-49.943 2.676-73.6-2.67z"], 48800 "flask": [448, 512, [], "f0c3", "M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"], 48801 "flushed": [496, 512, [], "f579", "M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z"], 48802 "folder": [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"], 48803 "folder-open": [576, 512, [], "f07c", "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"], 48804 "font": [448, 512, [], "f031", "M152 416h-24.013l26.586-80.782H292.8L319.386 416H296c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-26.739L275.495 42.746A16 16 0 0 0 260.382 32h-72.766a16 16 0 0 0-15.113 10.746L42.739 416H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h136c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm64.353-271.778c4.348-15.216 6.61-28.156 7.586-34.644.839 6.521 2.939 19.476 7.727 34.706l41.335 124.006h-98.619l41.971-124.068z"], 48805 "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 7
488057.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"], 48806 "football-ball": [496, 512, [], "f44e", "M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z"], 48807 "forward": [512, 512, [], "f04e", "M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"], 48808 "frog": [576, 512, [], "f52e", "M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"], 48809 "frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z"], 48810 "frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48811 "futbol": [512, 512, [], "f1e3", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 11
488117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z"], 48812 "gamepad": [640, 512, [], "f11b", "M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], 48813 "gas-pump": [512, 512, [], "f52f", "M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-
4881371.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z"], 48814 "gavel": [512, 512, [], "f0e3", "M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"], 48815 "gem": [576, 512, [], "f3a5", "M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z"], 48816 "genderless": [288, 512, [], "f22d", "M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z"], 48817 "gift": [512, 512, [], "f06b", "M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm448-288h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40zm-72 320h160c17.7 0 32-14.3 32-32V320H288v160z"], 48818 "glass-martini": [512, 512, [], "f000", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z"], 48819 "glass-martini-alt": [512, 512, [], "f57b", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z"], 48820 "glasses": [576, 512, [], "f530", "M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z"], 48821 "globe": [496, 512, [], "f0ac", "M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"], 48822 "globe-africa": [496, 512, [], "f57c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z"], 48823 "globe-americas": [496, 512, [], "f57d", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z"], 48824 "globe-asia": [496, 512, [], "f57e", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24
488240-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z"], 48825 "golf-ball": [416, 512, [], "f450", "M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z"], 48826 "graduation-cap": [640, 512, [], "f19d", "M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z"], 48827 "greater-than": [384, 512, [], "f531", "M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z"], 48828 "greater-than-equal": [448, 512, [], "f532", "M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"], 48829 "grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z"], 48830 "grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], 48831 "grin-alt": [496, 512, [], "f581", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], 48832 "grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], 48833 "grin-beam-sweat": [504, 512, [], "f583", "M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], 48834 "grin-hearts": [496, 512, [], "f584", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z"], 48835 "grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], 48836 "grin-squint-tears": [512, 512, [], "f586", "M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z"],
48837 "grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z"], 48838 "grin-tears": [640, 512, [], "f588", "M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"], 48839 "grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"], 48840 "grin-tongue-squint": [496, 512, [], "f58a", "M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z"], 48841 "grin-tongue-wink": [496, 512, [], "f58b", "M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"], 48842 "grin-wink": [496, 512, [], "f58c", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z"], 48843 "grip-horizontal": [448, 512, [], "f58d", "M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"], 48844 "grip-vertical": [320, 512, [], "f58e", "M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"], 48845 "h-square": [448, 512, [], "f0fd", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z"], 48846 "hand-holding": [576, 512, [], "f4bd", "M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"], 48847 "hand-holding-heart": [576, 512, [], "f4be", "M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"], 48848 "hand-holding-usd": [544, 512, [], "f4c0", "M257.6 144.3l50 14.3c3.6 1 6.1 4.4 6.1 8.1 0 4.6-3.8 8.4-8.4 8.4h-32.8c-3.6 0-7.1-.8-10.3-2.2-4.8-2.2-10.4-1.7-14.1 2l-17.5 17.5c-5.3 5.3-4.7 14.3 1.5 18.4 9.5 6.3 20.3 10.1 31.8 11.5V240c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16v-1
488487.6c30.3-3.6 53.3-31 49.3-63-2.9-23-20.7-41.3-42.9-47.7l-50-14.3c-3.6-1-6.1-4.4-6.1-8.1 0-4.6 3.8-8.4 8.4-8.4h32.8c3.6 0 7.1.8 10.3 2.2 4.8 2.2 10.4 1.7 14.1-2l17.5-17.5c5.3-5.3 4.7-14.3-1.5-18.4-9.5-6.3-20.3-10.1-31.8-11.5V16c0-8.8-7.2-16-16-16h-16c-8.8 0-16 7.2-16 16v17.6c-30.3 3.6-53.3 31-49.3 63 2.9 23 20.7 41.3 42.9 47.7zm276.3 183.8c-11.2-10.7-28.5-10-40.3 0L406.4 402c-10.7 9.1-24 14-37.8 14H256.9c-8.3 0-15.1-7.2-15.1-16s6.8-16 15.1-16h73.9c15.1 0 29-10.9 31.4-26.6 3.1-20-11.5-37.4-29.8-37.4H181.3c-25.5 0-50.2 9.3-69.9 26.3L67.5 384H15.1C6.8 384 0 391.2 0 400v96c0 8.8 6.8 16 15.1 16H352c13.7 0 27-4.9 37.8-14l142.8-121c14.4-12.1 15.5-35.3 1.3-48.9z"], 48849 "hand-lizard": [576, 512, [], "f258", "M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z"], 48850 "hand-paper": [448, 512, [], "f256", "M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"], 48851 "hand-peace": [448, 512, [], "f25b", "M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z"], 48852 "hand-point-down": [384, 512, [], "f0a7", "M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"], 48853 "hand-point-left": [512, 512, [], "f0a5", "M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z"], 48854 "hand-point-right": [512, 512, [], "f0a4", "M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"], 48855 "hand-point-up": [384, 512, [], "f0a6", "M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.
48855607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"], 48856 "hand-pointer": [448, 512, [], "f25a", "M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z"], 48857 "hand-rock": [512, 512, [], "f255", "M512 128.79c0-26.322-20.861-48.344-47.18-48.783C437.935 79.558 416 101.217 416 128h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C333.935 47.558 312 69.217 312 96v32h-8V80.79c0-26.322-20.861-48.344-47.18-48.783C229.935 31.558 208 53.217 208 80v48h-8V96.79c0-26.322-20.861-48.344-47.18-48.783C125.935 47.558 104 69.217 104 96v136l-8-7.111V176.79c0-26.322-20.861-48.344-47.18-48.783C21.935 127.558 0 149.217 0 176v66.445a95.998 95.998 0 0 0 32.221 71.751l111.668 99.261A47.999 47.999 0 0 1 160 449.333V456c0 13.255 10.745 24 24 24h240c13.255 0 24-10.745 24-24v-2.921a96.01 96.01 0 0 1 7.523-37.254l48.954-116.265A96.002 96.002 0 0 0 512 262.306V128.79z"], 48858 "hand-scissors": [512, 512, [], "f257", "M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z"], 48859 "hand-spock": [512, 512, [], "f259", "M10.872 316.585c15.139-16.086 40.454-16.854 56.543-1.713L128 371.893v-79.405L88.995 120.865c-4.896-21.542 8.598-42.974 30.14-47.87 21.549-4.894 42.975 8.599 47.87 30.141L201.747 256h9.833L164.016 48.966c-4.946-21.531 8.498-42.994 30.028-47.94 21.532-4.95 42.994 8.498 47.94 30.028L293.664 256h15.105l48.425-193.702c5.357-21.432 27.075-34.462 48.507-29.104 21.432 5.358 34.463 27.075 29.104 48.507L391.231 256h11.08l30.768-129.265c5.117-21.491 26.685-34.768 48.177-29.647 21.491 5.117 34.765 26.686 29.647 48.177l-36.292 152.467A96.024 96.024 0 0 0 472 319.967v42.102a96.002 96.002 0 0 1-3.96 27.287l-26.174 88.287C435.825 498.022 417.101 512 395.846 512H179.172a48.002 48.002 0 0 1-32.898-13.046L12.585 373.128c-16.087-15.141-16.853-40.456-1.713-56.543z"], 48860 "hands": [640, 512, [], "f4c2", "M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z"], 48861 "hands-helping": [640, 512, [], "f4c4", "M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248
48861c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z"], 48862 "handshake": [640, 512, [], "f2b5", "M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z"], 48863 "hashtag": [448, 512, [], "f292", "M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z"], 48864 "hdd": [576, 512, [], "f0a0", "M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"], 48865 "heading": [512, 512, [], "f1dc", "M496 80V48c0-8.837-7.163-16-16-16H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.621v128H154.379V96H192c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h37.275v320H32c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.621V288H357.62v128H320c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h160c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16h-37.275V96H480c8.837 0 16-7.163 16-16z"], 48866 "headphones": [512, 512, [], "f025", "M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z"], 48867 "headphones-alt": [512, 512, [], "f58f", "M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z"], 48868 "headset": [512, 512, [], "f590", "M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z"], 48869 "heart": [512, 512, [], "f004", "M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"], 48870 "heartbeat": [512, 512, [], "f21e", "M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z"], 48871 "helicopter": [640, 512, [], "f533", "M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.7
488717-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z"], 48872 "highlighter": [544, 512, [], "f591", "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z"], 48873 "history": [512, 512, [], "f1da", "M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"], 48874 "hockey-puck": [512, 512, [], "f453", "M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z"], 48875 "home": [576, 512, [], "f015", "M488 312.7V456c0 13.3-10.7 24-24 24H348c-6.6 0-12-5.4-12-12V356c0-6.6-5.4-12-12-12h-72c-6.6 0-12 5.4-12 12v112c0 6.6-5.4 12-12 12H112c-13.3 0-24-10.7-24-24V312.7c0-3.6 1.6-7 4.4-9.3l188-154.8c4.4-3.6 10.8-3.6 15.3 0l188 154.8c2.7 2.3 4.3 5.7 4.3 9.3zm83.6-60.9L488 182.9V44.4c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12V117l-89.5-73.7c-17.7-14.6-43.3-14.6-61 0L4.4 251.8c-5.1 4.2-5.8 11.8-1.6 16.9l25.5 31c4.2 5.1 11.8 5.8 16.9 1.6l235.2-193.7c4.4-3.6 10.8-3.6 15.3 0l235.2 193.7c5.1 4.2 12.7 3.5 16.9-1.6l25.5-31c4.2-5.2 3.4-12.7-1.7-16.9z"], 48876 "hospital": [448, 512, [], "f0f8", "M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z"], 48877 "hospital-alt": [576, 512, [], "f47d", "M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"], 48878 "hospital-symbol": [512, 512, [], "f47e", "M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z"], 48879 "hot-tub": [512, 512, [], "f593", "M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z"], 48880 "hotel": [576, 512, [], "f594", "M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"], 48881 "hourglass": [384, 512, [], "f254", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z"], 48882 "hourglass-end": [384, 512, [], "f253", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z"], 48883 "hourglass-half": [384, 512, [], "f252", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"], 48884 "hourglass-start": [384, 512, [], "f251", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z"], 48885 "i-cursor": [256, 512, [], "f246", "M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932
48885-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z"], 48886 "id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"], 48887 "id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"], 48888 "id-card-alt": [576, 512, [], "f47f", "M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"], 48889 "image": [512, 512, [], "f03e", "M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"], 48890 "images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"], 48891 "inbox": [576, 512, [], "f01c", "M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z"], 48892 "indent": [448, 512, [], "f03c", "M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm176 144h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm160-128h256c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H176c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm-52.687-111.313l-96-95.984C17.266 138.652 0 145.776 0 160.016v191.975c0 14.329 17.325 21.304 27.313 11.313l96-95.992c6.249-6.247 6.249-16.377 0-22.625z"], 48893 "industry": [512, 512, [], "f275", "M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z"], 48894 "infinity": [640, 512, [], "f534", "M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z"], 48895 "info": [192, 512, [], "f129", "M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"], 48896 "info-circle": [512, 512, [], "f05a", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"], 48897 "italic": [320, 512, [], "f033", "M204.758 416h-33.849l62.092-320h40.725a16 16 0 0 0 15.704-12.937l6.242-32C297.599 41.184 290.034 32 279.968 32H120.235a16 16 0 0 0-15.704 12.937l-6.242 32C96.362 86.816 103.927 96 113.993 96h33.846l-62.09 320H46.278a16 16 0 0 0-15.704 12.935l-6.245 32C22.402 470.815 29.967 480 40.034 480h158.479a16 16 0 0 0 15.704-12.935l6.245-32c1.927-9.88-5.638-19.065-15.704-19.065z"],
48898 "joint": [640, 512, [], "f595", "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"], 48899 "key": [512, 512, [], "f084", "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"], 48900 "keyboard": [576, 512, [], "f11c", "M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"], 48901 "kiss": [496, 512, [], "f596", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48902 "kiss-beam": [496, 512, [], "f597", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z"], 48903 "kiss-wink-heart": [504, 512, [], "f598", "M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.
489031l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z"], 48904 "kiwi-bird": [576, 512, [], "f535", "M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z"], 48905 "language": [640, 512, [], "f1ab", "M304 416H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h280v320zm-120.676-72.622A12 12 0 0 0 194.839 352h22.863c8.22 0 14.007-8.078 11.362-15.861L171.61 167.085a12 12 0 0 0-11.362-8.139h-32.489a12.001 12.001 0 0 0-11.362 8.139L58.942 336.139C56.297 343.922 62.084 352 70.304 352h22.805a12 12 0 0 0 11.535-8.693l9.118-31.807h60.211l9.351 31.878zm-39.051-140.42s4.32 21.061 7.83 33.21l10.8 37.531h-38.07l11.07-37.531c3.51-12.15 7.83-33.21 7.83-33.21h.54zM616 416H336V96h280c13.255 0 24 10.745 24 24v272c0 13.255-10.745 24-24 24zm-36-228h-64v-16c0-6.627-5.373-12-12-12h-16c-6.627 0-12 5.373-12 12v16h-64c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h114.106c-6.263 14.299-16.518 28.972-30.023 43.206-6.56-6.898-12.397-13.91-17.365-20.933-3.639-5.144-10.585-6.675-15.995-3.446l-7.28 4.346-6.498 3.879c-5.956 3.556-7.693 11.421-3.735 17.117 6.065 8.729 13.098 17.336 20.984 25.726-8.122 6.226-16.841 12.244-26.103 17.964-5.521 3.41-7.381 10.556-4.162 16.19l7.941 13.896c3.362 5.883 10.935 7.826 16.706 4.276 12.732-7.831 24.571-16.175 35.443-24.891 10.917 8.761 22.766 17.102 35.396 24.881 5.774 3.556 13.353 1.618 16.717-4.27l7.944-13.903c3.213-5.623 1.37-12.76-4.135-16.171a312.737 312.737 0 0 1-26.06-18.019c21.024-22.425 35.768-46.289 42.713-69.85H580c6.627 0 12-5.373 12-12v-16c0-6.625-5.373-11.998-12-11.998z"], 48906 "laptop": [640, 512, [], "f109", "M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"], 48907 "laptop-code": [640, 512, [], "f5fc", "M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"], 48908 "laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 12
489086-142.9 126z"], 48909 "laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"], 48910 "laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"], 48911 "laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"], 48912 "layer-group": [512, 512, [], "f5fd", "M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z"], 48913 "leaf": [576, 512, [], "f06c", "M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z"], 48914 "lemon": [512, 512, [], "f094", "M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.
48914642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z"], 48915 "less-than": [384, 512, [], "f536", "M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z"], 48916 "less-than-equal": [448, 512, [], "f537", "M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"], 48917 "level-down-alt": [320, 512, [], "f3be", "M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"], 48918 "level-up-alt": [320, 512, [], "f3bf", "M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z"], 48919 "life-ring": [512, 512, [], "f1cd", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"], 48920 "lightbulb": [384, 512, [], "f0eb", "M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zm-143.107-44c-9.907 0-18.826-6.078-22.376-15.327C67.697 267.541 16 277.731 16 176 16 78.803 94.805 0 192 0s176 78.803 176 176c0 101.731-51.697 91.541-90.516 192.673-3.55 9.249-12.47 15.327-22.376 15.327H128.893zM112 176c0-44.112 35.888-80 80-80 8.837 0 16-7.164 16-16s-7.163-16-16-16c-61.757 0-112 50.243-112 112 0 8.836 7.164 16 16 16s16-7.164 16-16z"], 48921 "link": [512, 512, [], "f0c1", "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"], 48922 "lira-sign": [384, 512, [], "f195", "M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H
4892276c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z"], 48923 "list": [512, 512, [], "f03a", "M128 116V76c0-8.837 7.163-16 16-16h352c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H144c-8.837 0-16-7.163-16-16zm16 176h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 144h64c8.837 0 16-7.163 16-16V64c0-8.837-7.163-16-16-16H16C7.163 48 0 55.163 0 64v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16zm0 160h64c8.837 0 16-7.163 16-16v-64c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v64c0 8.837 7.163 16 16 16z"], 48924 "list-alt": [512, 512, [], "f022", "M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z"], 48925 "list-ol": [512, 512, [], "f0cb", "M3.263 139.527c0-7.477 3.917-11.572 11.573-11.572h15.131V88.078c0-5.163.534-10.503.534-10.503h-.356s-1.779 2.67-2.848 3.738c-4.451 4.273-10.504 4.451-15.666-1.068l-5.518-6.231c-5.342-5.341-4.984-11.216.534-16.379l21.72-19.938C32.815 33.602 36.732 32 42.785 32H54.89c7.656 0 11.749 3.916 11.749 11.572v84.384h15.488c7.655 0 11.572 4.094 11.572 11.572v8.901c0 7.477-3.917 11.572-11.572 11.572H14.836c-7.656 0-11.573-4.095-11.573-11.572v-8.902zM2.211 304.591c0-47.278 50.955-56.383 50.955-69.165 0-7.18-5.954-8.755-9.28-8.755-3.153 0-6.479 1.051-9.455 3.852-5.079 4.903-10.507 7.004-16.111 2.451l-8.579-6.829c-5.779-4.553-7.18-9.805-2.803-15.409C13.592 201.981 26.025 192 47.387 192c19.437 0 44.476 10.506 44.476 39.573 0 38.347-46.753 46.402-48.679 56.909h39.049c7.529 0 11.557 4.027 11.557 11.382v8.755c0 7.354-4.028 11.382-11.557 11.382h-67.94c-7.005 0-12.083-4.028-12.083-11.382v-4.028zM5.654 454.61l5.603-9.28c3.853-6.654 9.105-7.004 15.584-3.152 4.903 2.101 9.63 3.152 14.359 3.152 10.155 0 14.358-3.502 14.358-8.23 0-6.654-5.604-9.106-15.934-9.106h-4.728c-5.954 0-9.28-2.101-12.258-7.88l-1.05-1.926c-2.451-4.728-1.226-9.806 2.801-14.884l5.604-7.004c6.829-8.405 12.257-13.483 12.257-13.483v-.35s-4.203 1.051-12.608 1.051H16.685c-7.53 0-11.383-4.028-11.383-11.382v-8.755c0-7.53 3.853-11.382 11.383-11.382h58.484c7.529 0 11.382 4.027 11.382 11.382v3.327c0 5.778-1.401 9.806-5.079 14.183l-17.509 20.137c19.611 5.078 28.716 20.487 28.716 34.845 0 21.363-14.358 44.126-48.503 44.126-16.636 0-28.192-4.728-35.896-9.455-5.779-4.202-6.304-9.805-2.626-15.934zM144 132h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"], 48926 "list-ul": [512, 512, [], "f0ca", "M96 96c0 26.51-21.49 48-48 48S0 122.51 0 96s21.49-48 48-48 48 21.49 48 48zM48 208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm0 160c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm96-236h352c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h352c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H144c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"], 48927 "location-arrow": [512, 512, [], "f124", "M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z"], 48928 "lock": [448, 512, [], "f023", "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"], 48929 "lock-open": [576, 512, [], "f3c1", "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"], 48930 "long-arrow-alt-down": [256, 512, [], "f309", "M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z"], 48931 "long-arrow-alt-left": [448, 512, [], "f30a", "M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.
48931627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z"], 48932 "long-arrow-alt-right": [448, 512, [], "f30b", "M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"], 48933 "long-arrow-alt-up": [256, 512, [], "f30c", "M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z"], 48934 "low-vision": [576, 512, [], "f2a8", "M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z"], 48935 "luggage-cart": [640, 512, [], "f59d", "M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z"], 48936 "magic": [512, 512, [], "f0d0", "M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z"], 48937 "magnet": [512, 512, [], "f076", "M164.1 160H12c-6.6 0-12-5.4-12-12V68c0-19.9 16.1-36 36-36h104c19.9 0 36 16.1 36 36v80c.1 6.6-5.3 12-11.9 12zm348-12V67.9c0-19.9-16.1-36-36-36h-104c-19.9 0-36 16.1-36 36v80c0 6.6 5.4 12 12 12h152c6.6.1 12-5.3 12-11.9zm-164 44c-6.6 0-12 5.4-12 12v52c0 128.1-160 127.9-160 0v-52c0-6.6-5.4-12-12-12h-152c-6.7 0-12 5.4-12 12.1.1 21.4.6 40.3 0 53.3C.1 408 136.3 504 256.9 504 377.5 504 512 408 512 257.3c-.6-12.8-.2-33 0-53.2 0-6.7-5.3-12.1-12-12.1H348.1z"], 48938 "male": [192, 512, [], "f183", "M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z"], 48939 "map": [576, 512, [], "f279", "M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z"], 48940 "map-marked": [576, 512, [], "f59f", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"], 48941 "map-marked-alt": [576, 512, [], "f5a0", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"], 48942 "map-marker": [384, 512, [], "f041", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z"], 48943 "map-marker-alt": [384, 512, [], "f3c5", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"], 48944 "map-pin": [288, 512, [], "f276", "M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z"], 48945 "map-signs": [512, 512, [], "f277", "M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z"], 48946 "marker": [512, 512, [], "f5a1", "M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z"], 48947 "mars": [384, 512, [], "f222", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], 48948 "mars-double": [512, 512, [], "f227", "M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z"], 48949 "mars-stroke": [384, 512, [], "f229", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], 48950 "mars-stroke-h": [480, 512, [], "f22b", "M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"], 48951 "mars-stroke-v": [288, 512, [], "f22a", "M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"], 48952 "medal": [512, 512, [], "f5a2", "M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z"], 48953 "medkit": [512, 512, [], "f0fa", "M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"], 48954 "meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48955 "meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48956 "meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z"], 48957 "memory": [640, 512, [], "f538", "M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z"], 48958 "mercury": [288, 512, [], "f223", "M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"], 48959 "microchip": [512, 512, [], "f2db", "M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z"], 48960 "microphone": [352, 512, [], "f130", "M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z"], 48961 "microphone-alt": [352, 512, [], "f3c9", "M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z"],
48962 "microphone-alt-slash": [640, 512, [], "f539", "M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"], 48963 "microphone-slash": [640, 512, [], "f131", "M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"], 48964 "microscope": [512, 512, [], "f610", "M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z"], 48965 "minus": [448, 512, [], "f068", "M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], 48966 "minus-circle": [512, 512, [], "f056", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"], 48967 "minus-square": [448, 512, [], "f146", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"], 48968 "mobile": [320, 512, [], "f10b", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48969 "mobile-alt": [320, 512, [], "f3cd", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z"], 48970 "money-bill": [640, 512, [], "f0d6", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"], 48971 "money-bill-alt": [640, 512, [], "f3d1", "M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"], 48972 "money-bill-wave": [640, 512, [], "f53a", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.
4897262-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z"], 48973 "money-bill-wave-alt": [640, 512, [], "f53b", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z"], 48974 "money-check": [640, 512, [], "f53c", "M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z"], 48975 "money-check-alt": [640, 512, [], "f53d", "M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z"], 48976 "monument": [384, 512, [], "f5a6", "M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"], 48977 "moon": [512, 512, [], "f186", "M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"], 48978 "mortar-pestle": [512, 512, [], "f5a7", "M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"], 48979 "motorcycle": [640, 512, [], "f21c", "M512.949 192.003c-14.862-.108-29.14 2.322-42.434 6.874L437.589 144H520c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24h-45.311a24 24 0 0 0-17.839 7.945l-37.496 41.663-22.774-37.956A24 24 0 0 0 376 64h-80c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h66.411l19.2 32H227.904c-17.727-23.073-44.924-40-99.904-40H72.54c-13.455 0-24.791 11.011-24.536 24.464C48.252 141.505 58.9 152 72 152h56c24.504 0 38.686 10.919 47.787 24.769l-11.291 20.529c-13.006-3.865-26.871-5.736-41.251-5.21C55.857 194.549 1.565 249.605.034 317.02
489791-1.603 389.076 56.317 448 128 448c59.642 0 109.744-40.794 123.953-96h84.236c13.673 0 24.589-11.421 23.976-25.077-2.118-47.12 17.522-93.665 56.185-125.026l12.485 20.808c-27.646 23.654-45.097 58.88-44.831 98.179.47 69.556 57.203 126.452 126.758 127.11 71.629.678 129.839-57.487 129.234-129.099-.588-69.591-57.455-126.386-127.047-126.892zM128 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c4.242 0 8.405.341 12.469.982L98.97 316.434C90.187 332.407 101.762 352 120 352h81.297c-12.37 28.225-40.56 48-73.297 48zm388.351-.116C470.272 402.337 432 365.554 432 320c0-21.363 8.434-40.781 22.125-55.144l49.412 82.352c4.546 7.577 14.375 10.034 21.952 5.488l13.72-8.232c7.577-4.546 10.034-14.375 5.488-21.952l-48.556-80.927A80.005 80.005 0 0 1 512 240c45.554 0 82.338 38.273 79.884 84.352-2.16 40.558-34.974 73.372-75.533 75.532z"], 48980 "mouse-pointer": [320, 512, [], "f245", "M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z"], 48981 "music": [512, 512, [], "f001", "M511.99 32.01c0-21.71-21.1-37.01-41.6-30.51L150.4 96c-13.3 4.2-22.4 16.5-22.4 30.5v261.42c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64V214.31l256-75.02v184.63c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64l-.01-351.99z"], 48982 "neuter": [288, 512, [], "f22c", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], 48983 "newspaper": [576, 512, [], "f1ea", "M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z"], 48984 "not-equal": [448, 512, [], "f53e", "M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z"], 48985 "notes-medical": [384, 512, [], "f481", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z"], 48986 "object-group": [512, 512, [], "f247", "M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"], 48987 "object-ungroup": [576, 512, [], "f248", "M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z"], 48988 "oil-can": [640, 512, [], "f613", "M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z"], 48989 "outdent": [448, 512, [], "f03b", "M0 84V44c0-8.837 7.163-16 16-16h416c8.837 0 16 7.163 16 16v40c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16zm208 144h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM16 484h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm192-128h224c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H208c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zM4.687 267.313l96 95.984C110.734 373.348 128 366.224 128 351.984V160.008c0-14.329-17.325-21.304-27.313-11.313l-96 95.992c-6.249 6.248-6.249 16.378 0 22.626z"], 48990 "paint-brush": [512, 512, [], "f1fc", "M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"],
48991 "paint-roller": [512, 512, [], "f5aa", "M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"], 48992 "palette": [512, 512, [], "f53f", "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 48993 "pallet": [640, 512, [], "f482", "M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z"], 48994 "paper-plane": [512, 512, [], "f1d8", "M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"], 48995 "paperclip": [448, 512, [], "f0c6", "M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"], 48996 "parachute-box": [512, 512, [], "f4cd", "M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z"], 48997 "paragraph": [448, 512, [], "f1dd", "M408 32H177.531C88.948 32 16.045 103.335 16 191.918 15.956 280.321 87.607 352 176 352v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h32v344c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V112h40c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24z"], 48998 "parking": [448, 512, [], "f540", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z"], 48999 "passport": [448, 512, [], "f5ab", "M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z"], 49000 "paste": [448, 512, [], "f0ea", "M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z"], 49001 "pause": [448, 512, [], "f04c", "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"], 49002 "pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z"],
49003 "paw": [512, 512, [], "f1b0", "M85.231 330.958C36 330.958 0 273.792 0 231.5c0-28.292 16-58.042 49.538-58.042 49.231 0 85.231 57.458 85.231 99.75 0 28.292-15.692 57.75-49.538 57.75zm348 106.167c0 37.042-32 42.875-63.385 42.875-41.231 0-74.462-26.25-113.846-26.25-41.231 0-76.308 25.958-120.923 25.958-29.847 0-56.308-9.625-56.308-42.583C78.769 368 180.616 265.333 256 265.333s177.231 102.959 177.231 171.792zM182.462 203.792c-49.847 0-80-59.5-80-100.333C102.462 70.792 120.308 32 160 32c50.154 0 80 59.5 80 100.333 0 32.667-17.846 71.459-57.538 71.459zM272 132.333C272 91.5 301.846 32 352 32c39.692 0 57.539 38.792 57.539 71.458 0 40.833-30.154 100.333-80.001 100.333C289.846 203.792 272 165 272 132.333zM512 231.5c0 42.292-36 99.458-85.231 99.458-33.847 0-49.538-29.458-49.538-57.75 0-42.291 35.999-99.75 85.231-99.75C496 173.458 512 203.208 512 231.5z"], 49004 "pen": [512, 512, [], "f304", "M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"], 49005 "pen-alt": [512, 512, [], "f305", "M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z"], 49006 "pen-fancy": [512, 512, [], "f5ac", "M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z"], 49007 "pen-nib": [512, 512, [], "f5ad", "M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z"], 49008 "pen-square": [448, 512, [], "f14b", "M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z"], 49009 "pencil-alt": [512, 512, [], "f303", "M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"], 49010 "pencil-ruler": [512, 512, [], "f5ae", "M109.46 244.04l134.58-134.56-44.12-44.12-61.
4901068 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z"], 49011 "people-carry": [640, 512, [], "f4ce", "M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"], 49012 "percent": [448, 512, [], "f295", "M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"], 49013 "percentage": [384, 512, [], "f541", "M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z"], 49014 "phone": [512, 512, [], "f095", "M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"], 49015 "phone-slash": [640, 512, [], "f3dd", "M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"], 49016 "phone-square": [448, 512, [], "f098", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z"],
49017 "phone-volume": [384, 512, [], "f2a0", "M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"], 49018 "piggy-bank": [576, 512, [], "f4d3", "M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z"], 49019 "pills": [576, 512, [], "f484", "M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z"], 49020 "plane": [576, 512, [], "f072", "M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z"], 49021 "plane-arrival": [640, 512, [], "f5af", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z"], 49022 "plane-departure": [640, 512, [], "f5b0", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"], 49023 "play": [448, 512, [], "f04b", "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"], 49024 "play-circle": [512, 512, [], "f144", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"], 49025 "plug": [384, 512, [], "f1e6", "M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z"], 49026 "plus": [448, 512, [], "f067", "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"], 49027 "plus-circle": [512, 512, [], "f055", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.
490276 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"], 49028 "plus-square": [448, 512, [], "f0fe", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"], 49029 "podcast": [448, 512, [], "f2ce", "M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z"], 49030 "poo": [512, 512, [], "f2fe", "M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 49031 "poop": [512, 512, [], "f619", "M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z"], 49032 "portrait": [384, 512, [], "f3e0", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"], 49033 "pound-sign": [320, 512, [], "f154", "M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z"], 49034 "power-off": [512, 512, [], "f011", "M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"], 49035 "prescription": [384, 512, [], "f5b1", "M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z"], 49036 "prescription-bottle": [384, 512, [], "f485", "M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v
4903664h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z"], 49037 "prescription-bottle-alt": [384, 512, [], "f486", "M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z"], 49038 "print": [512, 512, [], "f02f", "M464 192h-16V81.941a24 24 0 0 0-7.029-16.97L383.029 7.029A24 24 0 0 0 366.059 0H88C74.745 0 64 10.745 64 24v168H48c-26.51 0-48 21.49-48 48v132c0 6.627 5.373 12 12 12h52v104c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V384h52c6.627 0 12-5.373 12-12V240c0-26.51-21.49-48-48-48zm-80 256H128v-96h256v96zM128 224V64h192v40c0 13.2 10.8 24 24 24h40v96H128zm304 72c-13.254 0-24-10.746-24-24s10.746-24 24-24 24 10.746 24 24-10.746 24-24 24z"], 49039 "procedures": [640, 512, [], "f487", "M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8
49039c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"], 49040 "project-diagram": [640, 512, [], "f542", "M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"], 49041 "puzzle-piece": [576, 512, [], "f12e", "M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"], 49042 "qrcode": [448, 512, [], "f029", "M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z"], 49043 "question": [384, 512, [], "f128", "M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"], 49044 "question-circle": [512, 512, [], "f059", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"], 49045 "quidditch": [640, 512, [], "f458", "M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z"], 49046 "quote-left": [512, 512, [], "f10d", "M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"], 49047 "quote-right": [512, 512, [], "f10e", "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"], 49048 "random": [512, 512, [], "f074", "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-4
490480.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"], 49049 "receipt": [384, 512, [], "f543", "M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z"], 49050 "recycle": [512, 512, [], "f1b8", "M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z"], 49051 "redo": [512, 512, [], "f01e", "M500.333 0h-47.411c-6.853 0-12.314 5.729-11.986 12.574l3.966 82.759C399.416 41.899 331.672 8 256.001 8 119.34 8 7.899 119.526 8 256.187 8.101 393.068 119.096 504 256 504c63.926 0 122.202-24.187 166.178-63.908 5.113-4.618 5.354-12.561.482-17.433l-33.971-33.971c-4.466-4.466-11.64-4.717-16.38-.543C341.308 415.448 300.606 432 256 432c-97.267 0-176-78.716-176-176 0-97.267 78.716-176 176-176 60.892 0 114.506 30.858 146.099 77.8l-101.525-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12z"], 49052 "redo-alt": [512, 512, [], "f2f9", "M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z"], 49053 "registered": [512, 512, [], "f25d", "M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z"], 49054 "reply": [512, 512, [], "f3e5", "M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"], 49055 "reply-all": [576, 512, [], "f122", "M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z"], 49056 "retweet": [640, 512, [], "f079", "M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z"], 49057 "ribbon": [448, 512, [], "f4d6", "M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z"], 49058 "road": [576, 512, [], "f018", "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z"], 49059 "robot": [640, 512, [], "f544", "M0 256v128c0 17.7 14.3 32 32 32h32V224H32c-17.7 0-32 14.3-32 32zM464 96H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H176c-44.2 0-80 35.8-80 80v272c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V176c0-44.2-35.8-80-80-80zM256 416h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm128 120h-64v-32h64v32zm96 0h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm192-72h-32v192h32c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32z"], 49060 "rocket": [512, 512, [], "f135", "M505.1 19.1C503.8 13 499 8.2 492.9 6.9 460.7 0 435.5 0 410.4 0 307.2 0 245.3 55.2
49060199.1 128H94.9c-18.2 0-34.8 10.3-42.9 26.5L2.6 253.3c-8 16 3.6 34.7 21.5 34.7h95.1c-5.9 12.8-11.9 25.5-18 37.7-3.1 6.2-1.9 13.6 3 18.5l63.6 63.6c4.9 4.9 12.3 6.1 18.5 3 12.2-6.1 24.9-12 37.7-17.9V488c0 17.8 18.8 29.4 34.7 21.5l98.7-49.4c16.3-8.1 26.5-24.8 26.5-42.9V312.8c72.6-46.3 128-108.4 128-211.1.1-25.2.1-50.4-6.8-82.6zM400 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], 49061 "route": [512, 512, [], "f4d7", "M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 49062 "rss": [448, 512, [], "f09e", "M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.76
490625 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z"], 49063 "rss-square": [448, 512, [], "f143", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z"], 49064 "ruble-sign": [384, 512, [], "f158", "M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z"], 49065 "ruler": [640, 512, [], "f545", "M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z"], 49066 "ruler-combined": [512, 512, [], "f546", "M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"], 49067 "ruler-horizontal": [576, 512, [], "f547", "M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z"], 49068 "ruler-vertical": [256, 512, [], "f548", "M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"], 49069 "rupee-sign": [320, 512, [], "f156", "M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z"], 49070 "sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z"], 49071 "sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z"], 49072 "save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"], 49073 "school": [640, 512, [], "f549", "M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82
49073-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z"], 49074 "screwdriver": [512, 512, [], "f54a", "M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z"], 49075 "search": [512, 512, [], "f002", "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"], 49076 "search-minus": [512, 512, [], "f010", "M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"], 49077 "search-plus": [512, 512, [], "f00e", "M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"], 49078 "seedling": [512, 512, [], "f4d8", "M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z"], 49079 "server": [512, 512, [], "f233", "M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"], 49080 "shapes": [512, 512, [], "f61f", "M512 320v160c0 17.67-14.33 32-32 32H320c-17.67 0-32-14.33-32-32V320c0-17.67 14.33-32 32-32h160c17.67 0 32 14.33 32 32zm-384-64C57.31 256 0 313.31 0 384s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm351.03-32c25.34 0 41.18-26.67 28.51-48L412.51 16c-12.67-21.33-44.35-21.33-57.02 0l-95.03 160c-12.67 21.33 3.17 48 28.51 48h190.06z"], 49081 "share": [512, 512, [], "f064", "M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"], 49082 "share-alt": [448, 512, [], "f1e0", "M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"], 49083 "share-alt-square": [448, 512, [], "f1e1", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z"],
49084 "share-square": [576, 512, [], "f14d", "M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z"], 49085 "shekel-sign": [448, 512, [], "f20b", "M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z"], 49086 "shield-alt": [512, 512, [], "f3ed", "M496 128c0 221.282-135.934 344.645-221.539 380.308a48 48 0 0 1-36.923 0C130.495 463.713 16 326.487 16 128a48 48 0 0 1 29.539-44.308l192-80a48 48 0 0 1 36.923 0l192 80A48 48 0 0 1 496 128zM256 446.313l.066.034c93.735-46.689 172.497-156.308 175.817-307.729L256 65.333v380.98z"], 49087 "ship": [640, 512, [], "f21a", "M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z"], 49088 "shipping-fast": [640, 512, [], "f48b", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"], 49089 "shoe-prints": [640, 512, [], "f54b", "M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z"], 49090 "shopping-bag": [448, 512, [], "f290", "M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z"], 49091 "shopping-basket": [576, 512, [], "f291", "M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z"], 49092 "shopping-cart": [576, 512, [], "f07a", "M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"], 49093 "shower": [512, 512, [], "f2cc", "M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z"], 49094 "shuttle-van": [640, 512, [], "f5b6", "M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z"], 49095 "sign": [512, 512, [], "f4d9", "M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2
490950 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z"], 49096 "sign-in-alt": [512, 512, [], "f2f6", "M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z"], 49097 "sign-language": [448, 512, [], "f2a7", "M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z"], 49098 "sign-out-alt": [512, 512, [], "f2f5", "M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"], 49099 "signal": [640, 512, [], "f012", "M36 384h56c6.6 0 12 5.4 12 12v104c0 6.6-5.4 12-12 12H36c-6.6 0-12-5.4-12-12V396c0-6.6 5.4-12 12-12zm116-36v152c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V348c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-80v232c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V268c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zm128-112v344c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V156c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12zM536 12v488c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V12c0-6.6-5.4-12-12-12h-56c-6.6 0-12 5.4-12 12z"], 49100 "signature": [512, 512, [], "f5b7", "M496 320h-91.86c-9.27 0-19.72-11.31-25.78-28.52-15.23-43.36-48.11-70.3-85.8-70.3-30.84 0-58.47 18.05-76.11 49.23L194.8 106.5C188.84 81.08 169.34 64 146.28 64c-23.05 0-42.55 17.08-48.5 42.5L56.16 284.2C50.7 307.45 37.75 320 28.33 320H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h12.33c41.97 0 78.19-34.23 90.14-85.2l23.84-101.78 29.25 222.11c1.98 15.05 13.82 27.45 28.94 28.75.99.09 1.96.13 2.93.13 14.08 0 26.64-9.27 30.69-22.95l33.03-112.34c5.88-16.72 15.84-27.52 25.41-27.52 9.58 0 19.55 10.8 25.78 28.52 15.23 43.36 48.11 70.3 85.8 70.3H496c8.84 0 16-7.16 16-16v-32c0-8.86-7.16-16.02-16-16.02z"], 49101 "sitemap": [640, 512, [], "f0e8", "M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"], 49102 "skull": [512, 512, [], "f54c", "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.
491026 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z"], 49103 "sliders-h": [512, 512, [], "f1de", "M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z"], 49104 "smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"], 49105 "smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z"], 49106 "smile-wink": [496, 512, [], "f4da", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z"], 49107 "smoking": [640, 512, [], "f48d", "M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"], 49108 "smoking-ban": [512, 512, [], "f54d", "M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z"], 49109 "snowflake": [448, 512, [], "f2dc", "M444.816 301.639a24.12 24.12 0 0 0 2.661-16.978c-2.725-12.966-15.339-21.245-28.174-18.492l-87.407 25.046L264 256l67.896-35.215 87.407 25.046c12.835 2.753 25.449-5.526 28.174-18.492 2.725-12.966-5.471-25.708-18.305-28.461l-47.477-7.137 53.077-30.956c11.363-6.627 15.257-21.306 8.696-32.785-6.561-11.479-21.091-15.412-32.454-8.785l-53.077 30.956 17.621-45.104c4.057-12.606-2.768-26.146-15.247-30.245-12.478-4.099-25.883 2.797-29.94 15.402l-22.232 88.99-60.38 35.215V144l65.175-63.945c8.778-9.852 7.987-25.027-1.766-33.894-9.753-8.867-24.775-8.068-33.552 1.784l-29.85
491097 37.967V24c0-13.255-10.637-24-23.758-24s-23.758 10.745-23.758 24v61.912l-29.857-37.967c-8.779-9.852-23.799-10.652-33.552-1.784-9.753 8.867-10.543 24.042-1.766 33.894L200.242 144v70.431l-60.38-35.215-22.232-88.99c-4.057-12.605-17.462-19.501-29.94-15.402-12.478 4.099-19.304 17.64-15.247 30.245l17.62 45.104-53.077-30.956c-11.363-6.627-25.893-2.694-32.454 8.785s-2.667 26.157 8.696 32.785l53.077 30.956-47.477 7.137C5.993 201.634-2.203 214.375.523 227.341c2.725 12.965 15.339 21.245 28.174 18.492l87.407-25.046L184 256l-67.896 35.215-87.406-25.045c-12.835-2.753-25.449 5.526-28.174 18.492-2.725 12.967 5.47 25.708 18.305 28.461l47.477 7.137-53.077 30.956C1.866 357.843-2.027 372.521 4.533 384s21.091 15.412 32.454 8.785l53.077-30.956-17.62 45.104a24.157 24.157 0 0 0 2.022 19.428c2.831 4.953 7.416 8.909 13.224 10.816 12.478 4.099 25.883-2.797 29.94-15.402l22.232-88.99 60.38-35.215V368l-65.175 63.945c-8.778 9.852-7.987 25.027 1.766 33.894 9.754 8.868 24.774 8.068 33.552-1.784l29.857-37.967V488c0 13.255 10.637 24 23.758 24s23.758-10.745 23.758-24v-61.912l29.857 37.967A23.59 23.59 0 0 0 295.282 472a23.534 23.534 0 0 0 15.885-6.161c9.753-8.867 10.544-24.042 1.766-33.894L247.758 368v-70.431l60.38 35.215 22.232 88.99c4.057 12.605 17.462 19.501 29.94 15.402 12.479-4.099 19.304-17.64 15.247-30.245l-17.621-45.104 53.077 30.956c11.363 6.627 25.893 2.694 32.454-8.785s2.667-26.157-8.696-32.785l-53.077-30.956 47.477-7.137c6.86-1.469 12.394-5.793 15.645-11.481z"], 49110 "solar-panel": [640, 512, [], "f5ba", "M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"], 49111 "sort": [320, 512, [], "f0dc", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z"], 49112 "sort-alpha-down": [448, 512, [], "f15d", "M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zm119.075-180.007A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z"], 49113 "sort-alpha-up": [448, 512, [], "f15e", "M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zm301.671 98.621A12 12 0 0 1 294.838 224h-35.717c-8.22 0-14.007-8.078-11.362-15.861l57.096-168A12 12 0 0 1 316.217 32h39.566c5.139 0 9.708 3.273 11.362 8.139l57.096 168C426.886 215.922 421.1 224 412.879 224h-35.735a12 12 0 0 1-11.515-8.622l-8.301-28.299h-42.863l-8.092 28.228zm22.857-78.697h13.367l-6.6-22.937-6.767 22.937zm12.575 287.323l67.451-95.698a12 12 0 0 0 2.192-6.913V300c0-6.627-5.373-12-12-12H274.522c-6.627 0-12 5.373-12 12v28.93c0 6.627 5.373 12 12 12h56.469c-.739.991-1.497 2.036-2.27 3.133l-67.203 95.205a12.001 12.001 0 0 0-2.196 6.92V468c0 6.627 5.373 12 12 12h129.355c6.627 0 12-5.373 12-12v-28.93c0-6.627-5.373-12-12-12h-61.146c.74-.993 1.5-2.039 2.274-3.137z"], 49114 "sort-amount-down": [512, 512, [], "f160", "M187.298 395.314l-79.984 80.002c-6.248 6.247-16.383 6.245-22.627 0L4.705 395.314C-5.365 385.244 1.807 368 16.019 368H64V48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v320h47.984c14.241 0 21.363 17.264 11.314 27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z"], 49115 "sort-amount-up": [512, 512, [], "f161", "M4.702 116.686l79.984-80.002c6.248-6.247 16.383-6.245 22.627 0l79.981 80.002c10.07 10.07 2.899 27.314-11.314 27.314H128v320c0 8.837-7.163 16-16 16H80c-8.837 0-16-7.163-16-16V144H16.016c-14.241 0-21.363-17.264-11.314-27.314zM240 96h256c8.837 0 16-7.163 16-16V48c0-8.837-7.163-16-16-16H240c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16zm-16 112v-32c0-8.837 7.163-16 16-16h192c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16zm0 256v-32c0-8.837 7.163-16 16-16h64c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-64c-8.837 0-16-7.163-16-16zm0-128v-32c0-8.837 7.163-16 16-16h128c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H240c-8.837 0-16-7.163-16-16z"],
49116 "sort-down": [320, 512, [], "f0dd", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z"], 49117 "sort-numeric-down": [448, 512, [], "f162", "M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM175.984 368H128V48c0-8.837-7.163-16-16-16H80c-8.837 0-16 7.163-16 16v320H16.019c-14.212 0-21.384 17.244-11.314 27.314l79.981 80.002c6.245 6.245 16.38 6.247 22.627 0l79.984-80.002c10.05-10.05 2.928-27.314-11.313-27.314z"], 49118 "sort-numeric-up": [448, 512, [], "f163", "M308.811 113.787l-19.448-20.795c-4.522-4.836-4.274-12.421.556-16.95l43.443-40.741a11.999 11.999 0 0 1 8.209-3.247h31.591c6.627 0 12 5.373 12 12v127.07h25.66c6.627 0 12 5.373 12 12v28.93c0 6.627-5.373 12-12 12H301.649c-6.627 0-12-5.373-12-12v-28.93c0-6.627 5.373-12 12-12h25.414v-57.938c-7.254 6.58-14.211 4.921-18.252.601zm-30.57 238.569c0-32.653 23.865-67.356 68.094-67.356 38.253 0 79.424 28.861 79.424 92.228 0 51.276-32.237 105.772-91.983 105.772-17.836 0-30.546-3.557-38.548-6.781-5.79-2.333-8.789-8.746-6.922-14.703l9.237-29.48c2.035-6.496 9.049-9.983 15.467-7.716 13.029 4.602 27.878 5.275 38.103-4.138-38.742 5.072-72.872-25.36-72.872-67.826zm92.273 19.338c0-22.285-15.302-36.505-25.835-36.505-8.642 0-13.164 7.965-13.164 15.832 0 5.669 1.815 24.168 25.168 24.168 9.973 0 13.377-2.154 13.744-2.731.021-.046.087-.291.087-.764zM16.016 144H64v320c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144h47.981c14.212 0 21.384-17.244 11.314-27.314l-79.981-80.002c-6.245-6.245-16.38-6.247-22.627 0L4.702 116.686C-5.347 126.736 1.775 144 16.016 144z"], 49119 "sort-up": [320, 512, [], "f0de", "M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z"], 49120 "spa": [576, 512, [], "f5bb", "M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z"], 49121 "space-shuttle": [640, 512, [], "f197", "M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z"], 49122 "spinner": [512, 512, [], "f110", "M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"], 49123 "splotch": [512, 512, [], "f5bc", "M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62
49123c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z"], 49124 "spray-can": [512, 512, [], "f5bd", "M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"], 49125 "square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"], 49126 "square-full": [512, 512, [], "f45c", "M512 512H0V0h512v512z"], 49127 "stamp": [512, 512, [], "f5bf", "M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z"], 49128 "star": [576, 512, [], "f005", "M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"], 49129 "star-half": [576, 512, [], "f089", "M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z"], 49130 "star-half-alt": [536, 512, [], "f5c0", "M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z"], 49131 "star-of-life": [480, 512, [], "f621", "M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z"], 49132 "step-backward": [448, 512, [], "f048", "M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z"], 49133 "step-forward": [448, 512, [], "f051", "M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"], 49134 "stethoscope": [512, 512, [], "f0f1", "M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"], 49135 "sticky-note": [448, 512, [], "f249", "M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z"], 49136 "stop": [448, 512, [], "f04d", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"], 49137 "stop-circle": [512, 512, [], "f28d", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"], 49138 "stopwatch": [448, 512, [], "f2f2", "M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"], 49139 "store": [616, 512, [], "f54e", "M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"], 49140 "store-alt": [640, 512, [], "f54f", "M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z"], 49141 "stream": [512, 512, [], "f550", "M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"], 49142 "street-view": [512, 512, [], "f21d", "M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z"], 49143 "strikethrough": [512, 512, [], "f0cc", "M496 288H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h480c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16zm-214.666 16c27.258 12.937 46.524 28.683 46.524 56.243 0 33.108-28.977 53.676-75.621 53.676-32.325 0-76.874-12.08-76.874-44.271V368c0-8.837-7.164-16-16-16H113.75c-8.836 0-16 7.163-16 16v19.204c0 66.845 77.717 101.82 154.487 101.82 88.578 0 162.013-45.438 162.013-134.424 0-19.815-3.618-36.417-10.143-50.6H281.334zm-30.952-96c-32.422-13.505-56.836-28.946-56.836-59.683 0-33.92 30.901-47.406 64.962-47.406 42.647 0 64.962 16.593 64.962 32.985V136c0 8.837 7.164 16 16 16h45.613c8.836 0 16-7.163 16-16v-30.318c0-52.438-71.725-79.875-142.575-79.875-85.203 0-150.726 40.972-150.726 125.646 0 22.71 4.665 41.176 12.777 56.547h129.823z"], 49144 "stroopwafel": [512, 512, [], "f551", "M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z"], 49145 "subscript": [512, 512, [], "f12c", "M395.198 416c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 256c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 96H16C7.163 96 0 88.837 0 80V48c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.
49145171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035A15.999 15.999 0 0 1 204.226 32H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 256H272z"], 49146 "subway": [448, 512, [], "f239", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"], 49147 "suitcase": [512, 512, [], "f0f2", "M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z"], 49148 "suitcase-rolling": [384, 512, [], "f5c1", "M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z"], 49149 "sun": [512, 512, [], "f185", "M274.835 12.646l25.516 62.393c4.213 10.301 16.671 14.349 26.134 8.492l57.316-35.479c15.49-9.588 34.808 4.447 30.475 22.142l-16.03 65.475c-2.647 10.81 5.053 21.408 16.152 22.231l67.224 4.987c18.167 1.348 25.546 24.057 11.641 35.826L441.81 242.26c-8.495 7.19-8.495 20.289 0 27.479l51.454 43.548c13.906 11.769 6.527 34.478-11.641 35.826l-67.224 4.987c-11.099.823-18.799 11.421-16.152 22.231l16.03 65.475c4.332 17.695-14.986 31.73-30.475 22.142l-57.316-35.479c-9.463-5.858-21.922-1.81-26.134 8.492l-25.516 62.393c-6.896 16.862-30.774 16.862-37.67 0l-25.516-62.393c-4.213-10.301-16.671-14.349-26.134-8.492l-57.317 35.479c-15.49 9.588-34.808-4.447-30.475-22.142l16.03-65.475c2.647-10.81-5.053-21.408-16.152-22.231l-67.224-4.987c-18.167-1.348-25.546-24.057-11.641-35.826L70.19 269.74c8.495-7.19 8.495-20.289 0-27.479l-51.454-43.548c-13.906-11.769-6.527-34.478 11.641-35.826l67.224-4.987c11.099-.823 18.799-11.421 16.152-22.231l-16.03-65.475c-4.332-17.695 14.986-31.73 30.475-22.142l57.317 35.479c9.463 5.858 21.921 1.81 26.134-8.492l25.516-62.393c6.896-16.861 30.774-16.861 37.67 0zM392 256c0-74.991-61.01-136-136-136-74.991 0-136 61.009-136 136s61.009 136 136 136c74.99 0 136-61.009 136-136zm-32 0c0 57.346-46.654 104-104 104s-104-46.654-104-104 46.654-104 104-104 104 46.654 104 104z"], 49150 "superscript": [512, 512, [], "f12b", "M395.198 256c3.461-10.526 18.796-21.28 36.265-32.425 16.625-10.605 35.467-22.626 50.341-38.862 17.458-19.054 25.944-40.175 25.944-64.567 0-60.562-50.702-88.146-97.81-88.146-42.491 0-76.378 22.016-94.432 50.447-4.654 7.329-2.592 17.036 4.623 21.865l30.328 20.296c7.032 4.706 16.46 3.084 21.63-3.614 8.022-10.394 18.818-18.225 31.667-18.225 19.387 0 26.266 12.901 26.266 23.948 0 36.159-119.437 57.023-119.437 160.024 0 6.654.561 13.014 1.415 19.331 1.076 7.964 7.834 13.928 15.87 13.928H496c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16H395.198zM272 416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-62.399a16 16 0 0 1-13.541-7.478l-45.701-72.615c-2.297-3.352-4.422-6.969-6.195-10.209-1.65 3.244-3.647 6.937-5.874 10.582l-44.712 72.147a15.999 15.999 0 0 1-13.6 7.572H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h26.325l56.552-82.709L46.111 256H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h68.806a16 16 0 0 1 13.645 7.644l39.882 65.126c2.072 3.523 4.053 7.171 5.727 10.37 1.777-3.244 3.92-6.954 6.237-10.537l40.332-65.035a16 16 0 0 1 13.598-7.567H272c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-27.979l-52.69 75.671L249.974 416H272z"], 49151 "surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 49152 "swatchbook": [511, 512, [], "f5c3", "M479.06 320H372.29L186.15 506.51c-2.06 2.07-4.49 3.58-6.67 5.49h299.58c17.64 0 31.94-14.33 31.94-32V352c0-17.67-14.3-32-31.94-32zm-44.5-152.9l-90.33-90.51c-12.47-12.5-32.69-12.5-45.17 0l-75.5 75.65V416c0 2.96-.67 5.73-.87 8.64l211.87-212.28c12.47-12.5 12.47-32.77 0-45.26zM191.62 32c0-17.67-14.3-32-31.94-32H31.94C14.3 0 0 14.33 0 32v384c0 53.02 42.9 96 95.81 96s95.81-42.98 95.81-96V32zM95.81 440c-13.23 0-23.95-10.75-23.95-24 0-13.26 10.73-24 23.95-24s23.95 10.74 23.95 24c.01 13.25-10.72 24
49152-23.95 24zm31.94-184H63.88v-64h63.88v64zm0-128H63.88V64h63.88v64z"], 49153 "swimmer": [640, 512, [], "f5c4", "M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z"], 49154 "swimming-pool": [640, 512, [], "f5c5", "M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z"], 49155 "sync": [512, 512, [], "f021", "M440.935 12.574l3.966 82.766C399.416 41.904 331.674 8 256 8 134.813 8 33.933 94.924 12.296 209.824 10.908 217.193 16.604 224 24.103 224h49.084c5.57 0 10.377-3.842 11.676-9.259C103.407 137.408 172.931 80 256 80c60.893 0 114.512 30.856 146.104 77.801l-101.53-4.865c-6.845-.328-12.574 5.133-12.574 11.986v47.411c0 6.627 5.373 12 12 12h200.333c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12h-47.411c-6.853 0-12.315 5.729-11.987 12.574zM256 432c-60.895 0-114.517-30.858-146.109-77.805l101.868 4.871c6.845.327 12.573-5.134 12.573-11.986v-47.412c0-6.627-5.373-12-12-12H12c-6.627 0-12 5.373-12 12V500c0 6.627 5.373 12 12 12h47.385c6.863 0 12.328-5.745 11.985-12.599l-4.129-82.575C112.725 470.166 180.405 504 256 504c121.187 0 222.067-86.924 243.704-201.824 1.388-7.369-4.308-14.176-11.807-14.176h-49.084c-5.57 0-10.377 3.842-11.676 9.259C408.593 374.592 339.069 432 256 432z"], 49156 "sync-alt": [512, 512, [], "f2f1", "M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"], 49157 "syringe": [512, 512, [], "f48e", "M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z"], 49158 "table": [512, 512, [], "f0ce", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z"], 49159 "table-tennis": [512, 512, [], "f45d", "M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z"], 49160 "tablet": [448, 512, [], "f10a", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"], 49161 "tablet-alt": [448, 512, [], "f3fa", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z"], 49162 "tablets": [640, 512, [], "f490", "M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z"], 49163 "tachometer-alt": [576, 512, [], "f3fd", "M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 49164 "tag": [512, 512, [], "f02b", "M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"], 49165 "tags": [640, 512, [], "f02c", "M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"], 49166 "tape": [640, 512, [], "f4db", "M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z"],
49167 "tasks": [512, 512, [], "f0ae", "M208 132h288c8.8 0 16-7.2 16-16V76c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zm0 160h288c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16H208c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16zM64 368c-26.5 0-48.6 21.5-48.6 48s22.1 48 48.6 48 48-21.5 48-48-21.5-48-48-48zm92.5-299l-72.2 72.2-15.6 15.6c-4.7 4.7-12.9 4.7-17.6 0L3.5 109.4c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.3c4.7-4.7 12.3-4.7 17 0l17 16.5c4.6 4.7 4.6 12.3-.1 17zm0 159.6l-72.2 72.2-15.7 15.7c-4.7 4.7-12.9 4.7-17.6 0L3.5 269c-4.7-4.7-4.7-12.3 0-17l15.7-15.7c4.7-4.7 12.3-4.7 17 0l22.7 22.1 63.7-63.7c4.7-4.7 12.3-4.7 17 0l17 17c4.6 4.6 4.6 12.2-.1 16.9z"], 49168 "taxi": [512, 512, [], "f1ba", "M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 49169 "teeth": [640, 512, [], "f62e", "M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z"], 49170 "teeth-open": [640, 512, [], "f62f", "M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z"], 49171 "terminal": [640, 512, [], "f120", "M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"], 49172 "text-height": [576, 512, [], "f034", "M16 32h288c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96h-54.761v320H232c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H88c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm475.308 4.685l79.995 80.001C581.309 126.693 574.297 144 559.99 144H512v224h48c15.639 0 20.635 17.991 11.313 27.314l-79.995 80.001c-6.247 6.247-16.381 6.245-22.626 0l-79.995-80.001C378.691 385.307 385.703 368 400.01 368H448V144h-48c-15.639 0-20.635-17.991-11.313-27.314l79.995-80.001c6.247-6.248 16.381-6.245 22.626 0z"], 49173 "text-width": [448, 512, [], "f035", "M16 32h416c8.837 0 16 7.163 16 16v96c0 8.837-7.163 16-16 16h-35.496c-8.837 0-16-7.163-16-16V96H261.743v128H296c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H152c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h34.257V96H67.496v48c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16V48c0-8.837 7.163-16 16-16zm427.315 340.682l-80.001-79.995C353.991 283.365 336 288.362 336 304v48H112v-47.99c0-14.307-17.307-21.319-27.314-11.313L4.685 372.692c-6.245 6.245-6.247 16.379 0 22.626l80.001 79.995C94.009 484.635 112 479.638 112 464v-48h224v47.99c0 14.307 17.307 21.319 27.314 11.313l80.001-79.995c6.245-6.245 6.248-16.379 0-22.626z"], 49174 "th": [512, 512, [], "f00a", "M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"], 49175 "th-large": [512, 512, [], "f009", "M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z"], 49176 "th-list": [512, 512, [], "f00b", "M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z"], 49177 "theater-masks": [640, 512, [], "f630", "M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z"], 49178 "thermometer": [512, 512, [], "f491", "M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z"], 49179 "thermometer-empty": [256, 512, [], "f2cb", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], 49180 "thermometer-full": [256, 512, [], "f2c7", "M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z"], 49181 "thermometer-half": [256, 512, [], "f2c9", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], 49182 "thermometer-quarter": [256, 512, [], "f2ca", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], 49183 "thermometer-three-quarters": [256, 512, [], "f2c8", "M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"], 49184 "thumbs-down": [512, 512, [], "f165", "M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z"], 49185 "thumbs-up": [512, 512, [], "f164", "M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z"], 49186 "thumbtack": [384, 512, [], "f08d", "M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z"], 49187 "ticket-alt": [576, 512, [], "f3ff", "M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"], 49188 "times": [352, 512, [], "f00d", "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"], 49189 "times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4
49189.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"], 49190 "tint": [352, 512, [], "f043", "M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z"], 49191 "tint-slash": [640, 512, [], "f5c7", "M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"], 49192 "tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z"], 49193 "toggle-off": [576, 512, [], "f204", "M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z"], 49194 "toggle-on": [576, 512, [], "f205", "M576 256c0 106.039-85.961 192-192 192H192C85.961 448 0 362.039 0 256S85.961 64 192 64h192c106.039 0 192 85.961 192 192zM384 128c-70.741 0-128 57.249-128 128 0 70.741 57.249 128 128 128 70.741 0 128-57.249 128-128 0-70.741-57.249-128-128-128"], 49195 "toolbox": [512, 512, [], "f552", "M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z"], 49196 "tooth": [448, 512, [], "f5c9", "M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z"], 49197 "trademark": [640, 512, [], "f25c", "M97.119 163.133H12c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h248.559c6.627 0 12 5.373 12 12v43.133c0 6.627-5.373 12-12 12H175.44V404c0 6.627-5.373 12-12 12h-54.322c-6.627 0-12-5.373-12-12V163.133zM329.825 96h65.425a12 12 0 0 1 11.346 8.093l43.759 127.068c7.161 20.588 16.111 52.812 16.111 52.812h.896s8.95-32.224 16.111-52.812l43.758-127.068A12 12 0 0 1 538.577 96h65.41a12 12 0 0 1 11.961 11.03l24.012 296c.567 6.987-4.951 12.97-11.961 12.97h-54.101a12 12 0 0 1-11.972-11.182l-9.082-132.93c-1.79-24.168 0-53.706 0-53.706h-.896s-10.741 33.566-17.902 53.706l-30.7 84.731a12 12 0 0 1-11.282 7.912h-50.302a12 12 0 0 1-11.282-7.912l-30.7-84.731c-7.161-20.14-17.903-53.706-17.903-53.706h-.895s1.79 29.538 0 53.706l-9.082 132.93c-.428 6.295-5.66 11.182-11.97 11.182H305.4c-7.017 0-12.536-5.994-11.959-12.987l24.425-296A11.999 11.999 0 0 1 329.825 96z"], 49198 "traffic-light": [384, 512, [], "f637", "M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.
4919801-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"], 49199 "train": [448, 512, [], "f238", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z"], 49200 "transgender": [384, 512, [], "f224", "M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], 49201 "transgender-alt": [480, 512, [], "f225", "M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], 49202 "trash": [448, 512, [], "f1f8", "M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm415.2 56.7L394.8 467c-1.6 25.3-22.6 45-47.9 45H101.1c-25.3 0-46.3-19.7-47.9-45L32.8 140.7c-.4-6.9 5.1-12.7 12-12.7h358.5c6.8 0 12.3 5.8 11.9 12.7z"], 49203 "trash-alt": [448, 512, [], "f2ed", "M0 84V56c0-13.3 10.7-24 24-24h112l9.4-18.7c4-8.2 12.3-13.3 21.4-13.3h114.3c9.1 0 17.4 5.1 21.5 13.3L312 32h112c13.3 0 24 10.7 24 24v28c0 6.6-5.4 12-12 12H12C5.4 96 0 90.6 0 84zm416 56v324c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V140c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12zm-272 68c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208zm96 0c0-8.8-7.2-16-16-16s-16 7.2-16 16v224c0 8.8 7.2 16 16 16s16-7.2 16-16V208z"], 49204 "tree": [384, 512, [], "f1bb", "M377.33 375.429L293.906 288H328c21.017 0 31.872-25.207 17.448-40.479L262.79 160H296c20.878 0 31.851-24.969 17.587-40.331l-104-112.003c-9.485-10.214-25.676-10.229-35.174 0l-104 112.003C56.206 134.969 67.037 160 88 160h33.21l-82.659 87.521C24.121 262.801 34.993 288 56 288h34.094L6.665 375.429C-7.869 390.655 2.925 416 24.025 416H144c0 32.781-11.188 49.26-33.995 67.506C98.225 492.93 104.914 512 120 512h144c15.086 0 21.776-19.069 9.995-28.494-19.768-15.814-33.992-31.665-33.995-67.496V416h119.97c21.05 0 31.929-25.309 17.36-40.571z"], 49205 "trophy": [576, 512, [], "f091", "M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z"], 49206 "truck": [640, 512, [], "f0d1", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"], 49207 "truck-loading": [640, 512, [], "f4de", "M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"], 49208 "truck-monster": [640, 512, [], "f63b", "M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8
49208c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"], 49209 "truck-moving": [640, 512, [], "f4df", "M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z"], 49210 "truck-pickup": [640, 512, [], "f63c", "M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"], 49211 "tshirt": [640, 512, [], "f553", "M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z"], 49212 "tty": [512, 512, [], "f1e4", "M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"], 49213 "tv": [640, 512, [], "f26c", "M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c2
492136.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z"], 49214 "umbrella": [576, 512, [], "f0e9", "M557.011 267.631c-51.432-45.217-107.572-43.698-158.567 30.731-5.298 7.861-14.906 7.165-19.736 0-2.483-3.624-32.218-60.808-90.708-60.808-45.766 0-70.542 31.378-90.709 60.808-4.829 7.165-14.436 7.861-19.734 0-50.904-74.285-106.613-76.406-158.567-30.731-10.21 8.264-20.912-1.109-18.696-9.481C32.146 134.573 158.516 64.612 288.001 64.612c128.793 0 256.546 69.961 287.706 193.538 2.206 8.322-8.426 17.793-18.696 9.481zM256 261.001V416c0 17.645-14.355 32-32 32s-32-14.355-32-32c0-17.673-14.327-32-32-32s-32 14.327-32 32c0 52.935 43.065 96 96 96s96-43.065 96-96V261.288c-21.836-10.806-45.425-9.737-64-.287zm64-211.007V32c0-17.673-14.327-32-32-32s-32 14.327-32 32v17.987a372.105 372.105 0 0 1 64 .007z"], 49215 "umbrella-beach": [640, 512, [], "f5ca", "M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z"], 49216 "underline": [448, 512, [], "f0cd", "M224.264 388.24c-91.669 0-156.603-51.165-156.603-151.392V64H39.37c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h137.39c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.813v172.848c0 53.699 28.314 79.444 76.317 79.444 46.966 0 75.796-25.434 75.796-79.965V64h-28.291c-8.837 0-16-7.163-16-16V16c0-8.837 7.163-16 16-16h136.868c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16h-28.291v172.848c0 99.405-64.881 151.392-156.082 151.392zM16 448h416c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H16c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16z"], 49217 "undo": [512, 512, [], "f0e2", "M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"], 49218 "undo-alt": [512, 512, [], "f2ea", "M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z"], 49219 "universal-access": [512, 512, [], "f29a", "M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z"], 49220 "university": [512, 512, [], "f19c", "M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"], 49221 "unlink": [512, 512, [], "f127", "M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z"], 49222 "unlock": [448, 512, [], "f09c", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"], 49223 "unlock-alt": [448, 512, [], "f13e", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z"], 49224 "upload": [512, 512, [], "f093", "M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"], 49225 "user": [448, 512, [], "f007", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], 49226 "user-alt": [512, 512, [], "f406", "M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z"], 49227 "user-alt-slash": [640, 512, [], "f4fa", "M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z"], 49228 "user-astronaut": [448, 512, [], "f4fb", "M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224
492280S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z"], 49229 "user-check": [640, 512, [], "f4fc", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z"], 49230 "user-circle": [496, 512, [], "f2bd", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z"], 49231 "user-clock": [640, 512, [], "f4fd", "M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z"], 49232 "user-cog": [640, 512, [], "f4fe", "M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"], 49233 "user-edit": [640, 512, [], "f4ff", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z"], 49234 "user-friends": [640, 512, [], "f500", "M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c2
492346.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"], 49235 "user-graduate": [448, 512, [], "f501", "M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z"], 49236 "user-lock": [640, 512, [], "f502", "M320 320c0-11.1 3.1-21.4 8.1-30.5-4.8-.5-9.5-1.5-14.5-1.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h280.9c-5.5-9.5-8.9-20.3-8.9-32V320zm-96-64c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm384 32h-32v-48c0-44.2-35.8-80-80-80s-80 35.8-80 80v48h-32c-17.7 0-32 14.3-32 32v160c0 17.7 14.3 32 32 32h224c17.7 0 32-14.3 32-32V320c0-17.7-14.3-32-32-32zm-80 0h-64v-48c0-17.6 14.4-32 32-32s32 14.4 32 32v48z"], 49237 "user-md": [448, 512, [], "f0f0", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z"], 49238 "user-minus": [640, 512, [], "f503", "M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], 49239 "user-ninja": [448, 512, [], "f504", "M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z"], 49240 "user-plus": [640, 512, [], "f234", "M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], 49241 "user-secret": [448, 512, [], "f21b", "M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7
49241h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"], 49242 "user-shield": [640, 512, [], "f505", "M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z"], 49243 "user-slash": [640, 512, [], "f506", "M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z"], 49244 "user-tag": [640, 512, [], "f507", "M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z"], 49245 "user-tie": [448, 512, [], "f508", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z"], 49246 "user-times": [640, 512, [], "f235", "M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"], 49247 "users": [640, 512, [], "f0c0", "M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"], 49248 "users-cog": [640, 512, [], "f509", "M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"], 49249 "utensil-spoon": [512, 512, [], "f2e5", "M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63
49249-62.9 83.6-172.8 28.5-227.8z"], 49250 "utensils": [416, 512, [], "f2e7", "M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z"], 49251 "vector-square": [512, 512, [], "f5cb", "M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z"], 49252 "venus": [288, 512, [], "f221", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"], 49253 "venus-double": [512, 512, [], "f226", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z"], 49254 "venus-mars": [576, 512, [], "f228", "M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"], 49255 "vial": [480, 512, [], "f492", "M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"], 49256 "vials": [640, 512, [], "f493", "M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z"], 49257 "video": [576, 512, [], "f03d", "M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z"], 49258 "video-slash": [640, 512, [], "f4e2", "M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-25
492587c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z"], 49259 "volleyball-ball": [495, 512, [], "f45f", "M223.3 243.4c-.9-37-8.6-72.8-22.7-105.7-90.8 42.4-157.5 122.4-180.3 216.8 13.4 30.8 32.9 58.3 56.9 81.1 22.7-79.2 74.2-147.8 146.1-192.2zM186.4 109c-15-26.4-34.5-50.1-57.4-70.7C38 88.1-15.8 191.2 4 300.5c33.4-83.1 98.4-152 182.4-191.5zM374 274.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5 57.3 59.3 91 138.2 93.5 222.7 32.5 17.7 67.3 29 102.9 33.2zm-124.7 9.5c-31.6 19.3-58.7 43.9-80.2 72.6 82 57.3 184.5 75.1 277.5 47.8 19.7-26.4 34.2-56.8 42.2-89.9-26.6 6.6-53.7 10.4-80.9 10.4-54.6-.1-108.9-14.1-158.6-40.9zM151 383.3c-15.2 26-25.7 54.4-32.1 84.2 37.6 23 81.7 36.5 129.1 36.5 61 0 116.7-22.1 159.9-58.6C295 461.5 204.6 420.6 151 383.3zM331.3 22.7c55.3 70.4 82.5 161.2 74.6 253.6 30.3.2 60.5-4.8 89.7-14.2 0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z"], 49260 "volume-down": [384, 512, [], "f027", "M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zM384 256c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z"], 49261 "volume-off": [256, 512, [], "f026", "M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971z"], 49262 "volume-up": [576, 512, [], "f028", "M256 88.017v335.964c0 21.438-25.943 31.998-40.971 16.971L126.059 352H24c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h102.059l88.971-88.954c15.01-15.01 40.97-4.49 40.97 16.971zm182.056-77.876C422.982.92 403.283 5.668 394.061 20.745c-9.221 15.077-4.473 34.774 10.604 43.995C468.967 104.063 512 174.983 512 256c0 73.431-36.077 142.292-96.507 184.206-14.522 10.072-18.129 30.01-8.057 44.532 10.076 14.528 30.016 18.126 44.531 8.057C529.633 438.927 576 350.406 576 256c0-103.244-54.579-194.877-137.944-245.859zM480 256c0-68.547-36.15-129.777-91.957-163.901-15.076-9.22-34.774-4.471-43.994 10.607-9.22 15.078-4.471 34.774 10.607 43.994C393.067 170.188 416 211.048 416 256c0 41.964-20.62 81.319-55.158 105.276-14.521 10.073-18.128 30.01-8.056 44.532 6.216 8.96 16.185 13.765 26.322 13.765a31.862 31.862 0 0 0 18.21-5.709C449.091 377.953 480 318.938 480 256zm-96 0c0-33.717-17.186-64.35-45.972-81.944-15.079-9.214-34.775-4.463-43.992 10.616s-4.464 34.775 10.615 43.992C314.263 234.538 320 244.757 320 256a32.056 32.056 0 0 1-13.802 26.332c-14.524 10.069-18.136 30.006-8.067 44.53 10.07 14.525 30.008 18.136 44.53 8.067C368.546 316.983 384 287.478 384 256z"], 49263 "walking": [320, 512, [], "f554", "M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z"], 49264 "wallet": [512, 512, [], "f555", "M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"], 49265 "warehouse": [640, 512, [], "f494", "M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"], 49266 "weight": [512, 512, [], "f496", "M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z"], 49267 "weight-hanging": [512, 512, [], "f5cd", "M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"], 49268 "wheelchair": [512, 512, [], "f193", "M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z"], 49269 "wifi": [640, 512, [], "f1eb", "M384 416c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm136.659-124.443c6.465-6.465 6.245-17.065-.564-23.167-113.793-101.985-286.526-101.869-400.19 0-6.809 6.102-7.029 16.702-.564 23.167l34.006 34.006c5.927 5.927 15.464 6.32 21.769.796 82.88-72.609 207.074-72.447 289.768 0 6.305 5.524 15.842 5.132 21.769-.796l34.006-34.006zm112.11-113.718c6.385-6.385 6.254-16.816-.35-22.973-175.768-163.86-449.134-163.8-624.837 0-6.604 6.157-6.735 16.589-.35 22.973l33.966 33.966c6.095 6.095 15.891 6.231 22.224.383 144.763-133.668 368.356-133.702 513.156 0 6.333 5.848 16.129 5.712 22.224-.383l33.967-33.966z"], 49270 "window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z"], 49271 "window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z"], 49272 "window-minimize": [512, 512, [], "f2d1", "M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z"], 49273 "window-restore": [512, 512, [], "f2d2", "M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H
4927376c-6.6 0-12 5.4-12 12v52h252v-52z"], 49274 "wine-glass": [288, 512, [], "f4e3", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z"], 49275 "wine-glass-alt": [288, 512, [], "f5ce", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z"], 49276 "won-sign": [576, 512, [], "f159", "M564 192c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-48.028l18.572-80.61c1.732-7.518-3.978-14.694-11.693-14.694h-46.107a11.998 11.998 0 0 0-11.736 9.5L450.73 128H340.839l-19.725-85.987a12 12 0 0 0-11.696-9.317H265.43a12 12 0 0 0-11.687 9.277L233.696 128H124.975L107.5 42.299a12 12 0 0 0-11.758-9.602H53.628c-7.686 0-13.39 7.124-11.709 14.624L60 128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h62.342l7.171 32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h83.856l40.927 182.624A12 12 0 0 0 148.492 480h56.767c5.583 0 10.428-3.85 11.689-9.288L259.335 288h55.086l42.386 182.712A12 12 0 0 0 368.496 480h56.826a12 12 0 0 0 11.694-9.306L479.108 288H564c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-70.146l7.373-32H564zm-425.976 0h80.757l-7.457 32h-66.776l-6.524-32zm45.796 150.029c-6.194 25.831-6.758 47.25-7.321 47.25h-1.126s-1.689-22.05-6.758-47.25L157.599 288h38.812l-12.591 54.029zM274.182 224l1.996-8.602c1.856-7.962 3.457-15.968 4.803-23.398h11.794c1.347 7.43 2.947 15.436 4.803 23.398l1.996 8.602h-25.392zm130.959 118.029c-5.068 25.2-6.758 47.25-6.758 47.25h-1.126c-.563 0-1.126-21.42-7.321-47.25L377.542 288h39.107l-11.508 54.029zM430.281 224h-67.42l-7.34-32h81.577l-6.817 32z"], 49277 "wrench": [512, 512, [], "f0ad", "M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"], 49278 "x-ray": [640, 512, [], "f497", "M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z"], 49279 "yen-sign": [384, 512, [], "f157", "M351.208 32h-65.277a12 12 0 0 0-10.778 6.724l-55.39 113.163c-14.513 34.704-27.133 71.932-27.133 71.932h-1.262s-12.62-37.228-27.133-71.932l-55.39-113.163A11.997 11.997 0 0 0 98.068 32H32.792c-9.057 0-14.85 9.65-10.59 17.643L102.322 200H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h88.162L152 293.228V320H44c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h108v92c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-92h108c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12H232v-26.772L251.838 256H340c6.627 0 12-5.373 12-12v-32c0-6.627-5.373-12-12-12h-58.322l80.12-150.357C366.058 41.65 360.266 32 351.208 32z"] 49280}; 49281 49282bunker(function () { 49283 define('fas', icons); 49284}); 49285 49286}()); 49287 49288/*! 49289 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com 49290 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 49291 */ 49292(function () { 49293'use strict'; 49294 49295var _WINDOW = {}; 49296try { 49297 if (typeof window !== 'undefined') _WINDOW = window; 49298 49299} catch (e) {} 49300 49301var _ref = _WINDOW.navigator || {}; 49302var _ref$userAgent = _ref.userAgent; 49303var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent; 49304 49305var WINDOW = _WINDOW; 49306 49307 49308 49309 49310 49311var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); 49312 49313var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; 49314 49315 49316 49317 49318 49319 49320 49321 49322 49323var PRODUCTION = function () { 49324 try { 49325 return "production" === 'production'; 49326 } catch (e) { 49327 return false;
49328 } 49329}(); 49330 49331var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 49332var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); 49333 49334 49335 49336var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) { 49337 return n + 'x'; 49338})).concat(oneToTwenty.map(function (n) { 49339 return 'w-' + n; 49340})); 49341 49342function bunker(fn) { 49343 try { 49344 fn(); 49345 } catch (e) { 49346 if (!PRODUCTION) { 49347 throw e; 49348 } 49349 } 49350} 49351 49352var w = WINDOW || {}; 49353 49354if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; 49355if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; 49356if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; 49357if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; 49358 49359var namespace = w[NAMESPACE_IDENTIFIER]; 49360 49361var _extends = Object.assign || function (target) { 49362 for (var i = 1; i < arguments.length; i++) { 49363 var source = arguments[i]; 49364 49365 for (var key in source) { 49366 if (Object.prototype.hasOwnProperty.call(source, key)) { 49367 target[key] = source[key]; 49368 } 49369 } 49370 } 49371 49372 return target; 49373}; 49374 49375function define(prefix, icons) { 49376 var normalized = Object.keys(icons).reduce(function (acc, iconName) { 49377 var icon = icons[iconName]; 49378 var expanded = !!icon.icon; 49379 49380 if (expanded) { 49381 acc[icon.iconName] = icon.icon; 49382 } else { 49383 acc[iconName] = icon; 49384 } 49385 return acc; 49386 }, {}); 49387 49388 if (typeof namespace.hooks.addPack === 'function') { 49389 namespace.hooks.addPack(prefix, normalized); 49390 } else { 49391 namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized); 49392 } 49393 49394 /** 49395 * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction 49396 * of new styles we needed to differentiate between them. Prefix `fa` is now an alias 49397 * for `fas` so we'll easy the upgrade process for our users by automatically defining 49398 * this as well. 49399 */ 49400 if (prefix === 'fas') { 49401 define('fa', icons); 49402 } 49403} 49404 49405var icons = { 49406 "address-book": [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"], 49407 "address-card": [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z"], 49408 "angry": [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z"], 49409 "arrow-alt-circle-down": [512, 512, [], "f358", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"], 49410 "arrow-alt-circle-left": [512, 512, [], "f359", "M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z"], 49411 "arrow-alt-circle-right": [512, 512, [], "f35a", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z"], 49412 "arrow-alt-circle-up": [512, 512, [], "f35b", "M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z"], 49413 "bell": [448, 512, [], "f0f3", "M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z"], 49414 "bell-slash": [640, 512, [], "f1f6", "M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"], 49415 "bookmark": [384, 512, [], "f02e", "M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z"], 49416 "building": [448, 512, [], "f1ad", "M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z"], 49417 "calendar": [448, 512, [], "f133", "M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z"], 49418 "calendar-alt": [448, 512, [], "f073", "M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49419 "calendar-check": [448, 512, [], "f274", "M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z"], 49420 "calendar-minus": [448, 512, [], "f272", "M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49421 "calendar-plus": [448, 512, [], "f271", "M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.
494216 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49422 "calendar-times": [448, 512, [], "f273", "M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49423 "caret-square-down": [448, 512, [], "f150", "M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49424 "caret-square-left": [448, 512, [], "f191", "M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49425 "caret-square-right": [448, 512, [], "f152", "M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49426 "caret-square-up": [448, 512, [], "f151", "M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49427 "chart-bar": [512, 512, [], "f080", "M500 400c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v324h452zm-356-60v-72c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v72c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V140c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v200c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V204c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v136c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12zm96 0V108c0-6.6-5.4-12-12-12h-24c-6.6 0-12 5.4-12 12v232c0 6.6 5.4 12 12 12h24c6.6 0 12-5.4 12-12z"], 49428 "check-circle": [512, 512, [], "f058", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z"], 49429 "check-square": [448, 512, [], "f14a", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z"], 49430 "circle": [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z"], 49431 "clipboard": [384, 512, [], "f328", "M336 64h-80c0-35.29-28.71-64-64-64s-64 28.71-64 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h42v36c0 6.627 5.373 12 12 12h168c6.627 0 12-5.373 12-12v-36h42a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zM192 40c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24"], 49432 "clock": [512, 512, [], "f017", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z"],
49433 "clone": [512, 512, [], "f24d", "M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z"], 49434 "closed-captioning": [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z"], 49435 "comment": [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"], 49436 "comment-alt": [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z"], 49437 "comment-dots": [512, 512, [], "f4ad", "M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z"], 49438 "comments": [576, 512, [], "f086", "M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z"], 49439 "compass": [496, 512, [], "f14e", "M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"], 49440 "copy": [448, 512, [], "f0c5", "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"], 49441 "copyright": [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064
49441c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z"], 49442 "credit-card": [576, 512, [], "f09d", "M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z"], 49443 "dizzy": [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z"], 49444 "dot-circle": [512, 512, [], "f192", "M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z"], 49445 "edit": [576, 512, [], "f044", "M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z"], 49446 "envelope": [512, 512, [], "f0e0", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"], 49447 "envelope-open": [512, 512, [], "f2b6", "M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z"],
49448 "eye": [576, 512, [], "f06e", "M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z"], 49449 "eye-slash": [576, 512, [], "f070", "M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z"], 49450 "file": [384, 512, [], "f15b", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z"], 49451 "file-alt": [384, 512, [], "f15c", "M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"], 49452 "file-archive": [384, 512, [], "f1c6", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM256 51.882L332.118 128H256V51.882zM336 464H48V48h79.714v16h32V48H208v104c0 13.255 10.745 24 24 24h104v288zM192.27 96h-32V64h32v32zm-32 0v32h-32V96h32zm0 64v32h-32v-32h32zm32 0h-32v-32h32v32zm1.909 105.678A12 12 0 0 0 182.406 256H160.27v-32h-32v32l-19.69 97.106C101.989 385.611 126.834 416 160 416c33.052 0 57.871-30.192 51.476-62.62l-17.297-87.702zM160.27 390.073c-17.918 0-32.444-12.105-32.444-27.036 0-14.932 14.525-27.036 32.444-27.036s32.444 12.105 32.444 27.036c0 14.931-14.526 27.036-32.444 27.036zm32-166.073h-32v-32h32v32z"], 49453 "file-audio": [384, 512, [], "f1c7", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z"], 49454 "file-code": [384, 512, [], "f1c9", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm101.677-115.115L116.854 320l32.822-28.885a8.793 8.793 0 0 0 .605-12.624l-17.403-18.564c-3.384-3.613-8.964-3.662-12.438-.401L62.78 313.58c-3.703 3.474-3.704 9.367.001 12.84l57.659 54.055a8.738 8.738 0 0 0 6.012 2.381 8.746 8.746 0 0 0 6.427-2.782l17.403-18.563a8.795 8.795 0 0 0-.605-12.626zm84.284-127.85l-24.401-7.084a8.796 8.796 0 0 0-10.905 5.998L144.04 408.061c-1.353 4.66 1.338 9.552 5.998 10.905l24.403 7.084c4.68 1.355 9.557-1.354 10.905-5.998l54.612-188.112c1.354-4.66-1.337-9.552-5.997-10.905zm87.258 92.545l-57.658-54.055c-3.526-3.307-9.099-3.165-12.439.401l-17.403 18.563a8.795 8.795 0 0 0 .605 12.625L267.146 320l-32.822 28.885a8.793 8.793 0 0 0-.605 12.624l17.403 18.564a8.797 8.797 0 0 0 12.439.401h-.001l57.66-54.055c3.703-3.473 3.703-9.366-.001-12.839z"], 49455 "file-excel": [384, 512, [], "f1c3", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z"], 49456 "file-image": [384, 512, [], "f1c5", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z"], 49457 "file-pdf": [384, 512, [], "f1c1", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z"], 49458 "file-powerpoint": [384, 512, [], "f1c4", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z"], 49459 "file-video": [384, 512, [], "f1c8", "M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z"], 49460 "file-word": [384, 512, [], "f1c2", "M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z"], 49461 "flag": [512, 512, [], "f024", "M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.
49461104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z"], 49462 "flushed": [496, 512, [], "f579", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"], 49463 "folder": [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-6 272H54c-3.314 0-6-2.678-6-5.992V117.992A5.993 5.993 0 0 1 54 112h134.118l64 64H458a6 6 0 0 1 6 6v212a6 6 0 0 1-6 6z"], 49464 "folder-open": [576, 512, [], "f07c", "M527.943 224H480v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h400a48.001 48.001 0 0 0 40.704-22.56l79.942-128c19.948-31.917-3.038-73.44-40.703-73.44zM54 112h134.118l64 64H426a6 6 0 0 1 6 6v42H152a48 48 0 0 0-41.098 23.202L48 351.449V117.993A5.993 5.993 0 0 1 54 112zm394 288H72l77.234-128H528l-80 128z"], 49465 "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"], 49466 "frown": [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z"], 49467 "frown-open": [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4
49467-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z"], 49468 "futbol": [496, 512, [], "f1e3", "M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z"], 49469 "gem": [576, 512, [], "f3a5", "M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z"], 49470 "grimace": [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z"], 49471 "grin": [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"], 49472 "grin-alt": [496, 512, [], "f581", "M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z"], 49473 "grin-beam": [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z"], 49474 "grin-beam-sweat": [496, 512, [], "f583", "M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"],
49475 "grin-hearts": [496, 512, [], "f584", "M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z"], 49476 "grin-squint": [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z"], 49477 "grin-squint-tears": [512, 512, [], "f586", "M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3
49477-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z"], 49478 "grin-stars": [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z"], 49479 "grin-tears": [640, 512, [], "f588", "M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z"], 49480 "grin-tongue": [496, 512, [], "f589", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], 49481 "grin-tongue-squint": [496, 512, [], "f58a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z"], 49482 "grin-tongue-wink": [496, 512, [], "f58b", "M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z"], 49483 "grin-wink": [496, 512, [], "f58c", "M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z"], 49484 "hand-lizard": [576, 512, [], "f258", "M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z"], 49485 "hand-paper": [448, 512, [], "f256", "M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z"], 49486 "hand-peace": [448, 512, [], "f25b", "M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z"], 49487 "hand-point-down": [448, 512, [], "f0a7", "M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z"], 49488 "hand-point-left": [512, 512, [], "f0a5", "M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 48
494880 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"], 49489 "hand-point-right": [512, 512, [], "f0a4", "M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"], 49490 "hand-point-up": [448, 512, [], "f0a6", "M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z"], 49491 "hand-pointer": [448, 512, [], "f25a", "M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v
49491-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z"], 49492 "hand-rock": [512, 512, [], "f255", "M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z"], 49493 "hand-scissors": [512, 512, [], "f257", "M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.8
4949312l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z"], 49494 "hand-spock": [512, 512, [], "f259", "M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z"], 49495 "handshake": [640, 512, [], "f2b5", "M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z"], 49496 "hdd": [576, 512, [], "f0a0", "M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z"], 49497 "heart": [512, 512, [], "f004", "M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z"], 49498 "hospital": [448, 512, [], "f0f8", "M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z"], 49499 "hourglass": [384, 512, [], "f254", "M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z"], 49500 "id-badge": [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z"], 49501 "id-card": [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"], 49502 "image": [512, 512, [], "f03e", "M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"], 49503 "images": [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z"], 49504 "keyboard": [576, 512, [], "f11c", "M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z"], 49505 "kiss": [496, 512, [], "f596", "M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], 49506 "kiss-beam": [496, 512, [], "f597", "M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z"], 49507 "kiss-wink-heart": [504, 512, [], "f598", "M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.
495071-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z"], 49508 "laugh": [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], 49509 "laugh-beam": [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], 49510 "laugh-squint": [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-1
495105.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], 49511 "laugh-wink": [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z"], 49512 "lemon": [512, 512, [], "f094", "M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z"], 49513 "life-ring": [512, 512, [], "f1cd", "M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z"], 49514 "lightbulb": [384, 512, [], "f0eb", "M272 428v28c0 10.449-6.68 19.334-16 22.629V488c0 13.255-10.745 24-24 24h-80c-13.255 0-24-10.745-24-24v-9.371c-9.32-3.295-16-12.18-16-22.629v-28c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12zM128 176c0-35.29 28.71-64 64-64 8.837 0 16-7.164 16-16s-7.163-16-16-16c-52.935 0-96 43.065-96 96 0 8.836 7.164 16 16 16s16-7.164 16-16zm64-128c70.734 0 128 57.254 128 128 0 77.602-37.383 60.477-80.98 160h-94.04C101.318 236.33 64 253.869 64 176c0-70.735 57.254-128 128-128m0-48C94.805 0 16 78.803 16 176c0 101.731 51.697 91.541 90.516 192.674 3.55 9.249 12.47 15.326 22.376 15.326h126.215c9.906 0 18.826-6.078 22.376-15.326C316.303 267.541 368 277.731 368 176 368 78.803 289.195 0 192 0z"], 49515 "list-alt": [512, 512, [], "f022", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z"], 49516 "map": [576, 512, [], "f279", "M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z"], 49517 "meh": [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z"], 49518 "meh-blank": [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], 49519 "meh-rolling-eyes": [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z"], 49520 "minus-square": [448, 512, [], "f146", "M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49521 "money-bill-alt": [640, 512, [], "f3d1", "M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z"], 49522 "moon": [512, 512, [], "f186", "M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z"], 49523 "newspaper": [576, 512, [], "f1ea", "M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z"], 49524 "object-group": [512, 512, [], "f247", "M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32
4952464h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z"], 49525 "object-ungroup": [576, 512, [], "f248", "M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z"], 49526 "paper-plane": [512, 512, [], "f1d8", "M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z"], 49527 "pause-circle": [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z"], 49528 "play-circle": [512, 512, [], "f144", "M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z"], 49529 "plus-square": [448, 512, [], "f0fe", "M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"], 49530 "question-circle": [512, 512, [], "f059", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z"], 49531 "registered": [512, 512, [], "f25d", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.43
495311 32.431z"], 49532 "sad-cry": [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z"], 49533 "sad-tear": [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z"], 49534 "save": [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z"], 49535 "share-square": [576, 512, [], "f14d", "M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z"], 49536 "smile": [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z"], 49537 "smile-beam": [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z"], 49538 "smile-wink": [496, 512, [], "f4da", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z"], 49539 "snowflake": [448, 512, [], "f2dc", "M438.237 355.927l-66.574-38.54 59.448-10.327c5.846-1.375 10.609-5.183 13.458-10.13 2.48-4.307 3.506-9.478 2.524-14.651-2.11-11.115-12.686-18.039-23.621-15.467l-85.423 31.115L255.914 256l82.136-41.926 85.423 31.115c10.936 2.572 21.512-4.352 23.621-15.467 2.111-11.115-5.046-22.209-15.981-24.781l-59.448-10.327 66.573-38.54c9.54-5.523 12.615-18.092 6.867-28.074-5.748-9.982-18.14-13.596-27.68-8.074l-66.574 38.54 20.805-56.787c3.246-10.782-2.758-22.542-13.413-26.268-10.654-3.725-21.922 1.997-25.168 12.779l-15.838 89.735-72.423 41.926V136l69.585-58.621c7.689-8.21 6.997-20.856-1.548-28.245-8.545-7.391-21.705-6.723-29.394 1.486l-38.644 46.46V20c0-11.046-9.318-20-20.813-20s-20.813 8.954-20.813 20v77.08l-38.644-46.46c-7.689-8.21-20.849-8.876-29.394-1.486-8.544 7.389-9.236 20.035-1.547 28.245L203.187 136v83.853l-72.423-41.926-15.838-89.736c-3.247-10.782-14.515-16.504-25.169-12.779-10.656 3.725-16.659 15.486-13.413 26.268l20.805 56.787-66.573-38.54c-9.54-5.523-21.933-1.908-27.68 8.074s-2.673 22.551 6.867 28.074l66.574 38.54-59.449 10.328C5.953 207.515-1.202 218.609.907 229.724c2.11 11.114 12.686 18.038 23.622 15.466l85.422-31.115L192.086 256l-82.136 41.926-85.423-31.115c-10.936-2.572-21.511 4.352-23.622 15.466-2.109 11.113 5.046 22.209 15.981 24.781l59.449 10.328-66.574 38.54C.223 361.449-2.852 374.018 2.896 384s18.14 13.597 27.68 8.074l66.574-38.54-20.805 56.786c-1.735 5.764-.828 11.805 2.02 16.751 2.48 4.307 6.433 7.784 11.392 9.517 10.655 3.725 21.923-1.997 25.169-12.779l15.838-89.736 72.423-41.926V376l-69.585 58.621c-7.69 8.21-6.997 20.855 1.547 28.245 8.544 7.388 21.705 6.723 29.394-1.487l38.644-46.46V492c0 11.046 9.318 20 20.813 20s20.813-8.954 20.813-20v-77.081l38.644 46.46c4.111 4.389 9.782 6.621 15.478 6.621 4.96 0 9.939-1.694 13.916-5.134 8.545-7.39 9.237-20.035 1.548-28.245L244.813 376v-83.853l72.423 41.926 15.838 89.736c3.246 10.782 14.514 16.504 25.168 12.779 10.653-3.726 16.659-15.487 13.412-26.268l-20.805-56.787 66.574 38.54c9.54 5.523 21.933 1.908 27.68-8.074 5.749-9.981 2.675-22.55-6.866-28.072z"], 49540 "square": [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"], 49541 "star": [576, 512, [], "f005", "M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19
49541-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"], 49542 "star-half": [576, 512, [], "f089", "M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z"], 49543 "sticky-note": [448, 512, [], "f249", "M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z"], 49544 "stop-circle": [512, 512, [], "f28d", "M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z"], 49545 "sun": [512, 512, [], "f185", "M220.116 487.936l-20.213-49.425a3.992 3.992 0 0 0-5.808-1.886l-45.404 28.104c-29.466 18.24-66.295-8.519-58.054-42.179l12.699-51.865a3.993 3.993 0 0 0-3.59-4.941l-53.251-3.951c-34.554-2.562-48.632-45.855-22.174-68.247L65.08 259.05a3.992 3.992 0 0 0 0-6.106l-40.76-34.497c-26.45-22.384-12.39-65.682 22.174-68.246l53.251-3.951a3.993 3.993 0 0 0 3.59-4.941L90.637 89.443c-8.239-33.656 28.581-60.42 58.054-42.179l45.403 28.104a3.993 3.993 0 0 0 5.808-1.887l20.213-49.425c13.116-32.071 58.638-32.081 71.758 0l20.212 49.424a3.994 3.994 0 0 0 5.809 1.887l45.403-28.104c29.464-18.236 66.297 8.513 58.054 42.179l-12.699 51.865a3.995 3.995 0 0 0 3.59 4.941l53.251 3.951c34.553 2.563 48.633 45.854 22.175 68.246l-40.76 34.497a3.993 3.993 0 0 0 0 6.107l40.76 34.496c26.511 22.441 12.322 65.689-22.175 68.247l-53.251 3.951a3.993 3.993 0 0 0-3.589 4.942l12.698 51.864c8.241 33.658-28.583 60.421-58.054 42.18l-45.403-28.104a3.994 3.994 0 0 0-5.809 1.887l-20.212 49.424c-13.159 32.178-58.675 31.993-71.757 0zm16.814-64.568l19.064 46.616 19.064-46.615c10.308-25.2 40.778-35.066 63.892-20.759l42.822 26.507-11.976-48.919c-6.475-26.444 12.38-52.339 39.487-54.349l50.226-3.726-38.444-32.536c-20.782-17.591-20.747-49.621.001-67.18l38.442-32.536-50.225-3.727c-27.151-2.015-45.95-27.948-39.488-54.349l11.978-48.919-42.823 26.507c-23.151 14.327-53.603 4.4-63.892-20.76l-19.064-46.615-19.064 46.617c-10.305 25.198-40.778 35.066-63.891 20.76l-42.823-26.508 11.977 48.918c6.474 26.446-12.381 52.338-39.488 54.35l-50.224 3.726 38.443 32.537c20.782 17.588 20.747 49.619 0 67.178L52.48 322.123l50.226 3.726c27.151 2.014 45.95 27.947 39.487 54.349l-11.977 48.919 42.823-26.507c23.188-14.355 53.622-4.352 63.891 20.758zM256 384c-70.58 0-128-57.421-128-128 0-70.58 57.42-128 128-128 70.579 0 128 57.42 128 128 0 70.579-57.421 128-128 128zm0-208c-44.112 0-80 35.888-80 80s35.888 80 80 80 80-35.888 80-80-35.888-80-80-80z"], 49546 "surprise": [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"], 49547 "thumbs-down": [512, 512, [], "f165", "M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z"], 49548 "thumbs-up": [512, 512, [], "f164", "M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z"], 49549 "times-circle": [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2
4954962.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"], 49550 "tired": [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z"], 49551 "trash-alt": [448, 512, [], "f2ed", "M192 188v216c0 6.627-5.373 12-12 12h-24c-6.627 0-12-5.373-12-12V188c0-6.627 5.373-12 12-12h24c6.627 0 12 5.373 12 12zm100-12h-24c-6.627 0-12 5.373-12 12v216c0 6.627 5.373 12 12 12h24c6.627 0 12-5.373 12-12V188c0-6.627-5.373-12-12-12zm132-96c13.255 0 24 10.745 24 24v12c0 6.627-5.373 12-12 12h-20v336c0 26.51-21.49 48-48 48H80c-26.51 0-48-21.49-48-48V128H12c-6.627 0-12-5.373-12-12v-12c0-13.255 10.745-24 24-24h74.411l34.018-56.696A48 48 0 0 1 173.589 0h100.823a48 48 0 0 1 41.16 23.304L349.589 80H424zm-269.611 0h139.223L276.16 50.913A6 6 0 0 0 271.015 48h-94.028a6 6 0 0 0-5.145 2.913L154.389 80zM368 128H80v330a6 6 0 0 0 6 6h276a6 6 0 0 0 6-6V128z"], 49552 "user": [448, 512, [], "f007", "M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z"], 49553 "user-circle": [496, 512, [], "f2bd", "M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z"], 49554 "window-close": [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z"], 49555 "window-maximize": [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z"], 49556 "window-minimize": [512, 512, [], "f2d1", "M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z"], 49557 "window-restore": [512, 512, [], "f2d2", "M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z"] 49558}; 49559 49560bunker(function () { 49561 define('far', icons); 49562}); 49563 49564}()); 49565 49566/*! 49567 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com 49568 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 49569 */ 49570(function () { 49571'use strict'; 49572 49573var _WINDOW = {}; 49574try { 49575 if (typeof window !== 'undefined') _WINDOW = window; 49576 49577} catch (e) {} 49578 49579var _ref = _WINDOW.navigator || {}; 49580var _ref$userAgent = _ref.userAgent; 49581var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent; 49582 49583var WINDOW = _WINDOW; 49584 49585 49586 49587 49588 49589var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); 49590 49591var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; 49592 49593 49594 49595 49596 49597 49598 49599 49600 49601var PRODUCTION = function () { 49602 try { 49603 return "production" === 'production'; 49604 } catch (e) { 49605 return false;
49606 } 49607}(); 49608 49609var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 49610var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); 49611 49612 49613 49614var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) { 49615 return n + 'x'; 49616})).concat(oneToTwenty.map(function (n) { 49617 return 'w-' + n; 49618})); 49619 49620function bunker(fn) { 49621 try { 49622 fn(); 49623 } catch (e) { 49624 if (!PRODUCTION) { 49625 throw e; 49626 } 49627 } 49628} 49629 49630var w = WINDOW || {}; 49631 49632if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; 49633if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; 49634if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; 49635if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; 49636 49637var namespace = w[NAMESPACE_IDENTIFIER]; 49638 49639var _extends = Object.assign || function (target) { 49640 for (var i = 1; i < arguments.length; i++) { 49641 var source = arguments[i]; 49642 49643 for (var key in source) { 49644 if (Object.prototype.hasOwnProperty.call(source, key)) { 49645 target[key] = source[key]; 49646 } 49647 } 49648 } 49649 49650 return target; 49651}; 49652 49653function define(prefix, icons) { 49654 var normalized = Object.keys(icons).reduce(function (acc, iconName) { 49655 var icon = icons[iconName]; 49656 var expanded = !!icon.icon; 49657 49658 if (expanded) { 49659 acc[icon.iconName] = icon.icon; 49660 } else { 49661 acc[iconName] = icon; 49662 } 49663 return acc; 49664 }, {}); 49665 49666 if (typeof namespace.hooks.addPack === 'function') { 49667 namespace.hooks.addPack(prefix, normalized); 49668 } else { 49669 namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized); 49670 } 49671 49672 /** 49673 * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction 49674 * of new styles we needed to differentiate between them. Prefix `fa` is now an alias 49675 * for `fas` so we'll easy the upgrade process for our users by automatically defining 49676 * this as well. 49677 */ 49678 if (prefix === 'fas') { 49679 define('fa', icons); 49680 } 49681} 49682 49683var icons = { 49684 "500px": [448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"], 49685 "accessible-icon": [448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"], 49686 "accusoft": [640, 512, [], "f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2 23.4-2.4 1.3-114.6 47.7-117.8 48.9-10.1 4-17.5 6.8-30.8-9.3m114.7-5.6s-115 50.4-117.5 51.6c-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2-2.3-.3-24.6-4.7-38-7.2m-326-181.3s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3v-1l-51.2-65.8"], 49687 "adn": [496, 512, [], "f170", "M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z"], 49688 "adversal": [512, 512, [], "f36a", "M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z"], 49689 "affiliatetheme": [512, 512, [], "f36b", "M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2
49689-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z"], 49690 "algolia": [448, 512, [], "f36c", "M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z"], 49691 "amazon": [448, 512, [], "f270", "M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"], 49692 "amazon-pay": [611, 512, [], "f42c", "M0 325.2c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7 40.7 20.4 83.2 35.6 127.4 46.3 20.9 5 41.9 9 63.2 11.8 31.5 4.2 63.2 6 95 5.2 17.4-.4 34.8-1.8 52.1-3.8 56.4-6.7 110.9-20.8 163.3-42.8 2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9-2.8 2.8-6.3 5.1-9.6 7.4-30.7 21.1-64.2 36.4-99.6 47.9-24.6 7.9-49.6 13.8-75.1 17.6-17.6 2.6-35.4 4.4-53.2 4.8-.8 0-1.7.2-2.5.3H294c-.8-.1-1.7-.3-2.5-.3-3.6-.2-7.2-.3-10.7-.4-16.9-.7-33.7-2.6-50.4-5.3-27.4-4.5-54.2-11.4-80.4-20.9-54.1-19.6-102.6-48.6-145.6-87-1.8-1.6-3-3.8-4.4-5.7v-2zM158 65c-1.4.2-2.9.4-4.3.6-14 1.7-26.6 6.9-38 15.1-2.4 1.7-4.6 3.5-7.1 5.4-.2-.5-.4-1-.4-1.4-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6H87.8c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3V215c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zm-47.4 41.9c0-1.5.4-2.4 1.7-3.3 13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9-1.2-.9-1.7-1.7-1.7-3.3.1-14.1 0-28.1 0-42.2 0-14 .1-28 0-42.1zM316.3 65c-1 .1-2 .3-2.9.4-9.8.5-19.4 1.7-28.9 4.1-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9 0 .4-.1.9-.2 1.4-.5-.1-.9 0-1.3-.1-10.5-2.5-21.1-4.3-32-4.9-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4.4-.4.9-.7 1.6-1.1.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0 2.7-.1 4.5-1.9 4.8-4.7.1-.9.1-1.9.1-2.8v-106c0-4.3-.2-8.6-.9-12.9-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7c0 1.3-.4 2.2-1.5 3-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8-6.3-2.5-10.4-6.9-12.4-13.3s-2-13-.1-19.4c2.5-8.3 8.4-13 16.4-15.6 8.1-2.6 16.5-3 24.8-2.2 8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3-.1 4.7-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3-6.8-2.3-13.9-3.3-21-3.9-13.1-1.1-26.2-.5-39.2 1.9-14.3 2.7-27.9 7.3-40 15.6-1.4 1-2.8 2.1-3.7 3.5-.7 1.1-.9 2.8-.5 4 .4 1.5 2.1 1.9 3.6 1.8.7 0 1.5 0 2.2-.1 7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9 4.8.3 9.7 1.4 14.4 2.7 5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1-.4 1-.8 2-1 3-.5 2.9 1.2 4.8 4.1 4.1 1.7-.4 3.6-1.3 4.8-2.5 4.4-4.3 8.9-8.6 12.7-13.4 12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM479.1 198.9c-12.9-35.7-25.8-71.5-38.7-107.2-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2
49692-22.9-.1-2.5 0-3.7 2-3.2 4.5.5 2.1 1.1 4.1 1.9 6.1 19.6 48.5 39.3 97.1 59.1 145.5 1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3-5.1 1.4-10.2 1.6-15.4 1.1-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8-.1 3.3-.1 6.6 0 9.9.1 5.5 2 8 7.4 8.9 5.6 1 11.3 1.9 16.9 2 17.1.4 30.7-6.5 39.5-21.4 3.5-5.9 6.7-12.1 9.2-18.4 23.7-59.8 47.1-119.7 70.6-179.6.7-1.8 1.3-3.6 1.6-5.5.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0-3.7 0-6.3 1.6-7.7 5.2-.5 1.4-1.1 2.7-1.6 4.1-11.6 33.3-23.2 66.6-34.8 100-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z"], 49693 "amilia": [448, 512, [], "f36d", "M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm-87.9 327.7c0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5V380c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7"], 49694 "android": [448, 512, [], "f17b", "M89.6 204.5v115.8c0 15.4-12.1 27.7-27.5 27.7-15.3 0-30.1-12.4-30.1-27.7V204.5c0-15.1 14.8-27.5 30.1-27.5 15.1 0 27.5 12.4 27.5 27.5zm10.8 157c0 16.4 13.2 29.6 29.6 29.6h19.9l.3 61.1c0 36.9 55.2 36.6 55.2 0v-61.1h37.2v61.1c0 36.7 55.5 36.8 55.5 0v-61.1h20.2c16.2 0 29.4-13.2 29.4-29.6V182.1H100.4v179.4zm248-189.1H99.3c0-42.8 25.6-80 63.6-99.4l-19.1-35.3c-2.8-4.9 4.3-8 6.7-3.8l19.4 35.6c34.9-15.5 75-14.7 108.3 0L297.5 34c2.5-4.3 9.5-1.1 6.7 3.8L285.1 73c37.7 19.4 63.3 56.6 63.3 99.4zm-170.7-55.5c0-5.7-4.6-10.5-10.5-10.5-5.7 0-10.2 4.8-10.2 10.5s4.6 10.5 10.2 10.5c5.9 0 10.5-4.8 10.5-10.5zm113.4 0c0-5.7-4.6-10.5-10.2-10.5-5.9 0-10.5 4.8-10.5 10.5s4.6 10.5 10.5 10.5c5.6 0 10.2-4.8 10.2-10.5zm94.8 60.1c-15.1 0-27.5 12.1-27.5 27.5v115.8c0 15.4 12.4 27.7 27.5 27.7 15.4 0 30.1-12.4 30.1-27.7V204.5c0-15.4-14.8-27.5-30.1-27.5z"], 49695 "angellist": [448, 512, [], "f209", "M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z"], 49696 "angrycreative": [640, 512, [], "f36e", "M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z"], 49697 "angular": [415, 512, [], "f420", "M169.7 268.1h76.2l-38.1-91.6-38.1 91.6zM207.8 32L0 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7L207.8 32zM338 373.8h-48.6l-26.2-65.4H152.6l-26.2 65.4H77.7L207.8 81.5 338 373.8z"], 49698 "app-store": [512, 512, [], "f36f", "M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z"], 49699 "app-store-ios": [448, 512, [], "f370", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52
49699c11 0 20 9 20 20 0 11.1-9 20-20 20z"], 49700 "apper": [640, 512, [], "f371", "M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z"], 49701 "apple": [376, 512, [], "f179", "M314.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C59.3 141.2 0 184.8 0 273.5c0 26.2 4.8 53.3 14.4 81.2 12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"], 49702 "apple-pay": [640, 512, [], "f415", "M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z"], 49703 "asymmetrik": [576, 512, [], "f372", "M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z"], 49704 "audible": [640, 512, [], "f373", "M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z"], 49705 "autoprefixer": [640, 512, [], "f41c", "M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z"], 49706 "avianex": [512, 512, [], "f374", "M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z"], 49707 "aviato": [640, 512, [], "f421", "M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-
497075.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z"], 49708 "aws": [640, 512, [], "f375", "M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z"], 49709 "bandcamp": [496, 512, [], "f2d5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm48.2 326.1h-181L199.9 178h181l-84.7 156.1z"], 49710 "behance": [576, 512, [], "f1b4", "M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z"], 49711 "behance-square": [448, 512, [], "f1b5", "M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z"], 49712 "bimobject": [448, 512, [], "f378", "M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z"], 49713 "bitbucket": [512, 512, [], "f171", "M23.1 32C14.2 31.9 7 38.9 6.9 47.8c0 .9.1 1.8.2 2.8L74.9 462c1.7 10.4 10.7 18 21.2 18.1h325.1c7.9.1 14.7-5.6 16-13.4l67.8-416c1.4-8.7-4.5-16.9-13.2-18.3-.9-.1-1.8-.2-2.8-.2L23.1 32zm285.3 297.3H204.6l-28.1-14
497136.8h157l-25.1 146.8z"], 49714 "bitcoin": [512, 512, [], "f379", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"], 49715 "bity": [496, 512, [], "f37a", "M78.4 67.2C173.8-22 324.5-24 421.5 71c14.3 14.1-6.4 37.1-22.4 21.5-84.8-82.4-215.8-80.3-298.9-3.2-16.3 15.1-36.5-8.3-21.8-22.1zm98.9 418.6c19.3 5.7 29.3-23.6 7.9-30C73 421.9 9.4 306.1 37.7 194.8c5-19.6-24.9-28.1-30.2-7.1-32.1 127.4 41.1 259.8 169.8 298.1zm148.1-2c121.9-40.2 192.9-166.9 164.4-291-4.5-19.7-34.9-13.8-30 7.9 24.2 107.7-37.1 217.9-143.2 253.4-21.2 7-10.4 36 8.8 29.7zm-62.9-79l.2-71.8c0-8.2-6.6-14.8-14.8-14.8-8.2 0-14.8 6.7-14.8 14.8l-.2 71.8c0 8.2 6.6 14.8 14.8 14.8s14.8-6.6 14.8-14.8zm71-269c2.1 90.9 4.7 131.9-85.5 132.5-92.5-.7-86.9-44.3-85.5-132.5 0-21.8-32.5-19.6-32.5 0v71.6c0 69.3 60.7 90.9 118 90.1 57.3.8 118-20.8 118-90.1v-71.6c0-19.6-32.5-21.8-32.5 0z"], 49716 "black-tie": [448, 512, [], "f27e", "M0 32v448h448V32H0zm316.5 325.2L224 445.9l-92.5-88.7 64.5-184-64.5-86.6h184.9L252 173.2l64.5 184z"], 49717 "blackberry": [512, 512, [], "f37b", "M166 116.9c0 23.4-16.4 49.1-72.5 49.1H23.4l21-88.8h67.8c42.1 0 53.8 23.3 53.8 39.7zm126.2-39.7h-67.8L205.7 166h70.1c53.8 0 70.1-25.7 70.1-49.1.1-16.4-11.6-39.7-53.7-39.7zM88.8 208.1H21L0 296.9h70.1c56.1 0 72.5-23.4 72.5-49.1 0-16.3-11.7-39.7-53.8-39.7zm180.1 0h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1 0-16.3-11.7-39.7-53.7-39.7zm189.3-53.8h-67.8l-18.7 88.8h70.1c53.8 0 70.1-23.4 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7zm-28 137.9h-67.8L343.7 381h70.1c56.1 0 70.1-23.4 70.1-49.1 0-16.3-11.6-39.7-53.7-39.7zM240.8 346H173l-18.7 88.8h70.1c56.1 0 70.1-25.7 70.1-49.1.1-16.3-11.6-39.7-53.7-39.7z"], 49718 "blogger": [448, 512, [], "f37c", "M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z"], 49719 "blogger-b": [448, 512, [], "f37d", "M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z"], 49720 "bluetooth": [448, 512, [], "f293", "M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z"], 49721 "bluetooth-b": [320, 512, [], "f294", "M196.48 260.023l92.626-103.333L143.125 0v206.33l-86.111-86.111-31.406 31.405 108.061 108.399L25.608 368.422l31.406 31.405 86.111-86.111L145.84 512l148.552-148.644-97.912-103.333zm40.86-102.996l-49.977 49.978-.338-100.295 50.315 50.317zM187.363 313.04l49.977 49.978-50.315 50.316.338-100.294z"], 49722 "btc": [384, 512, [], "f15a", "M310.204 242.638c27.73-14.18 45.377-39.39 41.28-81.3-5.358-57.351-52.458-76.573-114.85-81.929V0h-48.528v77.203c-12.605 0-25.525.315-38.444.63V0h-48.528v79.409c-17.842.539-38.622.276-97.37 0v51.678c38.314-.678 58.417-3.14 63.023 21.427v217.429c-2.925 19.492-18.524 16.685-53.255 16.071L3.765 443.68c88.481 0 97.37.315 97.37.315V512h48.528v-67.06c13.234.315 26.154.315 38.444.315V512h48.528v-68.005c81.299-4.412 135.647-24.894 142.895-101.467 5.671-61.446-23.32-88.862-69.326-99.89zM150.608 134.553c27.415 0 113.126-8.507 113.126 48.528 0 54.515-85.71 48.212-113.126 48.212v-96.74zm0 251.776V279.821c32.772 0 133.127-9.138 133.127 53.255-.001 60.186-100.355 53.253-133.127 53.253z"], 49723 "buromobelexperte": [448, 512, [], "f37f", "M0 32v128h128V32H0zm120 120H8V40h112v112zm40-120v128h128V32H160zm120 120H168V40h112v112zm40-120v128h128V32H320zm120 120H328V40h112v112zM0 192v128h128V192H0zm120 120H8V200h112v112zm40-120v128h128V192H160zm120 120H168V200h112v112zm40-120v128h128V192H320zm120 120H328V200h112v112zM0 352v128h128V352H0zm120 120H8V360h112v112zm40-120v128h128V352H160zm120 120H168V360h112v112zm40-120v128h128V352H320z"], 49724 "buysellads": [448, 512, [], "f20d", "M224 150.7l42.9 160.7h-85.8L224 150.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-65.3 325.3l-94.5-298.7H159.8L65.3 405.3H156l111.7-91.6 24.2 9
497241.6h90.8z"], 49725 "cc-amazon-pay": [576, 512, [], "f42d", "M124.7 201.8c.1-11.8 0-23.5 0-35.3v-35.3c0-1.3.4-2 1.4-2.7 11.5-8 24.1-12.1 38.2-11.1 12.5.9 22.7 7 28.1 21.7 3.3 8.9 4.1 18.2 4.1 27.7 0 8.7-.7 17.3-3.4 25.6-5.7 17.8-18.7 24.7-35.7 23.9-11.7-.5-21.9-5-31.4-11.7-.9-.8-1.4-1.6-1.3-2.8zm154.9 14.6c4.6 1.8 9.3 2 14.1 1.5 11.6-1.2 21.9-5.7 31.3-12.5.9-.6 1.3-1.3 1.3-2.5-.1-3.9 0-7.9 0-11.8 0-4-.1-8 0-12 0-1.4-.4-2-1.8-2.2-7-.9-13.9-2.2-20.9-2.9-7-.6-14-.3-20.8 1.9-6.7 2.2-11.7 6.2-13.7 13.1-1.6 5.4-1.6 10.8.1 16.2 1.6 5.5 5.2 9.2 10.4 11.2zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zm-207.5 23.9c.4 1.7.9 3.4 1.6 5.1 16.5 40.6 32.9 81.3 49.5 121.9 1.4 3.5 1.7 6.4.2 9.9-2.8 6.2-4.9 12.6-7.8 18.7-2.6 5.5-6.7 9.5-12.7 11.2-4.2 1.1-8.5 1.3-12.9.9-2.1-.2-4.2-.7-6.3-.8-2.8-.2-4.2 1.1-4.3 4-.1 2.8-.1 5.6 0 8.3.1 4.6 1.6 6.7 6.2 7.5 4.7.8 9.4 1.6 14.2 1.7 14.3.3 25.7-5.4 33.1-17.9 2.9-4.9 5.6-10.1 7.7-15.4 19.8-50.1 39.5-100.3 59.2-150.5.6-1.5 1.1-3 1.3-4.6.4-2.4-.7-3.6-3.1-3.7-5.6-.1-11.1 0-16.7 0-3.1 0-5.3 1.4-6.4 4.3-.4 1.1-.9 2.3-1.3 3.4l-29.1 83.7c-2.1 6.1-4.2 12.1-6.5 18.6-.4-.9-.6-1.4-.8-1.9-10.8-29.9-21.6-59.9-32.4-89.8-1.7-4.7-3.5-9.5-5.3-14.2-.9-2.5-2.7-4-5.4-4-6.4-.1-12.8-.2-19.2-.1-2.2 0-3.3 1.6-2.8 3.7zM242.4 206c1.7 11.7 7.6 20.8 18 26.6 9.9 5.5 20.7 6.2 31.7 4.6 12.7-1.9 23.9-7.3 33.8-15.5.4-.3.8-.6 1.4-1 .5 3.2.9 6.2 1.5 9.2.5 2.6 2.1 4.3 4.5 4.4 4.6.1 9.1.1 13.7 0 2.3-.1 3.8-1.6 4-3.9.1-.8.1-1.6.1-2.3v-88.8c0-3.6-.2-7.2-.7-10.8-1.6-10.8-6.2-19.7-15.9-25.4-5.6-3.3-11.8-5-18.2-5.9-3-.4-6-.7-9.1-1.1h-10c-.8.1-1.6.3-2.5.3-8.2.4-16.3 1.4-24.2 3.5-5.1 1.3-10 3.2-15 4.9-3 1-4.5 3.2-4.4 6.5.1 2.8-.1 5.6 0 8.3.1 4.1 1.8 5.2 5.7 4.1 6.5-1.7 13.1-3.5 19.7-4.8 10.3-1.9 20.7-2.7 31.1-1.2 5.4.8 10.5 2.4 14.1 7 3.1 4 4.2 8.8 4.4 13.7.3 6.9.2 13.9.3 20.8 0 .4-.1.7-.2 1.2-.4 0-.8 0-1.1-.1-8.8-2.1-17.7-3.6-26.8-4.1-9.5-.5-18.9.1-27.9 3.2-10.8 3.8-19.5 10.3-24.6 20.8-4.1 8.3-4.6 17-3.4 25.8zM98.7 106.9v175.3c0 .8 0 1.7.1 2.5.2 2.5 1.7 4.1 4.1 4.2 5.9.1 11.8.1 17.7 0 2.5 0 4-1.7 4.1-4.1.1-.8.1-1.7.1-2.5v-60.7c.9.7 1.4 1.2 1.9 1.6 15 12.5 32.2 16.6 51.1 12.9 17.1-3.4 28.9-13.9 36.7-29.2 5.8-11.6 8.3-24.1 8.7-37 .5-14.3-1-28.4-6.8-41.7-7.1-16.4-18.9-27.3-36.7-30.9-2.7-.6-5.5-.8-8.2-1.2h-7c-1.2.2-2.4.3-3.6.5-11.7 1.4-22.3 5.8-31.8 12.7-2 1.4-3.9 3-5.9 4.5-.1-.5-.3-.8-.4-1.2-.4-2.3-.7-4.6-1.1-6.9-.6-3.9-2.5-5.5-6.4-5.6h-9.7c-5.9-.1-6.9 1-6.9 6.8zM493.6 339c-2.7-.7-5.1 0-7.6 1-43.9 18.4-89.5 30.2-136.8 35.8-14.5 1.7-29.1 2.8-43.7 3.2-26.6.7-53.2-.8-79.6-4.3-17.8-2.4-35.5-5.7-53-9.9-37-8.9-72.7-21.7-106.7-38.8-8.8-4.4-17.4-9.3-26.1-14-3.8-2.1-6.2-1.5-8.2 2.1v1.7c1.2 1.6 2.2 3.4 3.7 4.8 36 32.2 76.6 56.5 122 72.9 21.9 7.9 44.4 13.7 67.3 17.5 14 2.3 28 3.8 42.2 4.5 3 .1 6 .2 9 .4.7 0 1.4.2 2.1.3h17.7c.7-.1 1.4-.3 2.1-.3 14.9-.4 29.8-1.8 44.6-4 21.4-3.2 42.4-8.1 62.9-14.7 29.6-9.6 57.7-22.4 83.4-40.1 2.8-1.9 5.7-3.8 8-6.2 4.3-4.4 2.3-10.4-3.3-11.9zm50.4-27.7c-.8-4.2-4-5.8-7.6-7-5.7-1.9-11.6-2.8-17.6-3.3-11-.9-22-.4-32.8 1.6-12 2.2-23.4 6.1-33.5 13.1-1.2.8-2.4 1.8-3.1 3-.6.9-.7 2.3-.5 3.4.3 1.3 1.7 1.6 3 1.5.6 0 1.2 0 1.8-.1l19.5-2.1c9.6-.9 19.2-1.5 28.8-.8 4.1.3 8.1 1.2 12 2.2 4.3 1.1 6.2 4.4 6.4 8.7.3 6.7-1.2 13.1-2.9 19.5-3.5 12.9-8.3 25.4-13.3 37.8-.3.8-.7 1.7-.8 2.5-.4 2.5 1 4 3.4 3.5 1.4-.3 3-1.1 4-2.1 3.7-3.6 7.5-7.2 10.6-11.2 10.7-13.8 17-29.6 20.7-46.6.7-3 1.2-6.1 1.7-9.1.2-4.7.2-9.6.2-14.5z"], 49726 "cc-amex": [576, 512, [], "f1f3", "M576 255.4c-37.9-.2-44.2-.9-54.5 5v-5c-45.3 0-53.5-1.7-64.9 5.2v-5.2h-78.2v5.1c-11.4-6.5-21.4-5.1-75.7-5.1v5.6c-6.3-3.7-14.5-5.6-24.3-5.6h-58c-3.5 3.8-12.5 13.7-15.7 17.2-12.7-14.1-10.5-11.6-15.5-17.2h-83.1v92.3h82c3.3-3.5 12.9-13.9 16.1-17.4 12.7 14.3 10.3 11.7 15.4 17.4h48.9c0-14.7.1-8.3.1-23 11.5.2 24.3-.2 34.3-6.2 0 13.9-.1 17.1-.1 29.2h39.6c0-18.5.1-7.4.1-25.3 6.2 0 7.7 0 9.4.1.1 1.3 0 0 0 25.2 152.8 0 145.9 1.1 156.7-4.5v4.5c34.8 0 54.8 2.2 67.5-6.1V432c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V228.3h26.6c4.2-10.1 2.2-5.3 6.4-15.3h19.2c4.2 10 2.2 5.2 6.4 15.3h52.9v-11.4c2.2 5 1.1 2.5 5.1 11.4h29.5c2.4-5.5 2.6-5.8 5.1-11.4v11.4h135.5v-25.1c6.4 0 8-.1 9.8.2 0 0-.2 10.9.1 24.8h66.5v-8.9c7.4 5.9 17.4 8.9 29.7 8.9h26.8c4.2-10.1 2.2-5.3 6.4-15.3h19c6.5 15 .2.5 6.6 15.3h52.8v-21.9c11.8 19.7 7.8 12.9 13.2 21.9h41.6v-92h-39.9v18.4c-12.2-20.2-6.3-10.4-11.2-18.4h-43.3v20.6c-6.2-14.6-4.6-10.8-8.8-20.6h-32.4c-.4 0-2.3.2-2.3-.3h-27.6c-12.8 0-23.1 3.2-30.7 9.3v-9.3h-39.9v5.3c-10.8-6.1-20.7-5.1-64.4-5.3-.1 0-11.6-.1-11.6 0h-103c-2.5 6.1-6.8 16.4-12.6 30-2.8-6-11-23.8-13.9-30h-46V157c-7.4-17.4-4.7-11-9-21.1H22.9c-3.4 7.9-13.7 32-23.1 53.9V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48v175.4zm-186.6-80.6c-.3.2-1.4 2.2-1.4 7.6 0 6 .9 7.7 1.1 7.9.2.1 1.1.5 3.4.5l7.3-16.9c-1.1 0-2.1-.1-3.1-.1-5.6 0-7 .7-7.3 1zm-19.9 130.9c9.2 3.3 11 9.5 11 18.4l-.1 13.8h-16.6l.1-11.5c0-11.8-3.8-13.8-14.8-13.8h-17.6l-.1 25.3h-16.6l.1-69.3h39.4c13 0 27.1 2.3 27.1 18.7-.1 7.6-4.2 15.3-11.9 18.4zm-6.3-15.4c0-6.4-5.6-7.4-10.7-7.4h-21v15.6h20.7c5.6 0 11-1.3 11-8.2zm181.7-7.1H575v-14.6h-32.9c-12.8 0-23.8 6.6-23.8 20.7 0 33 42.7 12.8 42.7 27.4 0 5.1-4.3 6.4-8.4 6.4h-32l-.1 14.8h32c8.4 0 17.6-1.8 22.5-8.9v-25.8c-10.5-13.8-39.3-1.3-39.3-13.5 0-5.8 4.6-6.5 9.2-6.5zm-99.2-.3v-14.3h-55.2l-.1 69.3h55.2l.1-14.3-38.6-.3v-13.8H445v-14.1h-37.8v-12.5h38.5zm42.2 40.1h-32.2l-.1 14.8h32.2c14.8 0 26.2-5.6 26.2-22 0-33.2-42.9-11.2-42.9-26.3 0-5.6 4.9-6.4 9.2-6.4h30.4v-14.6h-33.2c-12.8 0-23.5 6.6-23.5 20.7 0 33 42.7 12.5 42.7 27.4-.1 5.4-4.7 6.4-8.8 6.4zm-78.1-158.7c-17.4-.3-33.2-4.1-33.2 19.7 0 11.8 2.8 19.9 16.1 19.9h7.4l23.5-54.5h24.8l27.9 65.4v-65.4h25.3l29.1 48.1v-48.1h16.9v69H524l-31.2-51.9v51.9h-33.7l-6.6-15.3h-34.3l-6.4 15.3h-19.2c-22.8 0-33-11.8-33-34 0-23.3 10.5-35.3 34-35.3h16.1v15.2zm14.3 24.5h22.8l-11.2-27.6-11.6 27.6zm-72.6-39.6h-16.9v69.3h16.9v-69.3zm-38.1 37.3c9.5 3.3 11 9.2 11 18.4v13.5h-16.6c-.3-14.8 3.6-25.1-14.8-25.1h-18v25.1h-16.4v-69.3l39.1.3c13.3 0 27.4 2 27.4 18.4.1 8-4.3 15.7-11.7 18.7zm-6.7-1
497265.3c0-6.4-5.6-7.4-10.7-7.4h-21v15.3h20.7c5.7 0 11-1.3 11-7.9zm-59.5-7.4v-14.6h-55.5v69.3h55.5v-14.3h-38.9v-13.8h37.8v-14.1h-37.8v-12.5h38.9zm-84.6 54.7v-54.2l-24 54.2H124l-24-54.2v54.2H66.2l-6.4-15.3H25.3l-6.4 15.3H1l29.7-69.3h24.5l28.1 65.7v-65.7h27.1l21.7 47 19.7-47h27.6v69.3h-16.8zM53.9 188.8l-11.5-27.6-11.2 27.6h22.7zm253 102.5c0 27.9-30.4 23.3-49.3 23.3l-.1 23.3h-32.2l-20.4-23-21.3 23h-65.4l.1-69.3h66.5l20.5 22.8 21-22.8H279c15.6 0 27.9 5.4 27.9 22.7zm-112.7 11.8l-17.9-20.2h-41.7v12.5h36.3v14.1h-36.3v13.8h40.6l19-20.2zM241 276l-25.3 27.4 25.3 28.1V276zm48.3 15.3c0-6.1-4.6-8.4-10.2-8.4h-21.5v17.6h21.2c5.9 0 10.5-2.8 10.5-9.2z"], 49727 "cc-apple-pay": [576, 512, [], "f416", "M302.2 218.4c0 17.2-10.5 27.1-29 27.1h-24.3v-54.2h24.4c18.4 0 28.9 9.8 28.9 27.1zm47.5 62.6c0 8.3 7.2 13.7 18.5 13.7 14.4 0 25.2-9.1 25.2-21.9v-7.7l-23.5 1.5c-13.3.9-20.2 5.8-20.2 14.4zM576 79v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM127.8 197.2c8.4.7 16.8-4.2 22.1-10.4 5.2-6.4 8.6-15 7.7-23.7-7.4.3-16.6 4.9-21.9 11.3-4.8 5.5-8.9 14.4-7.9 22.8zm60.6 74.5c-.2-.2-19.6-7.6-19.8-30-.2-18.7 15.3-27.7 16-28.2-8.8-13-22.4-14.4-27.1-14.7-12.2-.7-22.6 6.9-28.4 6.9-5.9 0-14.7-6.6-24.3-6.4-12.5.2-24.2 7.3-30.5 18.6-13.1 22.6-3.4 56 9.3 74.4 6.2 9.1 13.7 19.1 23.5 18.7 9.3-.4 13-6 24.2-6 11.3 0 14.5 6 24.3 5.9 10.2-.2 16.5-9.1 22.8-18.2 6.9-10.4 9.8-20.4 10-21zm135.4-53.4c0-26.6-18.5-44.8-44.9-44.8h-51.2v136.4h21.2v-46.6h29.3c26.8 0 45.6-18.4 45.6-45zm90 23.7c0-19.7-15.8-32.4-40-32.4-22.5 0-39.1 12.9-39.7 30.5h19.1c1.6-8.4 9.4-13.9 20-13.9 13 0 20.2 6 20.2 17.2v7.5l-26.4 1.6c-24.6 1.5-37.9 11.6-37.9 29.1 0 17.7 13.7 29.4 33.4 29.4 13.3 0 25.6-6.7 31.2-17.4h.4V310h19.6v-68zM516 210.9h-21.5l-24.9 80.6h-.4l-24.9-80.6H422l35.9 99.3-1.9 6c-3.2 10.2-8.5 14.2-17.9 14.2-1.7 0-4.9-.2-6.2-.3v16.4c1.2.4 6.5.5 8.1.5 20.7 0 30.4-7.9 38.9-31.8L516 210.9z"], 49728 "cc-diners-club": [576, 512, [], "f24c", "M239.7 79.9c-96.9 0-175.8 78.6-175.8 175.8 0 96.9 78.9 175.8 175.8 175.8 97.2 0 175.8-78.9 175.8-175.8 0-97.2-78.6-175.8-175.8-175.8zm-39.9 279.6c-41.7-15.9-71.4-56.4-71.4-103.8s29.7-87.9 71.4-104.1v207.9zm79.8.3V151.6c41.7 16.2 71.4 56.7 71.4 104.1s-29.7 87.9-71.4 104.1zM528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM329.7 448h-90.3c-106.2 0-193.8-85.5-193.8-190.2C45.6 143.2 133.2 64 239.4 64h90.3c105 0 200.7 79.2 200.7 193.8 0 104.7-95.7 190.2-200.7 190.2z"], 49729 "cc-discover": [576, 512, [], "f1f2", "M83 212.1c0 7.9-3.2 15.5-8.9 20.7-4.9 4.4-11.6 6.4-21.9 6.4H48V185h4.2c10.3 0 16.7 1.7 21.9 6.6 5.7 5 8.9 12.6 8.9 20.5zM504.8 184h-4.9v24.9h4.7c10.3 0 15.8-4.4 15.8-12.8 0-7.9-5.5-12.1-15.6-12.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM428 253h45.3v-13.8H444V217h28.3v-13.8H444V185h29.3v-14H428v82zm-86.2-82l35 84.2h8.6l35.5-84.2h-17.5l-22.2 55.2-21.9-55.2h-17.5zm-83 41.6c0 24.6 19.9 44.6 44.6 44.6 24.6 0 44.6-19.9 44.6-44.6 0-24.6-19.9-44.6-44.6-44.6-24.6 0-44.6 19.9-44.6 44.6zm-68-.5c0 32.5 33.6 52.5 63.3 38.2v-19c-19.3 19.3-46.8 5.8-46.8-19.2 0-23.7 26.7-39.1 46.8-19v-19c-30.2-15-63.3 6.8-63.3 38zm-33.9 28.3c-7.6 0-13.8-3.7-17.5-10.8l-10.3 9.9c17.8 26.1 56.6 18.2 56.6-11.3 0-13.1-5.4-19-23.6-25.6-9.6-3.4-12.3-5.9-12.3-10.3 0-8.7 14.5-14.1 24.9-2.5l8.4-10.8c-19.1-17.1-49.7-8.9-49.7 14.3 0 11.3 5.2 17.2 20.2 22.7 25.7 9.1 14.7 24.4 3.3 24.4zm-57.4-28.3c0-24.1-18-41.1-44.1-41.1H32v82h23.4c30.9 0 44.1-22.4 44.1-40.9zm23.4-41.1h-16v82h16v-82zM544 288c-33.3 20.8-226.4 124.4-416 160h401c8.2 0 15-6.8 15-15V288zm0-35l-25.9-34.5c12.1-2.5 18.7-10.6 18.7-23.2 0-28.5-30.3-24.4-52.9-24.4v82h16v-32.8h2.2l22.2 32.8H544z"], 49730 "cc-jcb": [576, 512, [], "f24b", "M431.5 244.3V212c41.2 0 38.5.2 38.5.2 7.3 1.3 13.3 7.3 13.3 16 0 8.8-6 14.5-13.3 15.8-1.2.4-3.3.3-38.5.3zm42.8 20.2c-2.8-.7-3.3-.5-42.8-.5v35c39.6 0 40 .2 42.8-.5 7.5-1.5 13.5-8 13.5-17 0-8.7-6-15.5-13.5-17zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM182 192.3h-57c0 67.1 10.7 109.7-35.8 109.7-19.5 0-38.8-5.7-57.2-14.8v28c30 8.3 68 8.3 68 8.3 97.9 0 82-47.7 82-131.2zm178.5 4.5c-63.4-16-165-14.9-165 59.3 0 77.1 108.2 73.6 165 59.2V287C312.9 311.7 253 309 253 256s59.8-55.6 107.5-31.2v-28zM544 286.5c0-18.5-16.5-30.5-38-32v-.8c19.5-2.7 30.3-15.5 30.3-30.2 0-19-15.7-30-37-31 0 0 6.3-.3-120.3-.3v127.5h122.7c24.3.1 42.3-12.9 42.3-33.2z"], 49731 "cc-mastercard": [576, 512, [], "f1f1", "M482.9 410.3c0 6.8-4.6 11.7-11.2 11.7-6.8 0-11.2-5.2-11.2-11.7 0-6.5 4.4-11.7 11.2-11.7 6.6 0 11.2 5.2 11.2 11.7zm-310.8-11.7c-7.1 0-11.2 5.2-11.2 11.7 0 6.5 4.1 11.7 11.2 11.7 6.5 0 10.9-4.9 10.9-11.7-.1-6.5-4.4-11.7-10.9-11.7zm117.5-.3c-5.4 0-8.7 3.5-9.5 8.7h19.1c-.9-5.7-4.4-8.7-9.6-8.7zm107.8.3c-6.8 0-10.9 5.2-10.9 11.7 0 6.5 4.1 11.7 10.9 11.7 6.8 0 11.2-4.9 11.2-11.7 0-6.5-4.4-11.7-11.2-11.7zm105.9 26.1c0 .3.3.5.3 1.1 0 .3-.3.5-.3 1.1-.3.3-.3.5-.5.8-.3.3-.5.5-1.1.5-.3.3-.5.3-1.1.3-.3 0-.5 0-1.1-.3-.3 0-.5-.3-.8-.5-.3-.3-.5-.5-.5-.8-.3-.5-.3-.8-.3-1.1 0-.5 0-.8.3-1.1 0-.5.3-.8.5-1.1.3-.3.5-.3.8-.5.5-.3.8-.3 1.1-.3.5 0 .8 0 1.1.3.5.3.8.3 1.1.5s.2.6.5 1.1zm-2.2 1.4c.5 0 .5-.3.8-.3.3-.3.3-.5.3-.8 0-.3 0-.5-.3-.8-.3 0-.5-.3-1.1-.3h-1.6v3.5h.8V426h.3l1.1 1.4h.8l-1.1-1.3zM576 81v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V81c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM64 220.6c0 76.5 62.1 138.5 138.5 138.5 27.2 0 53.9-8.2 76.5-23.1-72.9-59.3-72.4-171.2 0-230.5-22.6-15-49.3-23.1-76.5-23.1-76.4-.1-138.5 62-138.5 138.2zm224 108.8c70.5-55 70.2-162.2 0-217.5-70.2 55.3-70.5 162.6 0 217.5zm-142.3 76.3c0-8.7-5.7-14.4-14.7-14.7-4.6 0-9.5 1.4-12.8 6.5-2.4-4.1-6.5-6.5-12.2-6.5-3.8 0-7.6 1.4-10.6 5.4V392h-8.2v36.7h8.2c0-18.9-2.5-30.2 9-30.2 10.2 0 8.2 10.2 8.2 30.2h7.9c0-18.3-2.5-30.2 9-30.2 10.2 0 8.2 10 8.2 30.2h8.2v-23zm44.9-13.7h-7.9v4.4c-2.7-3.3-6.5-5.4-11.7-5.4-10.3 0-18.2 8.2-18.2 19.3 0 11.2 7.9 19.3 18.2 19.3 5.2 0 9-1.9 11.7-5.4v4.6h7.9V392zm40.5 25.6c0-15-22.9-8.2-22.9-15.2 0-5.7 11.9-4.8 18.5-1.1l3.3-6.5c-9.4-6.1-30.2-6-30.2 8.2 0 14.3 22.9 8.3 22.9 15 0 6.3-13.5 5.8-20.7.8l-3.5 6.3c11.2 7.6 32.6 6 32.6-7.5zm35.4 9.3l-2.2-6.8c-3.8 2.1-12.2 4.4-12.2-4.1v-16.6h13.1V392h-13.1v-11.2h-8.2V392h-7.6v7.3h7.6V416c0 17.6 17.3 14.4 22.6 10.9zm13.3-13.4h27.5c0-16.2-7.4-22.6-17.4-22.6-10.6 0-18.2 7.9-18.2 19.3 0 20.5 22.6 23.9 33.8 14.2l-3.8-6c-7.8 6.4-19.6 5.8-21.9-4.9zm59.1-21.5c-4.6-2-11.
497316-1.8-15.2 4.4V392h-8.2v36.7h8.2V408c0-11.6 9.5-10.1 12.8-8.4l2.4-7.6zm10.6 18.3c0-11.4 11.6-15.1 20.7-8.4l3.8-6.5c-11.6-9.1-32.7-4.1-32.7 15 0 19.8 22.4 23.8 32.7 15l-3.8-6.5c-9.2 6.5-20.7 2.6-20.7-8.6zm66.7-18.3H408v4.4c-8.3-11-29.9-4.8-29.9 13.9 0 19.2 22.4 24.7 29.9 13.9v4.6h8.2V392zm33.7 0c-2.4-1.2-11-2.9-15.2 4.4V392h-7.9v36.7h7.9V408c0-11 9-10.3 12.8-8.4l2.4-7.6zm40.3-14.9h-7.9v19.3c-8.2-10.9-29.9-5.1-29.9 13.9 0 19.4 22.5 24.6 29.9 13.9v4.6h7.9v-51.7zm7.6-75.1v4.6h.8V302h1.9v-.8h-4.6v.8h1.9zm6.6 123.8c0-.5 0-1.1-.3-1.6-.3-.3-.5-.8-.8-1.1-.3-.3-.8-.5-1.1-.8-.5 0-1.1-.3-1.6-.3-.3 0-.8.3-1.4.3-.5.3-.8.5-1.1.8-.5.3-.8.8-.8 1.1-.3.5-.3 1.1-.3 1.6 0 .3 0 .8.3 1.4 0 .3.3.8.8 1.1.3.3.5.5 1.1.8.5.3 1.1.3 1.4.3.5 0 1.1 0 1.6-.3.3-.3.8-.5 1.1-.8.3-.3.5-.8.8-1.1.3-.6.3-1.1.3-1.4zm3.2-124.7h-1.4l-1.6 3.5-1.6-3.5h-1.4v5.4h.8v-4.1l1.6 3.5h1.1l1.4-3.5v4.1h1.1v-5.4zm4.4-80.5c0-76.2-62.1-138.3-138.5-138.3-27.2 0-53.9 8.2-76.5 23.1 72.1 59.3 73.2 171.5 0 230.5 22.6 15 49.5 23.1 76.5 23.1 76.4.1 138.5-61.9 138.5-138.4z"], 49732 "cc-paypal": [576, 512, [], "f1f4", "M186.3 258.2c0 12.2-9.7 21.5-22 21.5-9.2 0-16-5.2-16-15 0-12.2 9.5-22 21.7-22 9.3 0 16.3 5.7 16.3 15.5zM80.5 209.7h-4.7c-1.5 0-3 1-3.2 2.7l-4.3 26.7 8.2-.3c11 0 19.5-1.5 21.5-14.2 2.3-13.4-6.2-14.9-17.5-14.9zm284 0H360c-1.8 0-3 1-3.2 2.7l-4.2 26.7 8-.3c13 0 22-3 22-18-.1-10.6-9.6-11.1-18.1-11.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM128.3 215.4c0-21-16.2-28-34.7-28h-40c-2.5 0-5 2-5.2 4.7L32 294.2c-.3 2 1.2 4 3.2 4h19c2.7 0 5.2-2.9 5.5-5.7l4.5-26.6c1-7.2 13.2-4.7 18-4.7 28.6 0 46.1-17 46.1-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.2 8.2-5.8-8.5-14.2-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9 0 20.2-4.9 26.5-11.9-.5 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H200c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm40.5 97.9l63.7-92.6c.5-.5.5-1 .5-1.7 0-1.7-1.5-3.5-3.2-3.5h-19.2c-1.7 0-3.5 1-4.5 2.5l-26.5 39-11-37.5c-.8-2.2-3-4-5.5-4h-18.7c-1.7 0-3.2 1.8-3.2 3.5 0 1.2 19.5 56.8 21.2 62.1-2.7 3.8-20.5 28.6-20.5 31.6 0 1.8 1.5 3.2 3.2 3.2h19.2c1.8-.1 3.5-1.1 4.5-2.6zm159.3-106.7c0-21-16.2-28-34.7-28h-39.7c-2.7 0-5.2 2-5.5 4.7l-16.2 102c-.2 2 1.3 4 3.2 4h20.5c2 0 3.5-1.5 4-3.2l4.5-29c1-7.2 13.2-4.7 18-4.7 28.4 0 45.9-17 45.9-45.8zm84.2 8.8h-19c-3.8 0-4 5.5-4.3 8.2-5.5-8.5-14-10-23.7-10-24.5 0-43.2 21.5-43.2 45.2 0 19.5 12.2 32.2 31.7 32.2 9.3 0 20.5-4.9 26.5-11.9-.3 1.5-1 4.7-1 6.2 0 2.3 1 4 3.2 4H484c2.7 0 5-2.9 5.5-5.7l10.2-64.3c.3-1.9-1.2-3.9-3.2-3.9zm47.5-33.3c0-2-1.5-3.5-3.2-3.5h-18.5c-1.5 0-3 1.2-3.2 2.7l-16.2 104-.3.5c0 1.8 1.5 3.5 3.5 3.5h16.5c2.5 0 5-2.9 5.2-5.7L544 191.2v-.3zm-90 51.8c-12.2 0-21.7 9.7-21.7 22 0 9.7 7 15 16.2 15 12 0 21.7-9.2 21.7-21.5.1-9.8-6.9-15.5-16.2-15.5z"], 49733 "cc-stripe": [576, 512, [], "f1f5", "M396.9 256.5c0 19.1-8.8 33.4-21.9 33.4-8.3 0-13.3-3-16.8-6.7l-.2-52.8c3.7-4.1 8.8-7 17-7 12.9-.1 21.9 14.5 21.9 33.1zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM122.2 281.1c0-42.3-54.3-34.7-54.3-50.7 0-5.5 4.6-7.7 12.1-7.7 10.8 0 24.5 3.3 35.3 9.1v-33.4c-11.8-4.7-23.5-6.5-35.3-6.5-28.8 0-48 15-48 40.2 0 39.3 54 32.9 54 49.9 0 6.6-5.7 8.7-13.6 8.7-11.8 0-26.9-4.9-38.9-11.3v33.9c13.2 5.7 26.6 8.1 38.8 8.1 29.6-.2 49.9-14.7 49.9-40.3zm68.9-86.9h-27v-30.8l-34.7 7.4-.2 113.9c0 21 15.8 36.5 36.9 36.5 11.6 0 20.2-2.1 24.9-4.7v-28.9c-4.5 1.8-27 8.3-27-12.6v-50.5h27v-30.3zm73.8 0c-4.7-1.7-21.3-4.8-29.6 10.5l-2.2-10.5h-30.7v124.5h35.5v-84.4c8.4-11 22.6-8.9 27.1-7.4v-32.7zm44.2 0h-35.7v124.5h35.7V194.2zm0-47.3l-35.7 7.6v28.9l35.7-7.6v-28.9zm122.7 108.8c0-41.3-23.5-63.8-48.4-63.8-13.9 0-22.9 6.6-27.8 11.1l-1.8-8.8h-31.3V360l35.5-7.5.1-40.2c5.1 3.7 12.7 9 25.1 9 25.4-.1 48.6-20.5 48.6-65.6zm112.2 1.2c0-36.4-17.6-65.1-51.3-65.1-33.8 0-54.3 28.7-54.3 64.9 0 42.8 24.2 64.5 58.8 64.5 17 0 29.7-3.9 39.4-9.2v-28.6c-9.7 4.9-20.8 7.9-34.9 7.9-13.8 0-26-4.9-27.6-21.5h69.5c.1-2 .4-9.4.4-12.9zm-51.6-36.1c-8.9 0-18.7 6.7-18.7 22.7h36.7c0-16-9.3-22.7-18-22.7z"], 49734 "cc-visa": [576, 512, [], "f1f0", "M470.1 231.3s7.6 37.2 9.3 45H446c3.3-8.9 16-43.5 16-43.5-.2.3 3.3-9.1 5.3-14.9l2.8 13.4zM576 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48zM152.5 331.2L215.7 176h-42.5l-39.3 106-4.3-21.5-14-71.4c-2.3-9.9-9.4-12.7-18.2-13.1H32.7l-.7 3.1c15.8 4 29.9 9.8 42.2 17.1l35.8 135h42.5zm94.4.2L272.1 176h-40.2l-25.1 155.4h40.1zm139.9-50.8c.2-17.7-10.6-31.2-33.7-42.3-14.1-7.1-22.7-11.9-22.7-19.2.2-6.6 7.3-13.4 23.1-13.4 13.1-.3 22.7 2.8 29.9 5.9l3.6 1.7 5.5-33.6c-7.9-3.1-20.5-6.6-36-6.6-39.7 0-67.6 21.2-67.8 51.4-.3 22.3 20 34.7 35.2 42.2 15.5 7.6 20.8 12.6 20.8 19.3-.2 10.4-12.6 15.2-24.1 15.2-16 0-24.6-2.5-37.7-8.3l-5.3-2.5-5.6 34.9c9.4 4.3 26.8 8.1 44.8 8.3 42.2.1 69.7-20.8 70-53zM528 331.4L495.6 176h-31.1c-9.6 0-16.9 2.8-21 12.9l-59.7 142.5H426s6.9-19.2 8.4-23.3H486c1.2 5.5 4.8 23.3 4.8 23.3H528z"], 49735 "centercode": [512, 512, [], "f380", "M329.2 268.6c-3.8 35.2-35.4 60.6-70.6 56.8-35.2-3.8-60.6-35.4-56.8-70.6 3.8-35.2 35.4-60.6 70.6-56.8 35.1 3.8 60.6 35.4 56.8 70.6zm-85.8 235.1C96.7 496-8.2 365.5 10.1 224.3c11.2-86.6 65.8-156.9 139.1-192 161-77.1 349.7 37.4 354.7 216.6 4.1 147-118.4 262.2-260.5 254.8zm179.9-180c27.9-118-160.5-205.9-237.2-234.2-57.5 56.3-69.1 188.6-33.8 344.4 68.8 15.8 169.1-26.4 271-110.2z"], 49736 "chrome": [496, 512, [], "f268", "M131.5 217.5L55.1 100.1c47.6-59.2 119-91.8 192-92.1 42.3-.3 85.5 10.5 124.8 33.2 43.4 25.2 76.4 61.4 97.4 103L264 133.4c-58.1-3.4-113.4 29.3-132.5 84.1zm32.9 38.5c0 46.2 37.4 83.6 83.6 83.6s83.6-37.4 83.6-83.6-37.4-83.6-83.6-83.6-83.6 37.3-83.6 83.6zm314.9-89.2L339.6 174c37.9 44.3 38.5 108.2 6.6 157.2L234.1 503.6c46.5 2.5 94.4-7.7 137.8-32.9 107.4-62 150.9-192 107.4-303.9zM133.7 303.6L40.4 120.1C14.9 159.1 0 205.9 0 256c0 124 90.8 226.7 209.5 244.9l63.7-124.8c-57.6 10.8-113.2-20.8-139.5-72.5z"], 49737 "cloudscale": [448, 512, [], "f383", "M318.1 154l-9.4 7.6c-22.5-19.3-51.5-33.6-83.3-33.6C153.8 128 96 188.8 96 260.3c0 6.6.4 13.1 1.4 19.4-2-56 41.8-97.4 92.6-97.4 24.2 0 46.2 9.4 62.6 24.7l-25.2 20.4c-8.3-.9-16.8 1.8-23.1 8.1-11.1 11-11.1 28.9 0 40 11.1 11 28.9 11 40 0 6.3-6.3 9-14.9 8.1-23.1l75.2
49737-88.8c6.3-6.5-3.3-15.9-9.5-9.6zm-83.8 111.5c-5.6 5.5-14.6 5.5-20.2 0-5.6-5.6-5.6-14.6 0-20.2s14.6-5.6 20.2 0 5.6 14.7 0 20.2zM224 32C100.5 32 0 132.5 0 256s100.5 224 224 224 224-100.5 224-224S347.5 32 224 32zm0 384c-88.2 0-160-71.8-160-160S135.8 96 224 96s160 71.8 160 160-71.8 160-160 160z"], 49738 "cloudsmith": [332, 512, [], "f384", "M332.5 419.9c0 46.4-37.6 84.1-84 84.1s-84-37.7-84-84.1 37.6-84 84-84 84 37.6 84 84zm-84-243.9c46.4 0 80-37.6 80-84s-33.6-84-80-84-88 37.6-88 84-29.6 76-76 76-84 41.6-84 88 37.6 80 84 80 84-33.6 84-80 33.6-80 80-80z"], 49739 "cloudversify": [616, 512, [], "f385", "M148.6 304c8.2 68.5 67.4 115.5 146 111.3 51.2 43.3 136.8 45.8 186.4-5.6 69.2 1.1 118.5-44.6 131.5-99.5 14.8-62.5-18.2-132.5-92.1-155.1-33-88.1-131.4-101.5-186.5-85-57.3 17.3-84.3 53.2-99.3 109.7-7.8 2.7-26.5 8.9-45 24.1 11.7 0 15.2 8.9 15.2 19.5v20.4c0 10.7-8.7 19.5-19.5 19.5h-20.2c-10.7 0-19.5-6-19.5-16.7V240H98.8C95 240 88 244.3 88 251.9v40.4c0 6.4 5.3 11.8 11.7 11.8h48.9zm227.4 8c-10.7 46.3 21.7 72.4 55.3 86.8C324.1 432.6 259.7 348 296 288c-33.2 21.6-33.7 71.2-29.2 92.9-17.9-12.4-53.8-32.4-57.4-79.8-3-39.9 21.5-75.7 57-93.9C297 191.4 369.9 198.7 400 248c-14.1-48-53.8-70.1-101.8-74.8 30.9-30.7 64.4-50.3 114.2-43.7 69.8 9.3 133.2 82.8 67.7 150.5 35-16.3 48.7-54.4 47.5-76.9l10.5 19.6c11.8 22 15.2 47.6 9.4 72-9.2 39-40.6 68.8-79.7 76.5-32.1 6.3-83.1-5.1-91.8-59.2zM128 208H88.2c-8.9 0-16.2-7.3-16.2-16.2v-39.6c0-8.9 7.3-16.2 16.2-16.2H128c8.9 0 16.2 7.3 16.2 16.2v39.6c0 8.9-7.3 16.2-16.2 16.2zM10.1 168C4.5 168 0 163.5 0 157.9v-27.8c0-5.6 4.5-10.1 10.1-10.1h27.7c5.5 0 10.1 4.5 10.1 10.1v27.8c0 5.6-4.5 10.1-10.1 10.1H10.1zM168 142.7v-21.4c0-5.1 4.2-9.3 9.3-9.3h21.4c5.1 0 9.3 4.2 9.3 9.3v21.4c0 5.1-4.2 9.3-9.3 9.3h-21.4c-5.1 0-9.3-4.2-9.3-9.3zM56 235.5v25c0 6.3-5.1 11.5-11.4 11.5H19.4C13.1 272 8 266.8 8 260.5v-25c0-6.3 5.1-11.5 11.4-11.5h25.1c6.4 0 11.5 5.2 11.5 11.5z"], 49740 "codepen": [512, 512, [], "f1cb", "M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z"], 49741 "codiepie": [472, 512, [], "f284", "M422.5 202.9c30.7 0 33.5 53.1-.3 53.1h-10.8v44.3h-26.6v-97.4h37.7zM472 352.6C429.9 444.5 350.4 504 248 504 111 504 0 393 0 256S111 8 248 8c97.4 0 172.8 53.7 218.2 138.4l-186 108.8L472 352.6zm-38.5 12.5l-60.3-30.7c-27.1 44.3-70.4 71.4-122.4 71.4-82.5 0-149.2-66.7-149.2-148.9 0-82.5 66.7-149.2 149.2-149.2 48.4 0 88.9 23.5 116.9 63.4l59.5-34.6c-40.7-62.6-104.7-100-179.2-100-121.2 0-219.5 98.3-219.5 219.5S126.8 475.5 248 475.5c78.6 0 146.5-42.1 185.5-110.4z"], 49742 "connectdevelop": [576, 512, [], "f20e", "M550.5 241l-50.089-86.786c1.071-2.142 1.875-4.553 1.875-7.232 0-8.036-6.696-14.733-14.732-15.001l-55.447-95.893c.536-1.607 1.071-3.214 1.071-4.821 0-8.571-6.964-15.268-15.268-15.268-4.821 0-8.839 2.143-11.786 5.625H299.518C296.839 18.143 292.821 16 288 16s-8.839 2.143-11.518 5.625H170.411C167.464 18.143 163.447 16 158.625 16c-8.303 0-15.268 6.696-15.268 15.268 0 1.607.536 3.482 1.072 4.821l-55.983 97.233c-5.356 2.41-9.107 7.5-9.107 13.661 0 .535.268 1.071.268 1.607l-53.304 92.143c-7.232 1.339-12.59 7.5-12.59 15 0 7.232 5.089 13.393 12.054 15l55.179 95.358c-.536 1.607-.804 2.946-.804 4.821 0 7.232 5.089 13.393 12.054 14.732l51.697 89.732c-.536 1.607-1.071 3.482-1.071 5.357 0 8.571 6.964 15.268 15.268 15.268 4.821 0 8.839-2.143 11.518-5.357h106.875C279.161 493.857 283.447 496 288 496s8.839-2.143 11.518-5.357h107.143c2.678 2.946 6.696 4.821 10.982 4.821 8.571 0 15.268-6.964 15.268-15.268 0-1.607-.267-2.946-.803-4.285l51.697-90.268c6.964-1.339 12.054-7.5 12.054-14.732 0-1.607-.268-3.214-.804-4.821l54.911-95.358c6.964-1.339 12.322-7.5 12.322-15-.002-7.232-5.092-13.393-11.788-14.732zM153.535 450.732l-43.66-75.803h43.66v75.803zm0-83.839h-43.66c-.268-1.071-.804-2.142-1.339-3.214l44.999-47.41v50.624zm0-62.411l-50.357 53.304c-1.339-.536-2.679-1.34-4.018-1.607L43.447 259.75c.535-1.339.535-2.679.535-4.018s0-2.41-.268-3.482l51.965-90c2.679-.268 5.357-1.072 7.768-2.679l50.089 51.965v92.946zm0-102.322l-45.803-47.41c1.339-2.143 2.143-4.821 2.143-7.767 0-.268-.268-.804-.268-1.072l43.928-15.804v72.053zm0-80.625l-43.66 15.804 43.66-75.536v59.732zm326.519 39.108l.804 1.339L445.5 329.125l-63.75-67.232 98.036-101.518.268.268zM291.75 355.107l11.518 11.786H280.5l11.25-11.786zm-.268-11.25l-83.303-85.446 79.553-84.375 83.036 87.589-79.286 82.232zm5.357 5.893l79.286-82.232 67.5 71.25-5.892 28.125H313.714l-16.875-17.143zM410.411 44.393c1.
49742071.536 2.142 1.072 3.482 1.34l57.857 100.714v.536c0 2.946.803 5.624 2.143 7.767L376.393 256l-83.035-87.589L410.411 44.393zm-9.107-2.143L287.732 162.518l-57.054-60.268 166.339-60h4.287zm-123.483 0c2.678 2.678 6.16 4.285 10.179 4.285s7.5-1.607 10.179-4.285h75L224.786 95.821 173.893 42.25h103.928zm-116.249 5.625l1.071-2.142a33.834 33.834 0 0 0 2.679-.804l51.161 53.84-54.911 19.821V47.875zm0 79.286l60.803-21.964 59.732 63.214-79.553 84.107-40.982-42.053v-83.304zm0 92.678L198 257.607l-36.428 38.304v-76.072zm0 87.858l42.053-44.464 82.768 85.982-17.143 17.678H161.572v-59.196zm6.964 162.053c-1.607-1.607-3.482-2.678-5.893-3.482l-1.071-1.607v-89.732h99.91l-91.607 94.821h-1.339zm129.911 0c-2.679-2.41-6.428-4.285-10.447-4.285s-7.767 1.875-10.447 4.285h-96.429l91.607-94.821h38.304l91.607 94.821H298.447zm120-11.786l-4.286 7.5c-1.339.268-2.41.803-3.482 1.339l-89.196-91.875h114.376l-17.412 83.036zm12.856-22.232l12.858-60.803h21.964l-34.822 60.803zm34.822-68.839h-20.357l4.553-21.16 17.143 18.214c-.535.803-1.071 1.874-1.339 2.946zm66.161-107.411l-55.447 96.697c-1.339.535-2.679 1.071-4.018 1.874l-20.625-21.964 34.554-163.928 45.803 79.286c-.267 1.339-.803 2.678-.803 4.285 0 1.339.268 2.411.536 3.75z"], 49743 "contao": [512, 512, [], "f26d", "M45.4 305c14.4 67.1 26.4 129 68.2 175H34c-18.7 0-34-15.2-34-34V66c0-18.7 15.2-34 34-34h57.7C77.9 44.6 65.6 59.2 54.8 75.6c-45.4 70-27 146.8-9.4 229.4zM478 32h-90.2c21.4 21.4 39.2 49.5 52.7 84.1l-137.1 29.3c-14.9-29-37.8-53.3-82.6-43.9-24.6 5.3-41 19.3-48.3 34.6-8.8 18.7-13.2 39.8 8.2 140.3 21.1 100.2 33.7 117.7 49.5 131.2 12.9 11.1 33.4 17 58.3 11.7 44.5-9.4 55.7-40.7 57.4-73.2l137.4-29.6c3.2 71.5-18.7 125.2-57.4 163.6H478c18.7 0 34-15.2 34-34V66c0-18.8-15.2-34-34-34z"], 49744 "cpanel": [640, 512, [], "f388", "M52.9 213.7h40l-6.2 23.6c-1.9 6.5-7.4 10.9-14.3 10.9H53.8c-24.9 0-24.7 37.4 0 37.4h11.3c4.2 0 7.6 3.9 6.4 8.3L64.4 320H52c-33.5 0-59-31.4-50.3-65.2 7.3-27 28.3-41.1 51.2-41.1M73.1 320L108 189.9c1.8-6.4 7.2-10.9 14.3-10.9h37c24.1 0 45.4 16.4 51 41.2 6.6 29.1-14.5 65.3-51.7 65.3h-32l6.4-23.8c1.8-6.2 7.3-10.8 14.3-10.8h10.3c12.4 0 20.8-11.7 18.3-22.6-2.1-9.2-9.9-14.8-18.3-14.8h-19.8L112 309.2c-1.9 6.2-7.4 10.7-14.2 10.7l-24.7.1m220.6-69.4c.3-1 1.9-5.3-2.1-5.3h-57.5c-9.7 0-16.6-8.9-14.2-18.5l3.5-13.4h77.9c18.8 0 33.3 17.6 28.5 36.8l-14 51.8c-2.8 10.6-12.2 17.8-23.4 17.8l-57.5-.2c-42.9 0-38.5-63.8.7-63.8H284l-3.5 13.2c-1.9 6.2-7.4 10.8-14.2 10.8h-21.6c-5.3 0-5.3 7.9 0 7.9h34.9c4.6 0 5.1-3.9 5.5-5.3l8.6-31.8m103.1-36.9c34.4 0 59.3 32.3 50.3 65.4l-8.8 33.1c-1.2 4.9-5.7 7.8-10.3 7.8h-19.1c-4.5 0-7.6-4-6.4-8.3l10.6-40c3.3-11.6-5.6-23.4-18.1-23.4h-19.8l-17.2 64c-1.2 4.8-5.6 7.8-10.4 7.8h-18.9c-4.2 0-7.6-3.9-6.4-8.3l26.2-98h48.3M498 251.6l-8 30c-.9 3.3 1.5 6.7 5.1 6.7h73.3l-5.7 21c-1.9 6.2-7.4 10.7-14.2 10.7h-66.7c-20 0-33.3-19-28.3-36.7l10.8-40c4.8-17.6 20.7-29.6 38.6-29.6h47.3c19 0 33.2 17.7 28.3 36.8l-3.2 12c-2.9 11-12.7 17.6-23.2 17.6h-53.4l3.5-13c1.6-6.2 7.2-10.8 14.2-10.8H538c2 0 3.3-1 3.9-3l.7-2.6c.7-2.7-1.3-5.1-3.9-5.1h-32.9c-4.1 0-6.9 2.1-7.8 6zm70.2 68.4l35.6-133.1c1.2-4.7 5.5-7.9 10.4-7.9h18.9c4.5 0 7.7 4 6.5 8.3l-26.5 98.2c-5.1 20.7-24.2 34.5-44.9 34.5"], 49745 "creative-commons": [496, 512, [], "f25e", "M245.83 214.87l-33.22 17.28c-9.43-19.58-25.24-19.93-27.46-19.93-22.13 0-33.22 14.61-33.22 43.84 0 23.57 9.21 43.84 33.22 43.84 14.47 0 24.65-7.09 30.57-21.26l3
497450.55 15.5c-6.17 11.51-25.69 38.98-65.1 38.98-22.6 0-73.96-10.32-73.96-77.05 0-58.69 43-77.06 72.63-77.06 30.72-.01 52.7 11.95 65.99 35.86zm143.05 0l-32.78 17.28c-9.5-19.77-25.72-19.93-27.9-19.93-22.14 0-33.22 14.61-33.22 43.84 0 23.55 9.23 43.84 33.22 43.84 14.45 0 24.65-7.09 30.54-21.26l31 15.5c-2.1 3.75-21.39 38.98-65.09 38.98-22.69 0-73.96-9.87-73.96-77.05 0-58.67 42.97-77.06 72.63-77.06 30.71-.01 52.58 11.95 65.56 35.86zM247.56 8.05C104.74 8.05 0 123.11 0 256.05c0 138.49 113.6 248 247.56 248 129.93 0 248.44-100.87 248.44-248 0-137.87-106.62-248-248.44-248zm.87 450.81c-112.54 0-203.7-93.04-203.7-202.81 0-105.42 85.43-203.27 203.72-203.27 112.53 0 202.82 89.46 202.82 203.26-.01 121.69-99.68 202.82-202.84 202.82z"], 49746 "creative-commons-by": [496, 512, [], "f4e7", "M314.9 194.4v101.4h-28.3v120.5h-77.1V295.9h-28.3V194.4c0-4.4 1.6-8.2 4.6-11.3 3.1-3.1 6.9-4.7 11.3-4.7H299c4.1 0 7.8 1.6 11.1 4.7 3.1 3.2 4.8 6.9 4.8 11.3zm-101.5-63.7c0-23.3 11.5-35 34.5-35s34.5 11.7 34.5 35c0 23-11.5 34.5-34.5 34.5s-34.5-11.5-34.5-34.5zM247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3z"], 49747 "creative-commons-nc": [496, 512, [], "f4e8", "M247.6 8C387.4 8 496 115.9 496 256c0 147.2-118.5 248-248.4 248C113.1 504 0 393.2 0 256 0 123.1 104.7 8 247.6 8zM55.8 189.1c-7.4 20.4-11.1 42.7-11.1 66.9 0 110.9 92.1 202.4 203.7 202.4 122.4 0 177.2-101.8 178.5-104.1l-93.4-41.6c-7.7 37.1-41.2 53-68.2 55.4v38.1h-28.8V368c-27.5-.3-52.6-10.2-75.3-29.7l34.1-34.5c31.7 29.4 86.4 31.8 86.4-2.2 0-6.2-2.2-11.2-6.6-15.1-14.2-6-1.8-.1-219.3-97.4zM248.4 52.3c-38.4 0-112.4 8.7-170.5 93l94.8 42.5c10-31.3 40.4-42.9 63.8-44.3v-38.1h28.8v38.1c22.7 1.2 43.4 8.9 62 23L295 199.7c-42.7-29.9-83.5-8-70 11.1 53.4 24.1 43.8 19.8 93 41.6l127.1 56.7c4.1-17.4 6.2-35.1 6.2-53.1 0-57-19.8-105-59.3-143.9-39.3-39.9-87.2-59.8-143.6-59.8z"], 49748 "creative-commons-nc-eu": [496, 512, [], "f4e9", "M247.7 8C103.6 8 0 124.8 0 256c0 136.3 111.7 248 247.7 248C377.9 504 496 403.1 496 256 496 117 388.4 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-23.2 3.7-45.2 10.9-66l65.7 29.1h-4.7v29.5h23.3c0 6.2-.4 3.2-.4 19.5h-22.8v29.5h27c11.4 67 67.2 101.3 124.6 101.3 26.6 0 50.6-7.9 64.8-15.8l-10-46.1c-8.7 4.6-28.2 10.8-47.3 10.8-28.2 0-58.1-10.9-67.3-50.2h90.3l128.3 56.8c-1.5 2.1-56.2 104.3-178.8 104.3zm-16.7-190.6l-.5-.4.9.4h-.4zm77.2-19.5h3.7v-29.5h-70.3l-28.6-12.6c2.5-5.5 5.4-10.5 8.8-14.3 12.9-15.8 31.1-22.4 51.1-22.4 18.3 0 35.3 5.4 46.1 10l11.6-47.3c-15-6.6-37-12.4-62.3-12.4-39 0-72.2 15.8-95.9 42.3-5.3 6.1-9.8 12.9-13.9 20.1l-81.6-36.1c64.6-96.8 157.7-93.6 170.7-93.6 113 0 203 90.2 203 203.4 0 18.7-2.1 36.3-6.3 52.9l-136.1-60.5z"], 49749 "creative-commons-nc-jp": [496, 512, [], "f4ea", "M247.7 8C103.6 8 0 124.8 0 256c0 136.4 111.8 248 247.7 248C377.9 504 496 403.2 496 256 496 117.2 388.5 8 247.7 8zm.6 450.7c-112 0-203.6-92.5-203.6-202.7 0-21.1 3-41.2 9-60.3l127 56.5h-27.9v38.6h58.1l5.7 11.8v18.7h-63.8V360h63.8v56h61.7v-56h64.2v-35.7l81 36.1c-1.5 2.2-57.1 98.3-175.2 98.3zm87.6-137.3h-57.6v-18.7l2.9-5.6 54.7 24.3zm6.5-51.4v-17.8h-38.6l63-116H301l-43.4 96-23-10.2-39.6-85.7h-65.8l27.3 51-81.9-36.5c27.8-44.1 82.6-98.1 173.7-98.1 112.8 0 203 90 203 203.4 0 21-2.7 40.6-7.9 59l-101-45.1z"], 49750 "creative-commons-nd": [496, 512, [], "f4eb", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm94 144.3v42.5H162.1V197h180.3zm0 79.8v42.5H162.1v-42.5h180.3z"], 49751 "creative-commons-pd": [496, 512, [], "f4ec", "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm0 449.5c-139.2 0-235.8-138-190.2-267.9l78.8 35.1c-2.1 10.5-3.3 21.5-3.3 32.9 0 99 73.9 126.9 120.4 126.9 22.9 0 53.5-6.7 79.4-29.5L297 311.1c-5.5 6.3-17.6 16.7-36.3 16.7-37.8 0-53.7-39.9-53.9-71.9 230.4 102.6 216.5 96.5 217.9 96.8-34.3 62.4-100.6 104.8-176.7 104.8zm194.2-150l-224-100c18.8-34 54.9-30.7 74.7-11l40.4-41.6c-27.1-23.3-58-27.5-78.1-27.5-47.4 0-80.9 20.5-100.7 51.6l-74.9-33.4c36.1-54.9 98.1-91.2 168.5-91.2 111.1 0 201.5 90.4 201.5 201.5 0 18-2.4 35.4-6.8 52-.3-.1-.4-.2-.6-.4z"], 49752 "creative-commons-pd-alt": [496, 512, [], "f4ed", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM135.5 323.3V186h68.2c33.7 0 50.5 15.5 50.5 46.5 0 9-3 46.5-57.1 46.5h-27v44.3h-34.6zm34.1-111.6v41.6h29.2c27.9 0 30-41.6-.9-41.6h-28.3zm93.9 111.6V186h53.2c21.4 0 70 5.2 70 68.6 0 63.5-48.6 68.6-70 68.6h-53.2zm34.1-108.5v79.7h19.9c24 0 34.5-15.3 34.5-39.9 0-42-31.2-39.9-35-39.9l-19.4.1z"], 49753 "creative-commons-remix": [496, 512, [], "f4ee", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm161.7 207.7l4.9 2.2v70c-7.2 3.6-63.4 27.5-67.3 28.8-6.5-1.8-113.7-46.8-137.3-56.2l-64.2 26.6-63.3-27.5v-63.8l59.3-24.8c-.7-.7-.4 5-.4-70.4l67.3-29.7L361 178.5v61.6l49.1 20.3zm-70.4 81.5v-43.8h-.4v-1.8l-113.8-46.5V295l113.8 46.9v-.4l.4.4zm7.5-57.6l39.9-16.4-36.8-15.5-39 16.4 35.9 15.5zm52.3 38.1v-43L355.2 298v43.4l44.3-19z"], 49754 "creative-commons-sa": [496, 512, [], "f4ef", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zM137.7 221c13-83.9 80.5-95.7 108.9-95.7 99.8 0 127.5 82.5 127.5 134.2 0 63.6-41 132.9-128.9 132.9-38.9 0-99.1-20-109.4-97h62.5c1.5 30.1 19.6 45.2 54.5 45.2 23.3 0 58-18.2 58-82.8 0-82.5-49.1-80.6-56.7-80.6-33.1 0-51.7 14.6-55.8 43.8h18.2l-49.2 49.2-49-49.2h19.4z"], 49755 "creative-commons-sampling": [496, 512, [], "f4f0", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm3.6 53.2c2.8-.3 11.5 1 11.5 11.5l6.6 107.2 4.9-59.3c0-6 4.7-10.6 10.6-10.6 5.9 0 10.6 4.7 10.6 10.6 0 2.5-.5-5.7 5.7 81.5l5.8-64.2c.3-2.9 2.9-9.3 10.2-9.3 3.8 0 9.9 2.3 10.6 8.9l11.5 96.5 5.3-12.8c1.8-4.4 5.2-6.6 10.2-6.6h58v21.3h-50.9l-18.2 44.3c-3.9 9.9-19.5 9.1-20.8-3.1l-4-31.9-7.5 92.6c-.3 3-3 9.3-10.2 9.3-3 0-9.8-2.1-10.6-9.3 0-1.9.6 5.8-6.2-77.9l-5.3 72.2c-1.1 4.8-4.8 9.3-10.6 9.3-2.9 0-9.8-2-10.
497556-9.3 0-1.9.5 6.7-5.8-87.7l-5.8 94.8c0 6.3-3.6 12.4-10.6 12.4-5.2 0-10.6-4.1-10.6-12l-5.8-87.7c-5.8 92.5-5.3 84-5.3 85.9-1.1 4.8-4.8 9.3-10.6 9.3-3 0-9.8-2.1-10.6-9.3 0-.7-.4-1.1-.4-2.6l-6.2-88.6L182 348c-.7 6.5-6.7 9.3-10.6 9.3-5.8 0-9.6-4.1-10.6-8.9L149.7 272c-2 4-3.5 8.4-11.1 8.4H87.2v-21.3H132l13.7-27.9c4.4-9.9 18.2-7.2 19.9 2.7l3.1 20.4 8.4-97.9c0-6 4.8-10.6 10.6-10.6.5 0 10.6-.2 10.6 12.4l4.9 69.1 6.6-92.6c0-10.1 9.5-10.6 10.2-10.6.6 0 10.6.7 10.6 10.6l5.3 80.6 6.2-97.9c.1-1.1-.6-10.3 9.9-11.5z"], 49756 "creative-commons-sampling-plus": [496, 512, [], "f4f1", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm107 205.6c-4.7 0-9 2.8-10.7 7.2l-4 9.5-11-92.8c-1.7-13.9-22-13.4-23.1.4l-4.3 51.4-5.2-68.8c-1.1-14.3-22.1-14.2-23.2 0l-3.5 44.9-5.9-94.3c-.9-14.5-22.3-14.4-23.2 0l-5.1 83.7-4.3-66.3c-.9-14.4-22.2-14.4-23.2 0l-5.3 80.2-4.1-57c-1.1-14.3-22-14.3-23.2-.2l-7.7 89.8-1.8-12.2c-1.7-11.4-17.1-13.6-22-3.3l-13.2 27.7H87.5v23.2h51.3c4.4 0 8.4-2.5 10.4-6.4l10.7 73.1c2 13.5 21.9 13 23.1-.7l3.8-43.6 5.7 78.3c1.1 14.4 22.3 14.2 23.2-.1l4.6-70.4 4.8 73.3c.9 14.4 22.3 14.4 23.2-.1l4.9-80.5 4.5 71.8c.9 14.3 22.1 14.5 23.2.2l4.6-58.6 4.9 64.4c1.1 14.3 22 14.2 23.1.1l6.8-83 2.7 22.3c1.4 11.8 17.7 14.1 22.3 3.1l18-43.4h50.5V258l-58.4.3zm-78 5.2h-21.9v21.9c0 4.1-3.3 7.5-7.5 7.5-4.1 0-7.5-3.3-7.5-7.5v-21.9h-21.9c-4.1 0-7.5-3.3-7.5-7.5 0-4.1 3.4-7.5 7.5-7.5h21.9v-21.9c0-4.1 3.4-7.5 7.5-7.5s7.5 3.3 7.5 7.5v21.9h21.9c4.1 0 7.5 3.3 7.5 7.5 0 4.1-3.4 7.5-7.5 7.5z"], 49757 "creative-commons-share": [496, 512, [], "f4f2", "M247.6 8C389.4 8 496 118.1 496 256c0 147.1-118.5 248-248.4 248C113.6 504 0 394.5 0 256 0 123.1 104.7 8 247.6 8zm.8 44.7C130.2 52.7 44.7 150.6 44.7 256c0 109.8 91.2 202.8 203.7 202.8 103.2 0 202.8-81.1 202.8-202.8.1-113.8-90.2-203.3-202.8-203.3zm101 132.4c7.8 0 13.7 6.1 13.7 13.7v182.5c0 7.7-6.1 13.7-13.7 13.7H214.3c-7.7 0-13.7-6-13.7-13.7v-54h-54c-7.8 0-13.7-6-13.7-13.7V131.1c0-8.2 6.6-12.7 12.4-13.7h136.4c7.7 0 13.7 6 13.7 13.7v54h54zM159.9 300.3h40.7V198.9c0-7.4 5.8-12.6 12-13.7h55.8v-40.3H159.9v155.4zm176.2-88.1H227.6v155.4h108.5V212.2z"], 49758 "css3": [512, 512, [], "f13c", "M480 32l-64 368-223.3 80L0 400l19.6-94.8h82l-8 40.6L210 390.2l134.1-44.4 18.8-97.1H29.5l16-82h333.7l10.5-52.7H56.3l16.3-82H480z"], 49759 "css3-alt": [384, 512, [], "f38b", "M0 32l34.9 395.8L192 480l157.1-52.2L384 32H0zm313.1 80l-4.8 47.3L193 208.6l-.3.1h111.5l-12.8 146.6-98.2 28.7-98.8-29.2-6.4-73.9h48.9l3.2 38.3 52.6 13.3 54.7-15.4 3.7-61.6-166.3-.5v-.1l-.2.1-3.6-46.3L193.1 162l6.5-2.7H76.7L70.9 112h242.2z"], 49760 "cuttlefish": [440, 512, [], "f38c", "M344 305.5c-17.5 31.6-57.4 54.5-96 54.5-56.6 0-104-47.4-104-104s47.4-104 104-104c38.6 0 78.5 22.9 96 54.5 13.7-50.9 41.7-93.3 87-117.8C385.7 39.1 320.5 8 248 8 111 8 0 119 0 256s111 248 248 248c72.5 0 137.7-31.1 183-80.7-45.3-24.5-73.3-66.9-87-117.8z"], 49761 "d-and-d": [576, 512, [], "f38d", "M82.5 98.9c-.6-17.2 2-33.8 12.7-48.2.3 7.4 1.2 14.5 4.2 21.6 5.9-27.5 19.7-49.3 42.3-65.5-1.9 5.9-3.5 11.8-3 17.7 8.7-7.4 18.8-17.8 44.4-22.7 14.7-2.8 29.7-2 42.1 1 38.5 9.3 61 34.3 69.7 72.3 5.3 23.1.7 45-8.3 66.4-5.2 12.4-12 24.4-20.7 35.1-2-1.9-3.9-3.8-5.8-5.6-42.8-40.8-26.8-25.2-37.4-37.4-1.1-1.2-1-2.2-.1-3.6 8.3-13.5 11.8-28.2 10-44-1.1-9.8-4.3-18.9-11.3-26.2-14.5-15.3-39.2-15-53.5.6-11.4 12.5-14.1 27.4-10.9 43.6.2 1.3.4 2.7 0 3.9-3.4 13.7-4.6 27.6-2.5 41.6.1.5.1 1.1.1 1.6 0 .3-.1.5-.2 1.1-21.8-11-36-28.3-43.2-52.2-8.3 17.8-11.1 35.5-6.6 54.1-15.6-15.2-21.3-34.3-22-55.2zm469.6 123.2c-11.6-11.6-25-20.4-40.1-26.6-12.8-5.2-26-7.9-39.9-7.1-10 .6-19.6 3.1-29 6.4-2.5.9-5.1 1.6-7.7 2.2-4.9 1.2-7.3-3.1-4.7-6.8 3.2-4.6 3.4-4.2 15-12 .6-.4 1.2-.8 2.2-1.5h-2.5c-.6 0-1.2.2-1.9.3-19.3 3.3-30.7 15.5-48.9 29.6-10.4 8.1-13.8 3.8-12-.5 1.4-3.5 3.3-6.7 5.1-10 1-1.8 2.3-3.4 3.5-5.1-.2-.2-.5-.3-.7-.5-27 18.3-46.7 42.4-57.7 73.3.3.3.7.6 1 .9.3-.6.5-1.2.9-1.7 10.4-12.1 22.8-21.8 36.6-29.8 18.2-10.6 37.5-18.3 58.7-20.2 4.3-.4 8.7-.1 13.1-.1-1.8.7-3.5.9-5.3 1.1-18.5 2.4-35.5 9-51.5 18.5-30.2 17.9-54.5 42.2-75.1 70.4-.3.4-.4.9-.7 1.3 14.5 5.3 24 17.3 36.1 25.6.2-.1.3-.2.4-.4l1.2-2.7c12.2-26.9 27-52.3 46.7-74.5 16.7-18.8 38-25.3 62.5-20 5.9 1.3 11.4 4.4 17.2 6.8 2.3-1.4 5.1-3.2 8-4.7 8.4-4.3 17.4-7 26.7-9 14.7-3.1 29.5-4.9 44.5-1.3v-.5c-.5-.4-1.2-.8-1.7-1.4zM316.7 397.6c-39.4-33-22.8-19.5-42.7-35.6-.8.9 0-.2-1.9 3-11.2 19.1-25.5 35.3-44 47.6-10.3 6.8-21.5 11.8-34.1 11.8-21.6 0-38.2-9.5-49.4-27.8-12-19.5-13.3-40.7-8.2-62.6 7.8-33.8 30.1-55.2 38.6-64.3-18.7-6.2-33 1.7-46.4 13.9.8-13.9 4.3-26.2 11.8-37.3-24.3 10.6-45.9 25-64.8 43.9-.3-5.8 5.4-43.7 5.
497616-44.7.3-2.7-.6-5.3-3-7.4-24.2 24.7-44.5 51.8-56.1 84.6 7.4-5.9 14.9-11.4 23.6-16.2-8.3 22.3-19.6 52.8-7.8 101.1 4.6 19 11.9 36.8 24.1 52.3 2.9 3.7 6.3 6.9 9.5 10.3.2-.2.4-.3.6-.5-1.4-7-2.2-14.1-1.5-21.9 2.2 3.2 3.9 6 5.9 8.6 12.6 16 28.7 27.4 47.2 35.6 25 11.3 51.1 13.3 77.9 8.6 54.9-9.7 90.7-48.6 116-98.8 1-1.8.6-2.9-.9-4.2zm172-46.4c-9.5-3.1-22.2-4.2-28.7-2.9 9.9 4 14.1 6.6 18.8 12 12.6 14.4 10.4 34.7-5.4 45.6-11.7 8.1-24.9 10.5-38.9 9.1-1.2-.1-2.3-.4-3-.6 2.8-3.7 6-7 8.1-10.8 9.4-16.8 5.4-42.1-8.7-56.1-2.1-2.1-4.6-3.9-7-5.9-.3 1.3-.1 2.1.1 2.8 4.2 16.6-8.1 32.4-24.8 31.8-7.6-.3-13.9-3.8-19.6-8.5-19.5-16.1-39.1-32.1-58.5-48.3-5.9-4.9-12.5-8.1-20.1-8.7-4.6-.4-9.3-.6-13.9-.9-5.9-.4-8.8-2.8-10.4-8.4-.9-3.4-1.5-6.8-2.2-10.2-1.5-8.1-6.2-13-14.3-14.2-4.4-.7-8.9-1-13.3-1.5-13-1.4-19.8-7.4-22.6-20.3-5 11-1.6 22.4 7.3 29.9 4.5 3.8 9.3 7.3 13.8 11.2 4.6 3.8 7.4 8.7 7.9 14.8.4 4.7.8 9.5 1.8 14.1 2.2 10.6 8.9 18.4 17 25.1 16.5 13.7 33 27.3 49.5 41.1 17.9 15 13.9 32.8 13 56-.9 22.9 12.2 42.9 33.5 51.2 1 .4 2 .6 3.6 1.1-15.7-18.2-10.1-44.1.7-52.3.3 2.2.4 4.3.9 6.4 9.4 44.1 45.4 64.2 85 56.9 16-2.9 30.6-8.9 42.9-19.8 2-1.8 3.7-4.1 5.9-6.5-19.3 4.6-35.8.1-50.9-10.6.7-.3 1.3-.3 1.9-.3 21.3 1.8 40.6-3.4 57-17.4 19.5-16.6 26.6-42.9 17.4-66-8.3-20.1-23.6-32.3-43.8-38.9zM99.4 179.3c-5.3-9.2-13.2-15.6-22.1-21.3 13.7-.5 26.6.2 39.6 3.7-7-12.2-8.5-24.7-5-38.7 5.3 11.9 13.7 20.1 23.6 26.8 19.7 13.2 35.7 19.6 46.7 30.2 3.4 3.3 6.3 7.1 9.6 10.9-.8-2.1-1.4-4.1-2.2-6-5-10.6-13-18.6-22.6-25-1.8-1.2-2.8-2.5-3.4-4.5-3.3-12.5-3-25.1-.7-37.6 1-5.5 2.8-10.9 4.5-16.3.8-2.4 2.3-4.6 4-6.6.6 6.9 0 25.5 19.6 46 10.8 11.3 22.4 21.9 33.9 32.7 9 8.5 18.3 16.7 25.5 26.8 1.1 1.6 2.2 3.3 3.8 4.7-5-13-14.2-24.1-24.2-33.8-9.6-9.3-19.4-18.4-29.2-27.4-3.3-3-4.6-6.7-5.1-10.9-1.2-10.4 0-20.6 4.3-30.2.5-1 1.1-2 1.9-3.3.5 4.2.6 7.9 1.4 11.6 4.8 23.1 20.4 36.3 49.3 63.5 10 9.4 19.3 19.2 25.6 31.6 4.8 9.3 7.3 19 5.7 29.6-.1.6.5 1.7 1.1 2 6.2 2.6 10 6.9 9.7 14.3 7.7-2.6 12.5-8 16.4-14.5 4.2 20.2-9.1 50.3-27.2 58.7.4-4.5 5-23.4-16.5-27.7-6.8-1.3-12.8-1.3-22.9-2.1 4.7-9 10.4-20.6.5-22.4-24.9-4.6-52.8 1.9-57.8 4.6 8.2.4 16.3 1 23.5 3.3-2 6.5-4 12.7-5.8 18.9-1.9 6.5 2.1 14.6 9.3 9.6 1.2-.9 2.3-1.9 3.3-2.7-3.1 17.9-2.9 15.9-2.8 18.3.3 10.2 9.5 7.8 15.7 7.3-2.5 11.8-29.5 27.3-45.4 25.8 7-4.7 12.7-10.3 15.9-17.9-6.5.8-12.9 1.6-19.2 2.4l-.3-.9c4.7-3.4 8-7.8 10.2-13.1 8.7-21.1-3.6-38-25-39.9-9.1-.8-17.8.8-25.9 5.5 6.2-15.6 17.2-26.6 32.6-34.5-15.2-4.3-8.9-2.7-24.6-6.3 14.6-9.3 30.2-13.2 46.5-14.6-5.2-3.2-48.1-3.6-70.2 20.9 7.9 1.4 15.5 2.8 23.2 4.2-23.8 7-44 19.7-62.4 35.6 1.1-4.8 2.7-9.5 3.3-14.3.6-4.5.8-9.2.1-13.6-1.5-9.4-8.9-15.1-19.7-16.3-7.9-.9-15.6.1-23.3 1.3-.9.1-1.7.3-2.9 0 15.8-14.8 36-21.7 53.1-33.5 6-4.5 6.8-8.2 3-14.9zm128.4 26.8c3.3 16 12.6 25.5 23.8 24.3-4.6-11.3-12.1-19.5-23.8-24.3z"], 49762 "dashcube": [448, 512, [], "f210", "M326.6 104H110.4c-51.1 0-91.2 43.3-91.2 93.5V427c0 50.5 40.1 85 91.2 85h227.2c51.1 0 91.2-34.5 91.2-85V0L326.6 104zM153.9 416.5c-17.7 0-32.4-15.1-32.4-32.8V240.8c0-17.7 14.7-32.5 32.4-32.5h140.7c17.7 0 32 14.8 32 32.5v123.5l51.1 52.3H153.9z"], 49763 "delicious": [448, 512, [], "f1a5", "M446.5 68c-.4-1.5-.9-3-1.4-4.5-.9-2.5-2-4.8-3.3-7.1-1.4-2.4-3-4.8-4.7-6.9-2.1-2.5-4.4-4.8-6.9-6.8-1.1-.9-2.2-1.7-3.3-2.5-1.3-.9-2.6-1.7-4-2.4-1.8-1-3.6-1.8-5.5-2.5-1.7-.7-3.5-1.3-5.4-1.7-3.8-1-7.9-1.5-12-1.5H48C21.5 32 0 53.5 0 80v352c0 4.1.5 8.2 1.5 12 2 7.7 5.8 14.6 11 20.3 1 1.1 2.1 2.2 3.3 3.3 5.7 5.2 12.6 9 20.3 11 3.8 1 7.9 1.5 12 1.5h352c26.5 0 48-21.5 48-48V80c-.1-4.1-.6-8.2-1.6-12zM416 432c0 8.8-7.2 16-16 16H224V256H32V80c0-8.8 7.2-16 16-16h176v192h192v176z"], 49764 "deploydog": [512, 512, [], "f38e", "M382.2 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.6 0-33.2 16.4-33.2 32.6zM188.5 136h51.7v239.6h-51.7v-20.7c-19.8 24.8-52.8 24.1-73.8 14.7-26.2-11.7-44.3-38.1-44.3-71.8 0-29.8 14.8-57.9 43.3-70.8 20.2-9.1 52.7-10.6 74.8 12.9V136zm-64.7 161.8c0 18.2 13.6 33.5 33.2 33.5 19.8 0 33.2-16.4 33.2-32.9 0-17.1-13.7-33.2-33.2-33.2-19.7 0-33.2 16.4-33.2 32.6zM448 96c17.5 0 32 14.4 32 32v256c0 17.5-14.4 32-32 32H64c-17.5 0-32-14.4-32-32V128c0-17.5 14.4-32 32-32h384m0-32H64C28.8 64 0 92.8 0 128v256c0 35.2 28.8 64 64 64h384c35.2
497640 64-28.8 64-64V128c0-35.2-28.8-64-64-64z"], 49765 "deskpro": [480, 512, [], "f38f", "M205.9 512l31.1-38.4c12.3-.2 25.6-1.4 36.5-6.6 38.9-18.6 38.4-61.9 38.3-63.8-.1-5-.8-4.4-28.9-37.4H362c-.2 50.1-7.3 68.5-10.2 75.7-9.4 23.7-43.9 62.8-95.2 69.4-8.7 1.1-32.8 1.2-50.7 1.1zm200.4-167.7c38.6 0 58.5-13.6 73.7-30.9l-175.5-.3-17.4 31.3 119.2-.1zm-43.6-223.9v168.3h-73.5l-32.7 55.5H250c-52.3 0-58.1-56.5-58.3-58.9-1.2-13.2-21.3-11.6-20.1 1.8 1.4 15.8 8.8 40 26.4 57.1h-91c-25.5 0-110.8-26.8-107-114V16.9C0 .9 9.7.3 15 .1h82c.2 0 .3.1.5.1 4.3-.4 50.1-2.1 50.1 43.7 0 13.3 20.2 13.4 20.2 0 0-18.2-5.5-32.8-15.8-43.7h84.2c108.7-.4 126.5 79.4 126.5 120.2zm-132.5 56l64 29.3c13.3-45.5-42.2-71.7-64-29.3z"], 49766 "deviantart": [320, 512, [], "f1bd", "M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z"], 49767 "digg": [512, 512, [], "f1a6", "M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z"], 49768 "digital-ocean": [512, 512, [], "f391", "M256 504v-96.1c101.8 0 180.8-100.9 141.7-208-14.3-39.6-46.1-71.4-85.8-85.7-107.1-38.8-208.1 39.9-208.1 141.7H8C8 93.7 164.9-32.8 335 20.3c74.2 23.3 133.6 82.4 156.6 156.6C544.8 347.2 418.6 504 256 504zm.3-191.4h-95.6v95.6h95.6v-95.6zm-95.6 95.6H87v73.6h73.7v-73.6zM87 346.6H25.4v61.6H87v-61.6z"], 49769 "discord": [448, 512, [], "f392", "M297.216 243.2c0 15.616-11.52 28.416-26.112 28.416-14.336 0-26.112-12.8-26.112-28.416s11.52-28.416 26.112-28.416c14.592 0 26.112 12.8 26.112 28.416zm-119.552-28.416c-14.592 0-26.112 12.8-26.112 28.416s11.776 28.416 26.112 28.416c14.592 0 26.112-12.8 26.112-28.416.256-15.616-11.52-28.416-26.112-28.416zM448 52.736V512c-64.494-56.994-43.868-38.128-118.784-107.776l13.568 47.36H52.48C23.552 451.584 0 428.032 0 398.848V52.736C0 23.552 23.552 0 52.48 0h343.04C424.448 0 448 23.552 448 52.736zm-72.96 242.688c0-82.432-36.864-149.248-36.864-149.248-36.864-27.648-71.936-26.88-71.936-26.88l-3.584 4.096c43.52 13.312 63.744 32.512 63.744 32.512-60.811-33.329-132.244-33.335-191.232-7.424-9.472 4.352-15.104 7.424-15.104 7.424s21.248-20.224 67.328-33.536l-2.56-3.072s-35.072-.768-71.936 26.88c0 0-36.864 66.816-36.864 149.248 0 0 21.504 37.12 78.08 38.912 0 0 9.472-11.52 17.152-21.248-32.512-9.728-44.8-30.208-44.8-30.208 3.766 2.636 9.976 6.053 10.496 6.4 43.21 24.198 104.588 32.126 159.744 8.96 8.96-3.328 18.944-8.192 29.44-15.104 0 0-12.8 20.992-46.336 30.464 7.68 9.728 16.896 20.736 16.896 20.736 56.576-1.792 78.336-38.912 78.336-38.912z"], 49770 "discourse": [448, 512, [], "f393", "M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z"], 49771 "dochub": [416, 512, [], "f394", "M397.9 160H256V19.6L397.9 160zM304 192v130c0 66.8-36.5 100.1-113.3 100.1H96V84.8h94.7c12 0 23.1.8 33.1 2.5v-84C212.9 1.1 201.4 0 189.2 0H0v512h189.2C329.7 512 400 447.4 400 318.1V192h-96z"], 49772 "docker": [640, 512, [], "f395", "M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z"], 49773 "draft2digital": [480, 512, [], "f396", "M369.9 425.4V371l47.1 27.2-47.1 27.2zM82.4 380.6c25.5-27.3 97.7-104.7 150.9-170 35.1-43.1 40.3-82.4 28.4-112.7-7.4-18.8-17.5-30.2-24.3-35.7 45.3 2.1 68 23.4 82.2 38.3 0 0 42.4 48.2 5.8 113.3-37 65.9-110.9 147.5-128.5 166.7H82.4zm51.8-219.2c0 12.4-10 22.4-22.4 22.4-12.4 0-22.4-10-22.4-22.4 0-12.4 10-22.4 22.4-22.4 12.4 0 22.4 10.1 22.4 22.4M336 315.9v64.7h-91.3c30.8-35 81.8-95.9 111.8-149.3 35.2-62.6 16.1-123.4-12.8-153.3-4.4-4.6-62.2-62.9-166-41.2-59.1 12.4-89.4 43.4-104.3 67.3-13.1 20.9-17 39.8-18.2 47.7-5.5 33 19.4 67.1 56.7 67.1 31.7 0 57.3-25.7 57.3-57.4 0-27.1-19.7-52.1-48-56.8 1.8-7.3 17.7-21.1 26.3-24.7 41.1-17.3 78 5.2 83.3 33.5 8.3 44.3-37.1 90.4-69.7 127.6C84.5 328.1 18.3 396.8 0 415.9l336-.1V480l144-81.9-144-82.2z"], 49774 "dribbble": [512, 512, [], "f17d", "M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z"], 49775 "dribbble-square": [448, 512, [], "f397", "M90.2 228.2c8.9-42.4 37.4-77.7 75.7-95.7 3.6 4.9 28 38.8 50.7 79-64 17-120.3 16.8-126.4 16.7zM314.6 154c-33.6-29.8-79.3-41.1-122.6-30.6 3.8 5.1 28.6 38.9 51 80 48.6-18.3 69.1-45.9 71.6-49.4zM140.1 364c40.5 31.6 93.3 36.7 137.3 18-2-12-10-53.8-29.2-103.6-55.1 18.8-93.8 56.4-108.1 85.6zm98.8-108.2c-3.4-7.8-7.2-15.5-11.1-23.2C159.6 253 93.4 252.2 87.4 252c0 1.4-.1 2.8-.1 4.2 0 35.1 13.3 67.1 35.1 91.4 22.2-37.9 67.1-77.9 116.5-91.8zm34.9 16.3c17.9 49.1 25.1 89.1 26.5 97.4 30.7-20.7 52.5-53.6 58.6-91.6-4.6-1.5-42.3-12.7-85.1-
497755.8zm-20.3-48.4c4.8 9.8 8.3 17.8 12 26.8 45.5-5.7 90.7 3.4 95.2 4.4-.3-32.3-11.8-61.9-30.9-85.1-2.9 3.9-25.8 33.2-76.3 53.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 176c0-88.2-71.8-160-160-160S64 167.8 64 256s71.8 160 160 160 160-71.8 160-160z"], 49776 "dropbox": [528, 512, [], "f16b", "M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z"], 49777 "drupal": [448, 512, [], "f1a9", "M319.5 114.7c-22.2-14-43.5-19.5-64.7-33.5-13-8.8-31.3-30-46.5-48.3-2.7 29.3-11.5 41.2-22 49.5-21.3 17-34.8 22.2-53.5 32.3C117 123 32 181.5 32 290.5 32 399.7 123.8 480 225.8 480 327.5 480 416 406 416 294c0-112.3-83-171-96.5-179.3zm2.5 325.6c-20.1 20.1-90.1 28.7-116.7 4.2-4.8-4.8.3-12 6.5-12 0 0 17 13.3 51.5 13.3 27 0 46-7.7 54.5-14 6.1-4.6 8.4 4.3 4.2 8.5zm-54.5-52.6c8.7-3.6 29-3.8 36.8 1.3 4.1 2.8 16.1 18.8 6.2 23.7-8.4 4.2-1.2-15.7-26.5-15.7-14.7 0-19.5 5.2-26.7 11-7 6-9.8 8-12.2 4.7-6-8.2 15.9-22.3 22.4-25zM360 405c-15.2-1-45.5-48.8-65-49.5-30.9-.9-104.1 80.7-161.3 42-38.8-26.6-14.6-104.8 51.8-105.2 49.5-.5 83.8 49 108.5 48.5 21.3-.3 61.8-41.8 81.8-41.8 48.7 0 23.3 109.3-15.8 106z"], 49778 "dyalog": [416, 512, [], "f399", "M0 32v119.2h64V96h107.2C284.6 96 352 176.2 352 255.9 352 332 293.4 416 171.2 416H0v64h171.2C331.9 480 416 367.3 416 255.9c0-58.7-22.1-113.4-62.3-154.3C308.9 56 245.7 32 171.2 32H0z"], 49779 "earlybirds": [480, 512, [], "f39a", "M313.2 47.5c1.2-13 21.3-14 36.6-8.7.9.3 26.2 9.7 19 15.2-27.9-7.4-56.4 18.2-55.6-6.5zm-201 6.9c30.7-8.1 62 20 61.1-7.1-1.3-14.2-23.4-15.3-40.2-9.6-1 .3-28.7 10.5-20.9 16.7zM319.4 160c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-159.7 0c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm318.5 163.2c-9.9 24-40.7 11-63.9-1.2-13.5 69.1-58.1 111.4-126.3 124.2.3.9-2-.1 24 1 33.6 1.4 63.8-3.1 97.4-8-19.8-13.8-11.4-37.1-9.8-38.1 1.4-.9 14.7 1.7 21.6 11.5 8.6-12.5 28.4-14.8 30.2-13.6 1.6 1.1 6.6 20.9-6.9 34.6 4.7-.9 8.2-1.6 9.8-2.1 2.6-.8 17.7 11.3 3.1 13.3-14.3 2.3-22.6 5.1-47.1 10.8-45.9 10.7-85.9 11.8-117.7 12.8l1 11.6c3.8 18.1-23.4 24.3-27.6 6.2.8 17.9-27.1 21.8-28.4-1l-.5 5.3c-.7 18.4-28.4 17.9-28.3-.6-7.5 13.5-28.1 6.8-26.4-8.5l1.2-12.4c-36.7.9-59.7 3.1-61.8 3.1-20.9 0-20.9-31.6 0-31.6 2.4 0 27.7 1.3 63.2 2.8-61.1-15.5-103.7-55-114.9-118.2-25 12.8-57.5 26.8-68.2.8-10.5-25.4 21.5-42.6 66.8-73.4.7-6.6 1.6-13.3 2.7-19.8-14.4-19.6-11.6-36.3-16.1-60.4-16.8 2.4-23.2-9.1-23.6-23.1.3-7.3 2.1-14.9 2.4-15.4 1.1-1.8 10.1-2 12.7-2.6 6-31.7 50.6-33.2 90.9-34.5 19.7-21.8 45.2-41.5 80.9-48.3C203.3 29 215.2 8.5 216.2 8c1.7-.8 21.2 4.3 26.3 23.2 5.2-8.8 18.3-11.4 19.6-10.7 1.1.6 6.4 15-4.9 25.9 40.3 3.5 72.2 24.7 96 50.7 36.1 1.5 71.8 5.9 77.1 34 2.7.6 11.6.8 12.7 2.6.3.5 2.1 8.1 2.4 15.4-.5 13.9-6.8 25.4-23.6 23.1-3.2 17.3-2.7 32.9-8.7 47.7 2.4 11.7 4 23.8 4.8 36.4 37 25.4 70.3 42.5 60.3 66.9zM207.4 159.9c.9-44-37.9-42.2-78.6-40.3-21.7 1-38.9 1.9-45.5 13.9-11.4 20.9 5.9 92.9 23.2 101.2 9.8 4.7 73.4 7.9 86.3-7.1 8.2-9.4 15-49.4 14.6-67.7zm52 58.3c-4.3-12.4-6-30.1-15.3-32.7-2-.5-9-.5-11 0-10 2.8-10.8 22.1-17 37.2 15.4 0 19.3 9.7 23.7 9.7 4.3 0 6.3-11.3 19.6-14.2zm135.7-84.7c-6.6-12.1-24.8-12.9-46.5-13.9-40.2-1.9-78.2-3.8-77.3 40.3-.5 18.3 5 58.3 13.2 67.8 13 14.9 76.6 11.8 86.3 7.1 15.8-7.6 36.5-78.9 24.3-101.3z"], 49780 "ebay": [640, 512, [], "f4f4", "M405.2 263.8c-29.1.9-47.2 6.2-47.2 25.3 0 12.4 9.9 25.8 35 25.8 33.7 0 51.6-18.4 51.6-48.4v-3.3c-11.8 0-26.3.1-39.4.6m71.5 39.7c0 9.3.3 18.6 1 26.8h-29.8c-.8-6.9-1.1-13.6-1.1-20.2-16.1 19.8-35.3 25.5-61.9 25.5-39.5 0-60.6-20.9-60.6-45 0-35 28.8-47.3 78.6-48.4 13.7-.3 29-.4 41.7-.4v-3.4c0-23.4-15-33-41-33-19.3 0-33.6 8-35 21.8h-33.7c3.6-34.4 39.7-43.1 71.5-43.1 38.1 0 70.3 13.5 70.3 53.8v65.6zm-349-56.8c-2.3-54.7-87.5-56.6-94.4 0h94.4zm-95 21.4c3.5 58.3 79.2 57.4 91.2 21.6H157c-6.4 34.4-43 46.1-74.4 46.1-57.2 0-82.5-31.5-82.5-74 0-46.8 26.2-77.6 83-77.6 45.3 0 78.4 23.7 78.4 75.4v8.5H32.7zm211 45.7c29.8 0 50.2-21.5 50.2-53.8 0-32.4-20.4-53.8-50.2-53.8-29.6 0-50.2 21.4-50.2 53.8 0 32.3 20.6 53.8 50.2 53.8m-82.2-186h32.1v80.6c15.7-18.7 37.4-24.2 58.7-24.2 35.7 0 75.4 24.1 75.4 76.2 0 43.6-31.5 75.4-76 75.4-23.3 0-45.1-8.3-58.7-24.9 0 6.6-.4 13.2-1.1 19.5h-31.5c.5-10.2 1.1-22.8 1.1-33.1V127.8zM640 189.5l-99.2 194.8h-35.9l28.5-54.1-74.6-140.7h37.5l54.9 109.9L606 189.5h34z"], 49781 "edge": [512, 512, [], "f282", "M25.714 228.163c.111-.162.23-.323.342-.485-.021.162-.045.323-.065.485h-.277zm460.572 15.508c0-44.032-7.754-84.465-28.801-122.405C416.498 47.879 343.912 8.001 258.893 8.001 118.962 7.724 40.617 113.214 26.056 227.679c42.429-61.312 117.073-121.376 220.375-124.966 0 0 109.666 0 99.419 104.957H169.997c6.369-37.386 18.554-58.986 34.339-78.926-75.048 34.893-121.85 96.096-120.742 188.315.83 71.448 50.124 144.836 120.743 171.976 83.357 31.847 192.776 7.2 240.132-2
497811.324V363.307c-80.864 56.494-270.871 60.925-272.255-67.572h314.073v-52.064z"], 49782 "elementor": [448, 512, [], "f430", "M425.6 32H22.4C10 32 0 42 0 54.4v403.2C0 470 10 480 22.4 480h403.2c12.4 0 22.4-10 22.4-22.4V54.4C448 42 438 32 425.6 32M164.3 355.5h-39.8v-199h39.8v199zm159.3 0H204.1v-39.8h119.5v39.8zm0-79.6H204.1v-39.8h119.5v39.8zm0-79.7H204.1v-39.8h119.5v39.8z"], 49783 "ello": [496, 512, [], "f5f1", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm143.84 285.2C375.31 358.51 315.79 404.8 248 404.8s-127.31-46.29-143.84-111.6c-1.65-7.44 2.48-15.71 9.92-17.36 7.44-1.65 15.71 2.48 17.36 9.92 14.05 52.91 62 90.11 116.56 90.11s102.51-37.2 116.56-90.11c1.65-7.44 9.92-12.4 17.36-9.92 7.44 1.65 12.4 9.92 9.92 17.36z"], 49784 "ember": [640, 512, [], "f423", "M639.9 254.6c-1.1-10.7-10.7-6.8-10.7-6.8s-15.6 12.1-29.3 10.7c-13.7-1.3-9.4-32-9.4-32s3-28.1-5.1-30.4c-8.1-2.4-18 7.3-18 7.3s-12.4 13.7-18.3 31.2l-1.6.5s1.9-30.6-.3-37.6c-1.6-3.5-16.4-3.2-18.8 3s-14.2 49.2-15 67.2c0 0-23.1 19.6-43.3 22.8s-25-9.4-25-9.4 54.8-15.3 52.9-59.1c-1.9-43.8-44.2-27.6-49-24-4.6 3.5-29.4 18.4-36.6 59.7-.2 1.4-.7 7.5-.7 7.5s-21.2 14.2-33 18c0 0 33-55.6-7.3-80.9-18.3-11-32.8 12.1-32.8 12.1s54.5-60.7 42.5-112c-5.8-24.4-18-27.1-29.2-23.1-17 6.7-23.5 16.7-23.5 16.7s-22 32-27.1 79.5-12.6 105.1-12.6 105.1-10.5 10.2-20.2 10.7-5.4-28.7-5.4-28.7 7.5-44.6 7-52.1-1.1-11.6-9.9-14.2c-8.9-2.7-18.5 8.6-18.5 8.6s-25.5 38.7-27.7 44.6l-1.3 2.4-1.3-1.6s18-52.7.8-53.5c-17.2-.8-28.5 18.8-28.5 18.8s-19.6 32.8-20.4 36.5l-1.3-1.6s8.1-38.2 6.4-47.6c-1.6-9.4-10.5-7.5-10.5-7.5s-11.3-1.3-14.2 5.9-13.7 55.3-15 70.7c0 0-28.2 20.2-46.8 20.4-18.5.3-16.7-11.8-16.7-11.8s68-23.3 49.4-69.2c-8.3-11.8-18-15.5-31.7-15.3-13.7.3-30.3 8.6-41.3 33.3-5.3 11.8-6.8 23-7.8 31.5 0 0-12.3 2.4-18.8-2.9s-10 0-10 0-11.2 14-.1 18.3 28.1 6.1 28.1 6.1c1.6 7.5 6.2 19.5 19.6 29.7 20.2 15.3 58.8-1.3 58.8-1.3l15.9-8.8s.5 14.6 12.1 16.7c11.6 2.1 16.4 1 36.5-47.9 11.8-25 12.6-23.6 12.6-23.6l1.3-.3s-9.1 46.8-5.6 59.7C187.7 319.4 203 318 203 318s8.3 2.4 15-21.2c6.7-23.6 19.6-49.9 19.6-49.9h1.6s-5.6 48.1 3 63.7c8.6 15.6 30.9 5.3 30.9 5.3s15.6-7.8 18-10.2c0 0 18.5 15.8 44.6 12.9 58.3-11.5 79.1-25.9 79.1-25.9s10 24.4 41.1 26.7c35.5 2.7 54.8-18.6 54.8-18.6s-.3 13.5 12.1 18.6c12.4 5.1 20.7-22.8 20.7-22.8l20.7-57.2h1.9s1.1 37.3 21.5 43.2 47-13.7 47-13.7 6.4-3.5 5.3-14.3zm-578 5.3c.8-32 21.8-45.9 29-39 7.3 7 4.6 22-9.1 31.4-13.7 9.5-19.9 7.6-19.9 7.6zm272.8-123.8s19.1-49.7 23.6-25.5-40 96.2-40 96.2c.5-16.2 16.4-70.7 16.4-70.7zm22.8 138.4c-12.6 33-43.3 19.6-43.3 19.6s-3.5-11.8 6.4-44.9 33.3-20.2 33.3-20.2 16.2 12.4 3.6 45.5zm84.6-14.6s-3-10.5 8.1-30.6c11-20.2 19.6-9.1 19.6-9.1s9.4 10.2-1.3 25.5-26.4 14.2-26.4 14.2z"], 49785 "empire": [496, 512, [], "f1d1", "M287.6 54.2c-10.8-2.2-22.1-3.3-33.5-3.6V32.4c78.1 2.2 146.1 44 184.6 106.6l-15.8 9.1c-6.1-9.7-12.7-18.8-20.2-27.1l-18 15.5c-26-29.6-61.4-50.7-101.9-58.4l4.8-23.9zM53.4 322.4l23-7.7c-6.4-18.3-10-38.2-10-58.7s3.3-40.4 9.7-58.7l-22.7-7.7c3.6-10.8 8.3-21.3 13.6-31l-15.8-9.1C34 181 24.1 217.5 24.1 256s10 75 27.1 106.6l15.8-9.1c-5.3-10-9.7-20.3-13.6-31.1zM213.1 434c-40.4-8-75.8-29.1-101.9-58.7l-18 15.8c-7.5-8.6-14.4-17.7-20.2-27.4l-16 9.4c38.5 62.3 106.8 104.3 184.9 106.6v-18.3c-11.3-.3-22.7-1.7-33.5-3.6l4.7-23.8zM93.3 120.9l18 15.5c26-29.6 61.4-50.7 101.9-58.4l-4.7-23.8c10.8-2.2 22.1-3.3 33.5-3.6V32.4C163.9 34.6 95.9 76.4 57.4 139l15.8 9.1c6-9.7 12.6-18.9 20.1-27.2zm309.4 270.2l-18-15.8c-26 29.6-61.4 50.7-101.9 58.7l4.7 23.8c-10.8 1.9-22.1 3.3-33.5 3.6v18.3c78.1-2.2 146.4-44.3 184.9-106.6l-16.1-9.4c-5.7 9.7-12.6 18.8-20.1 27.4zM496 256c0 137-111 248-248 248S0 393 0 256 111 8 248 8s248 111 248 248zm-12.2 0c0-130.1-105.7-235.8-235.8-235.8S12.2 125.9 12.2 256 117.9 491.8 248 491.8 483.8 386.1 483.8 256zm-39-106.6l-15.8 9.1c5.3 9.7 10 20.2 13.6 31l-22.7 7.7c6.4 18.3 9.7 38.2 9.7 58.7s-3.6 40.4-10 58.7l23 7.7c-3.9 10.8-8.3 21-13.6 31l15.8 9.1C462 331 471.9 294.5 471.9 256s-9.9-75-27.1-106.6zm-183 177.7c16.3-3.3 30.4-11.6 40.7-23.5l51.2 44.8c11.9-13.6 21.3-29.3 27.1-46.8l-64.2-22.1c2.5-7.5 3.9-15.2 3.9-23.5s-1.4-16.1-3.9-23.5l64.5-22.1c-6.1-17.4-15.5-33.2-27.4-46.8l-51.2 44.8c-10.2-11.9-24.4-20.5-40.7-23.8l13.3-66.4c-8.6-1.9-17.7-2.8-27.1-2.8-9.4 0-18.5.8-27.1 2.8l13.3 66.4c-16.3 3.3-30.4 11.9-40.7 23.8l-51.2-44.8c-11.9 13.6-21.3 29.3-27.4 46.8l64.5 22.1c-2.5 7.5-3.9 15.2-3.9 23.5s1.4 16.1 3.9 23.5l-64.2 22.1c5.8 17.4 15.2 33.2 27.1 46.8l51.2-44.8c10.2 11.9 24.4 20.2 40.7 23.5l-13.3 66.7c8.6 1.7 17.7 2.8 27.1 2.8 9.4 0 18.5-1.1 27.1-2.8l-13.3-66.7z"], 49786 "envira": [448, 512, [], "f299", "M0 32c477.6 0 366.6 317.3 367.1 366.3L448 480h-26l-70.4-71.2c-39 4.2-124.4 34.5-214.4-37C47 300.3 52 214.7 0 32zm79.7 46c-49.7-23.5-5.2 9.2-5.2 9.2 45.2 31.2 66 73.7 90.2 119.9 31.5 60.2 79 139.7 144.2 167.7 65 28 34.2 12.5 6-8.5-28.2-21.2-68.2-87-91-130.2-31.7-60-61-118.6-144.2-158.1z"], 49787 "erlang": [640, 512, [], "f39d", "M21.7 246.4c-.1 86.8 29 159.5 78.7 212.1H0v-405h87.2c-41.5 50.2-65.6 116.2-65.5 192.9zM640 53.6h-83.6c31.4 42.7 48.7 97.5 46.2 162.7.5 6 .5 11.7 0 24.1H230.2c-.2 109.7 38.9 194.9 138.6 195.3 68.5-.3 118-51 151.9-106.1l96.4 48.2c-17.4 30.9-36.5 57.8-57.9 80.8H640v-405zm-80.8 405s0-.1 0 0h-.2.2zm-3.1-405h.3l-.1-.1-.2.1zm-230.7 9.6c-45.9.1-85.1 33.5-89.2 83.2h169.9c-1.1-49.7-34.5-83.1-80.7-83.2z"], 49788 "ethereum": [320, 512, [], "f42e", "M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z"], 49789 "etsy": [384, 512, [], "f2d7", "M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z"], 49790 "expeditedssl": [496, 512, [], "f23e", "M248 43.4C130.6 43.4 35.4 138.6 35.4 256S130.6 468.6 248 468.6 460.6 373.4 460.6 256 365.4 43.4 248 43.4zm-97.4 132.9c0-53.7 43.7-97.4 97.4-97.4s97.4 43.7 97.4 97.4v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6c0-82.1-124-82.1-124 0v26.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-26.6zM389.7 380c0 9.7-8 17.7-17.7 17.7H124c-9.7 0-17.7-8-17.7-17.7V238.3c0-9.7 8-17.7 17.7-17.7h248c9.7 0 17.7 8 17.7 17.7V380zm-248-137.3v132.9c0 2.5-1.9 4.4-4.4 4.4h-8.9c-2.5 0-4.4-1.9-4.4-4.4V242.7c0-2.5 1.9-4.4 4.4-4.4h8.9c2.5 0 4.4
497901.9 4.4 4.4zm141.7 48.7c0 13-7.2 24.4-17.7 30.4v31.6c0 5-3.9 8.9-8.9 8.9h-17.7c-5 0-8.9-3.9-8.9-8.9v-31.6c-10.5-6.1-17.7-17.4-17.7-30.4 0-19.7 15.8-35.4 35.4-35.4s35.5 15.8 35.5 35.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 478.3C121 486.3 17.7 383 17.7 256S121 25.7 248 25.7 478.3 129 478.3 256 375 486.3 248 486.3z"], 49791 "facebook": [448, 512, [], "f09a", "M448 56.7v398.5c0 13.7-11.1 24.7-24.7 24.7H309.1V306.5h58.2l8.7-67.6h-67v-43.2c0-19.6 5.4-32.9 33.5-32.9h35.8v-60.5c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9h-58.4v67.6h58.4V480H24.7C11.1 480 0 468.9 0 455.3V56.7C0 43.1 11.1 32 24.7 32h398.5c13.7 0 24.8 11.1 24.8 24.7z"], 49792 "facebook-f": [264, 512, [], "f39e", "M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229"], 49793 "facebook-messenger": [448, 512, [], "f39f", "M224 32C15.9 32-77.5 278 84.6 400.6V480l75.7-42c142.2 39.8 285.4-59.9 285.4-198.7C445.8 124.8 346.5 32 224 32zm23.4 278.1L190 250.5 79.6 311.6l121.1-128.5 57.4 59.6 110.4-61.1-121.1 128.5z"], 49794 "facebook-square": [448, 512, [], "f082", "M448 80v352c0 26.5-21.5 48-48 48h-85.3V302.8h60.6l8.7-67.6h-69.3V192c0-19.6 5.4-32.9 33.5-32.9H384V98.7c-6.2-.8-27.4-2.7-52.2-2.7-51.6 0-87 31.5-87 89.4v49.9H184v67.6h60.9V480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"], 49795 "firefox": [480, 512, [], "f269", "M478.1 235.3c-.7-4.5-1.4-7.1-1.4-7.1s-1.8 2-4.7 5.9c-.9-10.7-2.8-21.2-5.8-31.6-3.7-12.9-8.5-25.4-14.5-37.4-3.8-8-8.2-15.6-13.3-22.8-1.8-2.7-3.7-5.4-5.6-7.9-8.8-14.4-19-23.3-30.7-40-7.6-12.8-12.9-26.9-15.4-41.6-3.2 8.9-5.7 18-7.4 27.3-12.1-12.2-22.5-20.8-28.9-26.7C319.4 24.2 323 9.1 323 9.1S264.7 74.2 289.9 142c8.7 23 23.8 43.1 43.4 57.9 24.4 20.2 50.8 36 64.7 76.6-11.2-21.3-28.1-39.2-48.8-51.5 6.2 14.7 9.4 30.6 9.3 46.5 0 61-49.6 110.5-110.6 110.4-8.3 0-16.5-.9-24.5-2.8-9.5-1.8-18.7-4.9-27.4-9.3-12.9-7.8-24-18.1-32.8-30.3l-.2-.3 2 .7c4.6 1.6 9.2 2.8 14 3.7 18.7 4 38.3 1.7 55.6-6.6 17.5-9.7 28-16.9 36.6-14h.2c8.4 2.7 15-5.5 9-14-10.4-13.4-27.4-20-44.2-17-17.5 2.5-33.5 15-56.4 2.9-1.5-.8-2.9-1.6-4.3-2.5-1.6-.9 4.9 1.3 3.4.3-5-2.5-9.8-5.4-14.4-8.6-.3-.3 3.5 1.1 3.1.8-5.9-4-11-9.2-15-15.2-4.1-7.4-4.5-16.4-1-24.1 2.1-3.8 5.4-6.9 9.3-8.7 3 1.5 4.8 2.6 4.8 2.6s-1.3-2.5-2.1-3.8c.3-.1.5 0 .8-.2 2.6 1.1 8.3 4 11.4 5.8 2.1 1.1 3.8 2.7 5.2 4.7 0 0 1-.5.3-2.7-1.1-2.7-2.9-5-5.4-6.6h.2c2.3 1.2 4.5 2.6 6.6 4.1 1.9-4.4 2.8-9.2 2.6-14 .2-2.6-.2-5.3-1.1-7.8-.8-1.6.5-2.2 1.9-.5-.2-1.3-.7-2.5-1.2-3.7v-.1s.8-1.1 1.2-1.5c1-1 2.1-1.9 3.4-2.7 7.2-4.5 14.8-8.4 22.7-11.6 6.4-2.8 11.7-4.9 12.8-5.6 1.6-1 3.1-2.2 4.5-3.5 5.3-4.5 9-10.8 10.2-17.7.1-.9.2-1.8.3-2.8v-1.5c-.9-3.5-6.9-6.1-38.4-9.1-11.1-1.8-20-10.1-22.5-21.1v.1c-.4 1.1-.9 2.3-1.3 3.5.4-1.2.8-2.3 1.3-3.5v-.2c6-15.7 16.8-29.1 30.8-38.3.8-.7-3.2.2-2.4-.5 2.7-1.3 5.4-2.5 8.2-3.5 1.4-.6-6-3.4-12.6-2.7-4 .2-8 1.2-11.7 2.8 1.6-1.3 6.2-3.1 5.1-3.1-8.4 1.6-16.5 4.7-23.9 9 0-.8.1-1.5.5-2.2-5.9 2.5-11 6.5-15 11.5.1-.9.2-1.8.2-2.7-2.7 2-5.2 4.3-7.3 6.9l-.1.1c-17.4-6.7-36.3-8.3-54.6-4.7l-.2-.1h.2c-3.8-3.1-7.1-6.7-9.7-10.9l-.2.1-.4-.2c-1.2-1.8-2.4-3.8-3.7-6-.9-1.6-1.8-3.4-2.7-5.2 0-.1-.1-.2-.2-.2-.4 0-.6 1.7-.9 1.3v-.1c-3.2-8.3-4.7-17.2-4.4-26.2l-.2.1c-5.1 3.5-9 8.6-11.1 14.5-.9 2.1-1.6 3.3-2.2 4.5v-.5c.1-1.1.6-3.3.5-3.1-.1.2-.2.3-.3.4-1.5 1.7-2.9 3.7-3.9 5.8-.9 1.9-1.7 3.9-2.3 5.9-.1.3 0-.3 0-1s.1-2 0-1.7l-.3.7c-6.7 14.9-10.9 30.8-12.4 47.1-.4 2.8-.6 5.6-.5 8.3v.2c-4.8 5.2-9 11-12.7 17.1-12.1 20.4-21.1 42.5-26.8 65.6 4
49795-8.8 8.8-17.2 14.3-25.1C5.5 228.5 0 257.4 0 286.6c1.8-8.6 4.2-17 7-25.3-1.7 34.5 4.9 68.9 19.4 100.3 19.4 43.5 51.6 80 92.3 104.7 16.6 11.2 34.7 19.9 53.8 25.8 2.5.9 5.1 1.8 7.7 2.7-.8-.3-1.6-.7-2.4-1 22.6 6.8 46.2 10.3 69.8 10.3 83.7 0 111.3-31.9 113.8-35 4.1-3.7 7.5-8.2 9.9-13.3 1.6-.7 3.2-1.4 4.9-2.1l1-.5 1.9-.9c12.6-5.9 24.5-13.4 35.3-22.1 16.3-11.7 27.9-28.7 32.9-48.1 3-7.1 3.1-15 .4-22.2.9-1.4 1.7-2.8 2.7-4.3 18-28.9 28.2-61.9 29.6-95.9v-2.8c0-7.3-.6-14.5-1.9-21.6z"], 49796 "first-order": [448, 512, [], "f2b0", "M12.9 229.2c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4h-.2zM224 96.6c-7.1 0-14.6.6-21.4 1.7l3.7 67.4-22-64c-14.3 3.7-27.7 9.4-40 16.6l29.4 61.4-45.1-50.9c-11.4 8.9-21.7 19.1-30.6 30.9l50.6 45.4-61.1-29.7c-7.1 12.3-12.9 25.7-16.6 40l64.3 22.6-68-4c-.9 7.1-1.4 14.6-1.4 22s.6 14.6 1.4 21.7l67.7-4-64 22.6c3.7 14.3 9.4 27.7 16.6 40.3l61.1-29.7L97.7 352c8.9 11.7 19.1 22.3 30.9 30.9l44.9-50.9-29.5 61.4c12.3 7.4 25.7 13.1 40 16.9l22.3-64.6-4 68c7.1 1.1 14.6 1.7 21.7 1.7 7.4 0 14.6-.6 21.7-1.7l-4-68.6 22.6 65.1c14.3-4 27.7-9.4 40-16.9L274.9 332l44.9 50.9c11.7-8.9 22-19.1 30.6-30.9l-50.6-45.1 61.1 29.4c7.1-12.3 12.9-25.7 16.6-40.3l-64-22.3 67.4 4c1.1-7.1 1.4-14.3 1.4-21.7s-.3-14.9-1.4-22l-67.7 4 64-22.3c-3.7-14.3-9.1-28-16.6-40.3l-60.9 29.7 50.6-45.4c-8.9-11.7-19.1-22-30.6-30.9l-45.1 50.9 29.4-61.1c-12.3-7.4-25.7-13.1-40-16.9L241.7 166l4-67.7c-7.1-1.2-14.3-1.7-21.7-1.7zM443.4 128v256L224 512 4.6 384V128L224 0l219.4 128zm-17.1 10.3L224 20.9 21.7 138.3v235.1L224 491.1l202.3-117.7V138.3zM224 37.1l187.7 109.4v218.9L224 474.9 36.3 365.4V146.6L224 37.1zm0 50.9c-92.3 0-166.9 75.1-166.9 168 0 92.6 74.6 167.7 166.9 167.7 92 0 166.9-75.1 166.9-167.7 0-92.9-74.9-168-166.9-168z"], 49797 "first-order-alt": [496, 512, [], "f50a", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 488.21C115.34 496.21 7.79 388.66 7.79 256S115.34 15.79 248 15.79 488.21 123.34 488.21 256 380.66 496.21 248 496.21zm0-459.92C126.66 36.29 28.29 134.66 28.29 256S126.66 475.71 248 475.71 467.71 377.34 467.71 256 369.34 36.29 248 36.29zm0 431.22c-116.81 0-211.51-94.69-211.51-211.51S131.19 44.49 248 44.49 459.51 139.19 459.51 256 364.81 467.51 248 467.51zm186.23-162.98a191.613 191.613 0 0 1-20.13 48.69l-74.13-35.88 61.48 54.82a193.515 193.515 0 0 1-37.2 37.29l-54.8-61.57 35.88 74.27a190.944 190.944 0 0 1-48.63 20.23l-27.29-78.47 4.79 82.93c-8.61 1.18-17.4 1.8-26.33 1.8s-17.72-.62-26.33-1.8l4.76-82.46-27.15 78.03a191.365 191.365 0 0 1-48.65-20.2l35.93-74.34-54.87 61.64a193.85 193.85 0 0 1-37.22-37.28l61.59-54.9-74.26 35.93a191.638 191.638 0 0 1-20.14-48.69l77.84-27.11-82.23 4.76c-1.16-8.57-1.78-17.32-1.78-26.21 0-9 .63-17.84 1.82-26.51l82.38 4.77-77.94-27.16a191.726 191.726 0 0 1 20.23-48.67l74.22 35.92-61.52-54.86a193.85 193.85 0 0 1 37.28-37.22l54.76 61.53-35.83-74.17a191.49 191.49 0 0 1 48.65-20.13l26.87 77.25-4.71-81.61c8.61-1.18 17.39-1.8 26.32-1.8s17.71.62 26.32 1.8l-4.74 82.16 27.05-77.76c17.27 4.5 33.6 11.35 48.63 20.17l-35.82 74.12 54.72-61.47a193.13 193.13 0 0 1 37.24 37.23l-61.45 54.77 74.12-35.86a191.515 191.515 0 0 1 20.2 48.65l-77.81 27.1 82.24-4.75c1.19 8.66 1.82 17.5 1.82 26.49 0 8.88-.61 17.63-1.78 26.19l-82.12-4.75 77.72 27.09z"], 49798 "firstdraft": [384, 512, [], "f3a1", "M384 192h-64v128H192v128H0v-25.6h166.4v-128h128v-128H384V192zm-25.6 38.4v128h-128v128H64V512h192V384h128V230.4h-25.6zm25.6 192h-89.6V512H320v-64h64v-25.6zM0 0v384h128V256h128V128h128V0H0z"], 49799 "flickr": [448, 512, [], "f16e", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"], 49800 "flipboard": [448, 512, [], "f44d", "M0 32v448h448V32H0zm358.4 179.2h-89.6v89.6h-89.6v89.6H89.6V121.6h268.8v89.6z"], 49801 "fly": [384, 512, [], "f417", "M197.8 427.8c12.9 11.7 33.7 33.3 33.2 50.7 0 .8-.1 1.6-.1 2.5-1.8 19.8-18.8 31.1-39.1 31-25-.1-39.9-16.8-38.7-35.8 1-16.2 20.5-36.7 32.4-47.6 2.3-2.1 2.7-2.7 5.6-3.6 3.4 0 3.9.3 6.7 2.8zM331.9 67.3c-16.3-25.7-38.6-40.6-63.3-52.1C243.1 4.5 214-.2 192 0c-44.1 0-71.2 13.2-81.1 17.3C57.3 45.2 26.5 87.2 28 158.6c7.1 82.2 97 176 155.8 233.8 1.7 1.6 4.5 4.5 6.2 5.1l3.3.1c2.1-.7 1.8-.5 3.5-2.1 52.3-49.2 140.7-145.8 155.9-215.7 7-39.2 3.1-72.5-20.8-112.5zM186.8 351.9c-28-51.1-65.2-130.7-69.3-189-3.4
49801-47.5 11.4-131.2 69.3-136.7v325.7zM328.7 180c-16.4 56.8-77.3 128-118.9 170.3C237.6 298.4 275 217 277 158.4c1.6-45.9-9.8-105.8-48-131.4 88.8 18.3 115.5 98.1 99.7 153z"], 49802 "font-awesome": [448, 512, [], "f2b4", "M397.8 32H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-45.4 284.3c0 4.2-3.6 6-7.8 7.8-16.7 7.2-34.6 13.7-53.8 13.7-26.9 0-39.4-16.7-71.7-16.7-23.3 0-47.8 8.4-67.5 17.3-1.2.6-2.4.6-3.6 1.2V385c0 1.8 0 3.6-.6 4.8v1.2c-2.4 8.4-10.2 14.3-19.1 14.3-11.3 0-20.3-9-20.3-20.3V166.4c-7.8-6-13.1-15.5-13.1-26.3 0-18.5 14.9-33.5 33.5-33.5 18.5 0 33.5 14.9 33.5 33.5 0 10.8-4.8 20.3-13.1 26.3v18.5c1.8-.6 3.6-1.2 5.4-2.4 18.5-7.8 40.6-14.3 61.5-14.3 22.7 0 40.6 6 60.9 13.7 4.2 1.8 8.4 2.4 13.1 2.4 22.7 0 47.8-16.1 53.8-16.1 4.8 0 9 3.6 9 7.8v140.3z"], 49803 "font-awesome-alt": [448, 512, [], "f35c", "M397.8 67.8c7.8 0 14.3 6.6 14.3 14.3v347.6c0 7.8-6.6 14.3-14.3 14.3H50.2c-7.8 0-14.3-6.6-14.3-14.3V82.2c0-7.8 6.6-14.3 14.3-14.3h347.6m0-35.9H50.2C22.7 32 0 54.7 0 82.2v347.6C0 457.3 22.7 480 50.2 480h347.6c27.5 0 50.2-22.7 50.2-50.2V82.2c0-27.5-22.7-50.2-50.2-50.2zm-58.5 139.2c-6 0-29.9 15.5-52.6 15.5-4.2 0-8.4-.6-12.5-2.4-19.7-7.8-37-13.7-59.1-13.7-20.3 0-41.8 6.6-59.7 13.7-1.8.6-3.6 1.2-4.8 1.8v-17.9c7.8-6 12.5-14.9 12.5-25.7 0-17.9-14.3-32.3-32.3-32.3s-32.3 14.3-32.3 32.3c0 10.2 4.8 19.7 12.5 25.7v212.1c0 10.8 9 19.7 19.7 19.7 9 0 16.1-6 18.5-13.7V385c.6-1.8.6-3 .6-4.8V336c1.2 0 2.4-.6 3-1.2 19.7-8.4 43-16.7 65.7-16.7 31.1 0 43 16.1 69.3 16.1 18.5 0 36.4-6.6 52-13.7 4.2-1.8 7.2-3.6 7.2-7.8V178.3c1.8-4.1-2.3-7.1-7.7-7.1z"], 49804 "font-awesome-flag": [448, 512, [], "f425", "M444.373 359.424c0 7.168-6.144 10.24-13.312 13.312-28.672 12.288-59.392 23.552-92.16 23.552-46.08 0-67.584-28.672-122.88-28.672-39.936 0-81.92 14.336-115.712 29.696-2.048 1.024-4.096 1.024-6.144 2.048v77.824c0 21.405-16.122 34.816-33.792 34.816-19.456 0-34.816-15.36-34.816-34.816V102.4C12.245 92.16 3.029 75.776 3.029 57.344 3.029 25.6 28.629 0 60.373 0s57.344 25.6 57.344 57.344c0 18.432-8.192 34.816-22.528 45.056v31.744c4.124-1.374 58.768-28.672 114.688-28.672 65.27 0 97.676 27.648 126.976 27.648 38.912 0 81.92-27.648 92.16-27.648 8.192 0 15.36 6.144 15.36 13.312v240.64z"], 49805 "font-awesome-logo-full": [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 7
498057.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"], 49806 "fonticons": [448, 512, [], "f280", "M0 32v448h448V32H0zm167.4 196h67.4l-11.1 37.3H168v112.9c0 5.8-2 6.7 3.2 7.3l43.5 4.1v25.1H84V389l21.3-2c5.2-.6 6.7-2.3 6.7-7.9V267.7c0-2.3-2.9-2.3-5.8-2.3H84V228h28v-21c0-49.6 26.5-70 77.3-70 34.1 0 64.7 8.2 64.7 52.8l-50.7 6.1c.3-18.7-4.4-23-16.3-23-18.4 0-19 9.9-19 27.4v23.3c0 2.4-3.5 4.4-.6 4.4zM364 414.7H261.3v-25.1l20.4-2.6c5.2-.6 7.6-1.7 7.6-7.3V271.8c0-4.1-2.9-6.7-6.7-7.9l-24.2-6.4 6.7-29.5h80.2v151.7c0 5.8-2.6 6.4 2.9 7.3l15.7 2.6v25.1zm-21.9-255.5l9 33.2-7.3 7.3-31.2-16.6-31.2 16.6-7.3-7.3 9-33.2-21.8-24.2 3.5-9.6h27.7l15.5-28h9.3l15.5 28h27.7l3.5 9.6-21.9 24.2z"], 49807 "fonticons-fi": [384, 512, [], "f3a2", "M114.4 224h92.4l-15.2 51.2h-76.4V433c0 8-2.8 9.2 4.4 10l59.6 5.6V483H0v-35.2l29.2-2.8c7.2-.8 9.2-3.2 9.2-10.8V278.4c0-3.2-4-3.2-8-3.2H0V224h38.4v-28.8c0-68 36.4-96 106-96 46.8 0 88.8 11.2 88.8 72.4l-69.6 8.4c.4-25.6-6-31.6-22.4-31.6-25.2 0-26 13.6-26 37.6v32c0 3.2-4.8 6-.8 6zM384 483H243.2v-34.4l28-3.6c7.2-.8 10.4-2.4 10.4-10V287c0-5.6-4-9.2-9.2-10.8l-33.2-8.8 9.2-40.4h110v208c0 8-3.6 8.8 4 10l21.6 3.6V483zm-30-347.2l12.4 45.6-10 10-42.8-22.8-42.8 22.8-10-10 12.4-45.6-30-36.4 4.8-10h38L307.2 51H320l21.2 38.4h38l4.8 13.2-30 33.2z"], 49808 "fort-awesome": [512, 512, [], "f286", "M489.2 287.9h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6V146.2c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32h-36.6v-32c0-6-8-4.6-11.7-4.6v-38c8.3-2 17.1-3.4 25.7-3.4 10.9 0 20.9 4.3 31.4 4.3 4.6 0 27.7-1.1 27.7-8v-60c0-2.6-2-4.6-4.6-4.6-5.1 0-15.1 4.3-24 4.3-9.7 0-20.9-4.3-32.6-4.3-8 0-16 1.1-23.7 2.9v-4.9c5.4-2.6 9.1-8.3 9.1-14.3 0-20.7-31.4-20.8-31.4 0 0 6 3.7 11.7 9.1 14.3v111.7c-3.7 0-11.7-1.4-11.7 4.6v32h-36.6v-32c0-2.6-2-4.6-4.6-4.6h-27.4c-2.6 0-4.6 2-4.6 4.6v32H128v-32c0-2.6-2-4.6-4.6-4.6H96c-2.6 0-4.6 2-4.6 4.6v178.3H54.8v-32c0-2.6-2-4.6-4.6-4.6H22.8c-2.6 0-4.6 2-4.6 4.6V512h182.9v-96c0-72.6 109.7-72.6 109.7 0v96h182.9V292.5c.1-2.6-1.9-4.6-4.5-4.6zm-288.1-4.5c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64zm146.4 0c0 2.6-2 4.6-4.6 4.6h-27.4c-2.6 0-4.6-2-4.6-4.6v-64c0-2.6 2-4.6 4.6-4.6h27.4c2.6 0 4.6 2 4.6 4.6v64z"], 49809 "fort-awesome-alt": [512, 512, [], "f3a3", "M211.7 241.1v51.7c0 2.1-1.6 3.7-3.7 3.7h-22.2c-2.1 0-3.7-1.6-3.7-3.7v-51.7c0-2.1 1.6-3.7 3.7-3.7H208c2.1 0 3.7 1.6 3.7 3.7zm114.5-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v51.7c0 2.1 1.6 3.7 3.7 3.7h22.2c2.1 0 3.7-1.6 3.7-3.7v-51.7c-.1-2.1-1.7-3.7-3.7-3.7zm-29.1 263.2c-.9.1-1.7.3-2.6.4-1 .2-2.1.3-3.1.5-.9.1-1.8.3-2.8.4-1 .1-2 .3-3 .4-1 .1-2 .2-2.9.3-1 .1-1.9.2-2.9.3-1 .1-2.1.2-3.1.3-.9.1-1.8.2-2.7.2-1.1.1-2.3.1-3.4.2-.8 0-1.7.1-2.5.1-1.3.1-2.6.1-3.9.1-.7 0-1.4.1-2.1.1-2 0-4 .1-6 .1s-4 0-6-.1c-.7 0-1.4 0-2.1-.1-1.3 0-2.6-.1-3.9-.1-.8 0-1.7-.1-2.5-.1-1.1-.1-2.3-.1-3.4-.2-.9-.1-1.8-.1-2.7-.2-1-.1-2.1-.2-3.1-.3-1-.1-1.9-.2-2.9-.3-1-.1-2-.2-2.9-.3-1-.1-2-.2-3-.4-.9-.1-1.8-.3-2.8-.4-1-.1-2.1-.3-3.1-.5-.9-.1-1.7-.3-2.6-.4-65.6-10.9-122.5-47.7-160-99.4-.2-.2-.3-.5-.5-.7-.8-1.1-1.6-2.2-2.3-3.3-.3-.4-.6-.8-.8-1.2-.7-1.1-1.4-2.1-2.1-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.4-2.1-2-3.2-.3-.5-.6-.9-.9-1.4-.7-1.1-1.3-2.2-2-3.3-.2-.4-.5-.8-.7-1.2-2.4-4-4.6-8.1-6.8-12.2-.1-.2-.2-.3-.3-.5-.6-1.1-1.1-2.2-1.7-3.3-.3-.6-.6-1.1-.8-1.7-.5-1-1-2.1-1.5-3.1-.3-.7-.6-1.3-.9-2-.5-1-.9-2-1.4-3l-.9-2.1c-.4-1-.9-2-1.3-3-.3-.7-.6-1.5-.9-2.2l-1.2-3c-.3-.8-.6-1.5-.9-2.3-.4-1-.8-2-1.1-3-.3-.9-.6-1.8-1-2.8-.6-1.6-1.1-3.3-1.7-4.9-.3-.9-.6-1.8-.9-2.8-.3-.9-.5-1.8-.8-2.7-.3-.9-.6-1.9-.8-2.8-.3-.9-.5-1.8-.8-2.7-.3-1-.5-1.9-.8-2.9-.2-.9-.5-1.8-.7-2.7-.3-1-.5-2-.7-3-.2-.9-.4-1.7-.6-2.6-.2-1.1-.5-2.2-.7-3.2-.2-.8-.3-1.6-.5-2.4-.3-1.3-.5-2.7-.8-4-.1-.6-.2-1.1-.3-1.7l-.9-5.7c-.1-.6-.2-1.3-.3-1.9-.2-1.3-.4-2.6-.5-3.9-.1-.8-.2-1.5-.3-2.3-.1-1.2-.3-2.4-.4-3.6-.1-.8-.2-1.6-.2-2.4-.1-1.2-.2-2.4-.3-3.5-.1-.8-.1-1.6-.2-2.4-.1-1.2-.2-2.4-.2-3.7 0-.8-.1-1.5-.
498091-2.3-.1-1.3-.1-2.7-.2-4 0-.7 0-1.3-.1-2 0-2-.1-4-.1-6 0-53.5 16.9-103 45.8-143.6 2.3-3.2 4.7-6.4 7.1-9.5 4.9-6.2 10.1-12.3 15.6-18 2.7-2.9 5.5-5.7 8.4-8.4 2.9-2.7 5.8-5.4 8.8-8 4.5-3.9 9.1-7.6 13.9-11.2 1.6-1.2 3.2-2.4 4.8-3.5C140 34.2 171.7 20.1 206 13c16.1-3.3 32.9-5 50-5s33.8 1.7 50 5c34.3 7 66 21.1 93.6 40.7 1.6 1.2 3.2 2.3 4.8 3.5 4.8 3.6 9.4 7.3 13.9 11.2 12 10.4 23 21.9 32.8 34.4 2.5 3.1 4.8 6.3 7.1 9.5C487.1 153 504 202.5 504 256c0 2 0 4-.1 6 0 .7 0 1.3-.1 2 0 1.3-.1 2.7-.2 4 0 .8-.1 1.5-.1 2.3-.1 1.2-.1 2.4-.2.7-.1.8-.1 1.6-.2 2.4-.1 1.2-.2 2.4-.3 3.5-.1.8-.2 1.6-.2 2.4-.1 1.2-.3 2.4-.4 3.6-.1.8-.2 1.5-.3 2.3-.2 1.3-.4 2.6-.5 3.9-.1.6-.2 1.3-.3 1.9l-.9 5.7c-.1.6-.2 1.1-.3 1.7-.2 1.3-.5 2.7-.8 4-.2.8-.3 1.6-.5 2.4-.2 1.1-.5 2.2-.7 3.2-.2.9-.4 1.7-.6 2.6-.2 1-.5 2-.7 3-.2.9-.5 1.8-.7 2.7-.3 1-.5 1.9-.8 2.9-.2.9-.5 1.8-.8 2.7-.3.9-.6 1.9-.8 2.8-.3.9-.5 1.8-.8 2.7-.3.9-.6 1.8-.9 2.8-.5 1.6-1.1 3.3-1.7 4.9-.3.9-.6 1.8-1 2.8-.4 1-.7 2-1.1 3-.3.8-.6 1.5-.9 2.3l-1.2 3c-.3.7-.6 1.5-.9 2.2-.4 1-.8 2-1.3 3l-.9 2.1c-.4 1-.9 2-1.4 3-.3.7-.6 1.3-.9 2-.5 1-1 2.1-1.5 3.1-.3.6-.6 1.1-.8 1.7-.6 1.1-1.1 2.2-1.7 3.3-.1.2-.2.3-.3.5-2.2 4.1-4.4 8.2-6.8 12.2-.2.4-.5.8-.7 1.2-.7 1.1-1.3 2.2-2 3.3-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2 3.2-.3.5-.6.9-.9 1.4-.7 1.1-1.4 2.1-2.1 3.2-.3.4-.6.8-.8 1.2-.8 1.1-1.5 2.2-2.3 3.3-.2.2-.3.5-.5.7-37.6 54.7-94.5 91.4-160.1 102.4zm117.3-86.2c13-13 24.2-27.4 33.6-42.9v-71.3c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7V326h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7H304c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-4.8-6.5-3.7-9.5-3.7v-30.7c6.7-1.6 13.8-2.8 20.8-2.8 8.8 0 16.8 3.5 25.4 3.5 3.7 0 22.4-.9 22.4-6.5V93.4c0-2.1-1.6-3.7-3.7-3.7-4.2 0-12.2 3.5-19.4 3.5-7.9 0-16.9-3.5-26.3-3.5-6.5 0-12.9.9-19.2 2.3v-3.9c4.4-2.1 7.4-6.7 7.4-11.5 0-16.8-25.4-16.8-25.4 0 0 4.8 3 9.5 7.4 11.5v90.2c-3 0-9.5-1.1-9.5 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.2c-2.1 0-3.7 1.6-3.7 3.7v25.9h-29.5V182c0-2.1-1.6-3.7-3.7-3.7h-22.1c-2.1 0-3.7 1.6-3.7 3.7v144H93.5v-25.8c0-2.1-1.6-3.7-3.7-3.7H67.7c-2.1 0-3.7 1.6-3.7 3.7v71.3c9.4 15.5 20.6 29.9 33.6 42.9 20.6 20.6 44.5 36.7 71.2 48 13.9 5.9 28.2 10.3 42.9 13.2v-75.8c0-58.6 88.6-58.6 88.6 0v75.8c14.7-2.9 29-7.4 42.9-13.2 26.7-11.3 50.6-27.4 71.2-48"], 49810 "forumbee": [448, 512, [], "f211", "M5.8 309.7C2 292.7 0 275.5 0 258.3 0 135 99.8 35 223.1 35c16.6 0 33.3 2 49.3 5.5C149 87.5 51.9 186 5.8 309.7zm392.9-189.2C385 103 369 87.8 350.9 75.2c-149.6 44.3-266.3 162.1-309.7 312 12.5 18.1 28 35.6 45.2 49 43.1-151.3 161.2-271.7 312.3-315.7zm15.8 252.7c15.2-25.1 25.4-53.7 29.5-82.8-79.4 42.9-145 110.6-187.6 190.3 30-4.4 58.9-15.3 84.6-31.3 35 13.1 70.9 24.3 107 33.6-9.3-36.5-20.4-74.5-33.5-109.8zm29.7-145.5c-2.6-19.5-7.9-38.7-15.8-56.8C290.5 216.7 182 327.5 137.1 466c18.1 7.6 37 12.5 56.6 15.2C240 367.1 330.5 274.4 444.2 227.7z"], 49811 "foursquare": [368, 512, [], "f180", "M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z"], 49812 "free-code-camp": [576, 512, [], "f2c5", "M69.3 144.5c-41 68.5-36.4 163 1 227C92.5 409.7 120 423.9 120 438c0 6.8-6 13-12.8 13C87.7 451 8 375.5 8 253.2c0-111.5 78-186 97.1-186 6 0 14.9 4.8 14.9 11.1 0 12.7-28.3 28.6-50.7 66.2zm195.8 213.8c4.5 1.8 12.3 5.2 12.3-1.2 0-2.7-2.2-2.9-4.3-3.6-8.5-3.4-14-7.7-19.1-15.2-8.2-12.1-10.1-24.2-10.1-38.6 0-32.1 44.2-37.9 44.2-70 0-12.3-7.7-15.9-7.7-19.3 0-2.2.7-2.2 2.9-2.2 8 0 19.1 13.3 22.5 19.8 2.2 4.6 2.4 6 2.4 11.1 0 7-.7 14.2-.7 21.3 0 27 31.9 19.8 31.9 6.8 0-6-3.6-11.6-3.6-17.4 0-.7 0-1.2.7-1.2 3.4 0 9.4 7.7 11.1 10.1 5.8 8.9 8.5 20.8 8.5 31.4 0 32.4-29.5 49-29.5 56 0 1 2.9 7.7 12.1 1.9 29.7-15.1 53.1-47.6 53.1-89.8 0-33.6-8.7-57.7-32.1-82.6-3.9-4.1-16.4-16.9-22.5-16.9-8.2 0 7.2 18.6 7.2 31.2 0 7.2-4.8 12.3-12.3 12.3-11.6 0-14.5-25.4-15.9-33.3-5.8-33.8-12.8-58.2-46.4-74.1-10.4-5-36.5-11.8-36.5-2.2 0 2.4 2.7 4.1 4.6 5.1 9.2 5.6 19.6 21.4 19.6 38.2 0 46.1-57.7 88.2-57.7 136.2-.2 40.3 28.1 72.6 65.3 86.2zM470.4 67c-6 0-14.4 6.5-14.4 12.6 0 8.7 12.1 19.6 17.6 25.4 81.6 85.1 78.6 214.3 17.6 291-7 8.9-35.3 35.3-35.3 43.5 0 5.1 8.2 11.4 13.2 11.4 25.4 0 98.8-80.8 98.8-185.7C568 145.9 491.8 67 470.4 67zm-42.3 323.1H167c-9.4 0-15.5 7.5-15.5 16.4 0 8.5 7 15.5 15.5 15.5h261.1c9.4 0 11.9-7.5 11.9-16.4 0-8.5-3.5-15.5-11.9-15.5z"], 49813 "freebsd": [448, 512, [], "f3a4", "M303.7 96.2c11.1-11.1 115.5-77 139.2-53.2 23.7 23.7-42.1 128.1-53.2 139.2-11.1 11.1-39.4.9-63.1-22.9-23.8-23.7-34.1-52-22.9-63.1zM109.9 68.1C73.6 47.5 22 24.6 5.6 41.1c-16.6 16.6 7.1 69.4 27.9 105.7 18.5-32.2 44.8-59.3 76.4-78.7zM406.7 174c3.3 11.3 2.7 20.7-2.7 26.1-20.3 20.3-87.5-27-109.3-70.1-18-32.3-11.1-
4981353.4 14.9-48.7 5.7-3.6 12.3-7.6 19.6-11.6-29.8-15.5-63.6-24.3-99.5-24.3-119.1 0-215.6 96.5-215.6 215.6 0 119 96.5 215.6 215.6 215.6S445.3 380.1 445.3 261c0-38.4-10.1-74.5-27.7-105.8-3.9 7-7.6 13.3-10.9 18.8z"], 49814 "fulcrum": [269, 512, [], "f50b", "M70.75 164.14l-35.38 43.55L0 164.14l35.38-43.55 35.37 43.55zM119.23 0L98.69 198.18 47.72 256l50.98 57.82L119.23 512V300.89L78.15 256l41.08-44.89V0zm79.67 164.14l35.38 43.55 35.38-43.55-35.38-43.55-35.38 43.55zm-48.48 46.97L191.5 256l-41.08 44.89V512l20.54-198.18L221.94 256l-50.98-57.82L150.42 0v211.11z"], 49815 "galactic-republic": [496, 512, [], "f50c", "M248 504C111.25 504 0 392.75 0 256S111.25 8 248 8s248 111.25 248 248-111.25 248-248 248zm0-479.47C120.37 24.53 16.53 128.37 16.53 256S120.37 487.47 248 487.47 479.47 383.63 479.47 256 375.63 24.53 248 24.53zm27.62 21.81v24.62a185.933 185.933 0 0 1 83.57 34.54l17.39-17.36c-28.75-22.06-63.3-36.89-100.96-41.8zm-55.37.07c-37.64 4.94-72.16 19.8-100.88 41.85l17.28 17.36h.08c24.07-17.84 52.55-30.06 83.52-34.67V46.41zm12.25 50.17v82.87c-10.04 2.03-19.42 5.94-27.67 11.42l-58.62-58.59-21.93 21.93 58.67 58.67c-5.47 8.23-9.45 17.59-11.47 27.62h-82.9v31h82.9c2.02 10.02 6.01 19.31 11.47 27.54l-58.67 58.69 21.93 21.93 58.62-58.62a77.873 77.873 0 0 0 27.67 11.47v82.9h31v-82.9c10.05-2.03 19.37-6.06 27.62-11.55l58.67 58.69 21.93-21.93-58.67-58.69c5.46-8.23 9.47-17.52 11.5-27.54h82.87v-31h-82.87c-2.02-10.02-6.03-19.38-11.5-27.62l58.67-58.67-21.93-21.93-58.67 58.67c-8.25-5.49-17.57-9.47-27.62-11.5V96.58h-31zm183.24 30.72l-17.36 17.36a186.337 186.337 0 0 1 34.67 83.67h24.62c-4.95-37.69-19.83-72.29-41.93-101.03zm-335.55.13c-22.06 28.72-36.91 63.26-41.85 100.91h24.65c4.6-30.96 16.76-59.45 34.59-83.52l-17.39-17.39zM38.34 283.67c4.92 37.64 19.75 72.18 41.8 100.9l17.36-17.39c-17.81-24.07-29.92-52.57-34.51-83.52H38.34zm394.7 0c-4.61 30.99-16.8 59.5-34.67 83.6l17.36 17.36c22.08-28.74 36.98-63.29 41.93-100.96h-24.62zM136.66 406.38l-17.36 17.36c28.73 22.09 63.3 36.98 100.96 41.93v-24.64c-30.99-4.63-59.53-16.79-83.6-34.65zm222.53.05c-24.09 17.84-52.58 30.08-83.57 34.67v24.57c37.67-4.92 72.21-19.79 100.96-41.85l-17.31-17.39h-.08z"], 49816 "galactic-senate": [512, 512, [], "f50d", "M249.86 33.48v26.07C236.28 80.17 226 168.14 225.39 274.9c11.74-15.62 19.13-33.33 19.13-48.24v-16.88c-.03-5.32.75-10.53 2.19-15.65.65-2.14 1.39-4.08 2.62-5.82 1.23-1.75 3.43-3.79 6.68-3.79 3.24 0 5.45 2.05 6.68 3.79 1.23 1.75 1.97 3.68 2.62 5.82 1.44 5.12 2.22 10.33 2.19 15.65v16.88c0 14.91 7.39 32.62 19.13 48.24-.63-106.76-10.91-194.73-24.49-215.35V33.48h-12.28zm-26.34 147.77c-9.52 2.15-18.7 5.19-27.46 9.08 8.9 16.12 9.76 32.64 1.71 37.29-8 4.62-21.85-4.23-31.36-19.82-11.58 8.79-21.88 19.32-30.56 31.09 14.73 9.62 22.89 22.92 18.32 30.66-4.54 7.7-20.03 7.14-35.47-.96-5.78 13.25-9.75 27.51-11.65 42.42 9.68.18 18.67 2.38 26.18 6.04 17.78-.3 32.77-1.96 40.49-4.22 5.55-26.35 23.02-48.23 46.32-59.51.73-25.55 1.88-49.67 3.48-72.07zm64.96 0c1.59 22.4 2.75 46.52 3.47 72.07 23.29 11.28 40.77 33.16 46.32 59.51 7.72 2.26 22.71 3.92 40.49 4.22 7.51-3.66 16.5-5.85 26.18-6.04-1.9-14.91-5.86-29.17-11.65-42.42-15.44 8.1-30.93 8.66-35.47.96-4.57-7.74 3.6-21.05 18.32-30.66-8.68-11.77-18.98-22.3-30.56-31.09-9.51 15.59-23.36 24.44-31.36 19.82-8.05-4.65-7.19-21.16 1.71-37.29a147.49 147.49 0 0 0-27.45-9.08zm-32.48 8.6c-3.23 0-5.86 8.81-6.09 19.93h-.05v16.88c0 41.42-49.01 95.04-93.49 95.04-52 0-122.75-1.45-156.37 29.17v2.51c9.42 17.12 20.58 33.17 33.18 47.97C45.7 380.26 84.77 360.4 141.2 360c45.68 1.02 79.03 20.33 90.76 40.87.01.01-.01.04 0 .05 7.67 2.14 15.85 3.23 24.04 3.21 8.19.02 16.37-1.07 24.04-3.21.01-.01-.01-.04 0-.05 11.74-20.54 45.08-39.85 90.76-40.87 56.43.39 95.49 20.26 108.02 41.35 12.6-14.8 23.76-30.86 33.18-47.97v-2.51c-33.61-30.62-104.37-29.17-156.37-29.17-44.48 0-93.49-53.62-93.49-95.04v-16.88h-.05c-.23-11.12-2.86-19.93-6.09-19.93zm0 96.59c22.42 0 40.6 18.18 40.6 40.6s-18.18 40.65-40.6 40.65-40.6-18.23-40.6-40.65c0-22.42 18.18-40.6 40.6-40.6zm0 7.64c-18.19 0-32.96 14.77-32.96 32.96S237.81 360 256 360s32.96-14.77 32.96-32.96-14.77-32.96-32.96-32.96zm0 6.14c14.81 0 26.82 12.01 26.82 26.82s-12.01 26.82-26.82 26.82-26.82-12.01-26.82-26.82 12.01-26.82 26.82-26.82zm-114.8 66.67c-10.19.07-21.6.36-30.5 1.66.43 4.42 1.51 18.63 7.11 29.76 9.11-2.56 18.36-3.9 27.62-3.9 41.28.94 71.48 34.35 78.26 74.47l.11 4.7c10.4 1.91 21.19 2.94 32.21 2.94 11.03 0 21.81-1.02 32.21-2.94l.11-4.7c6.78-40.12 36.98-73.53 78.26-74.47 9.26 0 18.51 1.34 27.62 3.9 5.6-11.13 6.68-25.34 7.11-29.76-8.9-1.3-20.32-1.58-30.5-1.66-18.76.42-35.19 4.17-48.61 9.67-12.54 16.03-29.16 30.03-49.58 33.07-.09.02-.17.04-.27.05-.05.01-.11.04-.16.05-5.24 1.07-10.63 1.6-16.19 1.6-5.55 0-10.95-.53-16.19-1.6-.05-.01-.11-.04-.16-.05-.1-.02-.17-.04-.27-.05-20.42-3.03-37.03-17.04-49.58-33.07-13.42-5.49-29.86-9.25-48.61-9.67z"], 49817 "get-pocket": [448, 512, [], "f265", "M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z"], 49818 "gg": [512, 512, [], "f260", "M179.2 230.4l102.4 102.4-102.4 102.4L0 256 179.2 76.8l44.8 44.8-25.6 25.6-19.2-19.2-128 128 128 128 51.5-51.5-77.1-76.5 25.6-25.6zM332.8 76.8L230.4 179.2l102.4 102.4 25.6-25.6-77.1-76.5 51.5-51.5 128 128-128 128-19.2-19.2-25.6 25.6 44.8 44.8L512 256 332.8 76.8z"], 49819 "gg-circle": [512, 512, [], "f261", "M257 8C120 8 9 119 9 256s111 248 248 248 248-111 248-248S394 8 257 8zm-49.5 374.8L81.8 257.1l125.7-125.7 35.2 35.4-24.2 24.2-11.1-11.1-77.2 77.2 77.2 77.2 26.6-26.6-53.1-52.9 24.4-24.4 77.2 77.2-75 75.2zm99-2.2l-35.2-35.2 24.1-24.4 11.1 11.1 77.2-77.2-77.2-77.2-26.5 26.5 53.1 52.9-24.4 24.4-77.2-77.2 75-75L432.2 255 306.5 380.6z"],
49820 "git": [448, 512, [], "f1d3", "M18.8 221.7c0 25.3 16.2 60 41.5 68.5v1c-18.8 8.3-24 50.6 1 65.8v1C34 367 16 384.3 16 414.2c0 51.5 48.8 65.8 91.5 65.8 52 0 90.7-18.7 90.7-76 0-70.5-101-44.5-101-82.8 0-13.5 7.2-18.7 19.7-21.3 41.5-7.7 67.5-40 67.5-82.2 0-7.3-1.5-14.2-4-21 6.7-1.5 13.2-3.3 19.7-5.5v-50.5c-17.2 6.8-35.7 11.8-54.5 11.8-53.8-31-126.8 1.3-126.8 69.2zm87.7 163.8c17 0 41.2 3 41.2 25 0 21.8-19.5 26.3-37.7 26.3-17.3 0-43.3-2.7-43.3-25.2.1-22.3 22.1-26.1 39.8-26.1zM103.3 256c-22 0-31.3-13-31.3-33.8 0-49.3 61-48.8 61-.5 0 20.3-8 34.3-29.7 34.3zM432 305.5v49c-13.3 7.3-30.5 9.8-45.5 9.8-53.5 0-59.8-42.2-59.8-85.7v-87.7h.5v-1c-7 0-7.3-1.6-24 1v-47.5h24c0-22.3.3-31-1.5-41.2h56.7c-2 13.8-1.5 27.5-1.5 41.2h51v47.5s-19.3-1-51-1V281c0 14.8 3.3 32.8 21.8 32.8 9.8 0 21.3-2.8 29.3-8.3zM286 68.7c0 18.7-14.5 36.2-33.8 36.2-19.8 0-34.5-17.2-34.5-36.2 0-19.3 14.5-36.7 34.5-36.7C272 32 286 50 286 68.7zm-6.2 74.5c-1.8 14.6-1.6 199.8 0 217.8h-55.5c1.6-18.1 1.8-203 0-217.8h55.5z"], 49821 "git-square": [448, 512, [], "f1d2", "M140.1 348.5c12.1 0 29.5 2.1 29.5 17.9 0 15.5-13.9 18.8-27 18.8-12.3 0-30.9-2-30.9-18s15.7-18.7 28.4-18.7zm-24.7-116.6c0 14.8 6.6 24.1 22.3 24.1 15.5 0 21.2-10 21.2-24.5.1-34.4-43.5-34.8-43.5.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-241 93.7c-12.3 4.8-25.5 8.4-38.9 8.4-38.5-22.1-90.7.9-90.7 49.5 0 18 11.6 42.9 29.6 48.9v.7c-13.4 5.9-17.1 36.1.7 47v.7c-19.5 6.4-32.3 18.8-32.3 40.2 0 36.8 34.8 47 65.4 47 37.1 0 64.8-13.4 64.8-54.3 0-50.4-72.1-31.8-72.1-59.1 0-9.6 5.2-13.4 14.1-15.2 29.6-5.5 48.2-28.6 48.2-58.7 0-5.2-1.1-10.2-2.9-15 4.8-1.1 9.5-2.3 14.1-3.9v-36.2zm56.8 1.8h-39.6c1.3 10.6 1.1 142.6 0 155.5h39.6c-1.1-12.8-1.2-145.1 0-155.5zm4.5-53.3c0-13.4-10-26.2-24.1-26.2-14.3 0-24.6 12.5-24.6 26.2 0 13.6 10.5 25.9 24.6 25.9 13.7 0 24.1-12.5 24.1-25.9zm104.3 53.3h-36.4c0-9.8-.4-19.6 1.1-29.5h-40.5c1.3 7.3 1.1 13.6 1.1 29.5h-17.1v33.9c11.9-1.9 12.1-.7 17.1-.7v.7h-.4v62.7c0 31.1 4.5 61.2 42.7 61.2 10.7 0 23-1.8 32.5-7v-35c-5.7 3.9-13.9 5.9-20.9 5.9-13.2 0-15.5-12.9-15.5-23.4v-65.2c22.7 0 36.4.7 36.4.7v-33.8z"], 49822 "github": [496, 512, [], "f09b", "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"], 49823 "github-alt": [480, 512, [], "f113", "M186.1 328.7c0 20.9-10.9 55.1-36.7 55.1s-36.7-34.2-36.7-55.1 10.9-55.1 36.7-55.1 36.7 34.2 36.7 55.1zM480 278.2c0 31.9-3.2 65.7-17.5 95-37.9 76.6-142.1 74.8-216.7 74.8-75.8 0-186.2 2.7-225.6-74.8-14.6-29-20.2-63.1-20.2-95 0-41.9 13.9-81.5 41.5-113.6-5.2-15.8-7.7-32.4-7.7-48.8 0-21.5 4.9-32.3 14.6-51.8 45.3 0 74.3 9 108.8 36 29-6.9 58.8-10 88.7-10 27 0 54.2 2.9 80.4 9.2 34-26.7 63-35.2 107.8-35.2 9.8 19.5 14.6 30.3 14.6 51.8 0 16.4-2.6 32.7-7.7 48.2 27.5 32.4 39 72.3 39 114.2zm-64.3 50.5c0-43.9-26.7-82.6-73.5-82.6-18.9 0-37 3.4-56 6-14.9 2.3-29.8 3.2-45.1 3.2-15.2 0-30.1-.9-45.1-3.2-18.7-2.6-37-6-56-6-46.8 0-73.5 38.7-73.5 82.6 0 87.8 80.4 101.3 150.4 101.3h48.2c70.3 0 150.6-13.4 150.6-101.3zm-82.6-55.1c-25.8 0-36.7 34.2-36.7 55.1s10.9 55.1 36.7 55.1 36.7-34.2 36.7-55.1-10.9-55.1-36.7-55.1z"],
49824 "github-square": [448, 512, [], "f092", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM277.3 415.7c-8.4 1.5-11.5-3.7-11.5-8 0-5.4.2-33 .2-55.3 0-15.6-5.2-25.5-11.3-30.7 37-4.1 76-9.2 76-73.1 0-18.2-6.5-27.3-17.1-39 1.7-4.3 7.4-22-1.7-45-13.9-4.3-45.7 17.9-45.7 17.9-13.2-3.7-27.5-5.6-41.6-5.6-14.1 0-28.4 1.9-41.6 5.6 0 0-31.8-22.2-45.7-17.9-9.1 22.9-3.5 40.6-1.7 45-10.6 11.7-15.6 20.8-15.6 39 0 63.6 37.3 69 74.3 73.1-4.8 4.3-9.1 11.7-10.6 22.3-9.5 4.3-33.8 11.7-48.3-13.9-9.1-15.8-25.5-17.1-25.5-17.1-16.2-.2-1.1 10.2-1.1 10.2 10.8 5 18.4 24.2 18.4 24.2 9.7 29.7 56.1 19.7 56.1 19.7 0 13.9.2 36.5.2 40.6 0 4.3-3 9.5-11.5 8-66-22.1-112.2-84.9-112.2-158.3 0-91.8 70.2-161.5 162-161.5S388 165.6 388 257.4c.1 73.4-44.7 136.3-110.7 158.3zm-98.1-61.1c-1.9.4-3.7-.4-3.9-1.7-.2-1.5 1.1-2.8 3-3.2 1.9-.2 3.7.6 3.9 1.9.3 1.3-1 2.6-3 3zm-9.5-.9c0 1.3-1.5 2.4-3.5 2.4-2.2.2-3.7-.9-3.7-2.4 0-1.3 1.5-2.4 3.5-2.4 1.9-.2 3.7.9 3.7 2.4zm-13.7-1.1c-.4 1.3-2.4 1.9-4.1 1.3-1.9-.4-3.2-1.9-2.8-3.2.4-1.3 2.4-1.9 4.1-1.5 2 .6 3.3 2.1 2.8 3.4zm-12.3-5.4c-.9 1.1-2.8.9-4.3-.6-1.5-1.3-1.9-3.2-.9-4.1.9-1.1 2.8-.9 4.3.6 1.3 1.3 1.8 3.3.9 4.1zm-9.1-9.1c-.9.6-2.6 0-3.7-1.5s-1.1-3.2 0-3.9c1.1-.9 2.8-.2 3.7 1.3 1.1 1.5 1.1 3.3 0 4.1zm-6.5-9.7c-.9.9-2.4.4-3.5-.6-1.1-1.3-1.3-2.8-.4-3.5.9-.9 2.4-.4 3.5.6 1.1 1.3 1.3 2.8.4 3.5zm-6.7-7.4c-.4.9-1.7 1.1-2.8.4-1.3-.6-1.9-1.7-1.5-2.6.4-.6 1.5-.9 2.8-.4 1.3.7 1.9 1.8 1.5 2.6z"], 49825 "gitkraken": [592, 512, [], "f3a6", "M565.7 118.1c-2.3-6.1-9.3-9.2-15.3-6.6-5.7 2.4-8.5 8.9-6.3 14.6 10.9 29 16.9 60.5 16.9 93.3 0 134.6-100.3 245.7-230.2 262.7V358.4c7.9-1.5 15.5-3.6 23-6.2v104c106.7-25.9 185.9-122.1 185.9-236.8 0-91.8-50.8-171.8-125.8-213.3-5.7-3.2-13-.9-15.9 5-2.7 5.5-.6 12.2 4.7 15.1 67.9 37.6 113.9 110 113.9 193.2 0 93.3-57.9 173.1-139.8 205.4v-92.2c14.2-4.5 24.9-17.7 24.9-33.5 0-13.1-6.8-24.4-17.3-30.5 8.3-79.5 44.5-58.6 44.5-83.9V170c0-38-87.9-161.8-129-164.7-2.5-.2-5-.2-7.6 0C251.1 8.3 163.2 132 163.2 170v14.8c0 25.3 36.3 4.3 44.5 83.9-10.6 6.1-17.3 17.4-17.3 30.5 0 15.8 10.6 29 24.8 33.5v92.2c-81.9-32.2-139.8-112-139.8-205.4 0-83.1 46-155.5 113.9-193.2 5.4-3 7.4-9.6 4.7-15.1-2.9-5.9-10.1-8.2-15.9-5-75 41.5-125.8 121.5-125.8 213.3 0 114.7 79.2 210.8 185.9 236.8v-104c7.6 2.5 15.1 4.6 23 6.2v123.7C131.4 465.2 31 354.1 31 219.5c0-32.8 6-64.3 16.9-93.3 2.2-5.8-.6-12.2-6.3-14.6-6-2.6-13 .4-15.3 6.6C14.5 149.7 8 183.8 8 219.5c0 155.1 122.6 281.6 276.3 287.8V361.4c6.8.4 15 .5 23.4 0v145.8C461.4 501.1 584 374.6 584 219.5c0-35.7-6.5-69.8-18.3-101.4zM365.9 275.5c13 0 23.7 10.5 23.7 23.7 0 13.1-10.6 23.7-23.7 23.7-13 0-23.7-10.5-23.7-23.7 0-13.1 10.6-23.7 23.7-23.7zm-139.8 47.3c-13.2 0-23.7-10.7-23.7-23.7s10.5-23.7 23.7-23.7c13.1 0 23.7 10.6 23.7 23.7 0 13-10.5 23.7-23.7 23.7z"], 49826 "gitlab": [512, 512, [], "f296", "M29.782 199.732L256 493.714 8.074 309.699c-6.856-5.142-9.712-13.996-7.141-21.993l28.849-87.974zm75.405-174.806c-3.142-8.854-15.709-8.854-18.851 0L29.782 199.732h131.961L105.187 24.926zm56.556 174.806L256 493.714l94.257-293.982H161.743zm349.324 87.974l-28.849-87.974L256 493.714l247.926-184.015c6.855-5.142 9.711-13.996 7.141-21.993zm-85.404-262.78c-3.142-8.854-15.709-8.854-18.851 0l-56.555 174.806h131.961L425.663 24.926z"], 49827 "gitter": [384, 512, [], "f426", "M66.4 322.5H16V0h50.4v322.5zM166.9 76.1h-50.4V512h50.4V76.1zm100.6 0h-50.4V512h50.4V76.1zM368 76h-50.4v247H368V76z"], 49828 "glide": [448, 512, [], "f2a5", "M252.8 148.6c0 8.8-1.6 17.7-3.4 26.4-5.8 27.8-11.6 55.8-17.3 83.6-1.4 6.3-8.3 4.9-13.7 4.9-23.8 0-30.5-26-30.5-45.5 0-29.3 11.2-68.1 38.5-83.1 4.3-2.5 9.2-4.2 14.1-4.2 11.4 0 12.3 8.3 12.3 17.9zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-64 187c0-5.1-20.8-37.7-25.5-39.5-2.2-.9-7.2-2.3-9.6-2.3-23.1 0-38.7 10.5-58.2 21.5l-.5-.5c4.3-29.4 14.6-57.2 14.6-87.4 0-44.6-23.8-62.7-67.5-62.7-71.7 0-108 70.8-108 123.5 0 54.7 32 85 86.3 85 7.5 0 6.9-.6 6.9 2.3-10.5 80.3-56.5 82.9-56.5 58.9 0-24.4 28-36.5 28.3-38-.2-7.6-29.3-17.2-36.7-17.2-21.1 0-32.7 33-32.7 50.6 0 32.3 20.4 54.7 53.3 54.7 48.2 0 83.4-49.7 94.3-91.7 9.4-37.7 7-39.4 12.3-42.1 20-10.1 35.8-16.8 58.4-16.8 11.1 0 19 2.3 36.7 5.2 1.8.1 4.1-1.7 4.1-3.5z"], 49829 "glide-g": [448, 512, [], "f2a6", "M407.1 211.2c-3.5-1.4-11.6-3.8-15.4-3.8-37.1 0-62.2 16.8-93.5 34.5l-.9-.9c7-47.3 23.5-91.9 23.5-140.4C320.8 29.1 282.6 0 212.4 0 97.3 0 39 113.7 39 198.4 39 286.3 90.3 335 177.6 335c12 0 11-1 11 3.8-16.9 128.9-90.8 133.1-90.8 94.6 0-39.2 45-58.6 45.5-61-.3-12.2-47-27.6-58.9-27.6-33.9.1-52.4 51.2-52.4 79.3C32 476 64.8 512 11
498297.5 512c77.4 0 134-77.8 151.4-145.4 15.1-60.5 11.2-63.3 19.7-67.6 32.2-16.2 57.5-27 93.8-27 17.8 0 30.5 3.7 58.9 8.4 2.9 0 6.7-2.9 6.7-5.8 0-8-33.4-60.5-40.9-63.4zm-175.3-84.4c-9.3 44.7-18.6 89.6-27.8 134.3-2.3 10.2-13.3 7.8-22 7.8-38.3 0-49-41.8-49-73.1 0-47 18-109.3 61.8-133.4 7-4.1 14.8-6.7 22.6-6.7 18.6 0 20 13.3 20 28.7-.1 14.3-2.7 28.5-5.6 42.4z"], 49830 "gofore": [400, 512, [], "f3a7", "M324 319.8h-13.2v34.7c-24.5 23.1-56.3 35.8-89.9 35.8-73.2 0-132.4-60.2-132.4-134.4 0-74.1 59.2-134.4 132.4-134.4 35.3 0 68.6 14 93.6 39.4l62.3-63.3C335 55.3 279.7 32 220.7 32 98 32 0 132.6 0 256c0 122.5 97 224 220.7 224 63.2 0 124.5-26.2 171-82.5-2-27.6-13.4-77.7-67.7-77.7zm-12.1-112.5H205.6v89H324c33.5 0 60.5 15.1 76 41.8v-30.6c0-65.2-40.4-100.2-88.1-100.2z"], 49831 "goodreads": [448, 512, [], "f3a8", "M299.9 191.2c5.1 37.3-4.7 79-35.9 100.7-22.3 15.5-52.8 14.1-70.8 5.7-37.1-17.3-49.5-58.6-46.8-97.2 4.3-60.9 40.9-87.9 75.3-87.5 46.9-.2 71.8 31.8 78.2 78.3zM448 88v336c0 30.9-25.1 56-56 56H56c-30.9 0-56-25.1-56-56V88c0-30.9 25.1-56 56-56h336c30.9 0 56 25.1 56 56zM330 313.2s-.1-34-.1-217.3h-29v40.3c-.8.3-1.2-.5-1.6-1.2-9.6-20.7-35.9-46.3-76-46-51.9.4-87.2 31.2-100.6 77.8-4.3 14.9-5.8 30.1-5.5 45.6 1.7 77.9 45.1 117.8 112.4 115.2 28.9-1.1 54.5-17 69-45.2.5-1 1.1-1.9 1.7-2.9.2.1.4.1.6.2.3 3.8.2 30.7.1 34.5-.2 14.8-2 29.5-7.2 43.5-7.8 21-22.3 34.7-44.5 39.5-17.8 3.9-35.6 3.8-53.2-1.2-21.5-6.1-36.5-19-41.1-41.8-.3-1.6-1.3-1.3-2.3-1.3h-26.8c.8 10.6 3.2 20.3 8.5 29.2 24.2 40.5 82.7 48.5 128.2 37.4 49.9-12.3 67.3-54.9 67.4-106.3z"], 49832 "goodreads-g": [384, 512, [], "f3a9", "M42.6 403.3h2.8c12.7 0 25.5 0 38.2.1 1.6 0 3.1-.4 3.6 2.1 7.1 34.9 30 54.6 62.9 63.9 26.9 7.6 54.1 7.8 81.3 1.8 33.8-7.4 56-28.3 68-60.4 8-21.5 10.7-43.8 11-66.5.1-5.8.3-47-.2-52.8l-.9-.3c-.8 1.5-1.7 2.9-2.5 4.4-22.1 43.1-61.3 67.4-105.4 69.1-103 4-169.4-57-172-176.2-.5-23.7 1.8-46.9 8.3-69.7C58.3 47.7 112.3.6 191.6 0c61.3-.4 101.5 38.7 116.2 70.3.5 1.1 1.3 2.3 2.4 1.9V10.6h44.3c0 280.3.1 332.2.1 332.2-.1 78.5-26.7 143.7-103 162.2-69.5 16.9-159 4.8-196-57.2-8-13.5-11.8-28.3-13-44.5zM188.9 36.5c-52.5-.5-108.5 40.7-115 133.8-4.1 59 14.8 122.2 71.5 148.6 27.6 12.9 74.3 15 108.3-8.7 47.6-33.2 62.7-97 54.8-154-9.7-71.1-47.8-120-119.6-119.7z"], 49833 "google": [488, 512, [], "f1a0", "M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"], 49834 "google-drive": [512, 512, [], "f3aa", "M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z"], 49835 "google-play": [512, 512, [], "f3ab", "M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z"], 49836 "google-plus": [496, 512, [], "f2b3", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm-70.7 372c-68.8 0-124-55.5-124-124s55.2-124 124-124c31.3 0 60.1 11 83 32.3l-33.6 32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9 0-77.2 35.5-77.2 78.1s34.2 78.1 77.2 78.1c32.6 0 64.9-19.1 70.1-53.3h-70.1v-42.6h116.9c1.3 6.8 1.9 13.6 1.9 20.7 0 70.8-47.5 121.2-118.8 121.2zm230.2-106.2v35.5H372v-35.5h-35.5v-35.5H372v-35.5h35.5v35.5h35.2v35.5h-35.2z"], 49837 "google-plus-g": [640, 512, [], "f0d5", "M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z"], 49838 "google-plus-square": [448, 512, [], "f0d4", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM164 356c-55.3 0-100-44.7-100-100s44.7-100 100-100c27 0 49.5 9.8 67 26.2l-27.1 26.1c-7.4-7.1-20.3-15.4-39.8-15.4-34.1 0-61.9 28.2-61.9 63.2 0 34.9 27.8 63.2 61.9 63.2 39.6 0 54.4-28.5 56.8-43.1H164v-34.4h94.4c1 5 1.6 10.1 1.6 16.6 0 57.1-38.3 97.6-96 97.6zm220-81.8h-29v29h-29.2v-29h-29V245h29v-29H355v29h29v29.2z"], 49839 "google-wallet": [448, 512, [], "f1ee", "M156.8 126.8c37.6 60.6 64.2 113.1 84.3 162.5-8.3 33.8-18.8 66.5-31.3 98.3-13.2-52.3-26.5-101.3-56-148.5 6.5-36.4 2.3-73.6 3-112.3zM109.3 200H16.1c-6.5 0-10.5 7.5-6.5 12.7C51.8 267 81.3 330.5 101.3 400h103.5c-16.2-69.7-38.7-133.7-82.5-193.5-3-4-8-6.5-13-6.5zm47.8-88c68.5 108 130 234.5 138.2 368H409c-12-138-68.4-265-143.2-368H157.1zm251.8-68.5c-1.8-6.8-8.2-11.5-15.2-11.5h-88.3c-5.3 0-9 5-7.8 10.3 13.2 46.5 22.3 95.5 26.5 146 48.2 86.2 79.7 178.3 90.6 270.8 15.8-60.5 25.3-133.5 25.3-203 0-73.6-12.1-145.1-31.1-212.6z"], 49840 "gratipay": [496, 512, [], "f184", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm114.6 226.4l-113 152.7-112.7-152.7c-8.7-11.9-19.1-50.4 13.6-72 28.1-18.1 54.6-4.2 68.5 11.9 15.9 17.9 46.6 16.9 61.7 0 13.9-16.1 40.4-30 68.1-11.9 32.9 21.6 22.6 60 13.8 72z"], 49841 "grav": [512, 512, [], "f2d6", "M301.1 212c4.4 4.4 4.4 11.9 0 16.3l-9.7 9.7c-4.4 4.7-11.9 4.7-16.6 0l-10.5-10.5c-4.4-4.7-4.4-11.9 0-16.6l9.7-9.7c4.4-4.4 11.9-4.4 16.6 0l10.5 10.8zm-30.2-19.7c3-3 3-7.8 0-10.5-2.8-3-7.5-3-10.5 0-2.8 2.8-2.8 7.5 0 10.5 3.1 2.8 7.8 2.8 10.5 0zm-26 5.3c-3 2.8-3 7.5 0 10.2 2.8 3 7.5 3 10.5 0 2.8-2.8 2.8-7.5 0-10.2-3-3-7.7-3-10.5 0zm72.5-13.3c-19.9-14.4-33.8-43.2-11.9-68.1 21.6-24.9 40.7-17.2 59.8.8 11.9 11.3 29.3 24.9 17.2 48.2-12.5 23.5-45.1 33.2-65.1 19.1zm47.7-44.5c-8.9-10-23.3 6.9-15.5 16.1 7.4 9 32.1 2.4 15.5-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-66.2 42.6c2.5-16.1-20.2-16.6-25.2-25.7-13.6-24.1-27.7-36.8-54.5-30.4 11.6-8 23.5-6.1 23.5-6.1.3-6.4 0-13-9.4-24.9 3.9-12.5.3-22.4.3-22.4 15.5-8.6 26.8-24.4 29.1-43.2 3.6-31-18.8-59.2-49.8-62.8-22.1-2.5-43.7 7.7-54.3 25.7-23.2 40.1 1.4 70.9 22.4 81.4-14.4-1.4-34.3-11.9-40.1-34.3-6.6-25.7 2.8-49.8 8.9-61.4 0 0-4.4-5.8-8-8.9 0 0-13.8 0-24.6 5.3 11.9-15.2 25.2-14.4 25.2-14.4 0-6.4-.6-14.9-3.6-21.6-5.4-11-23.8-12.9-31.7 2.8.1-.2.3-.4.4-.5-5 11.9-1.1 55.9 16.9 87.2-2.5 1.4-9.1 6.1-13 10-21.6 9.7-56.2 60.3-56.2 60.3-28.2 10.8-77.2 50.9-70.6 79.7.3 3 1.4 5.5 3 7.5-2.8 2.2-5.5 5-8.3 8.3-11.9 13.8-5.3 35.2 17.7 24.4 15.8-7.2 29.6-20.2 36.3-30.4 0 0-5.5-5-16.3-4.4 27.7-6.6 34.3-9.4 46.2-9.1 8 3.9 8-34.3 8-34.3 0-14.7-2.2-31-11.1-41.5 12.5 12.2 29.1 32.7 28 60.6-.8 18.3-15.2 23-15.2 23-9.1 16.6-43.2 65.9-30.4 106 0 0-9.7-14.9-10.2-22.1-17.4 19.4-46.5 52.3-24.6 64.5 26.6 14.7 108.8-88.6 126.2-142.3 34.6-20.8 55.4-47.3 63.9-65 22 43.5 95.3 94.5 101.1 59z"], 49842 "gripfire": [384, 512, [], "f3ac", "M171.8 503.8c0-5.3 4.8-12.2 4.8-22.3 0-15.2-13-39.9-78.1-86.6C64.2 365.8 32 336.4 32 286.6 32 171.9 179.1 110.1 179.1 18c0-3.3-.2-6.7-.6-10 5.1 2.4 39.1 43.3 39.1 90.4 0 80.5-105.1 129.2-105.1 203
498420 26.9 16.6 47.2 32.6 69.5 22.5 30.2 44.2 56.9 44.2 86.5-.1 14.5-4.4 29.7-17.5 46.4zm146-241.4c1.5 8.4 2.2 16.6 2.2 24.6 0 51.8-29.4 97.5-67.3 136.8-1 1-2.2 2.4-3.2 2.4-3.6 0-35.5-41.6-35.5-53.2 0 0 41.8-55.7 41.8-96.9 0-10.8-2.7-21.7-9.1-33.4-1.5 32.3-55.7 87.7-58.1 87.7-2.7 0-17.9-22-17.9-42.1 0-5.3 1-10.7 3.2-15.8 2.4-5.5 56.6-72 56.6-116.7 0-6.2-1-12-3.4-17.1l-4-7.2c16.7 6.5 82.6 64.1 94.7 130.9"], 49843 "grunt": [384, 512, [], "f3ad", "M61.3 189.3c-1.1 10 5.2 19.1 5.2 19.1.7-7.5 2.2-12.8 4-16.6.4 10.3 3.2 23.5 12.8 34.1 6.9 7.6 35.6 23.3 54.9 6.1 1 2.4 2.1 5.3 3 8.5 2.9 10.3-2.7 25.3-2.7 25.3s15.1-17.1 13.9-32.5c10.8-.5 21.4-8.4 21.1-19.5 0 0-18.9 10.4-35.5-8.8-9.7-11.2-40.9-42-83.1-31.8 4.3 1 8.9 2.4 13.5 4.1h-.1c-4.2 2-6.5 7.1-7 12zm28.3-1.8c19.5 11 37.4 25.7 44.9 37-5.7 3.3-21.7 10.4-38-1.7-10.3-7.6-9.8-26.2-6.9-35.3zm79.2 233.7c2.2 2.3 1.5 5.3.9 6.8-1.1 2.7-5.5 11.6-13 19.8-2.7 2.9-6.6 4.6-11 4.6-4.3 0-8.7-1.6-11.8-4.3-2.3-2.1-10.2-9.5-13.7-18.6-1.3-3.4-1-6.1.9-8.1 1.3-1.3 4-2.9 9.5-2.9H160c4.1 0 7 .9 8.8 2.7zm62.9-187.9c-1.2 15.5 13.9 32.5 13.9 32.5s-5.6-15-2.7-25.3c.9-3.2 2-6 3-8.5 19.3 17.3 48 1.5 54.8-6.1 9.6-10.6 12.3-23.8 12.8-34.1 1.8 3.8 3.4 9.1 4 16.6 0 0 6.4-9.1 5.2-19.1-.6-5-2.9-10-7-11.8h-.1c4.6-1.8 9.2-3.2 13.5-4.1-42.3-10.2-73.4 20.6-83.1 31.8-16.7 19.2-35.5 8.8-35.5 8.8-.2 10.9 10.4 18.9 21.2 19.3zm17.8-8.8c7.5-11.4 25.4-26 44.9-37 3 9.1 3.4 27.7-7 35.4-16.3 12.1-32.2 5-37.9 1.6-.1.1 0 0 0 0zM263 421.4c1.9 1.9 2.2 4.6.9 7.9-3.5 8.9-11.4 16.1-13.7 18.1-3.1 2.6-7.4 4.2-11.8 4.2s-8.3-1.6-11-4.5c-7.5-8-12-16.7-13-19.3-.6-1.5-1.3-4.4.9-6.7 1.7-1.8 4.7-2.7 8.9-2.7h29.4c5.4.1 8.1 1.7 9.4 3zm-98.3-251.5c9.9 6 18.8 8.1 27.3 8.3 8.5-.2 17.4-2.3 27.3-8.3 0 0-14.5 17.7-27.2 17.8h-.2c-12.7-.2-27.2-17.8-27.2-17.8zm184.5 147.4c-2.4 17.9-13 33.8-24.6 43.7-3.1-22.7-3.7-55.5-3.7-62.4 0-14.7 9.5-24.5 12.2-26.1 2.5-1.5 5.4-3 8.3-4.6 18-9.6 40.4-21.6 40.4-43.7 0-16.2-9.3-23.2-15.4-27.8-.8-.6-1.5-1.1-2.2-1.7-2.1-1.7-3.7-3-4.3-4.4-4.4-9.8-3.6-34.2-1.7-37.6.6-.6 16.7-20.9 11.8-39.2-2-7.4-6.9-13.3-14.1-17-5.3-2.7-11.9-4.2-19.5-4.5-.1-2-.5-3.9-.9-5.9-.6-2.6-1.1-5.3-.9-8.1.4-4.7.8-9 2.2-11.3 8.4-13.3 28.8-17.6 29-17.6l12.3-2.4-8.1-9.5c-.1-.2-17.3-17.5-46.3-17.5-7.9 0-16 1.3-24.1 3.9-24.2 7.8-42.9 30.5-49.4 39.3-3.1-1-6.3-1.9-9.6-2.7-4.2-15.8 9-38.5 9-38.5s-13.6-3-33.7 15.2c-2.6-6.5-8.1-20.5-1.8-37.2C184.6 10.1 177.2 26 175 40.4c-7.6-5.4-6.7-23.1-7.2-27.6-7.5.9-29.2 21.9-28.2 48.3-2 .5-3.9 1.1-5.9 1.7-6.5-8.8-25.1-31.5-49.4-39.3-7.9-2.2-16-3.5-23.9-3.5-29 0-46.1 17.3-46.3 17.5L6 46.9l12.3 2.4c.2 0 20.6 4.3 29 17.6 1.4 2.2 1.8 6.6 2.2 11.3.2 2.8-.4 5.5-.9 8.1-.4 1.9-.8 3.9-.9 5.9-7.7.3-14.2 1.8-19.5 4.5-7.2 3.7-12.1 9.6-14.1 17-5 18.2 11.2 38.5 11.8 39.2 1.9 3.4 2.7 27.8-1.7 37.6-.6 1.4-2.2 2.7-4.3 4.4-.7.5-1.4 1.1-2.2 1.7-6.1 4.6-15.4 11.7-15.4 27.8 0 22.1 22.4 34.1 40.4 43.7 3 1.6 5.8 3.1 8.3 4.6 2.7 1.6 12.2 11.4 12.2 26.1 0 6.9-.6 39.7-3.7 62.4-11.6-9.9-22.2-25.9-24.6-43.8 0 0-29.2 22.6-20.6 70.8 5.2 29.5 23.2 46.1 47 54.7 8.8 19.1 29.4 45.7 67.3 49.6C143 504.3 163 512 192.2 512h.2c29.1 0 49.1-7.7 63.6-19.5 37.9-3.9 58.5-30.5 67.3-49.6 23.8-8.7 41.7-25.2 47-54.7 8.2-48.4-21.1-70.9-21.1-70.9zM305.7 37.7c5.6-1.8 11.6-2.7 17.7-2.7 11 0 19.9 3 24.7 5-3.1 1.4-6.4 3.2-9.7 5.3-2.4-.4-5.6-.8-9.2-.8-10.5 0-20.5 3.1-28.7 8.9-12.3 8.7-18 16.9-20.7 22.4-2.2-1.3-4.5-2.5-7.1-3.7-1.6-.8-3.1-1.5-4.7-2.2 6.1-9.1 19.9-26.5 37.7-32.2zm21 18.2c-.8 1-1.6 2.1-2.3 3.2-3.3 5.2-3.9 11.6-4.4 17.8-.5 6.4-1.1 12.5-4.4 17-4.2.8-8.1 1.7-11.5 2.7-2.3-3.1-5.6-7-10.5-11.2 1.4-4.8 5.5-16.1 13.5-22.5 5.6-4.3 12.2-6.7 19.6-7zM45.6 45.3c-3.3-2.2-6.6-4-9.7-5.3 4.8-2 13.7-5 24.7-5 6.1 0 12 .9 17.7 2.7 17.8 5.8 31.6 23.2 37.7 32.1-1.6.7-3.2 1.4-4.8 2.2-2.5 1.2-4.9 2.5-7.1 3.7-2.6-5.4-8.3-13.7-20.7-22.4-8.3-5.8-18.2-8.9-28.8-8.9-3.4.1-6.6.5-9 .9zm44.7 40.1c-4.9 4.2-8.3 8-10.5 11.2-3.4-.9-7.3-1.9-11.5-2.7C65 89.5 64.5 83.4 64 77c-.5-6.2-1.1-12.6-4.4-17.8-.7-1.1-1.5-2.2-2.3-3.2 7.4.3 14 2.6 19.5 7 8 6.3 12.1 17.6 13.5 22.4zM58.1 259.9c-2.7-1.6-5.6-3.1-8.4-4.6-14.9-8-30.2-16.3-30.2-30.5 0-11.1 4.3-14.6 8.9-18.2l.5-.4c.7-.6 1.4-1.2 2.2-1.8-.9 7.2-1.9 13.3-2.7 14.9 0 0 12.1-15 15.7-44.3 1.4-11.5-1.1-34.3-5.1-43 .2 4.9 0 9.8-.3 14.4-.4-.8-.8-1.6-1.3-2.2-3.2-4-11.8-17.5-9.4-26.6.9-3.5 3.1-6 6.7-7.8 3.8-1.9 8.8-2.9 15.1-2.9 12.3 0 25.9 3.7 32.9 6 25.1 8 55.4 30.9 64.1 37.7.2.2.4.3.4.3l5.6 3.9-3.5-5.8c-.2-.3-19.1-31.4-53.2-46.5 2-2.9 7.4-8.1 21.6-15.1 21.4-10.5 46.5-15.8 74.3-15.8 27.9 0 52.9 5.3 74.3 15.8 14.2 6.9 19.6 12.2 21.6 15.1-34 15.1-52.9 46.2-53.1 46.5l-3.5 5.8 5.6-3.9s.2-.1.4-.3c8.7-6.8 39-29.8 64.1-37.7 7-2.2 20.6-6 32.9-6 6.3 0 11.3 1 15.1 2.9 3.5 1.8 5.7 4.4 6.7 7.8 2.5 9.1-6.1 22.6-9.4 26.6-.5.6-.9 1.3-1.3 2.2-.3-4.6-.5-9.5-.3-14.4-4 8.8-6.5 31.5-5.1 43 3.6 29.3 15.7 44.3 15.7 44.3-.8-1.6-1.8-7.7-2.7-14.9.7.6 1.5 1.2 2.2 1.8l.5.4c4.6 3.7 8.9 7.1 8.9 18.2 0 14.2-15.4 22.5-30.2 30.5-2.9 1.5-5.7 3.1-8.4 4.6-8.7 5-18 16.7-19.1 34.2-.9 14.6.9 49.9 3.4 75.9-12.4 4.8-26.7 6.4-39.7 6.8-2-4.1-3.9-8.5-5.5-13.1-.7-2-19.6-51.1-26.4-62.2 5.5 39 17.5 73.7 23.5 89.6-3.5-.5-7.3-.7-11.7-.7h-117c-4.4 0-8.3.3-11.7.7 6-15.9 18.1-50.6 23.5-89.6-6.8 11.2-25.7 60.3-26.4 62.2-1.6 4.6-3.5 9-5.5 13.1-13-.4-27.2-2-39.7-6.8 2.5-26 4.3-61.2 3.4-75.9-.9-17.4-10.3-29.2-19-34.2zM34.8 404.6c-12.1-20-8.7-54.1-3.7-59.1 10.9 34.4 47.2 44.3 74.4 45.4-2.7 4.2-5.2 7.6-7 10l-1.4 1.4c-7.2 7.8-8.6 18.5-4.1 31.8-22.7-.1-46.3-9.8-58.2-29.5zm45.7 43.5c6 1.1 12.2 1.9 18.6 2.4 3.5 8 7.4 15.9 12.3 23.1-14.4-5.9-24.4-16-30.9-25.5zM192 498.2c-60.6-.1-78.3-45.8-84.9-64.7-3.7-10.5-3.4-18.2.9-23.1 2.9-3.3 9.5-7.2 24.6-7.2h118.8c15.1 0 21.8 3.9 24.6 7.2 4.2 4.8 4.5 12.6.9 23.1-6.6 18.8-24.3 64.6-84.9 64.7zm80.6-24.6c4.9-7.2 8.8-15.1 12.3-23.1 6.4-.5 12.6-1.3 18.6-2.4-6.5 9.5-16.5 19.6-30.9 25.5zm76.6-69c-12 19.7-35.6 29.3-58.1 29.7 4.5-13.3 3.1-24.1-4.1-31.8-.4-.5-.9-1-1.4-1.5-1.8-2.4-4.3-5.8-7-10 27.2-1.2 63.5-11 74.4-45.4 5 5 8.4 39.1-3.8 59z"], 49844 "gulp": [256, 512, [], "f3ae", "M209.8 391.1l-14.1 24.6-4.6 80.2c0 8.9-28.3 16.1-63.1 16.1s-63.1-7.2-63.1-16.1l-5.8-79.4-14.9-25.4c41.2 17.3 126 16.7 165.6 0zm-196-253.3l13.6 125.5c5.9-20 20.8-47 40-55.2 6.3-2.7 12.7-2.7 18.7.9 5.2 3 9.6 9.3 10.1 11.8 1.2 6.5-2 9.1-4.5 9.1-3 0-5.3-4.6-6.8-7.3-4.1-7.3-10.3-7.6-16.9-2.8-6.9 5-12.9 13.4-17.1 20.7-5.1 8.8-9.4 18.5-12 28.2-1.5 5.6-2.9 14.6-.6 19.9 1 2.2 2.5 3.6 4.9 3.6 5 0 12.3-6.6 15.8-10.1 4.5-4.5 10.3-11.5 12.5-16l5.2-15.5c2.6-6.8 9.9-5.6 9.9 0 0 10.2-3.7 13.6-10 34.7-5.8 19.5-7.6 25.8-7.6 25.8-.7 2.8-3.4 7.5-6.3 7.5-1.2 0-2.1-.4-2.6-1.2-1-1.4-.9-5.3-.8-6.3.2-3.2 6.3-22.2 7.3-25.2-2 2.2-4.1 4.4-6.4 6.6-5.4 5.1-14.1 11.8-21.5 11.8-3.4 0-5.6-.9-7.7-2.4l7.6 79.6c2 5 39.2 17.1 88.2 17.1 49.1 0 86.3-12.2 88.2-17.1l10.9-94.6c-5.7 5.2-12.3 11.6-19.6 14.8-5.4 2.3-17.4 3.8-17.4-5.7 0-5.2 9.1-14.8 14.4-21.5 1.4-1.7 4.7-5.9 4.7-8.1 0-2.9-6-2.2-11.7 2.5-3.2 2.7-6.2 6.3-8.7 9.7-4.3 6-6.6 11.2-8.5 15.5-6.2 14.2-4.1 8.6-9.1 22-5 13.3-4.2 11.8-5.2 14-.9 1.9-2.2 3.5-4 4.5-1.9 1-4.5.9-6.1-.3-.9-.6-1.3-1.9-1.3-3.7 0-.9.1-1.8.3-2.7 1.5-6.1 7.8-18.1 15-34.3 1.6-3.7 1-2.6.8-2.3-6.2 6-10.9 8.9-14.4 10.5-5.8 2.6-13 2.6-14.5-4.1-.1-.4-.1-.8-.2-1.2-11.8 9.2-24.3 11.7-20-8.1-4.6 8.2-12.6 14.9-22.4 14.9-4.1 0-7.1-1.4-8.6-5.1-2.3-5.5 1.3-14.9 4.6-23.8 1.7-4.5 4-9.9 7.1-16.2 1.6-3.4 4.2-5.4 7.6-4.5.6.2 1.1.4 1.6.7 2.6 1.8 1.6 4.5.3 7.2-3.8 7.5-7.1 13-9.3 20.8-.9 3.3-2 9 1.5 9 2.4 0 4.7-.8 6.9-2.4 4.6-3.4 8.3-8.5 11.1-13.5 2-3.6 4.4-8.3 5.6-12.3.5-1.7 1.1-3.3 1.8-4.8 1.1-2.5 2.6-5.1 5.2-5.1 1.3 0 2.4.5 3.2 1.5 1.7 2.2 1.3 4.5.4 6.9-2 5.6-4.7 10.6-6.9 16.7-1.3 3.5-2.7 8-2.7 11.7 0 3.4 3.7 2.6 6.8 1.2 2.4-1.1 4.8-2.8 6.8-4.5 1.2-4.9.9-3.8 26.4-68.2 1.3-3.3 3.7-4.7 6.1-4.7 1.2 0 2.2.4 3.2 1.1 1.7 1.3 1.7 4.1 1 6.2-.7 1.9-.6 1.3-4.5 10.5-5.2 12.1-8.6 20.8-13.2 31.9-1.9 4.6-7.7 18.9-8.7 22.3-.6 2.2-1.3 5.8 1 5.8 5.4 0 19.3-13.1 23.1-17 .2-.3.5-.4.9-.6.6-1.9 1.2-3.7 1.7-5.5 1.4-3.8 2.7-8.2 5.3-11.3.8-1 1.7-1.6 2.7-1.6 2.8 0 4.2 1.2 4.2 4 0 1.1-.7 5.1-1.1 6.2 1.4-1.5 2.9-3 4.5-4.5 15-13.9 25.7-6.8 25.7.2 0 7.4-8.9 17.7-13.8 23.4-1.6 1.9-4.9 5.4-5 6.4 0 1.3.9 1.8 2.2 1.8 2 0 6.4-3.5 8-4.7 5-3.9 11.8-9.9 16.6-14.1l14.8-136.8c-30.5 17.1-197.
498446 17.2-228.3.2zm229.7-8.5c0 21-231.2 21-231.2 0 0-8.8 51.8-15.9 115.6-15.9 9 0 17.8.1 26.3.4l12.6-48.7L228.1.6c1.4-1.4 5.8-.2 9.9 3.5s6.6 7.9 5.3 9.3l-.1.1L185.9 74l-10 40.7c39.9 2.6 67.6 8.1 67.6 14.6zm-69.4 4.6c0-.8-.9-1.5-2.5-2.1l-.2.8c0 1.3-5 2.4-11.1 2.4s-11.1-1.1-11.1-2.4c0-.1 0-.2.1-.3l.2-.7c-1.8.6-3 1.4-3 2.3 0 2.1 6.2 3.7 13.7 3.7 7.7.1 13.9-1.6 13.9-3.7z"], 49845 "hacker-news": [448, 512, [], "f1d4", "M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"], 49846 "hacker-news-square": [448, 512, [], "f3af", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM21.2 229.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z"], 49847 "hackerrank": [464, 512, [], "f5f7", "M453.5 128C439.01 103.05 261.13 0 232.16 0 203.2 0 25.25 102.79 10.84 128c-14.41 25.21-14.49 230.8 0 256.01C25.33 409.21 203.22 512 232.16 512s206.85-102.92 221.33-128c14.48-25.08 14.49-231.05.01-256zM292.13 414.22c-3.96 0-40.91-35.77-38-38.69.87-.87 6.26-1.48 17.55-1.83 0-26.23.59-68.59.94-86.32.04-2.02-.44-3.43-.44-5.85h-79.93c0 7.1-.46 36.2 1.37 72.88.23 4.54-1.58 5.96-5.74 5.94-10.13-.03-20.27-.11-30.41-.08-4.1.01-5.87-1.53-5.74-6.11.92-33.44 2.96-84.02-.15-212.67v-3.17c-9.67-.35-16.38-.96-17.26-1.84-2.92-2.92 34.54-38.69 38.49-38.69 3.96 0 41.17 35.78 38.27 38.69-.87.87-7.9 1.49-16.77 1.84v3.16c-2.42 25.75-2.03 79.59-2.63 105.39h80.26c0-4.55.39-34.74-1.2-83.64-.1-3.39.95-5.17 4.21-5.2 11.07-.08 22.15-.13 33.23-.06 3.46.02 4.57 1.72 4.5 5.38-3.65 191.29-.66 177.94-.66 210.34 8.87.35 16.82.96 17.69 1.84 2.88 2.91-33.62 38.69-37.58 38.69z"], 49848 "hips": [640, 512, [], "f452", "M0 80.2c0-1.8.9-2.7 2.7-2.7h40.9c1.9 0 2.8.9 2.8 2.7v81.2c15.2-7.7 31.7-11.5 49.8-11.4 24 .1 44.2 6.2 60.3 18 18.7 13.5 28 31.9 28 55.3v136.1c0 1.9-.9 2.8-2.7 2.8h-27.3c-9.1 0-16.4-7.3-16.4-16.3V223.3c0-.9 2.7-27-45.8-27-48.6 0-45.8 26.2-45.8 27v136.1c0 1.9-.9 2.8-2.8 2.8h-41c-1.8 0-2.7-.9-2.7-2.8V80.2zm497.7 221.5c13.7 10.2 34.1 19.1 58.4 19.1 23.3 0 32.8-4.5 36.5-13.6 3-7.9-.6-16.1-12.2-21.2l-53.6-23.5c-21.4-9.4-33.8-24-37.2-43.6-5.7-33.7 22.2-53.3 22.7-53.7 13.2-9.6 32-15.4 58.5-15.4 19 0 37.4 3.3 55.1 9.9 1.3.5 1.9 1.3 1.9 2.6V207c0 2.1-2.3 3.4-4 2.4-39.7-20.7-76.6-12.3-84-6.8-6.6 4.9-6 12.5 2.6 16.1L600 244c16.5 7.1 28.1 18.4 34.9 34.1 5.5 12.6 6.6 25.6 3.1 39.1-9.6 36.9-44.9 45.5-45.6 45.8-10.5 3.1-23.6 4.3-36.3 4.3-16.6 0-32.6-2.7-48.2-8.2-9.7-3.4-14.6-10.3-14.6-20.7V304c0-2.1 2.3-3.7 4.4-2.3zM376.2 149.8c-31.7 0-104.2 20.1-104.2 103.5v183.5c0 .8.6 2.7 2.7 2.7h40.9c1.9 0 2.8-.9 2.8-2.7V348c16.5 12.7 35.8 19.1 57.7 19.1 60.5 0 108.7-48.5 108.7-108.7.1-60.3-48.2-108.6-108.6-108.6zm0 170.9c-17.2 0-31.9-6.1-44-18.2-12.2-12.2-18.2-26.8-18.2-44 0-34.5 27.6-62.2 62.2-62.2 34.5 0 62.2 27.6 62.2 62.2.1 34.3-27.3 62.2-62.2 62.2zm-124.6 38.7c0 1.9-.9 2.8-2.8 2.8h-40.9c-1.6 0-2.7-1.4-2.7-2.8V157.6c0-1.4 1.1-2.8 2.7-2.8h40.9c1.9 0 2.8.9 2.8 2.8v201.8M228.3 72.5c15.9 0 28.9 12.7 28.9 28.9 0 15.8-12.7 28.9-28.9 28.9s-28.9-13.3-28.9-28.9c.1-16 13-28.9 28.9-28.9"], 49849 "hire-a-helper": [512, 512, [], "f3b0", "M443.1 0H71.9C67.9 37.3 37.4 67.8 0 71.7v371.5c37.4 4.9 66 32.4 71.9 68.8h372.2c3-36.4 32.5-65.8 67.9-69.8V71.7c-36.4-5.9-65-35.3-68.9-71.7zm-37 404.9c-36.3 0-18.8-2-55.1-2-35.8 0-21 2-56.1 2-5.9 0-4.9-8.2 0-9.8 22.8-7.6 22.9-10.2 24.6-12.8 10.4-15.6 5.9-83 5.9-113 0-5.3-6.4-12.8-13.8-12.8H200.4c-7.4 0-13.8 7.5-13.8 12.8 0 30-4.5 97.4 5.9 113 1.7 2.5 1.8 5.2 24.6 12.8 4.9 1.6 6 9.8 0 9.8-35.1 0-20.3-2-56.1-2-36.3 0-18.8 2-55.1 2-7.9 0-5.8-10.8 0-10.8 10.2-3.4 13.5-3.5 21.7-13.8 7.7-12.9 7.9-44.4 7.9-127.8V151.3c0-22.2-12.2-28.3-28.6-32.4-8.8-2.2-4-11.8 1-11.8 36.5 0 20.6 2 57.1 2 32.7 0 16.5-2 49.2-2 3.3 0 8.5 8.3 1 10.8-4.9 1.6-27.6 3.7-27.6 39.3 0 45.6-.2 55.8 1 68.8 0 1.3 2.3 12.8 12.8 12.8h109.2c10.5 0 12.8-11.5 12.8-12.8 1.2-13 1-23.2 1-68.8 0-35.6-22.7-37.7-27.6-39.3-7.5-2.5-2.3-10.8 1-10.8 32.7 0 16.5 2 49.2 2 36.5 0 20.6-2 57.1-2 4.9 0 9.9 9.6 1 11.8-16.4 4.1-28.6 10.3-28.6 32.4v101.2c0 83.4.1 114.9 7.9 127.8 8.2 10.2 11.4 10.4 21.7 13.8 5.8 0 7.8 10.8 0 10.8z"], 49850 "hooli": [640, 512, [], "f427", "M508.4 352h57.9V156.7L508.4 184v168zm73.7-110.5V352H640V241.5h-57.9zm-250.7-8.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.2-1.1-50.4 17.1c-1.9 1.9-3.7 3.9-5.3 6-38.2-29.6-72.5-46.5-102.1-61.1v-20.7l-22.5 10.6c-54.4-22.1-89-18.2-97.3.1 0 0-24.9 32.8 61.9 110.9v-31c-48.8-54.6-39-76.
498501-35.3-79.2 13.5-11.4 37.5-8 64.4 2.1L65.2 184v63.3c13.1 14.7 30.5 31.5 53.5 50.4l4.5 3.6v-29.8c0-6.9 1.7-18.2 10.8-18.2s10.6 6.9 10.6 15V317c18 12.2 37.3 22.1 57.7 29.6v-93.9c0-18.7-13.4-37.4-40.6-37.4-15.8-.1-30.5 8.2-38.5 21.9v-54.3c41.9 20.9 83.9 46.5 99.9 58.3-10.2 14.6-9.3 28.1-9.3 43.7 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.7-33.8 16.7-52.5 0-18.5 1.5-34.2-16.7-52.3zm-39.7 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm185.7-71.9c-18.2-18.2-50.4-17.1-50.4-17.1s-32.3-1.1-50.4 17.1c-18.2 18.2-16.8 33.9-16.8 52.6 0 18.7-1.4 34.3 16.8 52.5 18.2 18.2 50.4 17.1 50.4 17.1s32.3 1.1 50.4-17.1c18.2-18.2 16.8-33.8 16.8-52.5-.1-18.8 1.3-34.5-16.8-52.6zm-39.8 71.9c0 3.6-1.8 12.5-10.7 12.5-8.9 0-10.7-8.9-10.7-12.5v-40.4c0-8.7 7.3-10.9 10.7-10.9 3.4 0 10.7 2.1 10.7 10.9v40.4zm173.5-73c15.9 0 28.9-12.9 28.9-28.9s-12.9-24.5-28.9-24.5c-15.9 0-28.9 8.6-28.9 24.5s12.9 28.9 28.9 28.9zM144.5 352l38.3.8c-13.2-4.6-26-10.2-38.3-16.8v16zm-21.4 0v-28.6c-6.5-4.2-13-8.7-19.4-13.6-14.8-11.2-27.5-21.7-38.5-31.5V352h57.9zm59.7.8c36.5 12.5 69.9 14.2 94.7 7.2-19.9.2-45.8-2.6-75.3-13.3v5.3l-19.4.8z"], 49851 "hornbill": [509, 512, [], "f592", "M75.37 370.3c2.14 15.83-5.77 31.98-20.94 39.29-18.85 9.1-41.55 1.17-50.68-17.68-9.08-18.83-1.13-41.58 17.7-50.65 7.05-3.4 14.63-4.42 21.85-3.38-78.28-111.35 52-190.53 52-190.53-5.86 43.04-8.24 91.16-8.24 91.16-67.31 41.45.92 64.06 39.81 72.87 19.77 53.62 71.18 91.94 131.66 91.94 1.92 0 3.77-.21 5.67-.28l.11 18.86c-99.22 1.39-158.7-29.14-188.94-51.6zM183.38 42.6c.89-7-.1-14.33-3.39-21.15-9.1-18.84-31.82-26.78-50.66-17.69-18.86 9.1-26.8 31.83-17.69 50.68 6.98 14.47 22.02 22.42 37.18 21.23-22.55 29.91-53.83 89.57-52.42 190.03l21.84-.15c-.02-.9-.14-1.77-.14-2.68 0-58.95 36.37-109.33 87.85-130.16 8.01-37.75 30.74-114.3 73.84-44.29 0 0 48.14 2.38 91.18 8.24 0-.01-77.84-128.03-187.59-54.06zm304.18 134.17c18.84-9.09 26.81-31.81 17.7-50.65-9.1-18.85-31.83-26.77-50.67-17.69-15.27 7.37-23.19 23.69-20.87 39.64-31.71-21.94-89.84-49.05-183.45-47.74l.14 22.5c2.7-.15 5.39-.41 8.14-.41 59.3 0 109.9 36.8 130.49 88.76 39.1 9.02 105.06 31.58 38.46 72.54 0 0-2.34 48.13-8.21 91.16 0 0 133.45-81.16 48.96-194.61 6.43.5 13.07-.49 19.31-3.5zM373.05 436.24c21.43-32.46 46.42-89.69 45.14-179.66l-19.52.14c.08 2.06.3 4.07.3 6.15 0 60.27-38.05 111.55-91.39 131.45-8.85 38.95-31.44 106.66-72.77 39.49 0 0-48.12-2.34-91.19-8.22 0 0 79.92 131.34 191.9 50.97.31 4.72 1.45 9.45 3.64 13.97 9.06 18.89 31.8 26.78 50.64 17.71 18.86-9.1 26.79-31.83 17.7-50.65-6.56-13.62-20.26-21.43-34.45-21.35z"], 49852 "hotjar": [448, 512, [], "f3b1", "M414.9 161.5C340.2 29 121.1 0 121.1 0S222.2 110.4 93 197.7C11.3 252.8-21 324.4 14 402.6c26.8 59.9 83.5 84.3 144.6 93.4-29.2-55.1-6.6-122.4-4.1-129.6 57.1 86.4 165 0 110.8-93.9 71 15.4 81.6 138.6 27.1 215.5 80.5-25.3 134.1-88.9 148.8-145.6 15.5-59.3 3.7-127.9-26.3-180.9z"], 49853 "houzz": [414, 512, [], "f27c", "M258.9 330.7H154.3V480H0V32h109.5v104.5l305.1 85.6V480H258.9V330.7z"], 49854 "html5": [384, 512, [], "f13b", "M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z"], 49855 "hubspot": [512, 512, [], "f3b2", "M267.4 211.6c-25.1 23.7-40.8 57.3-40.8 94.6 0 29.3 9.7 56.3 26 78L203.1 434c-4.4-1.6-9.1-2.5-14-2.5-10.8 0-20.9 4.2-28.5 11.8-7.6 7.6-11.8 17.8-11.8 28.6s4.2 20.9 11.8 28.5c7.6 7.6 17.8 11.6 28.5 11.6 10.8 0 20.9-3.9 28.6-11.6 7.6-7.6 11.8-17.8 11.8-28.5 0-4.2-.6-8.2-1.9-12.1l50-50.2c22 16.9 49.4 26.9 79.3 26.9 71.9 0 130-58.3 130-130.2 0-65.2-47.7-119.2-110.2-128.7V116c17.5-7.4 28.2-23.8 28.2-42.9 0-26.1-20.9-47.9-47-47.9S311.2 47 311.2 73.1c0 19.1 10.7 35.5 28.2 42.9v61.2c-15.2 2.1-29.6 6.7-42.7 13.6-27.6-20.9-117.5-85.7-168.9-124.8 1.2-4.4 2-9 2-13.8C129.8 23.4 106.3 0 77.4 0 48.6 0 25.2 23.4 25.2 52.2c0 28.9 23.4 52.3 52.2 52.3 9.8 0 18.9-2.9 26.8-7.6l163.2 114.7zm89.5 163.6c-38.1 0-69-30.9-69-69s30.9-69 69-69 69 30.9 69 69-30.9 69-69 69z"], 49856 "imdb": [448, 512, [], "f2d8", "M350.5 288.7c0 5.4 1.6 14.4-6.2 14.4-1.6 0-3-.8-3.8-2.4-2.2-5.1-1.1-44.1-1.1-44.7 0-3.8-1.1-12.7 4.9-12.7 7.3 0 6.2 7.3 6.2 12.7v32.7zM265 229.9c0-9.7 1.6-16-10.3-16v83.7c12.2.3 10.3-8.7 10.3-18.4v-49.3zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM21.3 228.8c-.1.1-.2.3-.3.4h.3v-.4zM97 192H64v127.8h33V192zm113.3 0h-43.1l-7.6 59.9c-2.7-20-5.4-40.1-8.7-59.9h-42.8v127.8h29v-84.5l12.2 84.5h20.6l11.6-86.4v86.4h28.7V192zm86.3 45.3c0-8.1.3-16.8-1.4-24.4-4.3-22.5-31.4-20.9-49-20.9h-24.6v127.8c86.1.1 75 6 75-82.5zm85.9 17.3c0-17.3-.8-30.1-22.2-30.1-8.9 0-14.9 2.7-20.9 9.2V192h-31.7v127.8h29.8l1.9-8.1c5.7 6.8 11.9 9.8 20.9 9.8 19.8 0 22.2-15.2 22.2-30.9v-36z"], 49857 "instagram": [448, 512, [], "f16d", "M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"], 49858 "internet-explorer": [512, 512, [], "f26b", "M483.049 159.706c10.855-24.575 21.424-60.438 21.424-87.871 0-72.722
49858-79.641-98.371-209.673-38.577-107.632-7.181-211.221 73.67-237.098 186.457 30.852-34.862 78.271-82.298 121.977-101.158C125.404 166.85 79.128 228.002 43.992 291.725 23.246 329.651 0 390.94 0 436.747c0 98.575 92.854 86.5 180.251 42.006 31.423 15.43 66.559 15.573 101.695 15.573 97.124 0 184.249-54.294 216.814-146.022H377.927c-52.509 88.593-196.819 52.996-196.819-47.436H509.9c6.407-43.581-1.655-95.715-26.851-141.162zM64.559 346.877c17.711 51.15 53.703 95.871 100.266 123.304-88.741 48.94-173.267 29.096-100.266-123.304zm115.977-108.873c2-55.151 50.276-94.871 103.98-94.871 53.418 0 101.981 39.72 103.981 94.871H180.536zm184.536-187.6c21.425-10.287 48.563-22.003 72.558-22.003 31.422 0 54.274 21.717 54.274 53.722 0 20.003-7.427 49.007-14.569 67.867-26.28-42.292-65.986-81.584-112.263-99.586z"], 49859 "ioxhost": [640, 512, [], "f208", "M616 160h-67.3C511.2 70.7 422.9 8 320 8 183 8 72 119 72 256c0 16.4 1.6 32.5 4.7 48H24c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h67.3c37.5 89.3 125.8 152 228.7 152 137 0 248-111 248-248 0-16.4-1.6-32.5-4.7-48H616c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24zm-96 96c0 110.5-89.5 200-200 200-75.7 0-141.6-42-175.5-104H424c13.3 0 24-10.8 24-24 0-13.3-10.7-24-24-24H125.8c-3.8-15.4-5.8-31.4-5.8-48 0-110.5 89.5-200 200-200 75.7 0 141.6 42 175.5 104H216c-13.3 0-24 10.8-24 24 0 13.3 10.7 24 24 24h298.2c3.8 15.4 5.8 31.4 5.8 48zm-304-24h208c13.3 0 24 10.7 24 24 0 13.2-10.7 24-24 24H216c-13.3 0-24-10.7-24-24 0-13.2 10.7-24 24-24z"], 49860 "itunes": [448, 512, [], "f3b4", "M223.6 80.3C129 80.3 52.5 157 52.5 251.5S129 422.8 223.6 422.8s171.2-76.7 171.2-171.2c0-94.6-76.7-171.3-171.2-171.3zm79.4 240c-3.2 13.6-13.5 21.2-27.3 23.8-12.1 2.2-22.2 2.8-31.9-5-11.8-10-12-26.4-1.4-36.8 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 3.2-3.6 2.2-2 2.2-80.8 0-5.6-2.7-7.1-8.4-6.1-4 .7-91.9 17.1-91.9 17.1-5 1.1-6.7 2.6-6.7 8.3 0 116.1.5 110.8-1.2 118.5-2.1 9-7.6 15.8-14.9 19.6-8.3 4.6-23.4 6.6-31.4 5.2-21.4-4-28.9-28.7-14.4-42.9 8.4-8 20.3-9.6 38-12.8 3-.5 5.6-1.2 7.7-3.7 5-5.7.9-127 2.6-133.7.4-2.6 1.5-4.8 3.5-6.4 2.1-1.7 5.8-2.7 6.7-2.7 101-19 113.3-21.4 115.1-21.4 5.7-.4 9 3 9 8.7-.1 170.6.4 161.4-1 167.6zM345.2 32H102.8C45.9 32 0 77.9 0 134.8v242.4C0 434.1 45.9 480 102.8 480h242.4c57 0 102.8-45.9 102.8-102.8V134.8C448 77.9 402.1 32 345.2 32zM223.6 444c-106.3 0-192.5-86.2-192.5-192.5S117.3 59 223.6 59s192.5 86.2 192.5 192.5S329.9 444 223.6 444z"], 49861 "itunes-note": [384, 512, [], "f3b5", "M381.9 388.2c-6.4 27.4-27.2 42.8-55.1 48-24.5 4.5-44.9 5.6-64.5-10.2-23.9-20.1-24.2-53.4-2.7-74.4 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 6.4-7.2 4.4-4.1 4.4-163.2 0-11.2-5.5-14.3-17-12.3-8.2 1.4-185.7 34.6-185.7 34.6-10.2 2.2-13.4 5.2-13.4 16.7 0 234.7 1.1 223.9-2.5 239.5-4.2 18.2-15.4 31.9-30.2 39.5-16.8 9.3-47.2 13.4-63.4 10.4-43.2-8.1-58.4-58-29.1-86.6 17-16.2 40.9-19.5 76.8-25.8 6-1.1 11.2-2.5 15.6-7.4 10.1-11.5 1.8-256.6 5.2-270.2.8-5.2 3-9.6 7.1-12.9 4.2-3.5 11.8-5.5 13.4-5.5 204-38.2 228.9-43.1 232.4-43.1 11.5-.8 18.1 6 18.1 17.6.2 344.5 1.1 326-1.8 338.5z"], 49862 "java": [377, 512, [], "f4e4", "M121.6 396s-19.6 11.4 13.9 15.2c40.6 4.6 61.3 4 106-4.5 0 0 11.8 7.4 28.2 13.8C169.5 463.4 42.9 418 121.6 396m-12.2-56.1s-21.9 16.2 11.6 19.7c43.3 4.5 77.6 4.8 136.8-6.6 0 0 8.2 8.3 21.1 12.8-121.3 35.5-256.3 2.9-169.5-25.9m103.2-95.1c24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3.1 0-175.2 43.8-91.5 140.2m132.6 192.6s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2 204.2 33.2 372.4-14.9 319.4-38.8M131 281.8s-93.1 22.1-33 30.1c25.4 3.4 76 2.6 123.1-1.3 38.5-3.2 77.2-10.2 77.2-10.2s-13.6 5.8-23.4 12.5c-94.5 24.9-277 13.3-224.5-12.1 44.5-21.4 80.6-19 80.6-19m167 93.3c96.1-49.9 51.6-97.9 20.6-91.4-7.6 1.6-11 3-11 3s2.8-4.4 8.2-6.3c61.3-21.6 108.5 63.6-19.8 97.3 0-.1 1.5-1.4 2-2.6M240 0s53.2 53.2-50.5 135c-83.1 65.6-19 103.1 0 145.8-48.5-43.8-84.1-82.3-60.2-118.2C164.4 110.1 261.5 84.5 240 0m-99.5 510.4c92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6"], 49863 "jedi-order": [448, 512, [], "f50e", "M231.89 335.72l31.44-45.89-20.18 55.5 62.56 9.09-62.56 9.08 24.22 47.43s-30.22-31.77-34.49-36.25c1.76 68.78 2.19 85.7 2.19 85.7s154.4-71.65 68.62-230.09c0 0 106.97-118.07 10.09-190.73 0 0 165.5 99.91 60.55 271.46 0 0 8
498636.78-84.77 41.37-170.54 0 0 78.71 111.01-17.16 233.11 0 0 26.24-16.15 49.45-77.71 0 0-16.93 183.26-221.96 185.66v.02h-4.08v-.02C16.93 479.14 0 295.88 0 295.88c23.21 61.56 49.44 77.71 49.44 77.71-95.87-122.11-17.15-233.11-17.15-233.11-45.41 85.78 41.38 170.54 41.38 170.54-104.95-171.56 60.54-271.46 60.54-271.46-96.88 72.66 10.09 190.73 10.09 190.73-85.78 158.44 68.62 230.09 68.62 230.09s.43-16.93 2.19-85.7l-34.48 36.25 24.22-47.43-62.56-9.08 62.56-9.09-20.18-55.5 31.44 45.89c2.25-87.85 7.82-305.82 7.85-306.85l.01-2.43.02 1 .03-1 .01 2.43c.05 1.72 5.61 219.2 7.86 306.85z"], 49864 "jenkins": [512, 512, [], "f3b6", "M487.1 425c-1.4-11.2-19-23.1-28.2-31.9-5.1-5-29-23.1-30.4-29.9-1.4-6.6 9.7-21.5 13.3-28.9 5.1-10.7 8.8-23.7 11.3-32.6 18.8-66.1 20.7-156.9-6.2-211.2-10.2-20.6-38.6-49-56.4-62.5-42-31.7-119.6-35.3-170.1-16.6-14.1 5.2-27.8 9.8-40.1 17.1-33.1 19.4-68.3 32.5-78.1 71.6-24.2 10.8-31.5 41.8-30.3 77.8.2 7 4.1 15.8 2.7 22.4-.7 3.3-5.2 7.6-6.1 9.8-11.6 27.7-2.3 64 11.1 83.7 8.1 11.9 21.5 22.4 39.2 25.2.7 10.6 3.3 19.7 8.2 30.4 3.1 6.8 14.7 19 10.4 27.7-2.2 4.4-21 13.8-27.3 17.6C89 407.2 73.7 415 54.2 429c-12.6 9-32.3 10.2-29.2 31.1 2.1 14.1 10.1 31.6 14.7 45.8.7 2 1.4 4.1 2.1 6h422c4.9-15.3 9.7-30.9 14.6-47.2 3.4-11.4 10.2-27.8 8.7-39.7zM205.9 33.7c1.8-.5 3.4.7 4.9 2.4-.2 5.2-5.4 5.1-8.9 6.8-5.4 6.7-13.4 9.8-20 17.2-6.8 7.5-14.4 27.7-23.4 30-4.5 1.1-9.7-.8-13.6-.5-10.4.7-17.7 6-28.3 7.5 13.6-29.9 56.1-54 89.3-63.4zm-104.8 93.6c13.5-14.9 32.1-24.1 54.8-25.9 11.7 29.7-8.4 65-.9 97.6 2.3 9.9 10.2 25.4-2.4 25.7.3-28.3-34.8-46.3-61.3-29.6-1.8-21.5-4.9-51.7 9.8-67.8zm36.7 200.2c-1-4.1-2.7-12.9-2.3-15.1 1.6-8.7 17.1-12.5 11-24.7-11.3-.1-13.8 10.2-24.1 11.3-26.7 2.6-45.6-35.4-44.4-58.4 1-19.5 17.6-38.2 40.1-35.8 16 1.8 21.4 19.2 24.5 34.7 9.2.5 22.5-.4 26.9-7.6-.6-17.5-8.8-31.6-8.2-47.7 1-30.3 17.5-57.6 4.8-87.4 13.6-30.9 53.5-55.3 83.1-70 36.6-18.3 94.9-3.7 129.3 15.8 19.7 11.1 34.4 32.7 48.3 50.7-19.5-5.8-36.1 4.2-33.1 20.3 16.3-14.9 44.2-.2 52.5 16.4 7.9 15.8 7.8 39.3 9 62.8 2.9 57-10.4 115.9-39.1 157.1-7.7 11-14.1 23-24.9 30.6-26 18.2-65.4 34.7-99.2 23.4-44.7-15-65-44.8-89.5-78.8.7 18.7 13.8 34.1 26.8 48.4 11.3 12.5 25 26.6 39.7 32.4-12.3-2.9-31.1-3.8-36.2 7.2-28.6-1.9-55.1-4.8-68.7-24.2-10.6-15.4-21.4-41.4-26.3-61.4zm222 124.1c4.1-3 11.1-2.9 17.4-3.6-5.4-2.7-13-3.7-19.3-2.2-.1-4.2-2-6.8-3.2-10.2 10.6-3.8 35.5-28.5 49.6-20.3 6.7 3.9 9.5 26.2 10.1 37 .4 9-.8 18-4.5 22.8-18.8-.6-35.8-2.8-50.7-7 .9-6.1-1-12.1.6-16.5zm-17.2-20c-16.8.8-26-1.2-38.3-10.8.2-.8 1.4-.5 1.5-1.4 18 8 40.8-3.3 59-4.9-7.9 5.1-14.6 11.6-22.2 17.1zm-12.1 33.2c-1.6-9.4-3.5-12-2.8-20.2 25-16.6 29.7 28.6 2.8 20.2zM226 438.6c-11.6-.7-48.1-14-38.5-23.7 9.4 6.5 27.5 4.9 41.3 7.3.8 4.4-2.8 10.2-2.8 16.4zM57.7 497.1c-4.3-12.7-9.2-25.1-14.8-36.9 30.8-23.8 65.3-48.9 102.2-63.5 2.8-1.1 23.2 25.4 26.2 27.6 16.5 11.7 37 21 56.2 30.2 1.2 8.8 3.9 20.2 8.7 35.5.7 2.3 1.4 4.7 2.2 7.2H57.7zm240.6 5.7h-.8c.3-.2.5-.4.8-.5v.5zm7.5-5.7c2.1-1.4 4.3-2.8 6.4-4.3 1.1 1.4 2.2 2.8 3.2 4.3h-9.6zm15.1-24.7c-10.8 7.3-20.6 18.3-33.3 25.2-6 3.3-27 11.7-33.4 10.2-3.6-.8-3.9-5.3-5.4-9.5-3.1-9-10.1-23.4-10.8-37-.8-17.2-2.5-46 16-42.4 14.9 2.9 32.3 9.7 43.9 16.1 7.1 3.9 11.1 8.6 21.9 9.5-.1 1.4-.1 2.8-.2 4.3-5.9 3.9-15.3 3.8-21.8 7.1 9.5.4 17 2.7 23.5 5.9-.1 3.4-.3 7-.4 10.6zm53.4 24.7h-14c-.1-3.2-2.8-5.8-6.1-5.8s-5.9 2.6-6.1 5.8h-17.4c-2.8-4.4-5.7-8.6-8.9-12.5 2.1-2.2 4-4.7 6-6.9 9 3.7 14.8-4.9 21.7-4.2 7.9.8 14.2 11.7 25.4 11l-.6 12.6zm8.7 0c.2-4 .4-7.8.6-11.5 15.6-7.3 29 1.3 35.7 11.5H383zm83.4-37c-2.3 11.2-5.8 24-9.9 37.1-.2-.1-.4-.1-.6-.1H428c.6-1.1 1.2-2.2 1.9-3.3-2.6-6.1-9-8.7-10.9-15.5 12.1-22.7 6.5-93.4-24.2-78.5 4.3-6.3 15.6-11.5 20.8-19.3 13 10.4 20.8 20.3 33.2 31.4 6.8 6 20 13.3 21.4 23.1.8 5.5-2.6 18.9-3.8 25.1zM222.2 130.5c5.4-14.9 27.2-34.7 45-32 7.7 1.2 18 8.2 12.2 17.7-30.2-7-45.2 12.6-54.4 33.1-8.1-2-4.9-13.1-2.8-18.8zm184.1 63.1c8.2-3.6 22.4-.7 29.6-5.3-4.2-11.5-10.3-21.4-9.3-37.7.5 0 1 0 1.4.1 6.8 14.2 12.7 29.2 21.4 41.7-5.7 13.5-43.6 25.4-43.1 1.2zm20.4-43zm-117.2 45.7c-6.8-10.9-19-32.5-14.5-45.3 6.5 11.9 8.6 24.4 17.8 33.3 4.1 4 12.2 9 8.2 20.2-.9 2.7-7.8 8.6-11.7 9.7-14.4 4.3-47.9.9-36.6-17.1 11.9.7 27.9 7.8 36.8-.8zm27.3 70c3.8 6.6 1.4 18.7 12.1 20.6 20.2 3.4 43.6-12.3 58.1-17.8 9-15.2-.8-20.7-8.9-30.5-16.6-20-38.8-44.8-38-74.7 6.7-4.9 7.3 7.4 8.2 9.7 8.7 20.3 30.4 46.2 46.3 63.5 3.9 4.3 10.3 8.4 11 11.2 2.1 8.2-5.4 18-4.5 23.5-21.7 13.9-45.8 29.1-81.4 25.6-7.4-6.7-10.3-21.4-2.9-31.1zm-201.3-9.2c-6.8-3.9-8.4-21-16.4-21.4-11.4-.7-9.3 22.2-9.3 35.5-7.8-7.1-9.2-29.1-3.5-40.3-6.6-3.2-9.5 3.6-13.1 5.9 4.7-34.1 49.8-15.8 42.3 20.3zm299.6 28.8c-10.1 19.2-24.4 40.4-54 41-.6-6.2-1.1-15.6 0-19.4 22.7-2.2 36.6-13.7 54-21.6zm-141.9 12.4c18.9 9.9 53.6 11 79.3 10.2 1.4 5.6 1.3 12.6 1.4 19.4-33 1.8-72-6.4-80.7-29.6zm92.2 46.7c-1.7 4.3-5.3 9.3-9.8 11.1-12.1 4.9-45.6 8.7-62.4-.3-10.7-5.7-17.5-18.5-23.4-26-2.8-3.6-16.9-12.9-.2-12.9 13.1 32.7 58 29 95.8 28.1z"], 49865 "joget": [496, 512, [], "f3b7", "M227.5 468.7c-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 3
498651.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6-40.4 65.5-110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1M66.1 143.9C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-230.3-4.9-55.5-1.4-81.7-20.8-58.5-48.2 23.2-27.4 51.1-40.7 68.9-51.2 17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1m-29.2-18c-71.9 116.6-35.6 269.3 81 341.2 116.6 71.9 269.3 35.6 341.2-80.9 71.9-116.6 35.6-269.4-81-341.2-40.5-25.1-85.5-37-129.9-37C165 8 83.8 49.9 36.9 125.9m244.4 110.4c-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5c10.5-6.4 31.9-14 13.4-24.6-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6"], 49866 "joomla": [448, 512, [], "f1aa", "M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z"], 49867 "js": [448, 512, [], "f3b8", "M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"], 49868 "js-square": [448, 512, [], "f3b9", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"], 49869 "jsfiddle": [576, 512, [], "f1cc", "M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-
498695.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z"], 49870 "kaggle": [291, 512, [], "f5fa", "M291.72 508.98c-.51 2.01-2.51 3.01-6.01 3.01h-66.92c-4.02 0-7.51-1.75-10.52-5.27L97.74 366.14l-30.82 29.32v109.02c0 5.02-2.51 7.52-7.52 7.52H7.52C2.5 512 0 509.5 0 504.48V7.51C0 2.51 2.5 0 7.52 0H59.4c5.01 0 7.52 2.51 7.52 7.51v306l132.32-133.82c3.51-3.5 7.02-5.26 10.52-5.26h69.18c6.96 0 7.9 7.87 5.26 10.52L144.35 320.26l145.86 181.2"], 49871 "keybase": [412, 512, [], "f4f5", "M177.2 430.9c0 9.8-8 17.8-17.8 17.8s-17.8-8-17.8-17.8 8-17.8 17.8-17.8c9.8-.1 17.8 7.9 17.8 17.8zM270 413c-9.8 0-17.8 8-17.8 17.8s8 17.8 17.8 17.8 17.8-8 17.8-17.8-8-17.8-17.8-17.8zm142.3-36c0 38.9-7.6 73.9-22.2 103h-27.3c23.5-38.7 30.5-94.8 22.4-134.3-16.1 29.5-52.1 38.6-85.9 28.8-127.8-37.5-192.5 19.7-234.6 50.3l18.9-59.3-39.9 42.3c4.8 26.7 15.7 51.3 31.2 72.3H46.1c-9.7-15.8-17.2-33-22.2-51.3L.1 454c0-74.9-5.5-147.6 61.5-215.2 20.2-20.4 43.7-36.2 69.1-46.7-6.8-13.5-9.5-29.2-7.8-46l-19.9-1.2c-17.9-1.1-31.6-16.5-30.6-34.4v-.1L74 84.2c1.1-17.1 15.4-30.6 32.5-30.6 1.3 0-.3-.1 28.2 1.7 13.9.8 21.5 9.8 22.8 11.4 7.1-10.4 14.5-20.5 24.6-34.5l20.6 12.1c-13.6 29-9.1 36.2-9 36.3 3.9 0 13.9-.5 32.4 5.7C246 92.9 262 107 271 126c.4.9 15.5 29 1.2 62.6 19 6.1 51.3 19.9 82.4 51.8 36.6 37.6 57.7 87.4 57.7 136.6zM128 122.3c3.2-10 7.7-19.7 13.1-29.4.1-2 2.2-13.1-7.8-13.8-28.5-1.8-26.3-1.6-26.7-1.6-4.6 0-8.3 3.5-8.6 8.1l-1.6 26.2c-.3 4.7 3.4 8.8 8.1 9.1l23.5 1.4zm25.8 61.8c5.6 9.4 14.1 16.1 22.3 20 0-21.2 28.5-41.9 52.8-17.5l8.4 10.3c20.8-18.8 19.4-45.3 12.1-60.9-13.8-29.1-46.9-32-54.3-31.7-10.3.4-19.7-5.4-23.7-15.3-13.7 21.2-37.2 62.5-17.6 95.1zm82.9 68.4L217 268.6c-1.9 1.6-2.2 4.4-.6 6.3l8.9 10.9c1 1.2 3.8 2.7 6.3.6l19.6-16 5.5 6.8c4.9 6 13.8-1.4 9-7.3-63.6-78.3-41.5-51.1-55.3-68.1-4.7-6-13.9 1.4-9 7.3 1.9 2.3 18.4 22.6 19.8 24.3l-9.6 7.9c-4.6 3.8 2.6 13.3 7.4 9.4l9.7-8 8 9.8zm118.4 25.7c-16.9-23.7-42.6-46.7-73.4-60.4-7.9-3.5-15-6.1-22.9-8.6-2 2.2-4.1 4.3-6.4 6.2l31.9 39.2c10.4 12.7 8.5 31.5-4.2 41.9-1.3 1.1-13.1 10.7-29 4.9-2.9 2.3-10.1 9.9-22.2 9.9-8.6 0-16.6-3.8-22.1-10.5l-8.9-10.9c-6.3-7.8-7.9-17.9-5-26.8-8.2-9.9-8.3-21.3-4.6-30-7.2-1.3-26.7-6.2-42.7-21.4-55.8 20.7-88 64.4-101.3 91.2-14.9 30.2-18.8 60.9-19.9 90.2 8.2-8.7-3.9 4.1 114-120.9l-29.9 93.6c57.8-31.1 124-36 197.4-14.4 23.6 6.9 45.1 1.6 56-13.9 11.1-15.6 8.5-37.7-6.8-59.3zM110.6 107.3l15.6 1 1-15.6-15.6-1-1 15.6z"], 49872 "keycdn": [512, 512, [], "f3ba", "M63.8 409.3l60.5-59c32.1 42.8 71.1 66 126.6 67.4 30.5.7 60.3-7 86.4-22.4 5.1 5.3 18.5 19.5 20.9 22-32.2 20.7-69.6 31.1-108.1 30.2-43.3-1.1-84.6-16.7-117.7-44.4.3-.6-38.2 37.5-38.6 37.9 9.5 29.8-13.1 62.4-46.3 62.4C20.7 503.3 0 481.7 0 454.9c0-34.3 33.1-56.6 63.8-45.6zm354.9-252.4c19.1 31.3 29.6 67.4 28.7 104-1.1 44.8-19 87.5-48.6 121 .3.3 23.8 25.2 24.1 25.5 9.6-1.3 19.2 2 25.9 9.1 11.3 12 10.9 30.9-1.1 42.4-12 11.3-30.9 10.9-42.4-1.1-6.7-7-9.4-16.8-7.6-26.3-24.9-26.6-44.4-47.2-44.4-47.2 42.7-34.1 63.3-79.6 64.4-124.2.7-28.9-7.2-57.2-21.1-82.2l22.1-21zM104 53.1c6.7 7 9.4 16.8 7.6 26.3l45.9 48.1c-4.7 3.8-13.3 10.4-22.8 21.3-25.4 28.5-39.6 64.8-40.7 102.9-.7 28.9 6.1 57.2 20 82.4l-22 21.5C72.7 324 63.1 287.9 64.2 250.9c1-44.6 18.3-87.6 47.5-121.1l-25.3-26.4c-9.6 1.3-19.2-2-25.9-9.1-11.3-12-10.9-30.9 1.1-42.4C73.5 40.7 92.2 41 104 53.1zM464.9 8c26 0 47.1 22.4 47.1 48.3S490.9 104 464.9 104c-6.3.1-14-1.1-15.9-1.8l-62.9 59.7c-32.7-43.6-76.7-65.9-126.9-67.2-30.5-.7-60.3 6.8-86.2 22.4l-21.1-22C184.1 74.3 221.5 64 260 64.9c43.3 1.1 84.6 16.7 117.7 44.6l41.1-38.6c-1.5-4.7-2.2-9.6-2.2-14.5C416.5 29.7 438.9 8 464.9 8zM256.7 113.4c5.5 0 10.9.4 16.4 1.1 78.1 9.8 133.4 81.1 123.8 159.1-9.8 78.1-81.1 133.4-159.1 123.8-78.1-9.8-133.4-81.1-123.8-159.2 9.3-72.4 70.1-124.6 142.7-124.8zm-59 119.4c.6 22.7 12.2 41.8 32.4 52.2l-11 51.7h73.7l-11-51.7c20.1-10.9 32.1-29 32.4-52.2-.4-32.8-25.8-57.5-58.3-58.3-32.1.8-57.3 24.8-58.2 58.3zM256 160"], 49873 "kickstarter": [448, 512, [], "f3bb", "M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z"], 49874 "kickstarter-k": [384, 512, [], "f3bc", "M147.3 114.4c0-56.2-32.5-82.4-73.4
49874-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z"], 49875 "korvue": [446, 512, [], "f42f", "M386.5 34h-327C26.8 34 0 60.8 0 93.5v327.1C0 453.2 26.8 480 59.5 480h327.1c33 0 59.5-26.8 59.5-59.5v-327C446 60.8 419.2 34 386.5 34zM87.1 120.8h96v116l61.8-116h110.9l-81.2 132H87.1v-132zm161.8 272.1l-65.7-113.6v113.6h-96V262.1h191.5l88.6 130.8H248.9z"], 49876 "laravel": [640, 512, [], "f3bd", "M637.5 241.6c-4.2-4.8-62.8-78.1-73.1-90.5-10.3-12.4-15.4-10.2-21.7-9.3-6.4.9-80.5 13.4-89.1 14.8-8.6 1.5-14 4.9-8.7 12.3 4.7 6.6 53.4 75.7 64.2 90.9l-193.7 46.4L161.2 48.7c-6.1-9.1-7.4-12.3-21.4-11.6-14 .6-120.9 9.5-128.5 10.2-7.6.6-16 4-8.4 22s129 279.6 132.4 287.2c3.4 7.6 12.2 20 32.8 15 21.1-5.1 94.3-24.2 134.3-34.7 21.1 38.3 64.2 115.9 72.2 127 10.6 14.9 18 12.4 34.3 7.4 12.8-3.9 199.6-71.1 208-74.5 8.4-3.5 13.6-5.9 7.9-14.4-4.2-6.2-53.5-72.2-79.3-106.8 17.7-4.7 80.6-21.4 87.3-23.3 7.9-2 9-5.8 4.7-10.6zm-352.2 72c-2.3.5-110.8 26.5-116.6 27.8-5.8 1.3-5.8.7-6.5-1.3-.7-2-129-266.7-130.8-270-1.8-3.3-1.7-5.9 0-5.9s102.5-9 106-9.2c3.6-.2 3.2.6 4.5 2.8 0 0 142.2 245.4 144.6 249.7 2.6 4.3 1.1 5.6-1.2 6.1zm306 57.4c1.7 2.7 3.5 4.5-2 6.4-5.4 2-183.7 62.1-187.1 63.6-3.5 1.5-6.2 2-10.6-4.5s-62.4-106.8-62.4-106.8L518 280.6c4.7-1.5 6.2-2.5 9.2 2.2 2.9 4.8 62.4 85.5 64.1 88.2zm12.1-134.1c-4.2.9-73.6 18.1-73.6 18.1l-56.7-77.8c-1.6-2.3-2.9-4.5 1.1-5s68.4-12.2 71.3-12.8c2.9-.7 5.4-1.5 9 3.4 3.6 4.9 52.6 67 54.5 69.4 1.8 2.3-1.4 3.7-5.6 4.7z"], 49877 "lastfm": [512, 512, [], "f202", "M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z"], 49878 "lastfm-square": [448, 512, [], "f203", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-92.2 312.9c-63.4 0-85.4-28.6-97.1-64.1-16.3-51-21.5-84.3-63-84.3-22.4 0-45.1 16.1-45.1 61.2 0 35.2 18 57.2 43.3 57.2 28.6 0 47.6-21.3 47.6-21.3l11.7 31.9s-19.8 19.4-61.2 19.4c-51.3 0-79.9-30.1-79.9-85.8 0-57.9 28.6-92 82.5-92 73.5 0 80.8 41.4 100.8 101.9 8.8 26.8 24.2 46.2 61.2 46.2 24.9 0 38.1-5.5 38.1-19.1 0-19.9-21.8-22-49.9-28.6-30.4-7.3-42.5-23.1-42.5-48 0-40 32.3-52.4 65.2-52.4 37.4 0 60.1 13.6 63 46.6l-36.7 4.4c-1.5-15.8-11-22.4-28.6-22.4-16.1 0-26 7.3-26 19.8 0 11 4.8 17.6 20.9 21.3 32.7 7.1 71.8 12 71.8 57.5.1 36.7-30.7 50.6-76.1 50.6z"], 49879 "leanpub": [576, 512, [], "f212", "M386.539 111.485l15.096 248.955-10.979-.275c-36.232-.824-71.64 8.783-102.657 27.997-31.016-19.214-66.424-27.997-102.657-27.997-45.564 0-82.07 10.705-123.516 27.723L93.117 129.6c28.546-11.803 61.484-18.115 92.226-18.115 41.173 0 73.836 13.175 102.657 42.544 27.723-28.271 59.013-41.721 98.539-42.544zM569.07 448c-25.526 0-47.485-5.215-70.542-15.645-34.31-15.645-69.993-24.978-107.871-24.978-38.977 0-74.934 12.901-102.657 40.623-27.723-27.723-63.68-40.623-102.657-40.623-37.878 0-73.561 9.333-107.871 24.978C55.239 442.236 32.731 448 8.303 448H6.93L49.475 98.859C88.726 76.626 136.486 64 181.775 64 218.83 64 256.984 71.685 288 93.095 319.016 71.685 357.17 64 394.225 64c45.289 0 93.049 12.626 132.3 34.859L569.07 448zm-43.368-44.741l-34.036-280.246c-30.742-13.999-67.248-21.41-101.009-21.41-38.428 0-74.385 12.077-102.657 38.702-28.272-26.625-64.228-38.702-102.657-38.702-33.761 0-70.267 7.411-101.009 21.41L50.298 403.259c47.211-19.487 82.894-33.486 135.045-33.486 37.604 0 70.817 9.606 102.657 29.644 31.84-20.038 65.052-29.644 102.657-29.644 52.151 0 87.834 13.999 135.045 33.486z"], 49880 "less": [640, 512, [], "f41d", "M612.7 219c0-20.5 3.2-32.6 3.2-54.6 0-34.2-12.6-45.2-40.5-45.2h-20.5v24.2h6.3c14.2 0 17.3 4.7 17.3 22.1 0 16.3-1.6 32.6-1.6 51.5 0 24.2 7.9 33.6 23.6 37.3v1.6c-15.8 3.7-23.6 13.1-23.6 37.3 0 18.9 1.6 34.2 1.6 51.5 0 17.9-3.7 22.6-17.3 22.6v.5h-6.3V393h20.5c27.8 0 40.5-11 40.5-45.2 0-22.6-3.2-34.2-3.2-54.6 0-11 6.8-22.6 27.3-23.6v-27.3c-20.5-.7-27.3-12.3-27.3-23.3zm-105.6 32c-15.8-6.3-30.5-10-30.5-20.5 0-7.9 6.3-12.6 17.9-12.6s22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-21 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51s-22.5-41-43-47.8zm-358.9 59.4c-3.7 0-8.4-3.2-8.4-13.1V119.1H65.2c-28.4 0-41 11-41 45.2 0 22.6 3.2 35.2 3.2 54.6 0 11-6.8 22.6-27.3 23.6v27.3c20.5.5 27.3 12.1 27.3 23.1 0 19.4-3.2 31-3.2 53.6 0 34.2 12.6 45.2 40.5 45.2h20.5v-24.2h-6.3c-13.1 0-17.3-5.3-17.3-22.6s1.6-32.1 1.6-51.5c0-24.2-7.9-33.6-23.6-37.3v-1.6c15.8-3.7 23.6-13.1 23.6-37.3 0-18.9-1.6-34.2-1.6-
4988051.5s3.7-22.1 17.3-22.1H93v150.8c0 32.1 11 53.1 43.1 53.1 10 0 17.9-1.6 23.6-3.7l-5.3-34.2c-3.1.8-4.6.8-6.2.8zM379.9 251c-16.3-6.3-31-10-31-20.5 0-7.9 6.3-12.6 17.9-12.6 11.6 0 22.1 4.7 33.6 13.1l21-27.8c-13.1-10-31-20.5-55.2-20.5-35.7 0-59.9 20.5-59.9 49.4 0 25.7 22.6 38.9 41.5 46.2 16.3 6.3 32.1 11.6 32.1 22.1 0 7.9-6.3 13.1-20.5 13.1-13.1 0-26.3-5.3-40.5-16.3l-20.5 30.5c15.8 13.1 39.9 22.1 59.9 22.1 42 0 64.6-22.1 64.6-51 .1-28.9-22.5-41-43-47.8zm-155-68.8c-38.4 0-75.1 32.1-74.1 82.5 0 52 34.2 82.5 79.3 82.5 18.9 0 39.9-6.8 56.2-17.9l-15.8-27.8c-11.6 6.8-22.6 10-34.2 10-21 0-37.3-10-41.5-34.2H290c.5-3.7 1.6-11 1.6-19.4.6-42.6-22.6-75.7-66.7-75.7zm-30 66.2c3.2-21 15.8-31 30.5-31 18.9 0 26.3 13.1 26.3 31h-56.8z"], 49881 "line": [448, 512, [], "f3c0", "M272.1 204.2v71.1c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.1 0-2.1-.6-2.6-1.3l-32.6-44v42.2c0 1.8-1.4 3.2-3.2 3.2h-11.4c-1.8 0-3.2-1.4-3.2-3.2v-71.1c0-1.8 1.4-3.2 3.2-3.2H219c1 0 2.1.5 2.6 1.4l32.6 44v-42.2c0-1.8 1.4-3.2 3.2-3.2h11.4c1.8-.1 3.3 1.4 3.3 3.1zm-82-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 1.8 1.4 3.2 3.2 3.2h11.4c1.8 0 3.2-1.4 3.2-3.2v-71.1c0-1.7-1.4-3.2-3.2-3.2zm-27.5 59.6h-31.1v-56.4c0-1.8-1.4-3.2-3.2-3.2h-11.4c-1.8 0-3.2 1.4-3.2 3.2v71.1c0 .9.3 1.6.9 2.2.6.5 1.3.9 2.2.9h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.7-1.4-3.2-3.1-3.2zM332.1 201h-45.7c-1.7 0-3.2 1.4-3.2 3.2v71.1c0 1.7 1.4 3.2 3.2 3.2h45.7c1.8 0 3.2-1.4 3.2-3.2v-11.4c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2V234c0-1.8-1.4-3.2-3.2-3.2H301v-12h31.1c1.8 0 3.2-1.4 3.2-3.2v-11.4c-.1-1.7-1.5-3.2-3.2-3.2zM448 113.7V399c-.1 44.8-36.8 81.1-81.7 81H81c-44.8-.1-81.1-36.9-81-81.7V113c.1-44.8 36.9-81.1 81.7-81H367c44.8.1 81.1 36.8 81 81.7zm-61.6 122.6c0-73-73.2-132.4-163.1-132.4-89.9 0-163.1 59.4-163.1 132.4 0 65.4 58 120.2 136.4 130.6 19.1 4.1 16.9 11.1 12.6 36.8-.7 4.1-3.3 16.1 14.1 8.8 17.4-7.3 93.9-55.3 128.2-94.7 23.6-26 34.9-52.3 34.9-81.5z"], 49882 "linkedin": [448, 512, [], "f08c", "M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"], 49883 "linkedin-in": [448, 512, [], "f0e1", "M100.3 480H7.4V180.9h92.9V480zM53.8 140.1C24.1 140.1 0 115.5 0 85.8 0 56.1 24.1 32 53.8 32c29.7 0 53.8 24.1 53.8 53.8 0 29.7-24.1 54.3-53.8 54.3zM448 480h-92.7V334.4c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7V480h-92.8V180.9h89.1v40.8h1.3c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3V480z"], 49884 "linode": [448, 512, [], "f2b8", "M437.4 226.3c-.3-.9-.9-1.4-1.4-2l-70-38.6c-.9-.6-2-.6-3.1 0l-58.9 36c-.9.6-1.4 1.7-1.4 2.6l-.9 31.4-24-16c-.9-.6-2.3-.6-3.1 0L240 260.9l-1.4-35.1c0-.9-.6-2-1.4-2.3l-36-24.3 33.7-17.4c1.1-.6 1.7-1.7 1.7-2.9l-5.7-132.3c0-.9-.9-2-1.7-2.6L138.6.3c-.9-.3-1.7-.3-2.3-.3L12.6 38.6c-1.4.6-2.3 2-2 3.7L38 175.4c.9 3.4 34 27.4 38.6 30.9l-26.9 12.9c-1.4.9-2 2.3-1.7 3.4l20.6 100.3c.6 2.9 23.7 23.1 27.1 26.3l-17.4 10.6c-.9.6-1.7 2-1.4 3.1 1.4 7.1 15.4 77.7 16.9 79.1l65.1 69.1c.6.6 1.4.6 2.3.9.6 0 1.1-.3 1.7-.6l83.7-66.9c.9-.6 1.1-1.4 1.1-2.3l-2-46 28 23.7c1.1.9 2.9.9 4 0l66.9-53.4c.9-.6 1.1-1.4 1.1-2.3l2.3-33.4 20.3 14c1.1.9 2.6.9 3.7 0l54.6-43.7c.6-.3 1.1-1.1 1.1-2 .9-6.5 10.3-70.8 9.7-72.8zm-204.8 4.8l4 92.6-90.6 61.2-14-96.6 100.6-57.2zm-7.7-180l5.4 126-106.6 55.4L104 97.7l120.9-46.6zM44 173.1L18 48l79.7 49.4 19.4 132.9L44 173.1zm30.6 147.8L55.7 230l70 58.3 13.7 93.4-64.8-60.8zm24.3 117.7l-13.7-67.1 61.7 60.9 9.7 67.4-57.7-61.2zm64.5 64.5l-10.6-70.9 85.7-61.4 3.1 70-78.2 62.3zm82-115.1c0-3.4.9-22.9-2-25.1l-24.3-20 22.3-14.9c2.3-1.7 1.1-5.7 1.1-8l29.4 22.6.6 68.3-27.1-22.9zm94.3-25.4l-60.9 48.6-.6-68.6 65.7-46.9-4.2 66.9zm27.7-25.7l-19.1-13.4 2-34c.3-.9-.3-2-1.1-2.6L308 259.7l.6-30 64.6 40.6-5.8 66.6zm54.6-39.8l-48.3 38.3 5.7-65.1 51.1-36.6-8.5 63.4z"], 49885 "linux": [448, 512, [], "f17c", "M196.1 123.6c-.2-1.4 1.9-2.3 3.2-2.9 1.7-.7 3.9-1 5.5-.1.4.2.8.7.6 1.1-.4 1.2-2.4 1-3.5 1.6-1 .5-1.8 1.7-3 1.7-1 .1-2.7-.4-2.8-1.4zm24.7-.3c1 .5 1.8 1.7 3 1.7 1.1 0 2.8-.4 2.9-1.5.2-1.4-1.9-2.3-3.2-2.9-1.7-.7-3.9-1-5.5-.1-.4.2-.8.7-.6 1.1.3 1.3 2.3 1.1 3.4 1.7zm214.7 310.2c-.5 8.2-6.5 13.8-13.9 18.3-14.9 9-37.3 15.8-50.9 32.2l-2.6-2.2 2.6 2.2c-14.2 16.9-31.7 26.6-48.3 27.9-16.5 1.3-32-6.3-40.3-23v-.1c-1.1-2.1-1.9-4.4-2.5-6.7-21.5 1.2-40.2-5.3-55.1-4.1-22 1.2
49885-35.8 6.5-48.3 6.6-4.8 10.6-14.3 17.6-25.9 20.2-16 3.7-36.1 0-55.9-10.4l1.6-3-1.6 3c-18.5-9.8-42-8.9-59.3-12.5-8.7-1.8-16.3-5-20.1-12.3-3.7-7.3-3-17.3 2.2-31.7 1.7-5.1.4-12.7-.8-20.8-.6-3.9-1.2-7.9-1.2-11.8 0-4.3.7-8.5 2.8-12.4 4.5-8.5 11.8-12.1 18.5-14.5 6.7-2.4 12.8-4 17-8.3 5.2-5.5 10.1-14.4 16.6-20.2-2.6-17.2.2-35.4 6.2-53.3 12.6-37.9 39.2-74.2 58.1-96.7 16.1-22.9 20.8-41.3 22.5-64.7C158 103.4 132.4-.2 234.8 0c80.9.1 76.3 85.4 75.8 131.3-.3 30.1 16.3 50.5 33.4 72 15.2 18 35.1 44.3 46.5 74.4 9.3 24.6 12.9 51.8 3.7 79.1 1.4.5 2.8 1.2 4.1 2 1.4.8 2.7 1.8 4 2.9 6.6 5.6 8.7 14.3 10.5 22.4 1.9 8.1 3.6 15.7 7.2 19.7 11.1 12.4 15.9 21.5 15.5 29.7zM220.8 109.1c3.6.9 8.9 2.4 13 4.4-2.1-12.2 4.5-23.5 11.8-23 8.9.3 13.9 15.5 9.1 27.3-.8 1.9-2.8 3.4-3.9 4.6 6.7 2.3 11 4.1 12.6 4.9 7.9-9.5 10.8-26.2 4.3-40.4-9.8-21.4-34.2-21.8-44 .4-3.2 7.2-3.9 14.9-2.9 21.8zm-46.2 18.8c7.8-5.7 6.9-4.7 5.9-5.5-8-6.9-6.6-27.4 1.8-28.1 6.3-.5 10.8 10.7 9.6 19.6 3.1-2.1 6.7-3.6 10.2-4.6 1.7-19.3-9-33.5-19.1-33.5-18.9 0-24 37.5-8.4 52.1zm-9.4 20.9c1.5 4.9 6.1 10.5 14.7 15.3 7.8 4.6 12 11.5 20 15 2.6 1.1 5.7 1.9 9.6 2.1 18.4 1.1 27.1-11.3 38.2-14.9 11.7-3.7 20.1-11 22.7-18.1 3.2-8.5-2.1-14.7-10.5-18.2-11.3-4.9-16.3-5.2-22.6-9.3-10.3-6.6-18.8-8.9-25.9-8.9-14.4 0-23.2 9.8-27.9 14.2-.5.5-7.9 5.9-14.1 10.5-4.2 3.3-5.6 7.4-4.2 12.3zm-33.5 252.8L112.1 366c-6.8-9.2-13.8-14.8-21.9-16-7.7-1.2-12.6 1.4-17.7 6.9-4.8 5.1-8.8 12.3-14.3 18-7.8 6.5-9.3 6.2-19.6 9.9-6.3 2.2-11.3 4.6-14.8 11.3-2.7 5-2.1 12.2-.9 20 1.2 7.9 3 16.3.6 23.9v.2c-5 13.7-5 21.7-2.6 26.4 7.9 15.4 46.6 6.1 76.5 21.9 31.4 16.4 72.6 17.1 75.3-18 2.1-20.5-31.5-49-41-68.9zm153.9 35.8c3.2-11 6.3-21.3 6.8-29 .8-15.2 1.6-28.7 4.4-39.9 3.1-12.6 9.3-23.1 21.4-27.3 2.3-21.1 18.7-21.1 38.3-12.5 18.9 8.5 26 16 22.8 26.1 1 0 2-.1 4.2 0 5.2-16.9-14.3-28-30.7-34.8 2.9-12 2.4-24.1-.4-35.7-6-25.3-22.6-47.8-35.2-59-2.3-.1-2.1 1.9 2.6 6.5 11.6 10.7 37.1 49.2 23.3 84.9-3.9-1-7.6-1.5-10.9-1.4-5.3-29.1-17.5-53.2-23.6-64.6-11.5-21.4-29.5-65.3-37.2-95.7-4.5 6.4-12.4 11.9-22.3 15-4.7 1.5-9.7 5.5-15.9 9-13.9 8-30 8.8-42.4-1.2-4.5-3.6-8-7.6-12.6-10.3-1.6-.9-5.1-3.3-6.2-4.1-2 37.8-27.3 85.3-39.3 112.7-8.3 19.7-13.2 40.8-13.8 61.5-21.8-29.1-5.9-66.3 2.6-82.4 9.5-17.6 11-22.5 8.7-20.8-8.6 14-22 36.3-27.2 59.2-2.7 11.9-3.2 24 .3 35.2 3.5 11.2 11.1 21.5 24.6 29.9 0 0 24.8 14.3 38.3 32.5 7.4 10 9.7 18.7 7.4 24.9-2.5 6.7-9.6 8.9-16.7 8.9 4.8 6 10.3 13 14.4 19.6 37.6 25.7 82.2 15.7 114.3-7.2zM415 408.5c-10-11.3-7.2-33.1-17.1-41.6-6.9-6-13.6-5.4-22.6-5.1-7.7 8.8-25.8 19.6-38.4 16.3-11.5-2.9-18-16.3-18.8-29.5-.3.2-.7.3-1 .5-7.1 3.9-11.1 10.8-13.7 21.1-2.5 10.2-3.4 23.5-4.2 38.7-.7 11.8-6.2 26.4-9.9 40.6-3.5 13.2-5.8 25.2-1.1 36.3 7.2 14.5 19.5 20.4 33.7 19.3 14.2-1.1 30.4-9.8 43.6-25.5 22-26.6 62.3-29.7 63.2-46.5.3-5.1-3.1-13-13.7-24.6zM173.3 148.7c2 1.9 4.7 4.5 8 7.1 6.6 5.2 15.8 10.6 27.3 10.6 11.6 0 22.5-5.9 31.8-10.8 4.9-2.6 10.9-7 14.8-10.4 3.9-3.4 5.9-6.3 3.1-6.6-2.8-.3-2.6 2.6-6 5.1-4.4 3.2-9.7 7.4-13.9 9.8-7.4 4.2-19.5 10.2-29.9 10.2-10.4 0-18.7-4.8-24.9-9.7-3.1-2.5-5.7-5-7.7-6.9-1.5-1.4-1.9-4.6-4.3-4.9-1.4-.1-1.8 3.7 1.7 6.5z"], 49886 "lyft": [512, 512, [], "f3c3", "M0 81.1h77.8v208.7c0 33.1 15 52.8 27.2 61-12.7 11.1-51.2 20.9-80.2-2.8C7.8 334 0 310.7 0 289V81.1zm485.9 173.5v-22h23.8v-76.8h-26.1c-10.1-46.3-51.2-80.7-100.3-80.7-56.6 0-102.7 46-102.7 102.7V357c16 2.3 35.4-.3 51.7-14 17.1-14 24.8-37.2 24.8-59v-6.7h38.8v-76.8h-38.8v-23.3c0-34.6 52.2-34.6 52.2 0v77.1c0 56.6 46 102.7 102.7 102.7v-76.5c-14.5 0-26.1-11.7-26.1-25.9zm-294.3-99v113c0 15.4-23.8 15.4-23.8 0v-113H91v132.7c0 23.8 8 54 45 63.9 37 9.8 58.2-10.6 58.2-10.6-2.1 13.4-14.5 23.3-34.9 25.3-15.5 1.6-35.2-3.6-45-7.8v70.3c25.1 7.5 51.5 9.8 77.6 4.7 47.1-9.1 76.8-48.4 76.8-100.8V155.1h-77.1v.5z"], 49887 "magento": [448, 512, [], "f3c4", "M445.7 127.9V384l-63.4 36.5V164.7L223.8 73.1 65.2 164.7l.4 255.9L2.3 384V128.1L224.2 0l221.5 127.9zM255.6 420.5L224 438.9l-31.8-18.2v-256l-63.3 36.6.1 255.9 94.9 54.9 95.1-54.9v-256l-63.4-36.6v255.9z"], 49888 "mailchimp": [428, 512, [], "f59e", "M426.56 323.72c-3.09-6.59-8.97-11.13-16.35-12.88-2.47-11.27-5.88-16.8-6.19-17.63 1.3-1.48 2.56-2.97 2.84-3.32 10.42-12.93 3.62-31.86-14.19-36.33-10.02-9.64-19.09-14.17-26.54-17.9-7.14-3.57-4.29-2.17-10.99-5.19-1.78-8.71-2.37-28.97-5.2-43.19-2.54-12.79-7.66-22.06-15.56-28.15-3.16-6.84-7.59-13.74-12.93-18.81 24.84-38.08 31.38-75.69 13.19-95.39-8.1-8.77-20.13-12.93-34.52-12.93-20.26 0-45.18 8.26-70.34 23.54 0 0-16.38-13.18-16.73-13.46-70.08-55.19-268.28 188.7-198.32 242l18.06 13.8c-11.34 31.54 4.43 69.14 37.29 81.21 7.26 2.67 15.14 3.97 23.31 3.51 0 0 53.09 97.36 165.1 97.39 129.58.04 162.55-126.72 162.9-127.86 0 .01 10.5-15.51 5.17-28.41zM20.12 267.95c-14.2-23.96 10.51-73.19 28.09-101.17C91.66 97.63 163.98 43.06 196.82 50.85l9.03-3.46c.03.03 24.67 20.85 24.7 20.87 16.97-10.19 38.58-20.57 58.8-22.64-12.3 2.77-27.29 9.15-45.05 20.01-.43.25-42.02 28.32-67.43 53.52-13.85 13.73-69.45 80.41-69.4 80.35 10.16-19.23 16.86-28.67 32.94-48.9 9.1-11.44 18.81-22.57 28.74-32.84 4.61-4.77 9.28-9.36 13.95-13.71 3.21-2.99 6.44-5.87 9.65-8.62 1.48-1.27 2.96-2.5 4.43-3.71l.01-.01L164.6 64.8l1.72 12.06 23.69 20.87s-20.96 14.11-31.39 23.01c-41.79 35.66-82.8 90.4-98.06 143.69l.73-.03c-7.6 4.19-15.14 10.91-21.73 20.05-.16-.04-17.04-12.43-19.44-16.5zm69.11 100.09c-25.03 0-45.33-21.37-45.33-47.72 0-26.36 20.29-47.72 45.33-47.72 6.49 0 12.66 1.44 18.24 4.02 0 0 9.63 4.86 12.34 27.81 2.82-7.17 4.24-13.06 4.24-13.06 3.23 9.88 4.88 20.26 4.23 30.76 2.68-3.56 5.55-10.27 5.55-10.27 5 29.33-16.4 56.18-44.6 56.18zm55.8-168.53s19.49-37.06 62.33-61.57c-3.19-.51-10.99.48-12.36.64 7.78-6.69 22.24-11.16 32.23-13.19-2.92-1.86-9.89-2.33-13.34-2.42-1.02-.03-1.01-.02-2.22.03 9.4-5.25 26.82-8.34 42.65-5.55-1.99-2.64-6.5-4.57-9.67-5.51-.28-.08-1.52-.39-1.52-.39l1.19-.28c9.54-1.84 20.69.15 29.5 3.69-1-2.32-3.45-5.03-5.29-6.74-.19-.18-1.29-.97-1.29-.97 9.22 1.91 18.06 5.94 24.71 10.5-.9-1.75-3.14-4.69-4.69-6.29 8.81 2.52 18.71 8.81 22.95 17.82.1.2.37.94.4 1.03-16.7-12.84-65.44-9.2-114.24 22.42-22.33 14.48-38.71 30.32-51.34 46.78zm263.32 146.34c-.59 1.15-6.73 34.4-41.86 62.01-44.37 34.86-102.66 31.33-124.67 11.8-11.76-11-16.85-26.73-16.85-26.73s-1.33 8.87-1.56 12.35c-8.87-15.09-8.12-33.52-8.12-33.52s-4.73 8.83-6.9 13.77c-6.53-16.62-3.16-33.78-3.16-33.78l-5.16 7.7s-2.42-18.81 3.52-34.47c6.36-16.74 18.68-28.9 21.11-30.42-9.35-2.97-20.12-11.49-20.14-11.51 0 0 4.28.28 7.26-.4 0 0-18.9-13.54-22.22-34.26 2.74 3.38 8.49 7.21 8.49 7.21-1.86-5.42-2.99-17.49-1.25-29.36l.01-.01c3.58-22.68 22.27-37.45 43.44-37.27 22.54.2 37.65 4.93 56.55-12.5 4-3.69 7.19-6.87 12.81-8.11.59-.13 2.06-.75 5.07-.75 3.05 0 5.98.69 8.67 2.29 10.25 6.1 12.46 22.01 13.56 33.68 4.07 43.28 2.43 35.57 19.94 44.49 8.36 4.25 17.74 8.29 28.43 19.72.03.03.08.09.08.09h.13c9.01.22 13.65 7.31 9.5 12.47-30.23 36.1-72.46 53.39-119.51 54.84-1.94.05-6.32.15-6.34.15-19.01.58-25.19 25.16-13.27 39.95 7.54 9.35 22.03 12.42 33.97 12.46l.17-.06c51.45 1.04 103.14-35.37 112.07-55.44.06-.15.61-1.42.61-1.42-2.07 2.43-52.18 49.61-113.08 47.9 0 0-6.66-.14-12.93-1.6-8.27-1.92-14.55-5.56-16.95-13.8 5.05 1.01 11.45 1.66 18.87 1.66 43.96 0 75.63-19.98 72.33-20.25-.13 0-.26.03-.48.08-5.13 1.19-57.97 21.66-91.37 11.16.08-1.02.24-2.01.48-2.9 2.97-9.95 8.25-8.56 16.79-8.93 30.48-1.01 55.07-8.68 73.5-17.43 19.65-9.33 34.63-21.35 40.03-27.42 7 11.79 6.96 26.92 6.96 26.92s2.74-.96 6.38-.96c11.38.01 13.73 10.23 5.09 20.6zm-149.29 13.7c0-.05-.01-.1-.01-.
4988815.01.05.01.1.01.15zm-.01-.21c-.01-.13-.01-.26-.02-.39-.02-.65-.03-1.33 0-2.02-.02.74-.02 1.42 0 2.02.01.13.01.27.02.39zm.12 1.46c0 .02 0 .04.01.06 0-.02 0-.04-.01-.06zm.02.12c.2 1.58.51 2.31.55 2.4-.23-.49-.42-1.34-.55-2.4zM193.96 59.68l2.87-8.83 4.88 17.72-6.03-1.95-1.72-6.94zm22.38 17.72l-3.62-12.59 9.97 8.36c-2.24 1.44-4.36 2.86-6.35 4.23zm42.71 281.94c-.01-.13-.01-.26-.02-.39.01.13.01.27.02.39zm-.01-.39c-.02-.65-.03-1.33 0-2.02-.03.75-.03 1.42 0 2.02zm.02.6c0-.05-.01-.1-.01-.15m.13 1.46c0-.02 0-.04-.01-.06m.02.12c.2 1.58.51 2.31.55 2.4-.23-.49-.42-1.34-.55-2.4zm52.1-138.61c-.07-3.36.47-8.92 3.63-9.95h.01c5.41-1.88 12.58 11.98 12.91 24.28-4.28-2.14-9.3-3.05-14.47-2.6-1.3-3.97-1.92-7.7-2.08-11.73zM205.38 85.27l-13.59-11.38 20.57 6.28c-2.65 1.88-5 3.6-6.98 5.1zm27.7 166.94c-3.41 1.3-5.83 2.31-7 2.14-1.89-.28-.06-3.75 4.08-7.11 8.33-6.64 19.76-8.7 29.53-5.07 4.28 1.57 9.08 4.72 11.6 8.39.95 1.39 1.21 2.44.82 2.88-.77.9-3.51-.31-7.55-1.89-10.35-3.86-17.98-4.45-31.48.66zm14.55 14.53c-2.31.94-3.81 1.66-4.42 1.17-.62-.48-.01-2.42 2.15-4.51 1.88-1.81 3.83-2.83 6.07-3.77.35-.15.72-.28 1.1-.38 1.04-.28 2.09-.63 3.23-.8 9.12-1.55 15.8 3.51 14.93 4.98-.39.69-2.08.53-4.6.36-5.23-.36-10.71-.27-18.46 2.95zM60.86 323.12zm24.3-25.78c-1.85.39-.81.17-2.64.68a7 7 0 0 0-.77.25c-.58.27-1.11.45-1.62.73-.43.24-4.07 1.86-7.03 5.48-3.99 4.95-5.44 11.43-5.19 17.67.24 6.06 2.02 9.41 2.35 10.23 1.38 2.96-1.85 3.57-4.79.39l-.01-.01c-2.35-2.49-3.86-6.29-4.6-9.66-2.98-13.95 3.24-27.97 17.61-33.57.8-.32 1.74-.51 2.5-.73h-.01c1.47-.44 6.72-1.5 12.07-.67 5.87.91 11.04 3.85 14.33 7.67l.01.01c2.53 2.87 4.43 6.92 4.09 10.53v.01c-.13 1.5-.79 3.65-2.14 4.21-.5.21-1.01.1-1.36-.25-.98-.96-.22-2.93-2.6-6.3-3.17-4.47-10.31-8.76-20.2-6.67zm30.28 31.17c1.88 10.82-6 20.5-15.52 20.7-6.67.15-10.31-4.02-9.66-4.93.3-.43 1.32-.24 2.88-.01 8.5 1.32 13.66-3.86 14.9-9.29.02-.09.35-1.54.34-2.54.07-.88-.03-1.76-.16-2.56-1-5.62-7.45-6.68-11.6-11.15-3.72-4.04-2.99-9.22-.65-11.71 2.81-2.77 6.83-1.76 6.78-.78 0 .52-.97.91-2.17 1.74-1.56 1.1-1.77 2.16-1.37 3.98.26 1 .71 1.65 1.68 2.42 3.48 2.76 12.85 4.7 14.55 14.13zm212.87-81.47c2.58.4 4.22 3.59 3.67 7.13-.55 3.54-3.09 6.08-5.67 5.67-2.58-.4-4.22-3.59-3.67-7.13.56-3.53 3.09-6.07 5.67-5.67zm-28.33 10.31c1.42-2.59 5.44-3.11 8.99-1.16 3.55 1.94 5.27 5.62 3.86 8.2-1.42 2.59-5.44 3.11-8.99 1.16-3.55-1.94-5.28-5.61-3.86-8.2z"], 49889 "mandalorian": [390, 512, [], "f50f", "M203.28 511.89c-.98-3.26-1.69-15.83-1.39-24.58.55-15.89.98-24.72 1.4-28.76.64-6.2 2.87-20.72 3.28-21.38.6-.96.4-27.87-.24-33.13-.31-2.58-.63-11.9-.69-20.73-.13-16.47-.53-20.12-2.73-24.76-1.1-2.32-1.23-3.84-.99-11.43.16-4.81 0-10.53-.34-12.71-2.05-12.97-3.46-27.7-3.25-33.9.21-6.12.43-7.15 2.06-9.67 3.05-4.71 6.51-14.04 8.62-23.27 2.26-9.86 3.88-17.18 4.59-20.74.89-4.42 2.43-9.72 4.36-15.05 2.27-6.25 2.49-15.39.37-15.39-.3 0-1.38 1.22-2.41 2.71-1.03 1.49-4.76 4.8-8.29 7.36-8.37 6.08-11.7 9.39-12.66 12.58-.93 3.11-1.02 7.23-.16 7.76.34.21 1.29 2.4 2.11 4.88 1.62 4.88 1.87 10.12.72 15.36-.39 1.77-1.05 5.47-1.46 8.23-.41 2.76-.98 6.46-1.25 8.22-.28 1.76-.97 3.68-1.55 4.26-.96.96-1.14.91-2.05-.53-.55-.87-1.2-3.01-1.44-4.75-.25-1.74-1.63-7.11-3.08-11.93-3.28-10.9-3.52-16.15-.96-20.96.92-1.73 1.67-3.81 1.67-4.61 0-2.39-2.2-5.32-7.41-9.89-7.05-6.18-8.63-7.92-10.23-11.3-1.71-3.6-3.06-4.06-4.54-1.54-1.78 3.01-2.6 9.11-2.97 22.02l-.35 12.13 1.95 2.25c3.21 3.7 12.07 16.45 13.78 19.83 3.41 6.74 4.34 11.69 4.41 23.56.07 11.84.95 22.75 2 24.71.36.66.51 1.35.34 1.52-.17.17.41 2.09 1.29 4.27.88 2.18 1.81 6.22 2.06 8.98.25 2.76 1.02 7.43 1.71 10.37 2.23 9.56 2.77 14.08 2.39 20.14-.2 3.27-.53 11.07-.73 17.32-1.31 41.76-1.85 57.98-2.04 61.21-.12 2.02-.39 11.51-.6 21.07-.36 16.3-1.3 27.37-2.42 28.65-.64.73-8.07-4.91-12.52-9.49-3.75-3.87-4.02-4.79-2.83-9.95.7-3.01 2.26-18.29 3.33-32.62.36-4.78.81-10.5 1.01-12.71.83-9.37 1.66-20.35 2.61-34.78.56-8.46 1.33-16.44 1.72-17.73.38-1.29.89-9.89 1.13-19.11l.43-16.77-2.26-4.3c-1.72-3.28-4.87-6.94-13.22-15.34-6.03-6.07-11.84-12.3-12.91-13.85l-1.95-2.81.75-10.9c1.09-15.71 1.1-48.57.02-59.06l-.89-8.7-3.28-4.52c-5.86-8.08-5.8-7.75-6.22-33.27-.1-6.07-.38-11.5-.63-12.06-.83-1.87-3.05-2.66-8.54-3.05-8.86-.62-10.96-1.9-23.85-14.55-6.15-6.04-12.34-11.97-13.75-13.19-2.81-2.42-2.79-1.99-.56-9.63l1.35-4.65-1.69-3.04c-.93-1.67-2.09-3.51-2.59-4.07-1.33-1.51-5.5-10.89-5.99-13.49-.31-1.66-.09-2.67.87-3.9 2.23-2.86 3.4-5.68 4.45-10.73 2.33-11.19 7.74-26.09 10.6-29.22 3.18-3.47 7.7-1.05 9.41 5.03 1.34 4.79 1.37 9.79.1 18.55-.53 3.68-.98 8.68-.99 11.11-.02 4.01.19 4.69 2.25 7.39 3.33 4.37 7.73 7.41 15.2 10.52 1.7.71 3.82 1.99 4.72 2.85 11.17 10.72 18.62 16.18 22.95 16.85 5.18.8 7.98 4.54 10.04 13.39 1.31 5.65 4 11.14 5.46 11.14.59 0 2.09-.63 3.33-1.39 1.98-1.22 2.25-1.73 2.25-4.18-.01-3.71-1.17-14.08-2-17.84-.37-1.66-.78-4.06-.93-5.35-.14-1.29-.61-3.85-1.03-5.69-2.55-11.16-3.65-15.46-4.1-16.05-1.55-2.02-4.08-10.2-4.93-15.92-1.64-11.11-3.96-14.23-12.91-17.39-4.64-1.64-8.89-4.12-13.32-7.78-1.15-.95-4.01-3.22-6.35-5.06-2.35-1.83-4.41-3.53-4.6-3.76-.18-.23-1.39-1.14-2.69-2.02-6.24-4.22-8.84-6.98-11.26-11.96l-2.44-5.02-.22-12.98-.22-12.98 6.91-6.55c3.95-3.75 8.48-7.35 10.59-8.43 3.31-1.69 4.45-1.89 11.37-2.05 8.53-.19 10.12.02 11.66 1.56 1.53 1.53 1.36 6.4-.29 8.5-.74.94-1.34 1.98-1.34 2.32 0 .58-2.61 4.91-5.42 8.99-.68.99-2.13 5.35-2.37 6.82 20.44 13.39 21.55 3.77 14.07 28.98l11.4 2.54c3.11-8.66 6.47-17.26 8.61-26.22.29-7.63-11.98-4.19-15.4-8.68-2.33-5.93 3.13-14.18 6.06-19.2 1.6-2.34 6.62-4.7 8.82-4.15.88.22 4.16-.35 7.37-1.28 3.18-.92 6.58-1.68 7.55-1.68.97 0 3.66-.58 5.98-1.29 3.65-1.11 4.5-1.17 6.35-.4 1.17.48 3.79 1.09 5.82 1.36 2.02.26 4.72 1.12 6 1.91 1.28.79 3.53 1.77 5.02 2.17 2.51.68 3 .57 7.05-1.67l4.35-2.4 10.7-.41c10.44-.4 10.81-.47 15.26-2.68l4.58-2.3 2.46 1.43c1.76 1.02 3.14 2.73 4.85 5.98 2.36 4.51 2.38 4.58 1.37 7.37-.88 2.44
49889-.89 3.3-.1 6.39.5 1.96 1.45 4.62 2.1 5.91.65 1.29 1.24 3.09 1.31 4.01.31 4.33-.03 5.3-2.41 6.92-2.17 1.47-6.98 7.91-6.98 9.34 0 .32-.48 1.69-1.07 3.03-5.04 11.51-6.76 13.56-14.26 16.98-9.2 4.2-12.3 5.19-16.21 5.19-3.1 0-4 .25-4.54 1.26-.37.69-2.21 2.37-4.09 3.71-2.04 1.47-3.8 3.38-4.38 4.78-.54 1.28-1.66 2.59-2.49 2.91-.83.32-1.94 1.08-2.45 1.71-.52.62-3.66 3.04-7 5.38-3.33 2.34-6.87 5.02-7.87 5.96-1 .94-2.07 1.71-2.39 1.71s-1.28.74-2.13 1.65c-1.31 1.39-1.49 2.11-1.14 4.6.22 1.63.86 4.27 1.42 5.88 1.32 3.8 1.31 7.86-.05 10.57-1.43 2.86-.89 6.65 1.35 9.59 2.01 2.63 2.16 4.56.71 8.84-.61 1.8-1.05 5.45-1.06 8.91-.02 4.88.22 6.28 1.46 8.38 1.2 2.04 1.82 2.48 3.24 2.32 1.98-.23 2.3-1.05 4.71-12.12 2.18-10.03 3.71-11.92 13.76-17.08 2.94-1.51 7.46-3.96 10.03-5.44 2.58-1.48 6.79-3.69 9.37-4.91 6.67-3.16 11.05-6.52 15.22-11.67 7.11-8.79 9.98-16.22 12.85-33.3.55-3.28 1.43-5.65 2.86-7.73 1.29-1.87 2.37-4.62 2.89-7.31 1.02-5.3 2.85-9.08 5.58-11.51 4.7-4.18 6-1.09 4.59 10.87-.46 3.86-1.1 10.33-1.44 14.38l-.61 7.36 4.45 4.09 4.45 4.09.11 8.42c.06 4.63.47 9.53.92 10.89l.82 2.47-6.43 6.28c-8.54 8.33-12.88 13.93-16.76 21.61-1.77 3.49-3.74 7.11-4.38 8.03-2.18 3.11-6.46 13.01-8.76 20.26l-2.29 7.22-6.97 6.49c-3.83 3.57-7.96 7.25-9.17 8.17-3.05 2.32-4.26 5.15-4.26 9.99 0 2.98.43 4.96 1.59 7.26.87 1.74 1.81 3.91 2.09 4.83.28.92.98 2.22 1.57 2.89 1.4 1.59 1.92 16.12.83 23.22-.68 4.48-3.63 12.02-4.7 12.02-1.79 0-4.06 9.27-5.07 20.74-.18 2.02-.62 5.94-.98 8.7-.36 2.76-.96 9.98-1.35 16.05-.77 12.22-.19 18.77 2.05 23.15 3.41 6.69.52 12.69-11.03 22.84l-3.97 3.49.07 5.19c.04 2.86.55 6.85 1.14 8.87 4.61 15.98 4.73 16.92 4.38 37.13-.46 26.4-.26 40.27.63 44.15.42 1.84.91 5 1.08 7.02.17 2.02.66 5.33 1.08 7.36.47 2.26.78 11.02.79 22.74l.02 19.06-1.81 2.63c-2.71 3.91-15.11 13.54-15.49 12.29zm29.53-45.11c-.18-.3-.33-6.87-.33-14.59 0-14.06-.89-27.54-2.26-34.45-.4-2.02-.81-9.7-.9-17.06-.15-11.93-1.4-24.37-2.64-26.38-.66-1.07-3.02-17.66-3.03-21.3-.01-4.23 1.02-6 5.28-9.13 4.14-3.04 4.86-3.14 5.48-.72.28 1.1 1.45 5.62 2.6 10.03 3.93 15.12 4.14 16.27 4.05 21.74-.1 5.78-.13 6.13-1.74 17.73-.98 7.07-1.17 12.39-1.04 28.43.17 19.4-.64 35.73-2.04 41.27-.71 2.78-2.8 5.48-3.43 4.43zm-70.99-37.58c-.24-.38-1.01-5.24-1.73-10.79-.72-5.56-1.49-10.41-1.73-10.79-.23-.38-.68-3.3-.99-6.49-.31-3.19-.91-7.46-1.33-9.48-.99-4.79-3.35-19.35-3.42-21.07-.03-.74-.34-4.05-.7-7.36-.67-6.21-.84-27.67-.22-28.29.96-.96 6.63 2.76 11.33 7.43l5.28 5.25-.45 6.47c-.25 3.56-.6 10.23-.78 14.83-.18 4.6-.49 9.87-.67 11.71-.18 1.84-.61 9.36-.94 16.72-.79 17.41-1.94 31.29-2.65 32-.32.3-.76.24-1-.14zM74.63 162.61c21.07 12.79 17.84 14.15 28.49 17.66 13.01 4.29 18.87 7.13 23.15 16.87-43.66 36.14-69.01 57.9-76.71 70.82-31.02 52.01-5.99 101.59 62.75 87.21-14.18 29.23-77.97 28.63-98.68-4.9-24.68-39.95-22.09-118.3 61-187.66zm210.79 179.02c56.66 6.88 82.32-37.74 46.54-89.23 0 0-26.87-29.34-64.28-67.96 2.98-15.45 9.49-32.12 30.57-53.82 89.2 63.51 92 141.61 92.46 149.36 4.27 70.58-78.66 91.12-105.29 61.65z"], 49890 "markdown": [640, 512, [], "f60f", "M593.85 452.92H46.15C20.7 452.92 0 432.22 0 406.77V105.23c0-25.45 20.7-46.15 46.15-46.15h547.69c25.45 0 46.15 20.7 46.15 46.15v301.54c.01 25.45-20.69 46.15-46.14 46.15zm-440-92.3v-120l61.54 76.92 61.54-76.92v120h61.54V151.38h-61.54l-61.54 76.92-61.54-76.92H92.31v209.23h61.54zM566.15 256h-61.54V151.38h-61.54V256h-61.54l92.31 107.69L566.15 256z"], 49891 "mastodon": [417, 512, [], "f4f6", "M417.8 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.5-28.4-290.4 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.4-.9-9-.9-13.9 85.6 20.9 158.6 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6V190.1c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H75.1c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"], 49892 "maxcdn": [512, 512, [], "f136", "M461.1 442.7h-97.4L415.6 200c2.3-10.2.9-19.5-4.4-25.7-5-6.1-13.7-9.6-24.2-9.6h-49.3l-59.5 278h-97.4l59.5-278h-83.4l-59.5 278H0l59.5-278-44.6-95.4H387c39.4 0 75.3 16.3 98.3 44.9 23.3 28.6 31.8 67.4 23.6 105.9l-47.8 222.6z"], 49893 "medapps": [320, 512, [], "f3c6", "M118.3 238.4c3.5-12.5 6.9-33.6 13.2-33.6 8.3 1.8 9.6 23.4 18.6 36.6 4.6-23.5 5.3-85.1 14.1-86.7 9-.7 19.7 66.5 22 77.5 9.9 4.1 48.9 6.6 48.9 6.6 1.9 7.3-24 7.6-40 7.8-4.6 14.8-5.4 27.7-11.4 28-4.7.2-8.2-28.8-17.5-49.6l-9.4 65.5c-4.4 13-15.5-22.5-21.9-39.3-3.3-.1-62.4-1.6-47.6-7.8l31-5zM228 448c21.2 0 21.2-32 0-32H92c-21.2 0-21.2 32 0 32h136zm-24 64c21.2 0 21.2-32 0-32h-88c-21.2 0-21.2 32 0 32h88zm34.2-141.5c3.2-18.9 5.2-36.4 11.9-48.8 7.9-14.7 16.1-28.1 24-41 24.6-40.4 45.9-75.2 45.9-125.5C320 69.6 248.2 0 160 0S0 69.6 0 155.2c0 50.2 21.3 85.1 45.9 125.5 7.9 12.9 16 26.3 24 41 6.7 12.5 8.7 29.8 11.9 48.9 3.5 21 36.1 15.7 32.6-5.1-3.6-21.7-5.6-40.7-15.3-58.6C66.5 246.5 33 211.3 33 155.2 33 87.3 90 32 160 32s127 55.3 127 123.2c0 56.1-33.5 91.3-66.1 151.6-9.7 18-11.7 37.4-15.3 58.6-3.4 20.6 29 26.4 32.6 5.1z"], 49894 "medium": [448, 512, [], "f23a", "M0 32v448h448V32H0zm372.2 106.1l-24 23c-2.1 1.6-3.1 4.2-2.7 6.7v169.3c-.4 2.6.6 5.2 2.7 6.7l23.5 23v5.1h-118V367l24.3-23.6c2.4-2.4 2.4-3.1 2.4-6.7V199.8l-67.6 171.6h-9.1L125 199.8v115c-.7 4.8 1 9.7 4.4 13.2l31.6 38.3v5.1H71.2v-5.1l31.6-38.3c3.4-3.5 4.9-8.4 4.1-13.2v-133c.4-3.7-1-7.3-3.8-9.8L75 138.1V133h87.3l67.4 148L289 133.1h83.2v5z"], 49895 "medium-m": [512, 512, [], "f3c7", "M71.5 142.3c.6-5.9-1.7-11.8-6.1-15.8L20.3 72.1V64h140.2l108.4 237.7L364.2 64h133.7v8.1l-38.6 37c-3.3 2.5-5 6.7-4.3 10.8v272c-.7 4.1 1 8.3 4.3 10.8l37.7 37v8.1H307.3v-8.1l39.1-37.9c3.8-3.8 3.8-5 3.8-10.8V171.2L241.5 447.1h-14.7L100.4 171.2v184.9c-1.1 7.8 1.5 15.6 7 21.2l50.8 61.6v8.1h-144v-8L65 377.3c5.4-5.6 7.9-13.5 6.5-21.2V142.3z"], 49896 "medrt": [544, 512, [], "f3c8", "M113.7 256c0 121.8 83.9 222.8 193.5 241.1-18.7 4.5-38.2 6.9-58.2 6.9C111.4 504 0 393 0 256S111.4 8 248.9 8c20.1 0 39.6 2.4 58.2 6.9C197.5 33.2 113.7 134.2 113.7 256m297.4 100.3c-77.7 55.4-179.6 47.5-240.4-14.6 5.5 14.1 12.7 27.7 21.7 40.5 61.6 88.2 182.4 109.3 269.7 47 87.3-62.3 108.1-184.3 46.5-272.6-9-12.9-19.3-24.3-30.5-34.2 37.4 78.8 10.7 178.5-67 233.9m-218.8-244c-1.4 1-2.7 2.1-4 3.1 64.3-17.8 135.9 4 178.9 60.5 35.7 47 42.9 106.6 24.4 158 56.7-56.2 67.6-142.1 22.3-201.8-50-65.5-149.1-74.4-221.6-19.8M296 224c-4.4 0-8-3.6-8-8v-40c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v40c0 4.4-3.6 8-8 8h-40c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h40c4.4 0 8 3.6 8 8v40c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-40c0-4.4 3.6-8 8-8h40c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8h-40z"], 49897 "meetup": [512, 512, [], "f2e0", "M99 414.3c1.1 5.7-2.3 11.1-8 12.3-5.4 1.1-10.9-2.3-12-8-1.1-5.4 2.3-11.1 7.7-12.3 5.4-1.2 11.1 2.3 12.3 8zm143.1 71.4c-6.3 4.6-8 13.4-3.7 20 4.6 6.6 13.4 8.3 20 3.7 6.3-4.6 8-13.4 3.4-20-4.2-6.5-13.1-8.3-19.7-3.7zm-86-462.3c6.3-1.4 10.3-7.7 8.9-14-1.1-6.6-7.4-10.6-13.7-9.1-6.3 1.4-10.3 7.7-9.1 14 1.4 6.6 7.6 10.6 13.9 9.1zM34.4 226.3c-10-6.9-23.7-4.3-30.6 6-6.9 10-4.3 24 5.7 30.9 10 7.1 23.7 4.6 3
498970.6-5.7 6.9-10.4 4.3-24.1-5.7-31.2zm272-170.9c10.6-6.3 13.7-20 7.7-30.3-6.3-10.6-19.7-14-30-7.7s-13.7 20-7.4 30.6c6 10.3 19.4 13.7 29.7 7.4zm-191.1 58c7.7-5.4 9.4-16 4.3-23.7s-15.7-9.4-23.1-4.3c-7.7 5.4-9.4 16-4.3 23.7 5.1 7.8 15.6 9.5 23.1 4.3zm372.3 156c-7.4 1.7-12.3 9.1-10.6 16.9 1.4 7.4 8.9 12.3 16.3 10.6 7.4-1.4 12.3-8.9 10.6-16.6-1.5-7.4-8.9-12.3-16.3-10.9zm39.7-56.8c-1.1-5.7-6.6-9.1-12-8-5.7 1.1-9.1 6.9-8 12.6 1.1 5.4 6.6 9.1 12.3 8 5.4-1.5 9.1-6.9 7.7-12.6zM447 138.9c-8.6 6-10.6 17.7-4.9 26.3 5.7 8.6 17.4 10.6 26 4.9 8.3-6 10.3-17.7 4.6-26.3-5.7-8.7-17.4-10.9-25.7-4.9zm-6.3 139.4c26.3 43.1 15.1 100-26.3 129.1-17.4 12.3-37.1 17.7-56.9 17.1-12 47.1-69.4 64.6-105.1 32.6-1.1.9-2.6 1.7-3.7 2.9-39.1 27.1-92.3 17.4-119.4-22.3-9.7-14.3-14.6-30.6-15.1-46.9-65.4-10.9-90-94-41.1-139.7-28.3-46.9.6-107.4 53.4-114.9C151.6 70 234.1 38.6 290.1 82c67.4-22.3 136.3 29.4 130.9 101.1 41.1 12.6 52.8 66.9 19.7 95.2zm-70 74.3c-3.1-20.6-40.9-4.6-43.1-27.1-3.1-32 43.7-101.1 40-128-3.4-24-19.4-29.1-33.4-29.4-13.4-.3-16.9 2-21.4 4.6-2.9 1.7-6.6 4.9-11.7-.3-6.3-6-11.1-11.7-19.4-12.9-12.3-2-17.7 2-26.6 9.7-3.4 2.9-12 12.9-20 9.1-3.4-1.7-15.4-7.7-24-11.4-16.3-7.1-40 4.6-48.6 20-12.9 22.9-38 113.1-41.7 125.1-8.6 26.6 10.9 48.6 36.9 47.1 11.1-.6 18.3-4.6 25.4-17.4 4-7.4 41.7-107.7 44.6-112.6 2-3.4 8.9-8 14.6-5.1 5.7 3.1 6.9 9.4 6 15.1-1.1 9.7-28 70.9-28.9 77.7-3.4 22.9 26.9 26.6 38.6 4 3.7-7.1 45.7-92.6 49.4-98.3 4.3-6.3 7.4-8.3 11.7-8 3.1 0 8.3.9 7.1 10.9-1.4 9.4-35.1 72.3-38.9 87.7-4.6 20.6 6.6 41.4 24.9 50.6 11.4 5.7 62.5 15.7 58.5-11.1zm5.7 92.3c-10.3 7.4-12.9 22-5.7 32.6 7.1 10.6 21.4 13.1 32 6 10.6-7.4 13.1-22 6-32.6-7.4-10.6-21.7-13.5-32.3-6z"], 49898 "megaport": [496, 512, [], "f5a3", "M248 8C111.04 8 0 119.04 0 256c0 136.97 111.04 248 248 248 136.96 0 248-111.03 248-248C496 119.04 384.96 8 248 8zm85.46 267.67l59.66 59.67v87.05l-26.07 19.23L341 422.39v-65.46l-33.44-33.44-33.44 33.44v65.46L248 441.62l-26.12-19.23v-65.46l-33.44-33.44L155 356.92v65.46l-26.07 19.23-26.06-19.23v-87.05l59.47-59.47V188l59.5-59.5V52.88l26.06-19.23 26.06 19.23v75.64l59.5 59.5m-85.56-11.86l33.44 33.44V276L248 309.33l-33.54-33.54v-66.2l33.44-33.43z"], 49899 "microsoft": [448, 512, [], "f3ca", "M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"], 49900 "mix": [448, 512, [], "f3cb", "M0 64v348.9c0 56.2 88 58.1 88 0V174.3c7.9-52.9 88-50.4 88 6.5v175.3c0 57.9 96 58 96 0V240c5.3-54.7 88-52.5 88 4.3v23.8c0 59.9 88 56.6 88 0V64H0z"], 49901 "mixcloud": [640, 512, [], "f289", "M424.43 219.729C416.124 134.727 344.135 68 256.919 68c-72.266 0-136.224 46.516-159.205 114.074-54.545 8.029-96.63 54.822-96.63 111.582 0 62.298 50.
49901668 112.966 113.243 112.966h289.614c52.329 0 94.969-42.362 94.969-94.693 0-45.131-32.118-83.063-74.48-92.2zm-20.489 144.53H114.327c-39.04 0-70.881-31.564-70.881-70.604s31.841-70.604 70.881-70.604c18.827 0 36.548 7.475 49.838 20.766 19.963 19.963 50.133-10.227 30.18-30.18-14.675-14.398-32.672-24.365-52.053-29.349 19.935-44.3 64.79-73.926 114.628-73.926 69.496 0 125.979 56.483 125.979 125.702 0 13.568-2.215 26.857-6.369 39.594-8.943 27.517 32.133 38.939 40.147 13.29 2.769-8.306 4.984-16.889 6.369-25.472 19.381 7.476 33.502 26.303 33.502 48.453 0 28.795-23.535 52.33-52.607 52.33zm235.069-52.33c0 44.024-12.737 86.386-37.102 122.657-4.153 6.092-10.798 9.414-17.72 9.414-16.317 0-27.127-18.826-17.443-32.949 19.381-29.349 29.903-63.682 29.903-99.122s-10.521-69.773-29.903-98.845c-15.655-22.831 19.361-47.24 35.163-23.534 24.366 35.993 37.102 78.356 37.102 122.379zm-70.88 0c0 31.565-9.137 62.021-26.857 88.325-4.153 6.091-10.798 9.136-17.72 9.136-17.201 0-27.022-18.979-17.443-32.948 13.013-19.104 19.658-41.255 19.658-64.513 0-22.981-6.645-45.408-19.658-64.512-15.761-22.986 19.008-47.095 35.163-23.535 17.719 26.026 26.857 56.483 26.857 88.047z"], 49902 "mizuni": [496, 512, [], "f3cc", "M248 8C111 8 0 119.1 0 256c0 137 111 248 248 248s248-111 248-248C496 119.1 385 8 248 8zm-80 351.9c-31.4 10.6-58.8 27.3-80 48.2V136c0-22.1 17.9-40 40-40s40 17.9 40 40v223.9zm120-9.9c-12.9-2-26.2-3.1-39.8-3.1-13.8 0-27.2 1.1-40.2 3.1V136c0-22.1 17.9-40 40-40s40 17.9 40 40v214zm120 57.7c-21.2-20.8-48.6-37.4-80-48V136c0-22.1 17.9-40 40-40s40 17.9 40 40v271.7z"], 49903 "modx": [448, 512, [], "f285", "M356 241.8l36.7 23.7V480l-133-83.8L356 241.8zM440 75H226.3l-23 37.8 153.5 96.5L440 75zm-89 142.8L55.2 32v214.5l46 29L351 217.8zM97 294.2L8 437h213.7l125-200.5L97 294.2z"], 49904 "monero": [496, 512, [], "f3d0", "M352 384h108.4C417 455.9 338.1 504 248 504S79 455.9 35.6 384H144V256.2L248 361l104-105v128zM88 336V128l159.4 159.4L408 128v208h74.8c8.5-25.1 13.2-52 13.2-80C496 119 385 8 248 8S0 119 0 256c0 28 4.6 54.9 13.2 80H88z"], 49905 "napster": [496, 512, [], "f3d2", "M298.3 373.6c-14.2 13.6-31.3 24.1-50.4 30.5-19-6.4-36.2-16.9-50.3-30.5h100.7zm44-199.6c20-16.9 43.6-29.2 69.6-36.2V299c0 219.4-328 217.6-328 .3V137.7c25.9 6.9 49.6 19.6 69.5 36.4 56.8-40 132.5-39.9 188.9-.1zm-208.8-58.5c64.4-60 164.3-60.1 228.9-.2-7.1 3.5-13.9 7.3-20.6 11.5-58.7-30.5-129.2-30.4-187.9.1-6.3-4-13.9-8.2-20.4-11.4zM43.8 93.2v69.3c-58.4 36.5-58.4 121.1.1 158.3 26.4 245.1 381.7 240.3 407.6 1.5l.3-1.7c58.7-36.3 58.9-121.7.2-158.2V93.2c-17.3.5-34 3-50.1 7.4-82-91.5-225.5-91.5-307.5.1-16.3-4.4-33.1-7-50.6-7.5zM259.2 352s36-.3 61.3-1.5c10.2-.5 21.1-4 25.5-6.5 26.3-15.1 25.4-39.2 26.2-47.4-79.5-.6-99.9-3.9-113 55.4zm-135.5-55.3c.8 8.2-.1 32.3 26.2 47.4 4.4 2.5 15.2 6 25.5 6.5 25.3 1.1 61.3 1.5 61.3 1.5-13.2-59.4-33.7-56.1-113-55.4zm169.1 123.4c-3.2-5.3-6.9-7.3-6.9-7.3-24.8 7.3-52.2 6.9-75.9 0 0 0-2.9 1.5-6.4 6.6-2.8 4.1-3.7 9.6-3.7 9.6 29.1 17.6 67.1 17.6 96.2 0-.1-.1-.3-4-3.3-8.9z"], 49906 "neos": [456, 512, [], "f612", "M387.44 512h-95.11L184.12 357.46v91.1L97.69 512H0V29.82L40.47 0h108.05l123.74 176.13V63.45L358.69 0h97.69v461.5L387.44 512zM10.77 35.27v460.72l72.01-52.88V193.95l215.49 307.69h84.79l52.35-38.17h-78.27L40.96 12.98 10.77 35.27zm82.54 466.61l80.04-58.78V342.06L93.55 227.7v220.94l-72.58 53.25h72.34zM52.63 10.77l310.6 442.57h82.37V10.77h-79.75v317.56L142.91 10.77H52.63zm230.4 180.88l72.01 102.81V15.93l-72.01 52.96v122.76z"], 49907 "nimblr": [355, 512, [], "f5a8", "M232.6 299.29c15.57 0 27.15 11.46 27.15 26.96 0 15.55-11.62 26.96-27.15 26.96-15.7 0-27.15-11.57-27.15-26.96 0-15.51 11.58-26.96 27.15-26.96zM99.01 326.25c0-15.61 11.68-26.96 27.15-26.96 15.57 0 27.15 11.46 27.15 26.96 0 15.41-11.47 26.96-27.15 26.96-15.44 0-27.15-11.31-27.15-26.96m78.75-167.3C143 158.95 75.45 178.77 45.25 227L0 0v335.48C0 433.13 79.61 512 177.76 512c98.24 0 177.76-78.95 177.76-176.52 0-97.46-79.39-176.53-177.76-176.53zm0 308.12c-73.27 0-132.51-58.9-132.51-131.59 0-72.68 59.24-131.59 132.51-131.59 73.27 0 132.51 58.91 132.51 131.59s-59.25 131.59-132.51 131.59z"], 49908 "nintendo-switch": [448, 512, [], "f418", "M95.9 33.5c-44.6 8-80.5 41-91.8 84.4C0 133.6-.3 142.8.2 264.4.4 376 .5 378.6 2.4 387.3c10.3 46.5 43.3 79.6 90.3 90.5 6.1 1.4 13.9 1.7 64.1 1.9 51.9.4 57.3.3 58.7-1.1 1.4-1.4 1.5-19.3 1.5-222.2 0-150.5-.3-221.3-.9-222.6-.9-1.7-2.5-1.8-56.9-1.7-44.2.1-57.5.4-63.3 1.4zm83.9 222.6V444l-37.8-.5c-34.8-.4-38.5-.6-45.5-2.3-29.9-7.7-52-30.7-58.3-60.7-2-9.4-2-240.1-.1-249.3 5.6-26.1 23.7-47.7 48-57.4 12.2-4.9 17.9-5.5 57.6-5.6l35.9-.1v188zm-75.9-131.2c-5.8 1.1-14.7 5.6-19.5 9.7-9.7 8.4-14.6 20.4-13.8 34.5.4 7.3.8 9.3 3.8 15.2 4.4 9 10.9 15.6 19.9 20 6.2 3.1 7.8 3.4 15.9 3.7 7.3.3 9.9 0 14.8-1.7 20.1-6.8 32.3-26.3 28.8-46.4-3.9-23.7-26.6-39.7-49.9-35zm158.2-92.3c-.4.3-.6 100.8-.6 223.5 0 202.3.1 222.8 1.5 223.4 2.5.9 74.5.6 83.4-.4 37.7-4.3 71-27.2 89-61.2 2.3-4.4 5.4-11.7 7-16.2 5.8-17.4 5.7-12.8 5.7-146.1 0-106.4-.2-122.3-1.5-129-9.2-48.3-46.1-84.8-94.5-93.1-6.5-1.1-16.5-1.4-48.8-1.4-22.4-.1-40.9.2-41.2.5zm99.1 202.1c14.5 3.8 26.3 14.8 31.2 28.9 3.1 8.7 3 21.5-.1 29.5-5.7 14.7-16.8 25-31.1 28.8-23.2 6-47.9-8-54.6-31-2-7-1.9-18.9.4-26.2 6.9-22.7 31-36.1 54.2-30z"], 49909 "node": [640, 512, [], "f419", "M316.3 452c-2.1 0-4.2-.6-6.1-1.6L291 439c-2.9-1.6-1.5-2.2-.5-2.5 3.8-1.3 4.6-1.6 8.7-4 .4-.2 1-.1 1.4.1l14.8 8.8c.5.3 1.3.3 1.8 0L375 408c.5-.3.9-.9.9-1.6v-66.7c0-.7-.3-1.3-.9-1.6l-57.8-33.3c-.5-.3-1.2-.3-1.8 0l-57.8 33.3c-.6.3-.9 1-.9 1.6v66.7c0 .6.4 1.2.9 1.5l15.8 9.1c8.6 4.3 13.9-.8 13.9-5.8v-65.9c0-.9.7-1.7 1.7-1.7h7.3c.9 0 1.7.7 1.7 1.7v65.9c0 11.5-6.2 18-17.1 18-3.3 0-6 0-13.3-3.6l-15.2-8.7c-3.7-2.2-6.1-6.2-6.1-10.5v-66.7c0-4.3 2.3-8.4 6.1-10.5l57.8-33.4c3.7-2.1 8.5-2.1 12.1 0l57.8 33.4c3.7 2.2 6.1 6.2 6.1 10.5v66.7c0 4.3-2.3 8.4-6.1 10.5l-57.8 33.4c-1.7 1.1-3.8 1.7-6 1.7zm46.7-65.8c0-12.5-8.4-15.8-26.2-18.2-18-2.4-19.8-3.6-19.8-7.8 0-3.5 1.5-8.1 14.8-8.1 11.9 0 16.3 2.6 18.1 10.6.2.8.8 1.3 1.6 1.3h7.5c.5 0 .9-.2 1.2-.5.3-.4.5-.8.4-1.3-1.2-13.8-10.3-20.2-28.8-20.2-16.5 0-26.3 7-26.3 18.6 0 12.7 9.8 16.1 25.6 17.7 18.9 1.9 20.4 4.6 20.4 8.3 0 6.5-5.2 9.2-17.4 9.2-15.3 0-18.7-3.8-19.8-11.4-.1-.8-.8-1.4-1.7-1.4h-7.5c-.9 0-1.7.7-1.7 1.7 0 9.7 5.3 21.3 30.6 21.3 18.5 0 29-7.2 29-19.8zm54.5-50.1c0 6.1-5 11.1-11.1 11.1s-11.1-5-11.1-11.1c0-6.3 5.2-11.1 11.1-11.1 6-.1 11.1 4.8 11.1 11.1zm-1.8 0c0-5.2-4.2-9.3-9.4-9.3-5.1 0-9.3 4.1-9.3 9.3 0 5.2 4.2 9.4 9.3 9.4 5.2-.1 9.4-4.3 9.4-9.4zm-4.5 6.2h-2.6c-.1-.6-.5-3.8-.5-3.9-.2-.7-.4-1.1-1.3-1.1h-2.2v5h-2.4v-12.5h4.3c1.5 0 4.4 0 4.4 3.3 0 2.3-1.5 2.8-2.4 3.1 1.7.1 1.8 1.2 2.1 2.8.1 1 .3 2.7.6 3.3zm-2.8-8.8c0-1.7-1.2-1.7-1.8-1.7h-2v3.5h1.9c1.6 0 1.9-1.1 1.9-1.8zM137.3 191c0-2.7-1.4-5.1-3.7-6.4l-61.3-35.3c-1-.6-2.2-.9-3.4-1h-.
499096c-1.2 0-2.3.4-3.4 1L3.7 184.6C1.4 185.9 0 188.4 0 191l.1 95c0 1.3.7 2.5 1.8 3.2 1.1.7 2.5.7 3.7 0L42 268.3c2.3-1.4 3.7-3.8 3.7-6.4v-44.4c0-2.6 1.4-5.1 3.7-6.4l15.5-8.9c1.2-.7 2.4-1 3.7-1 1.3 0 2.6.3 3.7 1l15.5 8.9c2.3 1.3 3.7 3.8 3.7 6.4v44.4c0 2.6 1.4 5.1 3.7 6.4l36.4 20.9c1.1.7 2.6.7 3.7 0 1.1-.6 1.8-1.9 1.8-3.2l.2-95zM472.5 87.3v176.4c0 2.6-1.4 5.1-3.7 6.4l-61.3 35.4c-2.3 1.3-5.1 1.3-7.4 0l-61.3-35.4c-2.3-1.3-3.7-3.8-3.7-6.4v-70.8c0-2.6 1.4-5.1 3.7-6.4l61.3-35.4c2.3-1.3 5.1-1.3 7.4 0l15.3 8.8c1.7 1 3.9-.3 3.9-2.2v-94c0-2.8 3-4.6 5.5-3.2l36.5 20.4c2.3 1.2 3.8 3.7 3.8 6.4zm-46 128.9c0-.7-.4-1.3-.9-1.6l-21-12.2c-.6-.3-1.3-.3-1.9 0l-21 12.2c-.6.3-.9.9-.9 1.6v24.3c0 .7.4 1.3.9 1.6l21 12.1c.6.3 1.3.3 1.8 0l21-12.1c.6-.3.9-.9.9-1.6v-24.3zm209.8-.7c2.3-1.3 3.7-3.8 3.7-6.4V192c0-2.6-1.4-5.1-3.7-6.4l-60.9-35.4c-2.3-1.3-5.1-1.3-7.4 0l-61.3 35.4c-2.3 1.3-3.7 3.8-3.7 6.4v70.8c0 2.7 1.4 5.1 3.7 6.4l60.9 34.7c2.2 1.3 5 1.3 7.3 0l36.8-20.5c2.5-1.4 2.5-5 0-6.4L550 241.6c-1.2-.7-1.9-1.9-1.9-3.2v-22.2c0-1.3.7-2.5 1.9-3.2l19.2-11.1c1.1-.7 2.6-.7 3.7 0l19.2 11.1c1.1.7 1.9 1.9 1.9 3.2v17.4c0 2.8 3.1 4.6 5.6 3.2l36.7-21.3zM559 219c-.4.3-.7.7-.7 1.2v13.6c0 .5.3 1 .7 1.2l11.8 6.8c.4.3 1 .3 1.4 0L584 235c.4-.3.7-.7.7-1.2v-13.6c0-.5-.3-1-.7-1.2l-11.8-6.8c-.4-.3-1-.3-1.4 0L559 219zm-254.2 43.5v-70.4c0-2.6-1.6-5.1-3.9-6.4l-61.1-35.2c-2.1-1.2-5-1.4-7.4 0l-61.1 35.2c-2.3 1.3-3.9 3.7-3.9 6.4v70.4c0 2.8 1.9 5.2 4 6.4l61.2 35.2c2.4 1.4 5.2 1.3 7.4 0l61-35.2c1.8-1 3.1-2.7 3.6-4.7.1-.5.2-1.1.2-1.7zm-74.3-124.9l-.8.5h1.1l-.3-.5zm76.2 130.2l-.4-.7v.9l.4-.2z"], 49910 "node-js": [448, 512, [], "f3d3", "M224 508c-6.7 0-13.5-1.8-19.4-5.2l-61.7-36.5c-9.2-5.2-4.7-7-1.7-8 12.3-4.3 14.8-5.2 27.9-12.7 1.4-.8 3.2-.5 4.6.4l47.4 28.1c1.7 1 4.1 1 5.7 0l184.7-106.6c1.7-1 2.8-3 2.8-5V149.3c0-2.1-1.1-4-2.9-5.1L226.8 37.7c-1.7-1-4-1-5.7 0L36.6 144.3c-1.8 1-2.9 3-2.9 5.1v213.1c0 2 1.1 4 2.9 4.9l50.6 29.2c27.5 13.7 44.3-2.4 44.3-18.7V167.5c0-3 2.4-5.3 5.4-5.3h23.4c2.9 0 5.4 2.3 5.4 5.3V378c0 36.6-20 57.6-54.7 57.6-10.7 0-19.1 0-42.5-11.6l-48.4-27.9C8.1 389.2.7 376.3.7 362.4V149.3c0-13.8 7.4-26.8 19.4-33.7L204.6 9c11.7-6.6 27.2-6.6 38.8 0l184.7 106.7c12 6.9 19.4 19.8 19.4 33.7v213.1c0 13.8-7.4 26.7-19.4 33.7L243.4 502.8c-5.9 3.4-12.6 5.2-19.4 5.2zm149.1-210.1c0-39.9-27-50.5-83.7-58-57.4-7.6-63.2-11.5-63.2-24.9 0-11.1 4.9-25.9 47.4-25.9 37.9 0 51.9 8.2 57.7 33.8.5 2.4 2.7 4.2 5.2 4.2h24c1.5 0 2.9-.6 3.9-1.7s1.5-2.6 1.4-4.1c-3.7-44.1-33-64.6-92.2-64.6-52.7 0-84.1 22.2-84.1 59.5 0 40.4 31.3 51.6 81.8 56.6 60.5 5.9 65.2 14.8 65.2 26.7 0 20.6-16.6 29.4-55.5 29.4-48.9 0-59.6-12.3-63.2-36.6-.4-2.6-2.6-4.5-5.3-4.5h-23.9c-3 0-5.3 2.4-5.3 5.3 0 31.1 16.9 68.2 97.8 68.2 58.4-.1 92-23.2 92-63.4z"], 49911 "npm": [576, 512, [], "f3d4", "M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z"], 49912 "ns8": [640, 512, [], "f3d5", "M187.1 159.9l-34.2 113.7-54.5-113.7H49L0 320h44.9L76 213.5 126.6 320h56.9L232 159.9h-44.9zm452.5-.9c-2.9-18-23.9-28.1-42.1-31.3-44.6-7.8-101.9 16.3-88.5 58.8v.1c-43.8 8.7-74.3 26.8-94.2 48.2-3-9.8-13.6-16.6-34-16.6h-87.6c-9.3 0-12.9-2.3-11.5-7.4 1.6-5.5 1.9-6.8 3.7-12.2 2.1-6.4 7.8-7.1 13.3-7.1h133.5l9.7-31.5c-139.7 0-144.5-.5-160.1 1.2-12.3 1.3-23.5 4.8-30.6 15-6.8 9.9-14.4 35.6-17.6 47.1-5.4 19.4-.6 28.6 32.8 28.6h87.3c7.8 0 8.8 2.7 7.7 6.6-1.1 4.4-2.8 10-4.5 14.6-1.6 4.2-4.7 7.4-13.8 7.4H216.3L204.7 320c139.9 0 145.3-.6 160.9-2.3 6.6-.7 13-2.1 18.5-4.9.2 3.7.5 7.3 1.2 10.8 5.4 30.5 27.4 52.3 56.8 59.5 48.6 11.9 108.7-16.8 135.1-68 18.7-36.2 14.1-76.2-3.4-105.5h.1c29.6-5.9 70.3-22 65.7-50.6zM530.7 263.7c-5.9 29.5-36.6 47.8-61.6 43.9-30.9-4.8-38.5-39.5-14.1-64.8 16.2-16.8 45.2-24 68.5-26.9 6.7 14.1 10.3 32 7.2 47.8zm21.8-83.1c-4.2-6-9.8-18.5-2.5-26.3 6.7-7.2 20.9-10.1 31.8-7.7 15.3 3.4 19.7 15.9 4.9 24.4-10.7 6.1-23.6 8.1-34.2 9.6z"], 49913 "nutritionix": [400, 512, [], "f3d6", "M88 8.1S221.4-.1 209 112.5c0 0 19.1-74.9 103-40.6 0 0-17.7 74-88 56 0 0 14.6-54.6 66.1-56.6 0 0-39.9-10.3-82.1 48.8 0 0-19.8-94.5-93.6-99.7 0 0 75.2 19.4 77.6 107.5 0 .1-106.4 7-104-119.8zm312 315.6c0 48.5-9.7 95.3-32 132.3-42.2 30.9-105 48-168 48-62.9 0-125.8-17.1-168-48C9.7 419 0 372.2 0 323.7 0 275.3 17.7 229 40 192c42.2-30.9 97.1-48.6 160-48.6 63 0 117.8 17.6 160 48.6 22.3 37 40 83.3 40 131.7zM120 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM192 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM264 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zM336 428c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm0-66.2c0-15.5-12.5-28-28-28s-28 12.5-28 28 12.5 28 28 28 28-12.5 28-28zm24-39.6c-4.8-22.3-7.4-36.9-16-56-38.8-19.9-90.5-32-144-32S94.8 180.1 56 200c-8.8 19.5-11.2 33.9-16 56 42.2-7.9 98.7-14.8 160-14.8s117.8 6.9 160 14.8z"], 49914 "odnoklassniki": [320, 512, [], "f263", "M275.1 334c-27.4 17.4-65.1 24.3-90 26.9l20.9 20.6 76.3 76.3c27.9 28.6-17.5 73.3-45.7 45.7-19.1-19.4-47.1-47.4-76.3-76.6L84 503.4c-28.2 27.5-73.6-17.6-45.4-45.7 19.4-19.4 47.1-47.4 76.3-76.3l20.6-20.6c-24.6-2.6-62.9-9.1-90.6-26.9-32.6-21-46.9-33.3-34.3-59 7.4-14.6 27.7-26.9 54.6-5.7 0 0 36.3 28.9 94.9 28.9s94.9-28.9 94.9-28.9c26.9-21.1 47.1-8.9 54.6 5.7 12.4 25.7-1.9 38-34.5 59.1zM30.3 129.7C30.3 58 88.6 0 160 0s129.7 58 129.7 129.7c0 71.4-58.3 129.4-129.7 129.4s-129.7-58-129.7-129.4zm66 0c0 35.1 28.6 63.7 63.7 63.7s63.7-28.6 63.7-63.7c0-35.4-28.6-64-63.7-64s-63.7 28.6-63.7 64z"], 49915 "odnoklassniki-square": [448, 512, [], "f264", "M184.2 177.1c0-22.1 17.9-40 39.8-40s39.8 17.9 39.8 40c0 22-17.9 39.8-39.8 39.8s-39.8-17.9-39.8-39.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-305.1 97.1c0 44.6 36.4 80.9 81.1 80.9s81.1-36.2 81.1-80.9c0-44.8-36.4-81.1-81.1-81.1s-81.1 36.2-81.1 81.1zm174.5 90.7c-4.6-9.1-17.3-16.8-34.1-3.6 0 0-22.7 18-59.3 18s-59.3-18-59.3-18c-16.8-13.2-29.5-5.5-34.1 3.6-7.9 16.1 1.1 23.7 21.4 37 17.3 11.1 41.2 15.2 56.
499156 16.8l-12.9 12.9c-18.2 18-35.5 35.5-47.7 47.7-17.6 17.6 10.7 45.8 28.4 28.6l47.7-47.9c18.2 18.2 35.7 35.7 47.7 47.9 17.6 17.2 46-10.7 28.6-28.6l-47.7-47.7-13-12.9c15.5-1.6 39.1-5.9 56.2-16.8 20.4-13.3 29.3-21 21.5-37z"], 49916 "old-republic": [496, 512, [], "f510", "M235.76 10.23c7.5-.31 15-.28 22.5-.09 3.61.14 7.2.4 10.79.73 4.92.27 9.79 1.03 14.67 1.62 2.93.43 5.83.98 8.75 1.46 7.9 1.33 15.67 3.28 23.39 5.4 12.24 3.47 24.19 7.92 35.76 13.21 26.56 12.24 50.94 29.21 71.63 49.88 20.03 20.09 36.72 43.55 48.89 69.19 1.13 2.59 2.44 5.1 3.47 7.74 2.81 6.43 5.39 12.97 7.58 19.63 4.14 12.33 7.34 24.99 9.42 37.83.57 3.14 1.04 6.3 1.4 9.47.55 3.83.94 7.69 1.18 11.56.83 8.34.84 16.73.77 25.1-.07 4.97-.26 9.94-.75 14.89-.24 3.38-.51 6.76-.98 10.12-.39 2.72-.63 5.46-1.11 8.17-.9 5.15-1.7 10.31-2.87 15.41-4.1 18.5-10.3 36.55-18.51 53.63-15.77 32.83-38.83 62.17-67.12 85.12a246.503 246.503 0 0 1-56.91 34.86c-6.21 2.68-12.46 5.25-18.87 7.41-3.51 1.16-7.01 2.38-10.57 3.39-6.62 1.88-13.29 3.64-20.04 5-4.66.91-9.34 1.73-14.03 2.48-5.25.66-10.5 1.44-15.79 1.74-6.69.66-13.41.84-20.12.81-6.82.03-13.65-.12-20.45-.79-3.29-.23-6.57-.5-9.83-.95-2.72-.39-5.46-.63-8.17-1.11-4.12-.72-8.25-1.37-12.35-2.22-4.25-.94-8.49-1.89-12.69-3.02-8.63-2.17-17.08-5.01-25.41-8.13-10.49-4.12-20.79-8.75-30.64-14.25-2.14-1.15-4.28-2.29-6.35-3.57-11.22-6.58-21.86-14.1-31.92-22.34-34.68-28.41-61.41-66.43-76.35-108.7-3.09-8.74-5.71-17.65-7.8-26.68-1.48-6.16-2.52-12.42-3.58-18.66-.4-2.35-.61-4.73-.95-7.09-.6-3.96-.75-7.96-1.17-11.94-.8-9.47-.71-18.99-.51-28.49.14-3.51.34-7.01.7-10.51.31-3.17.46-6.37.92-9.52.41-2.81.65-5.65 1.16-8.44.7-3.94 1.3-7.9 2.12-11.82 3.43-16.52 8.47-32.73 15.26-48.18 1.15-2.92 2.59-5.72 3.86-8.59 8.05-16.71 17.9-32.56 29.49-47.06 20-25.38 45.1-46.68 73.27-62.47 7.5-4.15 15.16-8.05 23.07-11.37 15.82-6.88 32.41-11.95 49.31-15.38 3.51-.67 7.04-1.24 10.56-1.85 2.62-.47 5.28-.7 7.91-1.08 3.53-.53 7.1-.68 10.65-1.04 2.46-.24 4.91-.36 7.36-.51m8.64 24.41c-9.23.1-18.43.99-27.57 2.23-7.3 1.08-14.53 2.6-21.71 4.3-13.91 3.5-27.48 8.34-40.46 14.42-10.46 4.99-20.59 10.7-30.18 17.22-4.18 2.92-8.4 5.8-12.34 9.03-5.08 3.97-9.98 8.17-14.68 12.59-2.51 2.24-4.81 4.7-7.22 7.06-28.22 28.79-48.44 65.39-57.5 104.69-2.04 8.44-3.54 17.02-4.44 25.65-1.1 8.89-1.44 17.85-1.41 26.8.11 7.14.38 14.28 1.22 21.37.62 7.12 1.87 14.16 3.2 21.18 1.07 4.65 2.03 9.32 3.33 13.91 6.29 23.38 16.5 45.7 30.07 65.75 8.64 12.98 18.78 24.93 29.98 35.77 16.28 15.82 35.05 29.04 55.34 39.22 7.28 3.52 14.66 6.87 22.27 9.63 5.04 1.76 10.06 3.57 15.22 4.98 11.26 3.23 22.77 5.6 34.39 7.06 2.91.29 5.81.61 8.72.9 13.82 1.08 27.74 1 41.54-.43 4.45-.6 8.92-.99 13.35-1.78 3.63-.67 7.28-1.25 10.87-2.1 4.13-.98 8.28-1.91 12.36-3.07 26.5-7.34 51.58-19.71 73.58-36.2 15.78-11.82 29.96-25.76 42.12-41.28 3.26-4.02 6.17-8.31 9.13-12.55 3.39-5.06 6.58-10.25 9.6-15.54 2.4-4.44 4.74-8.91 6.95-13.45 5.69-12.05 10.28-24.62 13.75-37.49 2.59-10.01 4.75-20.16 5.9-30.45 1.77-13.47 1.94-27.1 1.29-40.65-.29-3.89-.67-7.77-1-11.66-2.23-19.08-6.79-37.91-13.82-55.8-5.95-15.13-13.53-29.63-22.61-43.13-12.69-18.8-28.24-35.68-45.97-49.83-25.05-20-54.47-34.55-85.65-42.08-7.78-1.93-15.69-3.34-23.63-4.45-3.91-.59-7.85-.82-11.77-1.24-7.39-.57-14.81-.72-22.22-.58zM139.26 83.53c13.3-8.89 28.08-15.38 43.3-20.18-3.17 1.77-6.44 3.38-9.53 5.29-11.21 6.68-21.52 14.9-30.38 24.49-6.8 7.43-12.76 15.73-17.01 24.89-3.29 6.86-5.64 14.19-6.86 21.71-.93 4.85-1.3 9.81-1.17 14.75.13 13.66 4.44 27.08 11.29 38.82 5.92 10.22 13.63 19.33 22.36 27.26 4.85 4.36 10.24 8.09 14.95 12.6 2.26 2.19 4.49 4.42 6.43 6.91 2.62 3.31 4.89 6.99 5.99 11.1.9 3.02.66 6.2.69 9.31.02 4.1-.04 8.2.03 12.3.14 3.54-.02 7.09.11 10.63.08 2.38.02 4.76.05 7.14.16 5.77.06 11.53.15 17.3.11 2.91.02 5.82.13 8.74.03 1.63.13 3.28-.03 4.91-.91.12-1.82.18-2.73.16-10.99 0-21.88-2.63-31.95-6.93-6-2.7-11.81-5.89-17.09-9.83-5.75-4.19-11.09-8.96-15.79-14.31-6.53-7.24-11.98-15.39-16.62-23.95-1.07-2.03-2.24-4.02-3.18-6.12-1.16-2.64-2.62-5.14-3.67-7.82-4.05-9.68-6.57-19.94-8.08-30.31-.49-4.44-1.09-8.88-1.2-13.35-.7-15.73.84-31.55 4.67-46.82 2.12-8.15 4.77-16.18 8.31-23.83 6.32-14.2 15.34-27.18 26.3-38.19 6.28-6.2 13.13-11.84 20.53-16.
4991667zm175.37-20.12c2.74.74 5.41 1.74 8.09 2.68 6.36 2.33 12.68 4.84 18.71 7.96 13.11 6.44 25.31 14.81 35.82 24.97 10.2 9.95 18.74 21.6 25.14 34.34 1.28 2.75 2.64 5.46 3.81 8.26 6.31 15.1 10 31.26 11.23 47.57.41 4.54.44 9.09.45 13.64.07 11.64-1.49 23.25-4.3 34.53-1.97 7.27-4.35 14.49-7.86 21.18-3.18 6.64-6.68 13.16-10.84 19.24-6.94 10.47-15.6 19.87-25.82 27.22-10.48 7.64-22.64 13.02-35.4 15.38-3.51.69-7.08 1.08-10.66 1.21-1.85.06-3.72.16-5.56-.1-.28-2.15 0-4.31-.01-6.46-.03-3.73.14-7.45.1-11.17.19-7.02.02-14.05.21-21.07.03-2.38-.03-4.76.03-7.14.17-5.07-.04-10.14.14-15.21.1-2.99-.24-6.04.51-8.96.66-2.5 1.78-4.86 3.09-7.08 4.46-7.31 11.06-12.96 17.68-18.26 5.38-4.18 10.47-8.77 15.02-13.84 7.68-8.37 14.17-17.88 18.78-28.27 2.5-5.93 4.52-12.1 5.55-18.46.86-4.37 1.06-8.83 1.01-13.27-.02-7.85-1.4-15.65-3.64-23.17-1.75-5.73-4.27-11.18-7.09-16.45-3.87-6.93-8.65-13.31-13.96-19.2-9.94-10.85-21.75-19.94-34.6-27.1-1.85-1.02-3.84-1.82-5.63-2.97zm-100.8 58.45c.98-1.18 1.99-2.33 3.12-3.38-.61.93-1.27 1.81-1.95 2.68-3.1 3.88-5.54 8.31-7.03 13.06-.87 3.27-1.68 6.6-1.73 10-.07 2.52-.08 5.07.32 7.57 1.13 7.63 4.33 14.85 8.77 21.12 2 2.7 4.25 5.27 6.92 7.33 1.62 1.27 3.53 2.09 5.34 3.05 3.11 1.68 6.32 3.23 9.07 5.48 2.67 2.09 4.55 5.33 4.4 8.79-.01 73.67 0 147.34-.01 221.02 0 1.35-.08 2.7.04 4.04.13 1.48.82 2.83 1.47 4.15.86 1.66 1.78 3.34 3.18 4.62.85.77 1.97 1.4 3.15 1.24 1.5-.2 2.66-1.35 3.45-2.57.96-1.51 1.68-3.16 2.28-4.85.76-2.13.44-4.42.54-6.63.14-4.03-.02-8.06.14-12.09.03-5.89.03-11.77.06-17.66.14-3.62.03-7.24.11-10.86.15-4.03-.02-8.06.14-12.09.03-5.99.03-11.98.07-17.97.14-3.62.02-7.24.11-10.86.14-3.93-.02-7.86.14-11.78.03-5.99.03-11.98.06-17.97.16-3.94-.01-7.88.19-11.82.29 1.44.13 2.92.22 4.38.19 3.61.42 7.23.76 10.84.32 3.44.44 6.89.86 10.32.37 3.1.51 6.22.95 9.31.57 4.09.87 8.21 1.54 12.29 1.46 9.04 2.83 18.11 5.09 26.99 1.13 4.82 2.4 9.61 4 14.3 2.54 7.9 5.72 15.67 10.31 22.62 1.73 2.64 3.87 4.98 6.1 7.21.27.25.55.51.88.71.6.25 1.31-.07 1.7-.57.71-.88 1.17-1.94 1.7-2.93 4.05-7.8 8.18-15.56 12.34-23.31.7-1.31 1.44-2.62 2.56-3.61 1.75-1.57 3.84-2.69 5.98-3.63 2.88-1.22 5.9-2.19 9.03-2.42 6.58-.62 13.11.75 19.56 1.85 3.69.58 7.4 1.17 11.13 1.41 3.74.1 7.48.05 11.21-.28 8.55-.92 16.99-2.96 24.94-6.25 5.3-2.24 10.46-4.83 15.31-7.93 11.46-7.21 21.46-16.57 30.04-27.01 1.17-1.42 2.25-2.9 3.46-4.28-1.2 3.24-2.67 6.37-4.16 9.48-1.25 2.9-2.84 5.61-4.27 8.42-5.16 9.63-11.02 18.91-17.75 27.52-4.03 5.21-8.53 10.05-13.33 14.57-6.64 6.05-14.07 11.37-22.43 14.76-8.21 3.37-17.31 4.63-26.09 3.29-3.56-.58-7.01-1.69-10.41-2.88-2.79-.97-5.39-2.38-8.03-3.69-3.43-1.71-6.64-3.81-9.71-6.08 2.71 3.06 5.69 5.86 8.7 8.61 4.27 3.76 8.74 7.31 13.63 10.23 3.98 2.45 8.29 4.4 12.84 5.51 1.46.37 2.96.46 4.45.6-1.25 1.1-2.63 2.04-3.99 2.98-9.61 6.54-20.01 11.86-30.69 16.43-20.86 8.7-43.17 13.97-65.74 15.34-4.66.24-9.32.36-13.98.36-4.98-.11-9.97-.13-14.92-.65-11.2-.76-22.29-2.73-33.17-5.43-10.35-2.71-20.55-6.12-30.3-10.55-8.71-3.86-17.12-8.42-24.99-13.79-1.83-1.31-3.74-2.53-5.37-4.08 6.6-1.19 13.03-3.39 18.99-6.48 5.74-2.86 10.99-6.66 15.63-11.07 2.24-2.19 4.29-4.59 6.19-7.09-3.43 2.13-6.93 4.15-10.62 5.78-4.41 2.16-9.07 3.77-13.81 5.02-5.73 1.52-11.74 1.73-17.61 1.14-8.13-.95-15.86-4.27-22.51-8.98-4.32-2.94-8.22-6.43-11.96-10.06-9.93-10.16-18.2-21.81-25.66-33.86-3.94-6.27-7.53-12.75-11.12-19.22-1.05-2.04-2.15-4.05-3.18-6.1 2.85 2.92 5.57 5.97 8.43 8.88 8.99 8.97 18.56 17.44 29.16 24.48 7.55 4.9 15.67 9.23 24.56 11.03 3.11.73 6.32.47 9.47.81 2.77.28 5.56.2 8.34.3 5.05.06 10.11.04 15.16-.16 3.65-.16 7.27-.66 10.89-1.09 2.07-.25 4.11-.71 6.14-1.2 3.88-.95 8.11-.96 11.83.61 4.76 1.85 8.44 5.64 11.38 9.71 2.16 3.02 4.06 6.22 5.66 9.58 1.16 2.43 2.46 4.79 3.55 7.26 1 2.24 2.15 4.42 3.42 6.52.67 1.02 1.4 2.15 2.62 2.55 1.06-.75 1.71-1.91 2.28-3.03 2.1-4.16 3.42-8.65 4.89-13.05 2.02-6.59 3.78-13.27 5.19-20.02 2.21-9.25 3.25-18.72 4.54-28.13.56-3.98.83-7.99 1.31-11.97.87-10.64 1.9-21.27 2.24-31.94.08-1.86.24-3.71.25-5.57.01-4.35.25-8.69.22-13.03-.01-2.38-.01-4.76 0-7.13.05-5.07-.2-10.14-.22-15.21-.2-6.61-.71-13.2-1.29-19.78-.73-5.88-1.55-11.78-3.12-17.51-2.05-7.75-5.59-15.03-9.8-21.82-3.16-5.07-6.79-9.88-11.09-14.03-3.88-3.86-8.58-7.08-13.94-8.45-1.5-.41-3.06-.45-4.59-.64.07-2.99.7-5.93 1.26-8.85 1.59-7.71 3.8-15.3 6.76-22.6 1.52-4.03 3.41-7.9 5.39-11.72 3.45-6.56 7.62-12.79 12.46-18.46zm31.27 1.7c.35-.06.71-.12 1.07-.19.19 1.79.09 3.58.1 5.37v38.13c-.01 1.74.13 3.49-.15 5.22-.36-.03-.71-.05-1.06-.05-.95-3.75-1.72-7.55-2.62-11.31-.38-1.53-.58-3.09-1.07-4.59-1.7-.24-3.43-.17-5.15-.2-5.06-.01-10.13 0-15.19-.01-1.66-.01-3.32.09-4.98-.03-.03-.39-.26-.91.16-1.18 1.28-.65 2.72-.88 4.06-1.35 3.43-1.14 6.88-2.16 10.31-3.31 1.39-.48 2.9-.72 4.16-1.54.04-.56.02-1.13-.05-1.68-1.23-.55-2.53-.87-3.81-1.28-3.13-1.03-6.29-1.96-9.41-3.02-1.79-.62-3.67-1-5.41-1.79-.03-.37-.07-.73-.11-1.09 5.09-.19 10.2.06 15.3-.12 3.36-.13 6.73.08 10.09-.07.12-.39.26-.77.37-1.16 1.08-4.94 2.33-9.83 3.39-14.75zm5.97-.2c.36.05.72.12 1.08.2.98 3.85 1.73 7.76 2.71 11.61.36 1.42.56 2.88 1.03 4.27 2.53.18 5.07-.01 7.61.05 5.16.12 10.33.12 15.49.07.76-.01 1.52.03 2.28.08-.04.36-.07.72-.1 1.08-1.82.83-3.78 1.25-5.67 1.89-3.73 1.23-7.48 2.39-11.22 3.57-.57.17-1.12.42-1.67.64-.15.55-.18 1.12-.12 1.69.87.48 1.82.81 2.77 1.09 4.88 1.52 9.73 3.14 14.63 4.6.38.13.78.27 1.13.49.4.27.23.79.15 1.18-1.66.13-3.31.03-4.97.04-5.17.01-10.33-.01-15.5.01-1.61.03-3.22-.02-4.82.21-.52 1.67-.72 3.42-1.17 5.11-.94 3.57-1.52 7.24-2.54 10.78-.36.01-.71.02-1.06.06-.29-1.73-.15-3.48-.15-5.22v-38.13c.02-1.78-.08-3.58.11-5.37zM65.05 168.33c1.12-2.15 2.08-4.4 3.37-6.46-1.82 7.56-2.91 15.27-3.62 23-.8 7.71-.85 15.49-.54 23.23 1.05 19.94 5.54 39.83 14.23 57.88 2.99 5.99 6.35 11.83 10.5 17.11 6.12 7.47 12.53 14.76 19.84 21.09 4.8 4.1 9.99 7.78 15.54 10.8 3.27 1.65 6.51 3.39 9.94 4.68 5.01 2.03 10.19 3.61 15.42 4.94 3.83.96 7.78 1.41 11.52 2.71 5 1.57 9.47 4.61 13.03 8.43 4.93 5.23 8.09 11.87 10.2 18.67.99 2.9 1.59 5.91 2.17 8.92.15.75.22 1.52.16 2.29-6.5 2.78-13.26 5.06-20.26 6.18-4.11.78-8.29.99-12.46 1.08-10.25.24-20.47-1.76-30.12-5.12-3.74-1.42-7.49-2.85-11.03-4.72-8.06-3.84-15.64-8.7-22.46-14.46-2.92-2.55-5.83-5.13-8.4-8.03-9.16-9.83-16.3-21.41-21.79-33.65-2.39-5.55-4.61-11.18-6.37-16.96-1.17-3.94-2.36-7.89-3.26-11.91-.75-2.94-1.22-5.95-1.87-8.92-.46-2.14-.69-4.32-1.03-6.48-.85-5.43-1.28-10.93-1.33-16.43.11-6.18.25-12.37 1.07-18.5.4-2.86.67-5.74 1.15-8.6.98-5.7 2.14-11.37 3.71-16.93 3.09-11.65 7.48-22.95 12.69-33.84zm363.73-6.44c1.1 1.66 1.91 3.48 2.78 5.26 2.1 4.45 4.24 8.9 6.02 13.49 7.61 18.76 12.3 38.79 13.04 59.05.02 1.76.07 3.52.11 5.29.13 9.57-1.27 19.09-3.18 28.45-.73 3.59-1.54 7.17-2.58 10.69-4.04 14.72-10 29-18.41 41.78-8.21 12.57-19.01 23.55-31.84 31.41-5.73 3.59-11.79 6.64-18.05 9.19-5.78 2.19-11.71 4.03-17.8 5.11-6.4 1.05-12.91 1.52-19.4 1.23-7.92-.48-15.78-2.07-23.21-4.85-1.94-.8-3.94-1.46-5.84-2.33-.21-1.51.25-2.99.53-4.46 1.16-5.74 3.03-11.36 5.7-16.58 2.37-4.51 5.52-8.65 9.46-11.9 2.43-2.05 5.24-3.61 8.16-4.83 3.58-1.5 7.47-1.97 11.24-2.83 7.23-1.71 14.37-3.93 21.15-7 10.35-4.65 19.71-11.38 27.65-19.46 1.59-1.61 3.23-3.18 4.74-4.87 3.37-3.76 6.71-7.57 9.85-11.53 7.48-10.07 12.82-21.59 16.71-33.48 1.58-5.3 3.21-10.6 4.21-16.05.63
49916-2.87 1.04-5.78 1.52-8.68.87-6.09 1.59-12.22 1.68-18.38.12-6.65.14-13.32-.53-19.94-.73-7.99-1.87-15.96-3.71-23.78z"], 49917 "opencart": [640, 512, [], "f23d", "M423.3 440.7c0 25.3-20.3 45.6-45.6 45.6s-45.8-20.3-45.8-45.6 20.6-45.8 45.8-45.8c25.4 0 45.6 20.5 45.6 45.8zm-253.9-45.8c-25.3 0-45.6 20.6-45.6 45.8s20.3 45.6 45.6 45.6 45.8-20.3 45.8-45.6-20.5-45.8-45.8-45.8zm291.7-270C158.9 124.9 81.9 112.1 0 25.7c34.4 51.7 53.3 148.9 373.1 144.2 333.3-5 130 86.1 70.8 188.9 186.7-166.7 319.4-233.9 17.2-233.9z"], 49918 "openid": [448, 512, [], "f19b", "M271.5 432l-68 32C88.5 453.7 0 392.5 0 318.2c0-71.5 82.5-131 191.7-144.3v43c-71.5 12.5-124 53-124 101.3 0 51 58.5 93.3 135.7 103v-340l68-33.2v384zM448 291l-131.3-28.5 36.8-20.7c-19.5-11.5-43.5-20-70-24.8v-43c46.2 5.5 87.7 19.5 120.3 39.3l35-19.8L448 291z"], 49919 "opera": [496, 512, [], "f26a", "M313.9 32.7c-170.2 0-252.6 223.8-147.5 355.1 36.5 45.4 88.6 75.6 147.5 75.6 36.3 0 70.3-11.1 99.4-30.4-43.8 39.2-101.9 63-165.3 63-3.9 0-8 0-11.9-.3C104.6 489.6 0 381.1 0 248 0 111 111 0 248 0h.8c63.1.3 120.7 24.1 164.4 63.1-29-19.4-63.1-30.4-99.3-30.4zm101.8 397.7c-40.9 24.7-90.7 23.6-132-5.8 56.2-20.5 97.7-91.6 97.7-176.6 0-84.7-41.2-155.8-97.4-176.6 41.8-29.2 91.2-30.3 132.9-5 105.9 98.7 105.5 265.7-1.2 364z"], 49920 "optin-monster": [576, 512, [], "f23c", "M550.671 450.303c0 11.62-15.673 19.457-32.158 14.863-12.16-3.243-31.346-17.565-36.211-27.294-5.674-11.62 4.054-32.698 18.916-30.806 15.674 1.621 49.453 25.401 49.453 43.237zM372.86 75.223c-3.783-72.151-100.796-79.718-125.928-23.51 44.588-24.321 90.257-15.673 125.928 23.51zM74.795 407.066c-15.673 1.621-49.452 25.401-49.452 43.237 0 11.62 15.673 19.457 32.157 14.863 12.16-3.243 31.076-17.565 35.94-27.294 5.946-11.62-3.782-32.698-18.645-30.806zm497.765 14.322c1.081 3.513 1.892 7.026 1.892 10.809.81 31.616-44.317 64.045-73.503 65.125-17.295.81-34.59-8.377-42.696-23.51-113.497 4.053-226.994 4.864-340.22 0-8.377 15.133-25.672 24.05-42.967 23.51-28.915-1.081-74.043-33.509-73.503-65.125.27-3.783.811-7.296 1.892-10.809-5.566-9.463-4.845-15.282 5.405-11.62 3.243-5.134 7.026-9.458 11.08-13.782-2.57-10.917 1.27-14.094 11.079-9.188 4.594-3.243 9.998-6.485 15.944-9.188 0-15.757 11.839-11.131 17.295-5.675 12.467-1.78 20.129.709 26.753 5.675v-19.726c-12.987 0-40.641-11.375-45.94-36.212-4.974-20.725 2.607-38.075 25.132-47.56.81-5.945 8.107-14.052 14.862-15.944 7.567-1.892 12.431 4.594 14.052 10.269 7.425 0 17.757 1.465 21.078 8.107 5.405-.541 11.079-1.352 16.484-1.892-2.432-1.892-5.134-3.513-8.107-4.594-5.134-8.917-13.782-11.079-24.591-11.62 0-.81 0-1.621.27-2.702-19.727-.541-44.048-5.675-54.857-17.835-21.321-23.638-15.935-83.577 12.16-103.498 8.377-5.675 21.618-.811 22.699 9.728 2.425 20.598.399 26.833 26.212 25.942 8.107-7.836 16.755-14.592 26.483-19.997-14.862-1.352-28.914 1.621-43.778 3.783 12.752-12.48 23.953-25.442 56.748-42.427 23.511-11.89 49.993-20.808 76.205-23.239-18.646-7.837-39.993-11.891-59.721-16.484 76.475-16.214 174.569-22.159 244.289 37.562 18.105 15.403 32.427 36.211 42.696 59.992 39.799 4.853 36.47-5.581 38.643-25.132 1.081-10.269 14.322-15.403 22.699-9.458 14.862 10.539 22.159 30.806 24.59 48.101 2.162 17.835.27 41.345-12.43 55.127-10.809 12.16-34.32 17.565-53.776 18.105v2.703c-11.08.27-20.268 2.432-25.673 11.62-2.972 1.081-5.674 2.703-8.377 4.594 5.675.54 11.35 1.351 16.755 1.891 1.869-5.619 12.535-8.377 21.077-8.377 1.621-5.405 6.756-11.89 14.052-10.269s14.052 9.998 14.863 15.944c10.809 4.324 22.159 12.16 25.131 25.672 1.892 8.107 1.621 15.133.27 21.888-5.726 25.262-33.361 36.212-45.939 36.212 0 6.756 0 13.241-.27 19.726 8.01-6.006 16.367-7.158 26.752-5.675 5.919-5.919 17.565-9.41 17.565 5.675 5.675 2.703 11.349 5.945 15.944 9.188 10.1-5.051 13.669-.539 10.809 9.188 4.053 4.323 8.107 8.917 11.079 13.782 10.136-3.62 11.021 2.078 5.409 11.62zm-73.773-254.016c17.295 6.756 26.212 22.159 30.265 35.67 1.081-10.539-2.702-39.453-13.782-51.073-7.296-7.296-14.052-5.134-14.052.81.001 6.216-1.35 11.62-2.431 14.593zm-18.646 12.43c12.971 15.673 17.024 41.615 12.7 62.963 10.809-2.162 20.537-6.215 26.212-12.16 1.892-2.162 3.783-4.864 4.864-7.566-1.081-21.348-10.269-42.697-29.725-48.912-3.242 3.243-9.187 4.864-14.051 5.675zm-21.889.811c7.567 20.537 12.431 42.696 14.322 64.585 3.513 0 7.567-.27 11.62-.811 5.945-24.321-.27-51.614-14.052-63.504-3.783 0-8.107 0-11.89-.27zM77.768 167.372c-1.081-2.973-2.432-8.377-2.432-14.593 0-5.945-7.026-8.107-14.052-.81-11.35 11.62-14.863 40.534-13.782 51.073 4.053-13.512 12.971-28.915 30.266-35.67zm5.675 75.394c-4.324-21.348-.27-47.291 12.701-62.963-4.865-.811-10.809-2.432-14.052-5.675-19.457 6.215-28.375 27.563-29.726 48.912 1.351 2.702 2.972 5.404 4.864 7.566 5.675 6.215 15.403 9.998 26.213 12.16zm41.345-61.073c-5.134 1.081-9.998 2.973-14.862 4.865l-12.16 5.134v-.27c-7.296 14.052-9.999 34.319-5.405 52.965 4.594.541 8.647.811 12.7.811 2.432-22.159 9.188-43.778 19.727-63.505zm88.095-23.239c0 42.155 34.319 76.205 76.205 76.205s76.205-34.05 76.205-76.205c0-41.886-34.319-75.935-76.205-75.935s-76.205 34.049-76.205 75.935zm152.41 97.283c9.969 50.608 3.299 64.692 16.484 58.099 15.944-8.107 22.699-39.183 22.97-57.019-12.971-.81-26.213-.81-39.454-1.08zm-71.611-.541v-.27c-.27 5.134.27 38.103 4.324 41.075 11.079 5.405 39.453 4.594 51.073 1.081 5.405-1.621 2.432-37.022 1.621-41.886-18.916-.27-38.102-.27-57.018 0zm-14.053 0v-.27c-19.456.27-38.642.27-57.829.811-1.892 9.187-4.594 48.911 1.892 51.614 12.971 5.675 41.616 5.134 54.586 1.621 4.595-2.432 2.433-45.399 1.351-53.776zm-85.662 57.56c5.405 2.432 8.647 2.432 9.728-4.324 1.892-8.647 2.432-36.752 4.865-52.155-12.16.27-24.591.811-36.752 1.621-5.405 19.727.27 45.129 22.159 54.858zm-65.666-11.08c43.778 47.02 92.689 85.663 155.923 106.47 67.558-19.186 115.659-59.991 163.219-107.011-11.095-4.315-7.715-10.363-7.296-11.62-8.918-.81-17.835-1.892-26.483-2.702-9.458 32.968-35.94 52.965-4
499206.75 31.616-2.702-5.134-3.513-11.62-4.594-16.754-3.783 8.377-13.242 8.107-24.591 8.918-13.241 1.081-31.617 1.351-44.048-2.972-2.972 12.971-11.079 12.971-26.752 14.322-14.052 1.352-48.642 4.054-54.857-10.809-1.081 28.644-35.13 9.998-45.129-7.026-3.243-5.675-5.405-11.35-7.026-17.565-7.837.81-15.673 1.621-23.511 2.702 2.443 3.663 1.549 9.052-8.105 12.431zM115.6 453.545c-5.674-23.239-18.646-49.722-33.508-54.046-22.429-6.756-68.909 23.51-66.207 54.586 12.701 19.457 39.994 35.67 59.181 36.481 17.835.81 35.94-11.08 39.724-28.914.539-2.432.81-5.134.81-8.107zm7.296-5.944c33.509-19.457 69.179-35.671 105.931-47.02-38.643-20.537-68.098-47.831-97.283-77.016-2.162 1.352-5.134 2.432-7.836 3.513-1.637 4.91 8.718 5.33 5.405 12.431-2.162 4.054-8.648 7.567-15.133 9.188-2.161 2.702-5.134 4.864-7.836 6.485h-.27c-.27 13.511-.27 27.024.27 40.535 8.939 15.964 15.426 33.314 16.752 51.884zm320.764 12.7c-36.752-21.348-74.044-41.345-115.659-52.965-13.782 6.215-27.833 11.349-42.155 15.403-2.162.811-2.162.811-4.324 0-11.89-3.783-23.239-8.107-34.859-13.241-40.265 11.62-77.286 29.185-112.416 50.803h-.27v.27c.27 0 .27 0 .27-.27 103.227 4.054 206.455 3.513 309.413 0zm27.023-64.045l-.27.27c.541-13.782.811-27.563.811-41.345-2.973-1.621-5.675-4.054-8.107-6.756-6.485-1.351-12.971-5.134-15.133-8.918-1.892-4.053 1.351-7.566 5.945-10.269-.27-.541-.541-1.621-.541-2.432-2.972-.811-5.405-1.892-7.567-3.243-31.616 29.455-65.396 56.749-103.498 76.746 38.914 11.62 75.935 28.104 111.875 47.561 1.05-14.692 7.231-35.749 16.485-51.614zm23.24 3.244c-14.593 4.323-27.834 30.806-33.509 54.046 0 23.826 21.278 37.897 40.534 37.022 19.186-.811 46.48-17.024 59.181-36.481 2.973-31.077-43.507-61.344-66.206-54.587zM290.709 134.133c.045 0 .089.003.134.003.046 0 .09-.003.136-.003h-.27zm0 96.743c28.645 0 51.884-21.618 51.884-48.371 0-36.092-40.507-58.079-72.151-44.318 9.458 2.972 16.484 11.62 16.484 21.618 0 23.257-33.291 31.955-46.48 11.35-7.297 34.067 19.368 59.721 50.263 59.721zM68.039 474.083c.54 6.486 12.16 12.701 21.618 9.458 6.756-2.703 14.593-10.539 17.295-16.214 2.973-7.026-1.081-19.997-9.728-18.375-8.917 1.621-29.725 16.754-29.185 25.131zm410.75-25.131c-8.377-1.621-12.431 11.349-9.458 18.375 2.432 5.675 10.269 13.511 17.295 16.214 9.187 3.243 21.078-2.972 21.348-9.458.811-8.377-20.267-23.51-29.185-25.131z"], 49921 "osi": [495, 512, [], "f41a", "M0 259.2C2.3 123.4 97.4 26.8 213.8 11.1c138.8-18.6 255.6 75.8 278 201.1 21.3 118.8-44 230-151.6 274-9.3 3.8-14.4 1.7-18-7.7-17.8-46.3-35.6-92.7-53.4-139-3.1-8.1-1-13.2 7-16.8 24.2-11 39.3-29.4 43.3-55.8 6.4-42.4-24.5-78.7-64.5-82.2-39-3.4-71.8 23.7-77.5 59.7-5.2 33 11.1 63.7 41.9 77.7 9.6 4.4
4992111.5 8.6 7.8 18.4-17.9 46.6-35.8 93.2-53.7 139.9-2.6 6.9-8.3 9.3-15.5 6.5-52.6-20.3-101.4-61-130.8-119C1.9 318.7 1.6 280.2 0 259.2zm20.9-1.9c.4 6.6.6 14.3 1.3 22.1 6.3 71.9 49.6 143.5 131 183.1 3.2 1.5 4.4.8 5.6-2.3 14.9-39.1 29.9-78.2 45-117.3 1.3-3.3.6-4.8-2.4-6.7-31.6-19.9-47.3-48.5-45.6-86 1-21.6 9.3-40.5 23.8-56.3 30-32.7 77-39.8 115.5-17.6 31.9 18.4 49.5 53.8 45.2 90.4-3.6 30.6-19.3 53.9-45.7 69.8-2.7 1.6-3.5 2.9-2.3 6 15.2 39.2 30.2 78.4 45.2 117.7 1.2 3.1 2.4 3.8 5.6 2.3 35.5-16.6 65.2-40.3 88.1-72 34.8-48.2 49.1-101.9 42.3-161C459.8 112 354.1 14.7 218 31.5 111.9 44.5 22.7 134 20.9 257.3z"], 49922 "page4": [496, 512, [], "f3d7", "M248 504C111 504 0 393 0 256S111 8 248 8c20.9 0 41.3 2.6 60.7 7.5L42.3 392H248v112zm0-143.6V146.8L98.6 360.4H248zm96 31.6v92.7c45.7-19.2 84.5-51.7 111.4-92.7H344zm57.4-138.2l-21.2 8.4 21.2 8.3v-16.7zm-20.3 54.5c-6.7 0-8 6.3-8 12.9v7.7h16.2v-10c0-5.9-2.3-10.6-8.2-10.6zM496 256c0 37.3-8.2 72.7-23 104.4H344V27.3C433.3 64.8 496 153.1 496 256zM360.4 143.6h68.2V96h-13.9v32.6h-13.9V99h-13.9v29.6h-12.7V96h-13.9v47.6zm68.1 185.3H402v-11c0-15.4-5.6-25.2-20.9-25.2-15.4 0-20.7 10.6-20.7 25.9v25.3h68.2v-15zm0-103l-68.2 29.7V268l68.2 29.5v-16.6l-14.4-5.7v-26.5l14.4-5.9v-16.9zm-4.8-68.5h-35.6V184H402v-12.2h11c8.6 15.8 1.3 35.3-18.6 35.3-22.5 0-28.3-25.3-15.5-37.7l-11.6-10.6c-16.2 17.5-12.2 63.9 27.1 63.9 34 0 44.7-35.9 29.3-65.3z"], 49923 "pagelines": [384, 512, [], "f18c", "M384 312.7c-55.1 136.7-187.1 54-187.1 54-40.5 81.8-107.4 134.4-184.6 134.7-16.1 0-16.6-24.4 0-24.4 64.4-.3 120.5-42.7 157.2-110.1-41.1 15.9-118.6 27.9-161.6-82.2 109-44.9 159.1 11.2 178.3 45.5 9.9-24.4 17-50.9 21.6-79.7 0 0-139.7 21.9-149.5-98.1 119.1-47.9 152.6 76.7 152.6 76.7 1.6-16.7 3.3-52.6 3.3-53.4 0 0-106.3-73.7-38.1-165.2 124.6 43 61.4 162.4 61.4 162.4.5 1.6.5 23.8 0 33.4 0 0 45.2-89 136.4-57.5-4.2 134-141.9 106.4-141.9 106.4-4.4 27.4-11.2 53.4-20 77.5 0 0 83-91.8 172-20z"], 49924 "palfed": [576, 512, [], "f3d8", "M384.9 193.9c0-47.4-55.2-44.2-95.4-29.8-1.3 39.4-2.5 80.7-3 119.8.7 2.8 2.6 6.2 15.1 6.2 36.8 0 83.4-42.8 83.3-96.2zm-194.5 72.2c.2 0 6.5-2.7 11.2-2.7 26.6 0 20.7 44.1-14.4 44.1-21.5 0-37.1-18.1-37.1-43 0-42 42.9-95.6 100.7-126.5 1-12.4 3-22 10.5-28.2 11.2-9 26.6-3.5 29.5 11.1 72.2-22.2 135.2 1 135.2 72 0 77.9-79.3 152.6-140.1 138.2-.1 39.4.9 74.4 2.7 100v.2c.2 3.4.6 12.5-5.3 19.1-9.6 10.6-33.4 10-36.4-22.3-4.1-44.4.2-206.1 1.4-242.5-21.5 15-58.5 50.3-58.5 75.9.2 2.5.4 4 .6 4.6zM8 181.1s-.1 37.4 38.4 37.4h30l22.4 217.2s0 44.3 44.7 44.3h288.9s44.7-.4 44.7-44.3l22.4-217.2h30s38.4 1.2 38.4-37.4c0 0 .1-37.4-38.4-37.4h-30.1c-7.3-25.6-30.2-74.3-119.4-74.3h-28V50.3s-2.7-18.4-21.1-18.4h-85.8s-21.1 0-21.1 18.4v19.1h-28.1s-105 4.2-120.5 74.3h-29S8 142.5 8 181.1z"], 49925 "patreon": [512, 512, [], "f3d9", "M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z"], 49926 "paypal": [384, 512, [], "f1ed", "M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4.7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9.7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z"], 49927 "periscope": [448, 512, [], "f3da", "M370 63.6C331.4 22.6 280.5 0 226.6 0 111.9 0 18.5 96.2 18.5 214.4c0 75.1 57.8 159.8 82.7 192.7C137.8 455.5 192.6 512 226.6 512c41.6 0 112.9-94.2 120.9-105 24.6-33.1 82-118.3 82-192.6 0-56.5-21.1-110.1-59.5-150.8zM226.6 493.9c-42.5 0-190-167.3-190-279.4 0-107.4 83.9-196.3 190-196.3 100.8 0 184.7 89 184.7 196.3.1 112.1-147.4 279.4-184.7 279.4zM338 206.8c0 59.1-51.1 109.7-110.8 109.7-100.6 0-150.7-108.2-92.9-181.8v.4c0 24.5 20.1 44.4 44.8 44.4 24.7 0 44.8-19.9 44.8-44.4 0-18.2-11.1-33.8-26.9-40.7 76.6-19.2 141 39.3 141 112.4z"], 49928 "phabricator": [496, 512, [], "f3db", "M323 262.1l-.1-13s21.7-19.8 21.1-21.2l-9.5-20c-.6-1.4-29.5-.5-29.5-.5l-9.4-9.3s.2-28.5-1.2-29.1l-20.1-9.2c-1.4-.6-20.7 21-20.7 21l-13.1-.2s-20.5-21.4-21.9-20.8l-20 8.3c-1.4.5.2 28.9.2 28.9l-9.1 9.1s-29.2-.9-29.7.4l-8.1 19.8c-.6 1.4 21 21 21 21l.1 12.9s-21.7 19.8-21.1 21.2l9.5 20c.6 1.4 29.5.5 29.5.5l9.4 9.3s-.2 31.8 1.2 32.3l20.1 8.3c1.4.6 20.7-23.5 20.7-23.5l13.1.2s20.5 23.8 21.8 23.3l20-7.5c1.4-.6-.2-32.1-.2-32.1l9.1-9.1s29.2.9 29.7-.5l8.1-19.8c.7-1.1-20.9-20.7-20.9-20.7zm-44.9-8.7c.7 17.1-12.8 31.6-30.1 32.4-17.3.8-32.1-12.5-32.8-29.6-.7-17.1 12.8-31.6 30.1-32.3 17.3-.8 32.1 12.5 32.8 29.5zm201.2-37.9l-97-97-.1.1c-75.1-73.3-195.4-72.8-269.8 1.6-50.9 51-27.8 27.9-95.7 95.3-22.3 22.3-22.3 58.7 0 81 69.9 69.4 46.4 46 97.4 97l.1-.1c75.1 73.3 195.4 72.9 269.8-1.6 51-50.9 27.9-27.9 95.3-95.3 22.3-22.3 22.3-58.7 0-81zM140.4 363.8c-59.6-59.5-59.6-156 0-215.5 59.5-59.6 156-59.5 215.6 0 59.5 59.5 59.6 156 0 215.6-59.6 59.5-156 59.4-215.6-.1z"],
49929 "phoenix-framework": [640, 512, [], "f3dc", "M212.9 344.3c3.8-.1 22.8-1.4 25.6-2.2-2.4-2.6-43.6-1-68-49.6-4.3-8.6-7.5-17.6-6.4-27.6 2.9-25.5 32.9-30 52-18.5 36 21.6 63.3 91.3 113.7 97.5 37 4.5 84.6-17 108.2-45.4-.6-.1-.8-.2-1-.1-.4.1-.8.2-1.1.3-33.3 12.1-94.3 9.7-134.7-14.8-37.6-22.8-53.1-58.7-51.8-74.6 1.8-21.3 22.9-23.2 35.9-19.6 14.4 3.9 24.4 17.6 38.9 27.4 15.6 10.4 32.9 13.7 51.3 10.3 14.9-2.7 34.4-12.3 36.5-14.5-1.1-.1-1.8-.1-2.5-.2-6.2-.6-12.4-.8-18.5-1.7C279.8 194.5 262.1 47.4 138.5 37.9 94.2 34.5 39.1 46 2.2 72.9c-.8.6-1.5 1.2-2.2 1.8.1.2.1.3.2.5.8 0 1.6-.1 2.4-.2 6.3-1 12.5-.8 18.7.3 23.8 4.3 47.7 23.1 55.9 76.5 5.3 34.3-.7 50.8 8 86.1 19 77.1 91 107.6 127.7 106.4zM75.3 64.9c-.9-1-.9-1.2-1.3-2 12.1-2.6 24.2-4.1 36.6-4.8-1.1 14.7-22.2 21.3-35.3 6.8zm196.9 350.5c-42.8 1.2-92-26.7-123.5-61.4-4.6-5-16.8-20.2-18.6-23.4l.4-.4c6.6 4.1 25.7 18.6 54.8 27 24.2 7 48.1 6.3 71.6-3.3 22.7-9.3 41-.5 43.1 2.9-18.5 3.8-20.1 4.4-24 7.9-5.1 4.4-4.6 11.7 7 17.2 26.2 12.4 63-2.8 97.2 25.4 2.4 2 8.1 7.8 10.1 10.7-.1.2-.3.3-.4.5-4.8-1.5-16.4-7.5-40.2-9.3-24.7-2-46.3 5.3-77.5 6.2zm174.8-252c16.4-5.2 41.3-13.4 66.5-3.3 16.1 6.5 26.2 18.7 32.1 34.6 3.5 9.4 5.1 19.7 5.1 28.7-.2 0-.4 0-.6.1-.2-.4-.4-.9-.5-1.3-5-22-29.9-43.8-67.6-29.9-50.2 18.6-130.4 9.7-176.9-48-.7-.9-2.4-1.7-1.3-3.2.1-.2 2.1.6 3 1.3 18.1 13.4 38.3 21.9 60.3 26.2 30.5 6.1 54.6 2.9 79.9-5.2zm102.7 117.5c-32.4.2-33.8 50.1-103.6 64.4-18.2 3.7-38.7 4.6-44.9 4.2v-.4c2.8-1.5 14.7-2.6 29.7-16.6 7.9-7.3 15.3-15.1 22.8-22.9 19.5-20.2 41.4-42.2 81.9-39 23.1 1.8 29.3 8.2 36.1 12.7.3.2.4.5.7.9-.5 0-.7.1-.9 0-7-2.7-14.3-3.3-21.8-3.3zm-12.3-24.1c-.1.2-.1.4-.2.6-28.9-4.4-48-7.9-68.5 4-17 9.9-31.4 20.5-62 24.4-27.1 3.4-45.1 2.4-66.1-8-.3-.2-.6-.4-1-.6 0-.2.1-.3.1-.5 24.9 3.8 36.4 5.1 55.5-5.8 22.3-12.9 40.1-26.6 71.3-31 29.6-4.1 51.3 2.5 70.9 16.9zM268.6 97.3c-.6-.6-1.1-1.2-2.1-2.3 7.6 0 29.7-1.2 53.4 8.4 19.7 8 32.2 21 50.2 32.9 11.1 7.3 23.4 9.3 36.4 8.1 4.3-.4 8.5-1.2 12.8-1.7.4-.1.9 0 1.5.3-.6.4-1.2.9-1.8 1.2-8.1 4-16.7 6.3-25.6 7.1-26.1 2.6-50.3-3.7-73.4-15.4-19.3-9.9-36.4-22.9-51.4-38.6zM640 335.7c-3.5 3.1-22.7 11.6-42.7 5.3-12.3-3.9-19.5-14.9-31.6-24.1-10-7.6-20.9-7.9-28.1-8.4.6-.8.9-1.2 1.2-1.4 14.8-9.2 30.5-12.2 47.3-6.5 12.5 4.2 19.2 13.5 30.4 24.2 10.8 10.4 21 9.9 23.1 10.5.1-.1.2 0 .4.4zm-212.5 137c2.2 1.2 1.6 1.5 1.5 2-18.5-1.4-33.9-7.6-46.8-22.2-21.8-24.7-41.7-27.9-48.6-29.7.5-.2.8-.4 1.1-.4 13.1.1 26.1.7 38.9 3.9 25.3 6.4 35 25.4 41.6 35.3 3.2 4.8 7.3 8.3 12.3 11.1z"], 49930 "phoenix-squadron": [513, 512, [], "f511", "M96.24 62.81C142.91 26.57 202.15 6.57 261.28 8.08c29.67-.38 59.29 5.38 87.17 15.37-24.2-4.64-49.18-6.35-73.6-2.45-43 5.35-83.26 27.23-112.16 59.35 5.69-.99 10.81-3.68 16.07-5.88 18.19-7.89 37.6-13.29 57.4-14.87 19.8-2.14 39.75-.43 59.45 1.93-14.46 2.79-29.2 4.58-43.11 9.61-34.53 11.11-65.46 33.26-86.55 62.82-13.84 19.77-23.7 42.99-24.74 67.33-.35 16.54 5.23 34.91 19.89 44.17 11.13 6.66 24.85 9.39 37.63 6.76 15.49-2.47 30.16-8.67 43.73-16.38 11.55-6.84 22.73-14.59 32.05-24.32 3.8-3.23 2.54-8.48 2.63-12.83-2.13-.34-4.4-1.11-6.32.3a203.975 203.975 0 0 1-35.93 15.42c-20.07 6.19-42.28 8.48-62.28.78 12.83 1.73 26.14.31 37.85-5.46 20.29-9.75 36.92-25.27 54.6-38.88 27.84-21.29 57.64-40.11 89.17-55.47 25.78-12.01 53.09-22.85 81.81-24.2-15.68 13.76-32.25 26.6-46.92 41.51-14.55 14.04-27.54 29.58-40.23 45.31-3.53 4.61-8.98 6.96-13.62 10.19-22.24 15.03-40.6 35.96-52.04 60.28-9.36 19.74-14.55 41.97-11.81 63.84 1.95 13.73 8.74 27.67 20.96 35.01 12.94 7.99 29.14 8.09 43.61 5.11 32.9-7.47 61.61-28.97 81.28-56 20.5-27.6 30.61-62.38 29.25-96.64-.52-7.52-1.58-15-1.67-22.55 8.02 19.54 14.87 39.83 16.7 61.01 2.01 14.32.75 28.84-1.62 43.02-1.92 11.02-5.69 21.58-7.81 32.53 20.36-22.73 34.17-51.24 39.46-81.31 5.72-35.37.58-72.36-14.25-104.95 20.84 32.12 32.43 69.79 35.81 107.8.5 12.77.5 25.58 0 38.34-2.91 34.26-12.97 67.95-29.76 98-26.2 47.48-68.2 85.89-117.54 108.32-78.52 36.34-175.2 31.41-248.72-14.72-38.84-23.78-71.06-58.32-91.68-98.96C10.72 337.43 2.04 305.5 0 273.13V241.7c3.94-69.97 40.99-136.32 96.24-178.89m222.65 80.57c5.51-.8 10.82-2.57 16.02-4.5 4.99-1.77 9.27-5.95 10.35-11.25-8.91 5-17.95 9.95-26.37 15.75z"], 49931 "php": [640, 512, [], "f457", "M320 104.5c171.4 0 303.2 72.2 303.2 151.5S491.3 407.5 320 407.5c-171.4 0-303.2-72.2-303.2-151.5S148.7 104.5 320 104.5m0-16.8C143.3 87.7 0 163 0 256s143.3 168.3 320 168.3S640 349 640 256 496.7 87.7 320 87.7zM218.2 242.5c-7.9 40.5-35.8 36.3-70.1 36.3l13.7-70.6c38 0 63.8-4.1 56.4 34.3zM97.4 350.3h36.7l8.7-44.8c41.1 0 66.6 3 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7h-70.7L97.4 350.3zm185.7-213.6h36.5l-8.7 44.8c31.5 0 60.7-2.3 74.8 10.7 14.8 13.6 7.7 31-8.3 113.1h-37c15.4-79.4 18.3-86 12.7-92-5.4-5.8-17.7-4.6-47.4-4.6l-18.8 9
499316.6h-36.5l32.7-168.6zM505 242.5c-8 41.1-36.7 36.3-70.1 36.3l13.7-70.6c38.2 0 63.8-4.1 56.4 34.3zM384.2 350.3H421l8.7-44.8c43.2 0 67.1 2.5 90.2-19.1 26.1-24 32.9-66.7 14.3-88.1-9.7-11.2-25.3-16.7-46.5-16.7H417l-32.8 168.7z"], 49932 "pied-piper": [448, 512, [], "f2ae", "M32 419L0 479.2l.8-328C.8 85.3 54 32 120 32h327.2c-93 28.9-189.9 94.2-253.9 168.6C122.7 282 82.6 338 32 419M448 32S305.2 98.8 261.6 199.1c-23.2 53.6-28.9 118.1-71 158.6-28.9 27.8-69.8 38.2-105.3 56.3-23.2 12-66.4 40.5-84.9 66h328.4c66 0 119.3-53.3 119.3-119.2-.1 0-.1-328.8-.1-328.8z"], 49933 "pied-piper-alt": [576, 512, [], "f1a8", "M242 187c6.3-11.8 13.2-17 25.9-21.8 27.3-10.3 40.2-30.5 58.9-51.1 11.9 8.4 12 24.6 31.6 23v21.8l6.3.3c37.4-14.4 74.7-30.2 106.6-54.6 48.3-36.8 52.9-50 81.3-100l2-2.6c-.6 14.1-6.3 27.3-12.4 39.9-30.5 63.8-78.7 100.3-146.8 116.7-12.4 2.9-26.4 3.2-37.6 8.9 1.4 9.8 13.2 18.1 13.2 23 0 3.4-5.5 7.2-7.5 8.6-11.2-12.9-16.1-19.3-22.7-22.1-7.6-3.5-63.9-6.4-98.8 10zm137.9 256.9c-19 0-64.1 9.5-79.9 19.8l6.9 45.1c35.7 6.1 70.1 3.6 106-9.8-4.8-10-23.5-55.1-33-55.1zM244 246c-3.2-2-6.3-2.9-10.1-2.9-6.6 0-12.6 3.2-19.3 3.7l1.7 4.9L244 246zm-12.6 31.8l24.1 61.2 21-13.8-31.3-50.9-13.8 3.5zM555.5 0l-.6 1.1-.3.9.6-.6.3-1.4zm-59.2 382.1c-33.9-56.9-75.3-118.4-150-115.5l-.3-6c-1.1-13.5 32.8 3.2 35.1-31l-14.4 7.2c-19.8-45.7-8.6-54.3-65.5-54.3-14.7 0-26.7 1.7-41.4 4.6 2.9 18.6 2.2 36.7-10.9 50.3l19.5 5.5c-1.7 3.2-2.9 6.3-2.9 9.8 0 21 42.8 2.9 42.8 33.6 0 18.4-36.8 60.1-54.9 60.1-8 0-53.7-50-53.4-60.1l.3-4.6 52.3-11.5c13-2.6 12.3-22.7-2.9-22.7-3.7 0-43.1 9.2-49.4 10.6-2-5.2-7.5-14.1-13.8-14.1-3.2 0-6.3 3.2-9.5 4-9.2 2.6-31 2.9-21.5 20.1L15.9 298.5c-5.5 1.1-8.9 6.3-8.9 11.8 0 6 5.5 10.9 11.5 10.9 8 0 131.3-28.4 147.4-32.2 2.6 3.2 4.6 6.3 7.8 8.6 20.1 14.4 59.8 85.9 76.4 85.9 24.1 0 58-22.4 71.3-41.9 3.2-4.3 6.9-7.5 12.4-6.9.6 13.8-31.6 34.2-33 43.7-1.4 10.2-1 35.2-.3 41.1 26.7 8.1 52-3.6 77.9-2.9 4.3-21 10.6-41.9 9.8-63.5l-.3-9.5c-1.4-34.2-10.9-38.5-34.8-58.6-1.1-1.1-2.6-2.6-3.7-4 2.2-1.4 1.1-1 4.6-1.7 88.5 0 56.3 183.6 111.5 229.9 33.1-15 72.5-27.9 103.5-47.2-29-25.6-52.6-45.7-72.7-79.9zm-196.2 46v27.3l11.8-3.4-2.9-23.8h-8.9zm76.1 2.9c0-1.4-.6-3.2-.9-4.6-26.8 0-36.9 3.8-59.5 6.3l2 12.4c9-1.5 58.4-6.6 58.4-14.1z"], 49934 "pied-piper-hat": [640, 512, [], "f4e5", "M640 24.9c-80.8 53.6-89.4 92.5-96.4 104.4-6.7 12.2-11.7 60.3-23.3 83.6-11.7 23.6-54.2 42.2-66.1 50-11.7 7.8-28.3 38.1-41.9 64.2-108.1-4.4-167.4 38.8-259.2 93.6 29.4-9.7 43.3-16.7 43.3-16.7 94.2-36 139.3-68.3 281.1-49.2 1.1 0 1.9.6 2.8.8 3.9 2.2 5.3 6.9 3.1 10.8l-53.9 95.8c-2.5 4.7-7.8 7.2-13.1 6.1-126.8-23.8-226.9 17.3-318.9 18.6C24.1 488 0 453.4 0 451.8c0-1.1.6-1.7 1.7-1.7 0 0 38.3 0 103.1-15.3C178.4 294.5 244 245.4 315.4 245.4c0 0 71.7 0 90.6 61.9 22.8-39.7 28.3-49.2 28.3-49.2 5.3-9.4 35-77.2 86.4-141.4 51.5-64 90.4-79.9 119.3-91.8z"], 49935 "pied-piper-pp": [448, 512, [], "f1a7", "M205.3 174.6c0 21.1-14.2 38.1-31.7 38.1-7.1 0-12.8-1.2-17.2-3.7v-68c4.4-2.7 10.1-4.2 17.2-4.2 17.5 0 31.7 16.9 31.7 37.8zm52.6 67c-7.1 0-12.8 1.5-17.2 4.2v68c4.4 2.5 10.1 3.7 17.2 3.7 17.4 0 31.7-16.9 31.7-37.8 0-21.1-14.3-38.1-31.7-38.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM185 255.1c41 0 74.2-35.6 74.2-79.6 0-44-33.2-79.6-74.2-79.6-12 0-24.1 3.2-34.6 8.8h-45.7V311l51.8-10.1v-50.6c8.6 3.1 18.1 4.8 28.5 4.8zm158.4 25.3c0-44-33.2-79.6-73.9-79.6-3.2 0-6.4.2-9.6.7-3.7 12.5-10.1 23.8-19.2 33.4-13.8 15-32.2 23.8-51.8 24.8V416l51.8-10.1v-50.6c8.6 3.2 18.2 4.7 28.7 4.7 40.8 0 74-35.6 74-79.6z"], 49936 "pinterest": [496, 512, [], "f0d2", "M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"], 49937 "pinterest-p": [384, 512, [], "f231", "M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z"], 49938 "pinterest-square": [448, 512, [], "f0d3", "M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4
4993815.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"], 49939 "playstation": [576, 512, [], "f3df", "M570.9 372.3c-11.3 14.2-38.8 24.3-38.8 24.3L327 470.2v-54.3l150.9-53.8c17.1-6.1 19.8-14.8 5.8-19.4-13.9-4.6-39.1-3.3-56.2 2.9L327 381.1v-56.4c23.2-7.8 47.1-13.6 75.7-16.8 40.9-4.5 90.9.6 130.2 15.5 44.2 14 49.2 34.7 38 48.9zm-224.4-92.5v-139c0-16.3-3-31.3-18.3-35.6-11.7-3.8-19 7.1-19 23.4v347.9l-93.8-29.8V32c39.9 7.4 98 24.9 129.2 35.4C424.1 94.7 451 128.7 451 205.2c0 74.5-46 102.8-104.5 74.6zM43.2 410.2c-45.4-12.8-53-39.5-32.3-54.8 19.1-14.2 51.7-24.9 51.7-24.9l134.5-47.8v54.5l-96.8 34.6c-17.1 6.1-19.7 14.8-5.8 19.4 13.9 4.6 39.1 3.3 56.2-2.9l46.4-16.9v48.8c-51.6 9.3-101.4 7.3-153.9-10z"], 49940 "product-hunt": [512, 512, [], "f288", "M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z"], 49941 "pushed": [432, 512, [], "f3e1", "M407 111.9l-98.5-9 14-33.4c10.4-23.5-10.8-40.4-28.7-37L22.5 76.9c-15.1 2.7-26 18.3-21.4 36.6l105.1 348.3c6.5 21.3 36.7 24.2 47.7 7l35.3-80.8 235.2-231.3c16.4-16.8 4.3-42.9-17.4-44.8zM297.6 53.6c5.1-.7 7.5 2.5 5.2 7.4L286 100.9 108.6 84.6l189-31zM22.7 107.9c-3.1-5.1 1-10 6.1-9.1l248.7 22.7-96.9 230.7L22.7 107.9zM136 456.4c-2.6 4-7.9 3.1-9.4-1.2L43.5 179.7l127.7 197.6c-7 15-35.2 79.1-35.2 79.1zm272.8-314.5L210.1 337.3l89.7-213.7 106.4 9.7c4 1.1 5.7 5.3 2.6 8.6z"], 49942 "python": [448, 512, [], "f3e2", "M167.8 36.4c-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1zm-6.7 28.4c11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4zm185.2 81.4v47.5c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6-7.7-30.9-22.3-54.2-53.4-54.2h-40.1zM286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3z"], 49943 "qq": [448, 512, [], "f1d6", "M433.754 420.445c-11.526 1.393-44.86-52.741-44.86-52.741 0 31.345-16.136 72.247-51.051 101.786 16.842 5.192 54.843 19.167 45.803 34.421-7.316 12.343-125.51 7.881-159.632 4.037-34.122 3.844-152.316 8.306-159.632-4.037-9.045-15.25 28.918-29.214 45.783-34.415-34.92-29.539-51.059-70.445-51.059-101.792 0 0-33.334 54.134-44.859 52.741-5.37-.65-12.424-29.644 9.347-99.704 10.261-33.024 21.995-60.478 40.144-105.779C60.683 98.063 108.982.006 224 0c113.737.006 163.156 96.133 160.264 214.963 18.118 45.223 29.912 72.85 40.144 105.778 21.768 70.06 14.716 99.053 9.346 99.704z"], 49944 "quinscape": [489, 512, [], "f459", "M301.9 474.6h-1.3c-87.3 0-158.1-70.8-158.1-158.1s70.8-158.1 158.1-158.1c94.9 0 168.2 83.1 157 176.6 4 5.1 8.2 9.6 11.2 15.3 13.4-30.3 20.3-62.4 20.3-97.7C489.1 117.5 379.6 8 244.5 8 109.5 8 0 117.5 0 252.6s109.5 244.6 244.5 244.6c24.8 0 47.8-3.2 70.4-10.1-5.2-3.5-9-8.2-13.4-12.6l.4.1zm-21.2-69.8c0-54.8 44.4-99.2 99.2-99.2 54.8 0 99.2 44.4 99.2 99.2 0 54.8-44.4 99.2-99.2 99.2-54.8 0-99.2-44.4-99.2-99.2"], 49945 "quora": [448, 512, [], "f2c4", "M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z"], 49946 "r-project": [581, 512, [], "f4f7", "M581 226.6C581 119.1 450.9 32 290.5 32S0 119.1 0 226.6C0 322.4 103.3 402 239.4 418.1V480h99.1v-61.5c24.3-2.7 47.6-7.4 69.4-13.9L448 480h112l-67.4-113.7c54.5-35.4 88.4-84.9 88.4-139.7zm-466.8 14.5c0-73.5 98.9-133 220.8-133s211.9 40.7 211.9 133c0 50.1-26.5 85-70.3 106.4-2.4-1.6-4.7-2.9-6.4-3.7-10.2-5.2-27.8-10.5-27.8-10.5s86.6-6.4 86.6-92.7-90.6-87.9-90.6-87.9h-199V361c-74.1-21.5-125.2-67.1-125.2-119.9zm225.1 38.3v-55.6c57.8 0 87.8-6.8 87.8 27.3 0 36.5-38.2 28.3-87.8 28.3zm-.9 72.5H365c10.8 0 18.9 11.7 24 19.2-16.1 1.9-33 2.8-50.6 2.9v-22.1z"], 49947 "ravelry": [512, 512, [], "f2d9", "M407.4 61.5C331.6 22.1 257.8 31 182.9 66c-11.3 5.2-15.5 10.6-19.9 19-10.3 19.2-16.2 37.4-19.9 52.7-21.2 25.6-36.4 56.1-43.3 89.9-10.6 18-20.9 41.4-23.1 71.4 0 0-.7 7.6-.5 7.9-35.3-4.6-76.2-27-76.2-27 9.1 14.5 61.3 32.3 76.3 37.9 0 0 1.7 98 64.5 131.2-11.3-17.2-13.3-20.2-13.3-20.2S94.8 369 100.4 324.7c.7 0 1.5.2 2.2.2 23.9 87.4 103.2 151.4 196.9 151.4 6.2 0 12.1-.2 18-.7 14 1.5 27.6.5 40.1-3.9 6.9-2.2 13.8-6.4 20.2-10.8 70.2-39.1 100.9-82 123.1-147.7 5.4-16 8.1-35.5 9.8-52.2 8.7-82.3-30.6-161.6-103.3-199.5zM138.8 163.2s-1.2 12.3-.7 19.7c-3.4 2.5-10.1 8.1-18.2 16.7 5.2-12.8 11.3-25.1 18.9-36.4zm-31.2 121.9c4.4-17.2 13.3-39.1 29.8-55.1 0 0 1.7 48 15.8 90.1l-41.4-6.9c-2.2-9.2-3.5-18.5-4.2-28.1zm7.9 42.8c14.8 3.2 34 7.6 43.1 9.1 27.3 76.8 108.3 124.3 108.3 124.3 1 .5 1.7.7 2.7 1-73.1-11.6-132.7-64.7-154.1-134.4zM386 444.1c-14.5 4.7-36.2 8.4-64.7 3.7 0 0-91.1-23.1-127.5-107.8 38.2.7 52.4-.2 78-3.9 39.4-5.7 79-16.2 115-33 11.8-5.4 11.1-19.4 9.6-29.8-2-12.8-11.1-12.1-21.4-4.7 0 0-82 58.6-189.8 53.7-18.7-32-26.8-110.8-26.8-110.8 41.4-35.2 83.2-59.6 168.4-52.4.2-6.4 3-27.1-20.4-28.1 0 0-93.5-11.1-146 33.5 2.5-16.5 5.9-29.3 11.1-39.4 34.2-30.8 79-49.5 128.3-49.5 106.4 0 193 87.1 193 194.5-.2 76-43.8 142-106.8 174z"], 49948 "react": [512, 512, [], "f41b", "M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zm-130 189.1c4.6 8.8 9.3 17.5 14.3 26.1 5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5zm0-50.6c-6.3-14.9-11.6-29.5-16-43.6 14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26zm11.4 25.3c6.6-13.8 13.8-27.3 21.4-40.6 7.6-13.3 15.8-26.2 24.4-38.9 15-1.1 30.3-1.7 45.9-1.7 15.6 0 31 .6 45.9 1.7 8.5 12.6 16.6 25.5 24.3 38.7 7.7 13.2 14.9 26.7 21.7 40.4-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6-15.7 0-30.9-.5-45.6-1.4-8.7-12.7-16.9-25.7-24.6-39-7.7-13.3-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2
4994810.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zM256 210.2c25.3 0 45.8 20.5 45.8 45.8 0 25.3-20.5 45.8-45.8 45.8-25.3 0-45.8-20.5-45.8-45.8 0-25.3 20.5-45.8 45.8-45.8"], 49949 "readme": [576, 512, [], "f4d5", "M528.3 46.5H388.5c-48.1 0-89.9 33.3-100.4 80.3-10.6-47-52.3-80.3-100.4-80.3H48c-26.5 0-48 21.5-48 48v245.8c0 26.5 21.5 48 48 48h89.7c102.2 0 132.7 24.4 147.3 75 .7 2.8 5.2 2.8 6 0 14.7-50.6 45.2-75 147.3-75H528c26.5 0 48-21.5 48-48V94.6c0-26.4-21.3-47.9-47.7-48.1zM242 311.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5V289c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V251zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H78.2c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm259.3 121.7c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.9c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5V228c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5v22.9zm0-60.9c0 1.9-1.5 3.5-3.5 3.5H337.5c-1.9 0-3.5-1.5-3.5-3.5v-22.8c0-1.9 1.5-3.5 3.5-3.5h160.4c1.9 0 3.5 1.5 3.5 3.5V190z"], 49950 "rebel": [512, 512, [], "f1d0", "M256.5 504C117.2 504 9 387.8 13.2 249.9 16 170.7 56.4 97.7 129.7 49.5c.3 0 1.9-.6 1.1.8-5.8 5.5-111.3 129.8-14.1 226.4 49.8 49.5 90 2.5 90 2.5 38.5-50.1-.6-125.9-.6-125.9-10-24.9-45.7-40.1-45.7-40.1l28.8-31.8c24.4 10.5 43.2 38.7 43.2 38.7.8-29.6-21.9-61.4-21.9-61.4L255.1 8l44.3 50.1c-20.5 28.8-21.9 62.6-21.9 62.6 13.8-23 43.5-39.3 43.5-39.3l28.5 31.8c-27.4 8.9-45.4 39.9-45.4 39.9-15.8 28.5-27.1 89.4.6 127.3 32.4 44.6 87.7-2.8 87.7-2.8 102.7-91.9-10.5-225-10.5-225-6.1-5.5.8-2.8.8-2.8 50.1 36.5 114.6 84.4 116.2 204.8C500.9 400.2 399 504 256.5 504z"], 49951 "red-river": [448, 512, [], "f3e3", "M353.2 32H94.8C42.4 32 0 74.4 0 126.8v258.4C0 437.6 42.4 480 94.8 480h258.4c52.4 0 94.8-42.4 94.8-94.8V126.8c0-52.4-42.4-94.8-94.8-94.8zM144.9 200.9v56.3c0 27-21.9 48.9-48.9 48.9V151.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9h-56.3c-12.3-.6-24.6 11.6-24 24zm176.3 72h-56.3c-12.3-.6-24.6 11.6-24 24v56.3c0 27-21.9 48.9-48.9 48.9V247.9c0-13.2 10.7-23.9 23.9-23.9h154.2c0 27-21.9 48.9-48.9 48.9z"], 49952 "reddit": [512, 512, [], "f1a1", "M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"],
49953 "reddit-alien": [512, 512, [], "f281", "M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"], 49954 "reddit-square": [448, 512, [], "f1a2", "M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z"], 49955 "rendact": [496, 512, [], "f3e4", "M248 8C111 8 0 119 0 256s111 248 248 248c18.6 0 36.7-2.1 54.1-5.9-5.6-7.4-10.8-14.4-15.9-21.3-12.4 2.1-25.2 3.3-38.3 3.3C124.3 480 24 379.7 24 256S124.3 32 248 32s224 100.3 224 224c0 71-33 134.2-84.5 175.3-25.9 18.8-39.1 21.4-83.5-44.2-78.7-112.9-48-71.1-73.7-108.3 72.8 8.9 228.5-72 168.6-168.6C314-26.8 15 93.8 59.7 226.4c3.2 9.8 14.4 38.6 45.6 38.6 2 0 2.6-.6 2-1.7-4.4-8.7-20.1-9.8-20.1-37.4 0-40.5 40.5-89.6 100.3-120 66.1-32.3 131.9-30.2 158.2 5.4 27.2 38.3-20.9 119.2-120.4 136.9 7.5-9.4 57-75.2 62.8-84 22.7-34.6 23.6-49 14-59.2-15.5-16.9-29.5-10.3-50.7-11.7-10.8-.9-113.7 181.2-136.4 216.9-5.9 9-21.2 34.1-21.2 50.9 0 21.3 2.8 51.4 20.6 51.4 10.6 0 8-18.7 8-26.6 0-12.9 27.4-49.4 74.8-104.6 20.4 36.1 57.7 114.3 130.2 209.7 98-33.1 168.5-125.8 168.5-235C496 119 385 8 248 8z"], 49956 "renren": [512, 512, [], "f18b", "M214 169.1c0 110.4-61 205.4-147.6 247.4C30 373.2 8 317.7 8 256.6 8 133.9 97.1 32.2 214 12.5v156.6zM255 504c-42.9 0-83.3-11-118.5-30.4C193.7 437.5 239.9 382.9 255 319c15.5 63.9 61.7 118.5 118.8 154.7C338.7 493 298.3 504 255 504zm190.6-87.5C359 374.5 298 279.6 298 169.1V12.5c116.9 19.7 206 121.4 206 244.1 0 61.1-22 116.6-58.4 159.9z"], 49957 "replyd": [448, 512, [], "f3e6", "M320 480H128C57.6 480 0 422.4 0 352V160C0 89.6 57.6 32 128 32h192c70.4 0 128 57.6 128 128v192c0 70.4-57.6 128-128 128zM193.4 273.2c-6.1-2-11.6-3.1-16.4-3.1-7.2 0-13.5 1.9-18.9 5.6-5.4 3.7-9.6 9-12.8 15.8h-1.1l-4.2-18.3h-28v138.9h36.1v-89.7c1.5-5.4 4.4-9.8 8.7-13.2 4.3-3.4 9.8-5.1 16.2-5.1 4.6 0 9.8 1 15.6 3.1l4.8-34zm115.2 103.4c-3.2 2.4-7.7 4.8-13.7 7.1-6 2.3-12.8 3.5-20.4 3.5-12.2 0-21.1-3-26.5-8.9-5.5-5.9-8.5-14.7-9-26.4h83.3c.9-4.8 1.6-9.4 2.1-13.9.5-4.4.7-8.6.7-12.5 0-10.7-1.6-19.7-4.7-26.9-3.2-7.2-7.3-13-12.5-17.2-5.2-4.3-11.1-7.3-17.8-9.2-6.7-1.8-13.5-2.8-20.6-2.8-21.1 0-37.5 6.1-49.2 18.3s-17.5 30.5-17.5 55c0 22.8 5.2 40.7 15.6 53.7 10.4 13.1 26.8 19.6 49.2 19.6 10.7 0 20.9-1.5 30.4-4.6 9.5-3.1 17.1-6.8 22.6-11.2l-12-23.6zm-21.8-70.3c3.8 5.4 5.3 13.1 4.6 23.1h-51.7c.9-9.4 3.7-17 8.2-22.6 4.5-5.6 11.5-8.5 21-8.5 8.2-.1 14.1 2.6 17.9 8zm79.9 2.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.
499571 8.9-6.1 15.4s2 11.7 6.1 15.6zm0 100.5c4.1 3.9 9.4 5.8 16.1 5.8 7 0 12.6-1.9 16.7-5.8s6.1-9.1 6.1-15.6-2-11.6-6.1-15.4c-4.1-3.8-9.6-5.7-16.7-5.7-6.7 0-12 1.9-16.1 5.7-4.1 3.8-6.1 8.9-6.1 15.4 0 6.6 2 11.7 6.1 15.6z"], 49958 "researchgate": [448, 512, [], "f4f8", "M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z"], 49959 "resolving": [496, 512, [], "f3e7", "M281.2 278.2c46-13.3 49.6-23.5 44-43.4L314 195.5c-6.1-20.9-18.4-28.1-71.1-12.8L54.7 236.8l28.6 98.6 197.9-57.2zM248.5 8C131.4 8 33.2 88.7 7.2 197.5l221.9-63.9c34.8-10.2 54.2-11.7 79.3-8.2 36.3 6.1 52.7 25 61.4 55.2l10.7 37.8c8.2 28.1 1 50.6-23.5 73.6-19.4 17.4-31.2 24.5-61.4 33.2L203 351.8l220.4 27.1 9.7 34.2-48.1 13.3-286.8-37.3 23 80.2c36.8 22 80.3 34.7 126.3 34.7 137 0 248.5-111.4 248.5-248.3C497 119.4 385.5 8 248.5 8zM38.3 388.6L0 256.8c0 48.5 14.3 93.4 38.3 131.8z"], 49960 "rev": [410, 512, [], "f5b2", "M270.67 274.89c0 36.16-29.41 65.57-65.56 65.57s-65.57-29.41-65.57-65.57 29.41-65.56 65.57-65.56 65.56 29.4 65.56 65.56zm139.55-5.05h-.13c-1.49-61.55-30.1-116.35-74.32-152.98l-45.38 26.2c43.17 28.03 71.81 76.63 71.81 131.82 0 86.62-70.47 157.09-157.09 157.09S48.02 361.5 48.02 274.88c0-81.86 62.96-149.27 142.99-156.43v39.12l108.76-62.79L191.01 32v38.32C84.31 77.57 0 166.36 0 274.89c0 111.59 89.12 202.29 200.06 204.98v.13h210.16V269.84z"], 49961 "rocketchat": [448, 512, [], "f3e8", "M448 256.2c0-87.2-99.6-153.3-219.8-153.3-18.8 0-37.3 1.6-55.3 4.8-11.1-10.5-24.2-20-38-27.4C61.2 44.2 0 79.4 0 79.4s56.9 47.1 47.6 88.3c-52.3 52.3-52.5 124.1 0 176.6C56.9 385.6 0 432.6 0 432.6s61.2 35.2 134.9-.8c13.8-7.5 26.9-16.9 38-27.4 18 3.2 36.5 4.8 55.3 4.8 120.3-.1 219.8-65.8 219.8-153zm-219.7 124c-23.7 0-46.3-2.8-67.3-7.8-21.3 25.8-68.1 61.7-113.6 50.1 14.8-16 36.7-43.1 32-87.6-27.3-21.4-43.6-48.7-43.6-78.5 0-68.4 86.2-123.9 192.5-123.9S420.8 188 420.8 256.4c0 68.3-86.2 123.8-192.5 123.8zm25.6-123.9c0 14.2-11.5 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.5-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm88.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.1 0 25.6 11.6 25.6 25.8zm-177.9 0c0 14.2-11.4 25.8-25.6 25.8-14.1 0-25.6-11.5-25.6-25.8 0-14.2 11.4-25.8 25.6-25.8 14.2 0 25.6 11.6 25.6 25.8z"], 49962 "rockrms": [496, 512, [], "f3e9", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm157.4 419.5h-90l-112-131.3c-17.9-20.4-3.9-56.1 26.6-56.1h75.3l-84.6-99.3-84.3 98.9h-90L193.5 67.2c14.4-18.4 41.3-17.3 54.5 0l157.7 185.1c19 22.8 2 57.2-27.6 56.1-.6 0-74.2.2-74.2.2l101.5 118.9z"], 49963 "safari": [512, 512, [], "f267", "M236.9 256.8c0-9.1 6.6-17.7 16.3-17.7 8.9 0 17.4 6.4 17.4 16.1 0 9.1-6.4 17.7-16.1 17.7-9 0-17.6-6.7-17.6-16.1zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-26.6 0c0-122.3-99.1-221.4-221.4-221.4S34.6 133.7 34.6 256 133.7 477.4 256 477.4 477.4 378.3 477.4 256zm-72.5 96.6c0 3.6 13 10.2 16.3 12.2-27.4 41.5-69.8 71.4-117.9 83.3l-4.4-18.5c-.3-2.5-1.9-2.8-4.2-2.8-1.9 0-3 2.8-2.8 4.2l4.4 18.8c-13.3 2.8-26.8 4.2-40.4 4.2-36.3 0-72-10.2-103-29.1 1.7-2.8 12.2-18 12.2-20.2 0-1.9-1.7-3.6-3.6-3.6-3.9 0-12.2 16.6-14.7 19.9-41.8-27.7-72-70.6-83.6-119.6l19.1-4.2c2.2-.6 2.8-2.2 2.8-4.2 0-1.9-2.8-3-4.4-2.8L62 294.5c-2.5-12.7-3.9-25.5-3.9-38.5 0-37.1 10.5-73.6 30.2-104.9 2.8 1.7 16.1 10.8 18.3 10.8 1.9 0 3.6-1.4 3.6-3.3 0-3.9-14.7-11.3-18-13.6 28.2-41.2 71.1-70.9 119.8-81.9l4.2 18.5c.6 2.2 2.2 2.8 4.2 2.8s3-2.8 2.8-4.4L219 61.7c12.2-2.2 24.6-3.6 37.1-3.6 37.1 0 73.3 10.5 104.9 30.2-1.9 2.8-10.8 15.8-10.8 18 0 1.9 1.4 3.6 3.3 3.6 3.9 0 11.3-14.4 13.3-17.7 41 27.7 70.3 70 81.7 118.2l-15.5 3.3c-2.5.6-2.8 2.2-2.8 4.4 0 1.9 2.8 3 4.2 2.8l15.8-3.6c2.5 12.7 3.9 25.7 3.9 38.7 0 36.3-10 72-28.8 102.7-2.8-1.4-14.4-9.7-16.6-9.7-2.1 0-3.8 1.7-3.8 3.6zm-33.2-242.2c-13 12.2-134.2 123.7-137.6 129.5l-96.6 160.5c12.7-11.9 134.2-124 137.3-129.3l96.9-160.7z"], 49964 "sass": [640, 512, [], "f41e", "M551.1 291.9c-22.4.1-41.8 5.5-58 13.5-5.9-11.9-12-22.3-13-30.1-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-3.8 11.1-5.3 19.1-2.3 11.7-25.8 53.5-39.1 75.3-4.4-8.5-8.1-16-8.9-22-1.2-9.1-2.5-14.5-1.1-25.3s7.7-26.1 7.6-27.2c-.1-1.1-1.4-6.6-14.3-6.7-12.9-.1-24 2.5-25.3 5.9-1.3 3.4-2.7 11.4-5.3 19.1-2.6 7.7-33.9 77.3-42.1 95.4-4.2 9.2-7.8 16.6-10.4 21.6s-.2.3-.4.9c-2.2 4.3-3.5 6.7-3.5 6.7v.1c-1.7 3.2-3.6 6.1-4.5 6.1-.6 0-1.9-8.4.3-19.9 4.7-24.2 15.8-61.8 15.7-63.1-.1-.7 2.1-7.2-7.3-10.7-9.1-3.3-12.4 2.2-13.2 2.2-.8 0-1.4 2-1.4 2s10.1-42.4-19.4-42.4c-18.4 0-44 20.2-56.6 38.5-7.9 4.3-25 13.6-43 23.5-6.9 3.8-14 7.7-20.7 11.4-.5-.5-.9-1-1.4-1.5-35.8-38.2-101.9-65.2-99.1-116.5 1-18.7 7.5-67.8 127.1-127.4 98-48.8 176.4-35.4 189.9-5.6 19.4 42.5-41.9 121.6-143.7 133-38.8 4.3-59.2-10.7-64.3-16.3-5.3-5.9-6.1-6.2-8.1-5.1-3.3 1.8-1.2 7 0 10.1 3 7.9 15.5 21.9 36.8 28.9 18.7 6.1 64.2 9.5 119.2-11.8C367 196.5 415.1 130.2 401 74.7 386.6 18.3 293.1-.2 204.6 31.2 151.9 49.9 94.9 79.3 53.9 117.6 5.2 163.2-2.6 202.9.6 219.5c11.4 58.9 92.6 97.3 125.1 125.7-1.6.9-3.1 1.7-4.5 2.5-16.3 8.1-78.2 40.5-93.7 74.7-17.5 38.8 2.9 66.6 16.3 70.4 41.8 11.6 84.6-9.3 107.6-43.6s20.2-79.1 9.6-99.5c-.1-.3-.3-.5-.4-.8 4.2-2.5 8.5-5 12.8-7.5 8.3-4.9 16.4-9.4 23.5-13.3-4 10.8-6.9 23.8-8.4 42.6-1.8 22 7.3 50.5 19.1 61.7 5.2 4.9 11.5 5 15.4 5 13.8 0 20-11.4 26.9-25 8.5-16.6 16-35.9 16-35.9s-9.4 52.2 16.3 52.2c9.4 0 18.8-12.1 23-18.3v.1s.2-.4.7-1.2c1-1.5 1.5-2.4 1.5-2.4v-.3c3.8-6.5 12.1-21.4 24.6-46 16.2-31.8 31.7-71.5 31.7-71.5s1.4 9.7 6.2 25.8c2.8 9.5 8.7 19.9 13.4 30-3.8 5.2-6.1 8.2-6.1 8.2s0 .1.1.2c-3 4-6.4 8.3-9.9 12.5-12.8 15.2-28 32.6-30 37.6-2.4 5.9-1.8 10.3 2.8 13.7 3.4 2.6 9.4 3 15.7 2.5 11.5-.8 19.6-3.6 23.5-5.4 6.2-2.2 13.4-5.7 20.2-10.6 12.5-9.2 20.1-22.4 19.4-39.8-.4-9.6-3.5-19.2-7.3-28.2 1.1-1.6 2.3-3.3 3.4-5 19.8-28.9 35.1-60.6 35.1-60.6s1.4 9.7 6.2 25.8c2.4 8.1 7.1 17 11.4 25.7-18.6 15.1-30.1 32.6-34.1 44.1-7.4 21.3-1.6 30.9 9.3 33.1 4.9 1 11.9-1.3 17.1-3.5 6.5-2.2 14.3-5.7 21.6-11.1 12.5-9.2 24.6-22.1 23.8-39.6-.3-7.9-2.5-15.8-5.4-23.4 15.7-6.6 36.1-10.2 62.1-7.2 55.7 6.5 66.6 41.3 64.5 55.8-2.1 14.6-13.8 22.6-17.7 25-3.9 2.4-5.1 3.3-4.8 5.
499641.5 2.6 2.3 2.5 5.6 1.9 4.6-.8 29.2-11.8 30.3-38.7 1.6-34-31.1-71.4-89-71.1zM121.8 436.6c-18.4 20.1-44.2 27.7-55.3 21.3C54.6 451 59.3 421.4 82 400c13.8-13 31.6-25 43.4-32.4 2.7-1.6 6.6-4 11.4-6.9.8-.5 1.2-.7 1.2-.7.9-.6 1.9-1.1 2.9-1.7 8.3 30.4.3 57.2-19.1 78.3zm134.4-91.4c-6.4 15.7-19.9 55.7-28.1 53.6-7-1.8-11.3-32.3-1.4-62.3 5-15.1 15.6-33.1 21.9-40.1 10.1-11.3 21.2-14.9 23.8-10.4 3.5 5.9-12.2 49.4-16.2 59.2zm111 53c-2.7 1.4-5.2 2.3-6.4 1.6-.9-.5 1.1-2.4 1.1-2.4s13.9-14.9 19.4-21.7c3.2-4 6.9-8.7 10.9-13.9 0 .5.1 1 .1 1.6-.1 17.9-17.3 30-25.1 34.8zm85.6-19.5c-2-1.4-1.7-6.1 5-20.7 2.6-5.7 8.6-15.3 19-24.5 1.2 3.8 1.9 7.4 1.9 10.8-.1 22.5-16.2 30.9-25.9 34.4z"], 49965 "schlix": [448, 512, [], "f3ea", "M350.5 157.7l-54.2-46.1 73.4-39 78.3 44.2-97.5 40.9zM192 122.1l45.7-28.2 34.7 34.6-55.4 29-25-35.4zm-65.1 6.6l31.9-22.1L176 135l-36.7 22.5-12.4-28.8zm-23.3 88.2l-8.8-34.8 29.6-18.3 13.1 35.3-33.9 17.8zm-21.2-83.7l23.9-18.1 8.9 24-26.7 18.3-6.1-24.2zM59 206.5l-3.6-28.4 22.3-15.5 6.1 28.7L59 206.5zm-30.6 16.6l20.8-12.8 3.3 33.4-22.9 12-1.2-32.6zM1.4 268l19.2-10.2.4 38.2-21 8.8L1.4 268zm59.1 59.3l-28.3 8.3-1.6-46.8 25.1-10.7 4.8 49.2zM99 263.2l-31.1 13-5.2-40.8L90.1 221l8.9 42.2zM123.2 377l-41.6 5.9-8.1-63.5 35.2-10.8 14.5 68.4zm28.5-139.9l21.2 57.1-46.2 13.6-13.7-54.1 38.7-16.6zm85.7 230.5l-70.9-3.3-24.3-95.8 55.2-8.6 40 107.7zm-84.9-279.7l42.2-22.4 28 45.9-50.8 21.3-19.4-44.8zm41 94.9l61.3-18.7 52.8 86.6-79.8 11.3-34.3-79.2zm51.4-85.6l67.3-28.8 65.5 65.4-88.6 26.2-44.2-62.8z"], 49966 "scribd": [384, 512, [], "f28a", "M42.3 252.7c-16.1-19-24.7-45.9-24.8-79.9 0-100.4 75.2-153.1 167.2-153.1 98.6-1.6 156.8 49 184.3 70.6l-50.5 72.1-37.3-24.6 26.9-38.6c-36.5-24-79.4-36.5-123-35.8-50.7-.8-111.7 27.2-111.7 76.2 0 18.7 11.2 20.7 28.6 15.6 23.3-5.3 41.9.6 55.8 14 26.4 24.3 23.2 67.6-.7 91.9-29.2 29.5-85.2 27.3-114.8-8.4zm317.7 5.9c-15.5-18.8-38.9-29.4-63.2-28.6-38.1-2-71.1 28-70.5 67.2-.7 16.8 6 33 18.4 44.3 14.1 13.9 33 19.7 56.3 14.4 17.4-5.1 28.6-3.1 28.6 15.6 0 4.3-.5 8.5-1.4 12.7-16.7 40.9-59.5 64.4-121.4 64.4-51.9.2-102.4-16.4-144.1-47.3l33.7-39.4-35.6-27.4L0 406.3l15.4 13.8c52.5 46.8 120.4 72.5 190.7 72.2 51.4 0 94.4-10.5 133.6-44.1 57.1-51.4 54.2-149.2 20.3-189.6z"], 49967 "searchengin": [460, 512, [], "f3eb", "M220.6 130.3l-67.2 28.2V43.2L98.7 233.5l54.7-24.2v130.3l67.2-209.3zm-83.2-96.7l-1.3 4.7-15.2 52.9C80.6 106.7 52 145.8 52 191.5c0 52.3 34.3 95.9 83.4 105.5v53.6C57.5 340.1 0 272.4 0 191.6c0-80.5 59.8-147.2 137.4-158zm311.4 447.2c-11.2 11.2-23.1 12.3-28.6 10.5-5.4-1.8-27.1-19.9-60.4-44.4-33.3-24.6-33.6-35.7-43-56.7-9.4-20.9-30.4-42.6-57.5-52.4l-9.7-14.7c-24.7 16.9-53 26.9-81.3 28.7l2.1-6.6 15.9-49.5c46.5-11.9 80.9-54 80.9-104.2 0-54.5-38.4-102.1-96-107.1V32.3C254.4 37.4 320 106.8 320 191.6c0 33.6-11.2 64.7-29 90.4l14.6 9.6c9.8 27.1 31.5 48 52.4 57.4s32.2 9.7 56.8 43c24.6 33.2 42.7 54.9 44.5 60.3s.7 17.3-10.5 28.5zm-9.9-17.9c0-4.4-3.6-8-8-8s-8 3.6-8 8 3.6 8 8 8 8-3.6 8-8z"], 49968 "sellcast": [448, 512, [], "f2da", "M353.4 32H94.7C42.6 32 0 74.6 0 126.6v258.7C0 437.4 42.6 480 94.7 480h258.7c52.1 0 94.7-42.6 94.7-94.6V126.6c0-52-42.6-94.6-94.7-94.6zm-50 316.4c-27.9 48.2-89.9 64.9-138.2 37.2-22.9 39.8-54.9 8.6-42.3-13.2l15.7-27.2c5.9-10.3 19.2-13.9 29.5-7.9 18.6 10.8-.1-.1 18.5 10.7 27.6 15.9 63.4 6.3 79.4-21.3 15.9-27.6 6.3-63.4-21.3-79.4-17.8-10.2-.6-.4-18.6-10.6-24.6-14.2-3.4-51.9 21.6-37.5 18.6 10.8-.1-.1 18.5 10.7 48.4 28 65.1 90.3 37.2 138.5zm21.8-208.8c-17 29.5-16.3 28.8-19 31.5-6.5 6.5-16.3 8.7-26.5 3.6-18.6-10.8.1.1-18.5-10.7-27.6-15.9-63.4-6.3-79.4 21.3s-6.3 63.4 21.3 79.4c0 0 18.5 10.6 18.6 10.6 24.6 14.2 3.4 51.9-21.6 37.5-18.6-10.8.1.1-18.5-10.7-48.2-27.8-64.9-90.1-37.1-138.4 27.9-48.2 89.9-64.9 138.2-37.2l4.8-8.4c14.3-24.9 52-3.3 37.7 21.5z"], 49969 "sellsy": [640, 512, [], "f213", "M539.71 237.308c3.064-12.257 4.29-24.821 4.29-37.384C544 107.382 468.618 32 376.076 32c-77.22 0-144.634 53.012-163.02 127.781-15.322-13.176-34.934-20.53-55.157-20.53-46.271 0-83.962 37.69-83.962 83.961 0 7.354.92 15.015 3.065 22.369-42.9 20.225-70.785 63.738-70.785 111.234C6.216 424.843 61.68 480 129.401 480h381.198c67.72 0 123.184-55.157 123.184-123.184.001-56.384-38.916-106.025-94.073-119.508zM199.88 401.554c0 8.274-7.048 15.321-15.321 15.321H153.61c-8.274 0-15.321-7.048-15.321-15.321V290.626c0-8.273 7.048-15.321 15.321-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v110.928zm89.477 0c0 8.274-7.048 15.321-15.322 15.321h-30.949c-8.274 0-15.321-7.048-15.321-15.321V270.096c0-8.274 7.048-15.321 15.321-15.321h30.949c8.274 0 15.322 7.048 15.322 15.321v131.458zm89.477 0c0 8.274-7.047 15.321-15.321 15.321h-30.949c-8.274 0-15.322-7.048-15.322-15.321V238.84c0-8.274 7.048-15.321 15.322-15.321h30.949c8.274 0 15.321 7.048 15.321 15.321v162.714zm87.027 0c0 8.274-7.048 15.321-15.322 15.321h-28.497c-8.274 0-15.321-7.048-15.321-15.321V176.941c0-8.579 7.047-15.628 15.321-15.628h28.497c8.274 0 15.322 7.048 15.322 15.628v224.613z"], 49970 "servicestack": [496, 512, [], "f3ec", "M88 216c81.7 10.2 273.7 102.3 304 232H0c99.5-8.1 184.5-137 88-232zm32-152c32.3 35.6 47.7 83.9 46.4 133.6C249.3 231.3 373.7 321.3 400 448h96C455.3 231.9 222.8 79.5 120 64z"], 49971 "shirtsinbulk": [448, 512, [], "f214", "M395.208 221.583H406v33.542h-10.792v-33.542zm0-9.625H406v-33.542h-10.792v33.542zm0 86.333H406V264.75h-10.792v33.541zM358.75 135.25h-33.542v10.5h33.542v-10.5zm36.458 206.208H406v-33.542h-10.792v33.542zM311.5 135.25h-33.542v10.5H311.5v-10.5zm-47.25 0H231v10.5h33.25v-10.5zm-47.25 0h-33.25v10.5H217v-10.5zm178.208 33.542H406V135.25h-33.542v10.5h22.75v23.042zm-255.792 259l30.625 13.417 4.375-9.917-30.625-13.417-4.375 9.917zM179.083 445l30.334 13.708 4.374-9.916-30.333-13.417-4.375 9.625zm216.125-60.375H406v-33.542h-10.792v33.542zm-334.833 8.167L91 406.208l4.375-9.624-30.625-13.709-4.375 9.917zm39.666 17.499l30.625 13.417 4.375-9.917-30.625-13.416-4.375 9.916zm132.417 38.501l4.375 9.916L267.459 445l-4.375-9.625-30.626 13.417zm118.417-52.208l4.375 9.624 30.624-13.416-4.374-9.917-30.625 13.709zM311.5 413.791l4.375 9.917 30.625-13.417-4.374-9.916-30.626 13.416zm-39.667 17.501l4.375 9.917 30.625-13.417-4.375-9.917-30.625 13.417zM311.5 46.583h-33.542v10.5H311.5v-10.5zm94.209 0h-33.251v10.5h33.251v-10.5zm-188.709 0h-33.25v10.5H217v-10.5zm141.75 0h-33.542v10.5h33.542v-10.5zm-94.5 0H231v10.5h33.25v-10.5zM448 3.708v406l-226.334 98.584L0 409.708v-406h448zm-29.166 116.958H29.166V390.75l192.792 85.75 196.875-85.75V120.666zm0-87.791H29.166V91.5h389.667V32.875zM75.542 46.583H42.291v10.5h33.251v-10.5zm94.5 0H136.5v10.5h33.542v-10.5zm-47.251 0H89.25v10.5h33.542v-10.5zm7.584 236.542c0-50.167 41.125-91.292 91.292-91.292 50.458 0 91.292 41.125 91.292 91.292 0 50.458-40.833 91.292-91.292 91.292-50.167-.001-91.292-40.834-91.292-91.292zm120.75 18.084c0 13.125-23.917 14.291-32.666 14.291-12.25 0-29.75-2.625-35.875-14.875h-.875L172.666 319c14.876 9.333 29.167 12.25 47.25 12.25 19.542 0 51.042-5.833 51.042-31.209 0-48.125-78.458-16.333-78.458-37.916 0-13.125 20.708-14.875 29.75-14.875 10.791 0 29.166 3.208 35.583 13.124h.875l8.751-16.916c-15.167-6.125-27.417-11.959-44.334-11.959-20.125 0-49.583 6.417-49.583 31.792 0 44.334 77.583 11.959 77.583 37.918zM122.791 135.25H89.25v10.5h33.542v-10.5zm-69.999 10.5h22.75v-10.5H42v33.542h10.792V145.75zm0 32.666H42v33.542h10.792v-33.542zm117.25-43.166H136.5v10.5h33.542v-10.5zm-117.25 86.333H42v33.542h10.792v-33.542zm0 86.334H42v33.542h10.792v-33.542zm0-43.167H42v33.542h10.792V264.75zm0 86.333H42v33.542h10.792v-33.542z"], 49972 "shopware": [495, 512, [], "f5b5", "M395.5 455.27c-42.95 31.79-93.95 48.59-147.48 48.59-137.21 0-248.02-111-248.02-248 0-137.19 111.04-248 248.02-248 61.3 0 120.14 22.55 165.68 63.5 2.62 2.36.58 6.64-2.86 6.18-17.67-2.43-36.75-3.66-56.71-3.66-129.36 0-222.4 53.47-222.4 155.35 0 109.04 92.13 145.88 176.83 178.73 33.64 13.04 65.4 25.36 86.96 41.59
499721.9 1.44 1.89 4.31-.02 5.72zm99.46-222.32c-.08-.94-.55-1.83-1.27-2.44-51.76-42.96-93.62-60.48-144.48-60.48-84.13 0-80.25 52.17-80.25 53.63 0 42.6 52.06 62.01 112.34 84.49 31.07 11.59 63.19 23.57 92.68 39.93 1.88 1.05 4.26.19 5.05-1.82 18.89-48.39 17.94-90.23 15.93-113.31z"], 49973 "simplybuilt": [512, 512, [], "f215", "M481.2 64h-106c-14.5 0-26.6 11.8-26.6 26.3v39.6H163.3V90.3c0-14.5-12-26.3-26.6-26.3h-106C16.1 64 4.3 75.8 4.3 90.3v331.4c0 14.5 11.8 26.3 26.6 26.3h450.4c14.8 0 26.6-11.8 26.6-26.3V90.3c-.2-14.5-12-26.3-26.7-26.3zM149.8 355.8c-36.6 0-66.4-29.7-66.4-66.4 0-36.9 29.7-66.6 66.4-66.6 36.9 0 66.6 29.7 66.6 66.6 0 36.7-29.7 66.4-66.6 66.4zm212.4 0c-36.9 0-66.6-29.7-66.6-66.6 0-36.6 29.7-66.4 66.6-66.4 36.6 0 66.4 29.7 66.4 66.4 0 36.9-29.8 66.6-66.4 66.6z"], 49974 "sistrix": [448, 512, [], "f3ee", "M448 449L301.2 300.2c20-27.9 31.9-62.2 31.9-99.2 0-93.1-74.7-168.9-166.5-168.9C74.7 32 0 107.8 0 200.9s74.7 168.9 166.5 168.9c39.8 0 76.3-14.2 105-37.9l146 148.1 30.5-31zM166.5 330.8c-70.6 0-128.1-58.3-128.1-129.9S95.9 71 166.5 71s128.1 58.3 128.1 129.9-57.4 129.9-128.1 129.9z"], 49975 "sith": [448, 512, [], "f512", "M0 32l69.71 118.75-58.86-11.52 69.84 91.03a146.741 146.741 0 0 0 0 51.45l-69.84 91.03 58.86-11.52L0 480l118.75-69.71-11.52 58.86 91.03-69.84c17.02 3.04 34.47 3.04 51.48 0l91.03 69.84-11.52-58.86L448 480l-69.71-118.78 58.86 11.52-69.84-91.03c3.03-17.01 3.04-34.44 0-51.45l69.84-91.03-58.86 11.52L448 32l-118.75 69.71 11.52-58.9-91.06 69.87c-8.5-1.52-17.1-2.29-25.71-2.29s-17.21.78-25.71 2.29l-91.06-69.87 11.52 58.9L0 32zm224 99.78c31.8 0 63.6 12.12 87.85 36.37 48.5 48.5 48.49 127.21 0 175.7s-127.2 48.46-175.7-.03c-48.5-48.5-48.49-127.21 0-175.7 24.24-24.25 56.05-36.34 87.85-36.34zm0 36.66c-22.42 0-44.83 8.52-61.92 25.61-34.18 34.18-34.19 89.68 0 123.87s89.65 34.18 123.84 0c34.18-34.18 34.19-89.68 0-123.87-17.09-17.09-39.5-25.61-61.92-25.61z"], 49976 "skyatlas": [640, 512, [], "f216", "M640 329.3c0 65.9-52.5 114.4-117.5 114.4-165.9 0-196.6-249.7-359.7-249.7-146.9 0-147.1 212.2 5.6 212.2 42.5 0 90.9-17.8 125.3-42.5 5.6-4.1 16.9-16.3 22.8-16.3s10.9 5 10.9 10.9c0 7.8-13.1 19.1-18.7 24.1-40.9 35.6-100.3 61.2-154.7 61.2-83.4.1-154-59-154-144.9s67.5-149.1 152.8-149.1c185.3 0 222.5 245.9 361.9 245.9 99.9 0 94.8-139.7 3.4-139.7-17.5 0-35 11.6-46.9 11.6-8.4 0-15.9-7.2-15.9-15.6 0-11.6 5.3-23.7 5.3-36.3 0-66.6-50.9-114.7-116.9-114.7-53.1 0-80 36.9-88.8 36.9-6.2 0-11.2-5-11.2-11.2 0-5.6 4.1-10.3 7.8-14.4 25.3-28.8 64.7-43.7 102.8-43.7 79.4 0 139.1 58.4 139.1 137.8 0 6.9-.3 13.7-1.2 20.6 11.9-3.1 24.1-4.7 35.9-4.7 60.7 0 111.9 45.3 111.9 107.2z"], 49977 "skype": [448, 512, [], "f17e", "M424.7 299.8c2.9-14 4.7-28.9 4.7-43.8 0-113.5-91.9-205.3-205.3-205.3-14.9 0-29.7 1.7-43.8 4.7C161.3 40.7 137.7 32 112 32 50.2 32 0 82.2 0 144c0 25.7 8.7 49.3 23.3 68.2-2.9 14-4.7 28.9-4.7 43.8 0 113.5 91.9 205.3 205.3 205.3 14.9 0 29.7-1.7 43.8-4.7 19 14.6 42.6 23.3 68.2 23.3 61.8 0 112-50.2 112-112 .1-25.6-8.6-49.2-23.2-68.1zm-194.6 91.5c-65.6 0-120.5-29.2-120.5-65 0-16 9-30.6 29.5-30.6 31.2 0 34.1 44.9 88.1 44.9 25.7 0 42.3-11.4 42.3-26.3 0-18.7-16-21.6-42-28-62.5-15.4-117.8-22-117.8-87.2 0-59.2 58.6-81.1 109.1-81.1 55.1 0 110.8 21.9 110.8 55.4 0 16.9-11.4 31.8-30.3 31.8-28.3 0-29.2-33.5-75-33.5-25.7 0-42 7-42 22.5 0 19.8 20.8 21.8 69.1 33 41.4 9.3 90.7 26.8 90.7 77.6 0 59.1-57.1 86.5-112 86.5z"], 49978 "slack": [448, 512, [], "f198", "M244.2 217.5l19.3 57.7-59.8 20-19.3-57.7 59.8-20zm41.4 243.7C131.6 507.4 65 471.6 18.8 317.6S8.4 97 162.4 50.8C316.4 4.6 383 40.4 429.2 194.4c46.2 154 10.4 220.6-143.6 266.8zM366.2 265c-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-19.3-57.7 29-9.7c12.2-3.9 18.6-17.2 14.7-29.4-3.9-12.2-17.2-18.6-29.4-14.7l-29 9.7-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-59.8 20.1-10-30.1c-3.9-12.2-17.2-18.6-29.4-14.7-12.2 3.9-18.6 17.2-14.7 29.4l10 30.1-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l19.3 57.7-29 9.7c-12.2 3.9-18.6 17.2-14.7 29.4 3.2 9.3 12.2 15.4 21.5 15.8 4.3.6 7.7-1 36.9-10.7l10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 59.8-20.1 10 30.1c3.7 10.8 15.8 18.6 29.4 14.7 12.2-3.9 18.6-17.2 14.7-29.4l-10-30.1 29-9.7c12.2-4.2 18.6-17.5 14.7-29.6z"], 49979 "slack-hash": [448, 512, [], "f3ef", "M446.2 270.4c-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-30.3-90 45.4-15.1c19.1-6.2 29.1-26.8 23-45.9-6.2-19-26.9-29.1-46-22.9l-45.4 15.1-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-93.4 31.2-15.7-47c-6.2-19-26.9-29.1-46-22.9-19.1 6.2-29.1 26.8-23 45.9l15.7 47-45.3 15c-19.1 6.2-29.1 26.8-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l30.3 90L78 354.8c-19 6.2-29.1 26.9-23 45.9 5 14.5 19.1 24 33.6 24.6 6.8 1 12-1.6 57.7-16.8l15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 93.6-31.3 15.7 47c5.9 16.9 24.7 29 46 22.9 19.1-6.2 29.1-26.8 23-45.9l-15.7-47 45.4-15.1c19-6 29.1-26.7 22.9-45.7zm-254.1 47.2l-30.3-90.2 93.5-31.3 30.3 90.2-93.5 31.3z"], 49980 "slideshare": [512, 512, [], "f1e7", "M249.429 211.436c0 31.716-27.715 57.717-61.717 57.717-34.001 0-61.716-26.001-61.716-57.717 0-32.001 27.715-57.716 61.716-57.716 34.001 0 61.717 25.715 61.717 57.716zm254.294 50.002c-18.286 22.573-53.144 50.288-106.289 72.003C453.722 525.163 260 555.735 263.143 457.446c0 1.714-.286-52.859-.286-93.432-4.285-.858-8.571-2-13.714-3.143 0 40.858-.286 98.289-.286 96.575C252 555.735 58.278 525.163 114.566 333.441c-53.145-21.715-88.003-49.43-106.29-72.003-9.143-13.714.858-28.287 16.001-17.715 2 1.428 4.285 2.857 6.285 4.285V49.716C30.563 22.287 51.135 0 76.565 0h359.157c25.429 0 46.002 22.287 46.002 49.716v198.293l6-4.285c15.143-10.573 25.143 4 15.999 17.714zm-46.572-189.15c0-32.858-10.572-45.716-40.859-45.716H98.566c-31.716 0-40.573 10.858-40.573 45.716v192.293c67.717 35.43 125.72 29.144 157.435 28.001 13.429-.286 22.001 2.286 27.144 7.715 1.689 1.687 10.023 9.446 20.287 17.143 1.143-15.715 10.001-25.715 33.716-24.858 32.287 1.428 91.718 7.715 160.577-29.716V72.288zM331.146 153.72c-34.002 0-61.716 25.715-61.716 57.716 0 31.716 27.715 57.717 61.716 57.717 34.287 0 61.716-26.001 61.716-57.717 0-32.001-27.429-57.716-61.716-57.716z"], 49981 "snapchat": [496, 512, [], "f2ab", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm169.5 338.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C183.1 100 230.7 96 244.7 96c.6 0 6.1-.1 6.7-.
499811 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"], 49982 "snapchat-ghost": [512, 512, [], "f2ac", "M510.846 392.673c-5.211 12.157-27.239 21.089-67.36 27.318-2.064 2.786-3.775 14.686-6.507 23.956-1.625 5.566-5.623 8.869-12.128 8.869l-.297-.005c-9.395 0-19.203-4.323-38.852-4.323-26.521 0-35.662 6.043-56.254 20.588-21.832 15.438-42.771 28.764-74.027 27.399-31.646 2.334-58.025-16.908-72.871-27.404-20.714-14.643-29.828-20.582-56.241-20.582-18.864 0-30.736 4.72-38.852 4.72-8.073 0-11.213-4.922-12.422-9.04-2.703-9.189-4.404-21.263-6.523-24.13-20.679-3.209-67.31-11.344-68.498-32.15a10.627 10.627 0 0 1 8.877-11.069c69.583-11.455 100.924-82.901 102.227-85.934.074-.176.155-.344.237-.515 3.713-7.537 4.544-13.849 2.463-18.753-5.05-11.896-26.872-16.164-36.053-19.796-23.715-9.366-27.015-20.128-25.612-27.504 2.437-12.836 21.725-20.735 33.002-15.453 8.919 4.181 16.843 6.297 23.547 6.297 5.022 0 8.212-1.204 9.96-2.171-2.043-35.936-7.101-87.29 5.687-115.969C158.122 21.304 229.705 15.42 250.826 15.42c.944 0 9.141-.089 10.11-.089 52.148 0 102.254 26.78 126.723 81.643 12.777 28.65 7.749 79.792 5.695 116.009 1.582.872 4.357 1.942 8.599 2.139 6.397-.286 13.815-2.389 22.069-6.257 6.085-2.846 14.406-2.461 20.48.058l.029.01c9.476 3.385 15.439 10.215 15.589 17.87.184 9.747-8.522 18.165-25.878 25.018-2.118.835-4.694 1.655-7.434 2.525-9.797 3.106-24.6 7.805-28.616 17.271-2.079 4.904-1.256 11.211 2.46 18.748.087.168.166.342.239.515 1.301 3.03 32.615 74.46 102.23 85.934 6.427 1.058 11.163 7.877 7.725 15.859z"], 49983 "snapchat-square": [448, 512, [], "f2ad", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6.5 314.9c-3.5 8.1-18.1 14-44.8 18.2-1.4 1.9-2.5 9.8-4.3 15.9-1.1 3.7-3.7 5.9-8.1 5.9h-.2c-6.2 0-12.8-2.9-25.8-2.9-17.6 0-23.7 4-37.4 13.7-14.5 10.3-28.4 19.1-49.2 18.2-21 1.6-38.6-11.2-48.5-18.2-13.8-9.7-19.8-13.7-37.4-13.7-12.5 0-20.4 3.1-25.8 3.1-5.4 0-7.5-3.3-8.3-6-1.8-6.1-2.9-14.1-4.3-16-13.8-2.1-44.8-7.5-45.5-21.4-.2-3.6 2.3-6.8 5.9-7.4 46.3-7.6 67.1-55.1 68-57.1 0-.1.1-.2.2-.3 2.5-5 3-9.2 1.6-12.5-3.4-7.9-17.9-10.7-24-13.2-15.8-6.2-18-13.4-17-18.3 1.6-8.5 14.4-13.8 21.9-10.3 5.9 2.8 11.2 4.2 15.7 4.2 3.3 0 5.5-.8 6.6-1.4-1.4-23.9-4.7-58 3.8-77.1C159.1 100 206.7 96 220.7 96c.6 0 6.1-.1 6.7-.1 34.7 0 68 17.8 84.3 54.3 8.5 19.1 5.2 53.1 3.8 77.1 1.1.6 2.9 1.3 5.7 1.4 4.3-.2 9.2-1.6 14.7-4.2 4-1.9 9.6-1.6 13.6 0 6.3 2.3 10.3 6.8 10.4 11.9.1 6.5-5.7 12.1-17.2 16.6-1.4.6-3.1 1.1-4.9 1.7-6.5 2.1-16.4 5.2-19 11.5-1.4 3.3-.8 7.5 1.6 12.5.1.1.1.2.2.3.9 2 21.7 49.5 68 57.1 4 1 7.1 5.5 4.9 10.8z"], 49984 "soundcloud": [640, 512, [], "f1be", "M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z"], 49985 "speakap": [448, 512, [], "f3f3", "M352 32H96C43.2 32 0 75.2 0 128v256c0 52.8 43.2 96 96 96h256c52.8 0 96-43.2 96-96V128c0-52.8-43.2-96-96-96zM221 382.9c-39.6 0-81.9-17.8-81.9-53.7V302H179v17.8c0 15.1 19.5 24.5 41.9 24.5 24.2 0 41.3-10.4 41.3-29.5 0-23.8-27.2-31.9-54.7-42.6-31.9-12.4-63.1-26.2-63.1-69.1 0-48 38.6-66.4 79.9-66.4 37.6 0 75.5 14.1 75.5 41.9v31.2h-39.9v-16.1c0-12.1-17.8-18.5-35.6-18.5-19.5 0-35.6 8.1-35.6 26.2 0 22.1 22.5 29.2 47 38.9 35.9 12.4 71.1 27.2 71.1 71.5.1 48.6-40.8 71.1-85.8 71.1z"], 49986 "spotify": [496, 512, [], "f1bc", "M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8zm100.7 364.9c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4zm26.9-65.6c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm31-76.2c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3z"], 49987 "squarespace": [512, 512, [], "f5be", "M186.12 343.34c-9.65 9.65-9.65 25.29 0 34.94 9.65 9.65 25.29 9.65 34.94 0L378.24 221.1c19.29-19.29 50.57-19.29 69.86 0s19.29 50.57 0 69.86L293.95 445.1c19.27 19.29 50.53 19.31 69.82.04l.04-.04 119.25-119.24c38.59-38.59 38.59-101.14 0-139.72-38.59-38.59-101.15-38.59-139.72 0l-157.22 157.2zm244.53-104.8c-9.65-9.65-25.29-9.65-34.93 0l-157.2 157.18c-19.27 19.29-50.53 19.31-69.82.05l-.05-.05c-9.64-9.64-25.27-9.65-34.92-.01l-.01.01c-9.65 9.64-9.66 25.28-.02 34.93l.02.02c38.58 38.57 101.14 38.57 139.72 0l157.2-157.2c9.65-9.65 9.65-25.29.01-34.93zm-261.99 87.33l157.18-157.18c9.64-9.65 9.64-25.29 0-34.94-9.64-9.64-25.27-9.64-34.91 0L133.72 290.93c-19.28 19.29-50.56 19.3-69.85.01l-.01-.01c-19.29-19.28-19.31-50.54-.03-69.84l.03-.03L218.03 66.89c-19.28-19.29-50.55-19.3-69.85-.02l-.02.02L28.93 186.14c-38.58 38.59-38.58 101.14 0 139.72 38.6 38.59 101.13 38.59 139.73.01zm-87.33-52.4c9.64 9.64 25.27 9.64 34.91 0l157.21-157.19c19.28-19.29 50.55-19.3 69.84-.02l.02.02c9.65 9.65 25.29 9.65 34.93 0 9.65-9.65 9.65-25.29 0-34.93-38.59-38.59-101.13-38.59-139.72 0L81.33 238.54c-9.65 9.64-9.65 25.28-.01 34.93h.01z"], 49988 "stack-exchange": [448, 512, [], "f18d", "M17.7 332.3h412.7v22c0 37.7-29.3 68-65.3 68h-19L259.3 512v-89.7H83c-36 0-65.3-30.3-65.3-68v-22zm0-23.6h412.7v-85H17.7v85zm0-109.4h412.7v-85H17.7v85zM365 0H83C47 0 17.7 30.3 17.7 67.7V90h412.7V67.7C430.3 30.3 401 0 365 0z"], 49989 "stack-overflow": [384, 512, [], "f16c", "M293.7 300l-181.2-84.5 16.7-36.5 181.3 84.7-16.8 36.3zm48-76L188.2 95.7l-25.5 30.8 153.5 128.3 25.5-30.8zm39.6-31.7L262 32l-32 24 119.3 160.3 32-24zM290.7 311L95 269.7 86.8 309l195.7 41 8.2-39zm31.6 129H42.7V320h-40v160h359.5V320h-40v120zm-39.8-80h-200v39.7h200V360z"], 49990 "staylinked": [440, 512, [], "f3f5", "M201.6 127.4c4.1-3.2 10.3-3 13.8.5l170 167.3-2.7-2.7 44.3 41.3c3.7 3.5 3.3 9-.7 12.2l-198 163.9c-9.9 7.6-17.3.8-17.3.8L2.3 314.6c-3.5-3.5-3-9 1.2-12.2l45.8-34.9c4.2-3.2 10.4-3 13.9.5l151.9 147.5c3.7 3.5 10 3.7 14.2.4l93.2-74c4.1-3.2 4.5-8.7.9-12.2l-84-81.3c-3.6-3.5-9.9-3.7-14-.5l-.1.1c-4.1 3.2-10.4 3-14-.5l-68.1-64.3c-3.5-3.5-3.1-9 1.1-12.2l57.3-43.6m14.8 257.3c3.7 3.5 10.1 3.7 14.3.4l50.2-38.8-.3-.3 7.7-6c4.2-3.2 4.6-8.7.9-12.2l-57.1-54.4c-3.6-3.5-10-3.7-14.2-.5l-.1.1c-4.2 3.2-10.5 3.1-14.2-.4L109 180.8c-3.6-3.5-3.1-8.9 1.1-12.2l92.2-71.5c4.1-3.2 10.3-3 13.9.5l160.4 159c3.7 3.5 10 3.7 14.1.5l45.8-35.8c4.1-3.2 4.4-8.7.7-12.2L226.7 2.5c-1.5-1.2-8-5.5-16.3 1.1L3.6 165.7c-4.2 3.2-4.8 8.7-1.2 12.2l42.3 41.7"], 49991 "steam": [496, 512, [], "f1b6", "M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z"], 49992 "steam-square": [448, 512, [], "f1b7", "M185.2 356.5c7.7-18.5-1-39.7-19.6-47.4l-29.5-12.2c11.4-4.3 24.3-4.5 36.4.5 12.2 5.1 21.6 14.6 26.7 26.7 5 12.2 5 25.6-.1 37.7-10.5 25.1-39.4 37-64.6 26.5-11.6-4.8-20.4-13.6-25.4-24.2l28.5 11.8c18.6 7.8 39.9-.9 47.6-19.4zM400 32H48C21.5 32 0 53.5 0 80v160.7l116.6 48.1c12-8.2 26.2-12.1 40.7-11.3l55.4-80.2v-1.1c0-48.2 39.3-87.5 87.6-87.5s87.6 39.3 87.6 87.5c0 49.2-40.9 88.7-89.6 87.5l-79 56.3c1.6 38.5-29.1 68.8-65.7 68.8-31.8 0-58.5-22.7-64.5-52.7L0 319.2V432c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-99.7 222.5c-32.2 0-58.4-26.1-58.4-58.3s26.2-58.3 58.4-58.3 58.4 26.2 58.4 58.3-26.2 58.3-58.4 58.3zm.1-14.6c24.2 0 43.9-19.6 43.9-43.8 0-24.2-19.6-43.8-43.9-43.8-24.2 0-43.9 19.6-43.9 43.8 0 24.2 19.7 43.8 43.9 43.8z"], 49993 "steam-symbol": [448, 512, [], "f3f6", "M395.5 177.5c0 33.8-27.5 61-61 61-33.8 0-61-27.3-61-61s27.3-61 61-61c33.5 0 61 27.2 61 61zm52.5.2c0 63-51 113.8-113.7 113.8L225 371.3c-4 43-40.5 76.8-84.5 76.8-40.5 0-74.7-28.8-83-67L0 358V250.7L97.2 290c15.1-9.2 32.2-13.3 52-11.5l71-101.7c.5-62.3 51.5-112.8 114-112.8C397 64 448 115 448 177.7zM203 363c0-34.7-27.8-62.5-62.5-62.5-4.5 0-9 .5-13.5 1.5l26 10.5c25.5 10.2 38 39 27.7 64.5-10.2 25.5-39.2 38-64.7 27.5-10.2-4-20.5-8.3-30.7-12.2 10.5 19.7 31.2 33.2 55.2 33.2 34.7 0 62.5-27.8 62.5-62.5zm207.5-185.3c0-42-34.3-76.2-76.2-76.2-42.3 0-76.5 34.2-76.5 76.2 0 42.2 34.3 76.2 76.5 76.2 41.9.1 76.2-33.9 76.2-76.2z"], 49994 "sticker-mule": [576, 512, [], "f3f7", "M353.1 509.8c-5.9 2.9-32.1 3.2-36.5-.5-4.1-3-2.2-11.9-1.5-15 2.2-15-2.5-7.9-9.8-11.5-3.1-1.5-4.1-5.5-4.6-10-.5-1.5-1-2.5-1.5-3.5-1.7-10.7 6.8-33.6 8.2-43.4 4.9-23.7-.7-37.2 1.5-46.9 3.7-16.2 4.1-3.5 4.1-29.9-1.4-25.9 3.3-36.9.5-38.9-14.8 0-64.3 10.7-112.2 2-46.1-8.9-59.4-29-65.4-30.9-10.3-4.5-23.2.5-27.3 7-.1.1-35 70.6-39.6 87.8-6.2 20.5-.5 47.4 4.1 66.8 0 .1 4.5 14.6 10.3 19.5 2.1 1.5 5.1 2.5 7.2 4.5 2.8 2.7 9.4 15.2 9.8 16 2.6 4.5 3.6 8-1.5 10.5-3.6 2-9.3 2.5-14.4 2.5-2.6.5-1.5 3.5-3.1 5-2.9 2.8-20.7 6.1-29.9 2.5-2.6-1-5.7-3-6.2-5-1.5-4 2.1-9-1-12.5-4.5-2.9-13.1-2-17-12-2.2-5.4-2.6-7.6-2.6-49.4 0-9.7-5.9-38.7-8.2-46.9-1.5-5.5-1.5-11.5 0-16 .3-.9 4.1-4.6 4.1-13-1-1.5-4.6-.5-5.1-1.5-10.4-80.6-5.9-79-7.7-98.3-1.5-16-10.9-43.9-6.7-64.3.5-2.4 3.4-21 24.2-38.9 31-26.7 48.4-38.3 159-11.5 1.1.4 66.3 21.1 110.7-9 15.5-11.3 28.8-11.3 35.5-16 .1-.1 61.7-52.1 87-65.3 47.2-29.4 69.9-16.7 75.1-18 4.7-1 13.4-25.8 17-25.8 5.5 0 1.6 20.2 3.6 25.9.5 2 3.6 5 6.2 5 2.3 0 1.7-.8 10.3-5 8.4-5.4 14.9-17.6 20.6-17 11.7 1.6-19 41.6-19 46.9 0 2 .2.8 4.6 9.5 2.6 5.5 4.6 13.5 6.2 20 8.3 29.7 5.7 14.6 13.4 36.9 20.2 50.1 20.6 45.2 20.6 52.9 0 7.5-4.1 11-7.2 16.5-1.5 3-4.6 7.5-7.2 8-2.7.7 7-1.5-13.4 2.5-
499947.2 1-13.4-4.5-14.9-9.5-1.6-4.7 2.8-10.1-11.8-22.9-10.3-10-21.1-11.3-31.9-17-9.8-5.7-11.9 1-18 8-18 22.9-34 46.9-52 69.8-11.8 15-24.2 30.4-33.5 47.4-3.9 6.8-9.5 28.1-10.3 29.9-6.2 17.7-5.5 25.8-16.5 68.3-3.1 10-5.7 21.4-8.7 32.4-2.2 6.8-7.4 49.3-.5 59.4 2.1 3.5 8.7 4.5 11.3 8 .1.1 9.6 18.2 9.3 20 0 6.1-9.4 5.6-11.3 6.5-4.8 2.9-3.8 5.9-6.4 7.4"], 49995 "strava": [369, 512, [], "f428", "M301.6 292l-43.9 88.2-44.6-88.2h-67.6l112.2 220 111.5-220h-67.6zM151.4 0L0 292h89.2l62.2-116.1L213.1 292h88.5L151.4 0z"], 49996 "stripe": [640, 512, [], "f429", "M640 261.6c0-45.5-22-81.4-64.2-81.4s-67.9 35.9-67.9 81.1c0 53.5 30.3 78.2 73.5 78.2 21.2 0 37.1-4.8 49.2-11.5v-33.4c-12.1 6.1-26 9.8-43.6 9.8-17.3 0-32.5-6.1-34.5-26.9h86.9c.2-2.3.6-11.6.6-15.9m-87.9-16.8c0-20 12.3-28.4 23.4-28.4 10.9 0 22.5 8.4 22.5 28.4h-45.9zm-112.9-64.6c-17.4 0-28.6 8.2-34.8 13.9l-2.3-11H363v204.8l44.4-9.4.1-50.2c6.4 4.7 15.9 11.2 31.4 11.2 31.8 0 60.8-23.2 60.8-79.6.1-51.6-29.3-79.7-60.5-79.7m-10.6 122.5c-10.4 0-16.6-3.8-20.9-8.4l-.3-66c4.6-5.1 11-8.8 21.2-8.8 16.2 0 27.4 18.2 27.4 41.4.1 23.9-10.9 41.8-27.4 41.8M346.4 124v36.2l-44.6 9.5v-36.2l44.6-9.5m-44.5 59.2h44.6v153.2h-44.6V183.2zm-47.8 13.1c10.4-19.1 31.1-15.2 37.1-13.1V224c-5.7-1.8-23.4-4.5-33.9 9.3v103.1H213V183.2h38.4l2.7 13.1m-89-13.1h33.7V221h-33.7v63.2c0 26.2 28 18 33.7 15.7v33.8c-5.9 3.2-16.6 5.9-31.2 5.9-26.3 0-46.1-17-46.1-43.3l.2-142.4 43.3-9.2.1 38.5zM44.9 228.3c0 20 67.9 10.5 67.9 63.4 0 32-25.4 47.8-62.3 47.8-15.3 0-32-3-48.5-10.1v-40c14.9 8.1 33.9 14.2 48.6 14.2 9.9 0 17-2.7 17-10.9 0-21.2-67.5-13.2-67.5-62.4 0-31.4 24-50.2 60-50.2 14.7 0 29.4 2.3 44.1 8.1V230c-13.5-7.3-30.7-11.4-44.2-11.4-9.3.1-15.1 2.8-15.1 9.7"], 49997 "stripe-s": [362, 512, [], "f42a", "M144.3 154.6c0-22.3 18.6-30.9 48.4-30.9 43.4 0 98.5 13.3 141.9 36.7V26.1C287.3 7.2 240.1 0 192.8 0 77.1 0 0 60.4 0 161.4c0 157.9 216.8 132.3 216.8 200.4 0 26.4-22.9 34.9-54.7 34.9-47.2 0-108.2-19.5-156.1-45.5v128.5c53 22.8 106.8 32.4 156 32.4 118.6 0 200.3-51 200.3-153.6 0-170.2-218-139.7-218-203.9"], 49998 "studiovinari": [512, 512, [], "f3f8", "M480.3 187.7l4.2 28v28l-25.1 44.1-39.8 78.4-56.1 67.5-79.1 37.8-17.7 24.5-7.7 12-9.6 4s17.3-63.6 19.4-63.6c2.1 0 20.3.7 20.3.7l66.7-38.6-92.5 26.1-55.9 36.8-22.8 28-6.6 1.4 20.8-73.6 6.9-5.5 20.7 12.9 88.3-45.2 56.8-51.5 14.8-68.4-125.4 23.3 15.2-18.2-173.4-53.3 81.9-10.5-166-122.9L133.5 108 32.2 0l252.9 126.6-31.5-38L378 163 234.7 64l18.7 38.4-49.6-18.1L158.3 0l194.6 122L310 66.2l108 96.4 12-8.9-21-16.4 4.2-37.8L451 89.1l29.2 24.7 11.5 4.2-7 6.2 8.5 12-13.1 7.4-10.3 20.2 10.5 23.9z"], 49999 "stumbleupon": [512, 512, [], "f1a4", "M502.9 266v69.7c0 62.1-50.3 112.4-112.4 112.4-61.8 0-112.4-49.8-112.4-111.3v-70.2l34.3 16 51.1-15.2V338c0 14.7 12 26.5 26.7 26.5S417 352.7 417 338v-72h85.9zm-224.7-58.2l34.3 16 51.1-15.2V173c0-60.5-51.1-109-112.1-109-60.8 0-112.1 48.2-112.1 108.2v162.4c0 14.9-12 26.7-26.7 26.7S86 349.5 86 334.6V266H0v69.7C0 397.7 50.3 448 112.4 448c61.6 0 112.4-49.5 112.4-110.8V176.9c0-14.7 12-26.7 26.7-26.7s26.7 12 26.7 26.7v30.9z"], 50000 "stumbleupon-circle": [496, 512, [], "f1a3", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 177.5c-9.8 0-17.8 8-17.8 17.8v106.9c0 40.9-33.9 73.9-74.9 73.9-41.4 0-74.9-33.5-74.9-74.9v-46.5h57.3v45.8c0 10 8 17.8 17.8 17.8s17.8-7.9 17.8-17.8V200.1c0-40 34.2-72.1 74.7-72.1 40.7 0 74.7 32.3 74.7 72.6v23.7l-34.1 10.1-22.9-10.7v-20.6c.1-9.6-7.9-17.6-17.7-17.6zm167.6 123.6c0 41.4-33.5 74.9-74.9 74.9-41.2 0-74.9-33.2-74.9-74.2V263l22.9 10.7 34.1-10.1v47.1c0 9.8 8 17.6 17.8 17.6s17.8-7.9 17.8-17.6v-48h57.3c-.1 45.9-.1 46.4-.1 46.4z"], 50001 "superpowers": [448, 512, [], "f2dd", "M448 32c-83.3 11-166.8 22-250 33-92 12.5-163.3 86.7-169 180-3.3 55.5 18 109.5 57.8 148.2L0 480c83.3-11 166.5-22 249.8-33 91.8-12.5 163.3-86.8 168.7-179.8 3.5-55.5-18-109.5-57.7-148.2L448 32zm-79.7 232.3c-4.2 79.5-74 139.2-152.8 134.5-79.5-4.7-140.7-71-136.3-151 4.5-79.2 74.3-139.3 153-134.5 79.3 4.7 140.5 71 136.1 151z"], 50002 "supple": [640, 512, [], "f3f9", "M640 262.5c0 64.1-109 116.1-243.5 116.1-24.8 0-48.6-1.8-71.1-5 7.7.4 15.5.6 23.4.6 134.5 0 243.5-56.9 243.5-127.1 0-29.4-19.1-56.4-51.2-78 60 21.1 98.9 55.1 98.9 93.4zM47.7 227.9c-.1-70.2 108.8-127.3 243.3-127.6 7.9 0 15.6.2 23.3.5-22.5-3.2-46.3-4.9-71-4.9C108.8 96.3-.1 148.5 0 212.6c.1 38.3 39.1 72.3 99.3 93.3-32.3-21.5-51.5-48.6-51.6-78zm60.2 39.9s10.5 13.2 29.3 13.2c17.9 0 28.4-11.5 28.4-25.1 0-28-40.2-25.1-40.2-39.7 0-5.4 5.3-9.1 12.5-9.1 5.7 0 11.3 2.6 11.3 6.6v3.9h14.2v-7.9c0-12.1-15.4-16.8-25.4-16.8-16.5 0-28.5 10.2-28.5 24.1 0 26.6 40.2 25.4 40.2 39.9 0 6.6-5.8 10.1-12.3 10.1-11.9 0-20.7-10.1-20.7-10.1l-8.8 10.9zm120.8-73.6v54.4c0 11.3-7.1 17.8-17.8 17.8-10.7 0-17.8-6.5-17.8-17.7v-54.5h-15.8v55c0 18.9 13.4 31.9 33.7 31.9 20.1 0 33.4-13 33.4-31.9v-55h-15.7zm34.4 85.4h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.8-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5.1 14.7-14 14.7h-12.6zm57 43h15.8v-29.5h15.5c16 0 27.2-11.5 27.2-28.1s-11.2-27.8-27.2-27.8h-39.1v13.4h7.8v72zm15.7-43v-29.1h12.9c8.7 0 13.7 5.7 13.7 14.4 0 8.9-5 14.7-14 14.7h-12.6zm57.1 34.8c0 5.8 2.4 8.2 8.2 8.2h37.6c5.8 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-18.6c-1.7 0-2.6-1-2.6-2.6v-61.2c0-5.7-2.4-8.2-8.2-8.2H401v13.4h5.2c1.7 0 2.6 1 2.6 2.6v61.2zm63.4 0c0 5.8 2.4 8.2 8.2 8.2H519c5.7 0 8.2-2.4 8.2-8.2v-13h-14.3v5.2c0 1.7-1 2.6-2.6 2.6h-19.7c-1.7 0-2.6-1-2.6-2.6v-20.3h27.7v-13.4H488v-22.4h19.2c1.7 0 2.6 1 2.6 2.6v5.2H524v-13c0-5.7-2.5-8.2-8.2-8.2h-51.6v13.4h7.8v63.9zm58.9-76v5.9h1.
500026v-5.9h2.7v-1.2h-7v1.2h2.7zm5.7-1.2v7.1h1.5v-5.7l2.3 5.7h1.3l2.3-5.7v5.7h1.5v-7.1h-2.3l-2.1 5.1-2.1-5.1h-2.4z"], 50003 "teamspeak": [511, 512, [], "f4f9", "M.82 237.82c2.36-15.52 10.69-27.04 24.88-34.03 3.5-1.85 5.65-3.5 6.37-7.81 6.17-33.41 19.53-63.94 39.37-91.59 2.36-3.19 4.01-5.35 1.03-9.35-3.7-5.35-1.03-10.18 2.98-14.49 28.06-31.87 61.88-55.1 101.98-67.44 95.81-29.4 180.1-9.35 252.37 60.45 6.68 6.37 15.52 12.85 6.99 24.36-1.34 1.85 1.03 3.5 2.16 5.04 20.66 28.06 34.23 59.42 40.4 93.65.82 3.7 2.98 5.04 5.86 6.37 17.37 8.84 25.7 23.34 26.01 42.25 0 17.17 1.85 34.54-1.03 51.71-4.01 24.67-29.19 41.74-53.25 36.7-7.2-1.64-9.35-7.2-9.35-14.19 0-28.06.82-56.44 0-84.6-1.85-75.76-36.18-132.81-102.28-169.41C234.28 4.98 92.11 72.42 67.54 196.91c-6.06 30.42-1.74 48.27-3.7 125.82-.31 7.2-4.32 11.2-12.03 11.51C20.97 335.58 0 316.05 0 285.21v-20.87m221.74 106.81c11.82-4.32 20.05-11.82 22.51-24.36 2.36-12.34-12.03-30.02-32.38-48.73-20.87-19.22-48.22-39.06-63.43-46.57-21.69-12.03-41.74-1.85-46.26 22.72-5.04 26.21 0 51.4 14.49 73.91 10.18 15.52 25.39 22.72 43.38 24.05 11.62.62 52.54 2.16 61.69-1.02m129.83 5.55c36.5 2.81 59.33-28.55 58.39-60.45-2.14-45.17-66.17-16.48-87.79-8.02-73.16 28.14-45.05 54.92-22.2 60.75m149.26-1.33c-2.98-2.36-7.2-1.03-8.33 2.36-8.02 25.39-44.72 112.46-172.08 121.51-149.67 10.49 80.29 43.59 145.36-6.37 22.72-17.37 47.6-35.05 46.57-85.43-.32-10.07-4.84-26.72-11.52-32.07"], 50004 "telegram": [496, 512, [], "f2c6", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z"], 50005 "telegram-plane": [448, 512, [], "f3fe", "M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"], 50006 "tencent-weibo": [384, 512, [], "f1d5", "M72.3 495.8c1.4 19.9-27.6 22.2-29.7 2.9C31 368.8 73.7 259.2 144 185.5c-15.6-34 9.2-77.1 50.6-77.1 30.3 0 55.1 24.6 55.1 55.1 0 44-49.5 70.8-86.9 45.1-65.7 71.3-101.4 169.8-90.5 287.2zM192 .1C66.1.1-12.3 134.3 43.7 242.4 52.4 259.8 79 246.9 70 229 23.7 136.4 91 29.8 192 29.8c75.4 0 136.9 61.4 136.9 136.9 0 90.8-86.9 153.9-167.7 133.1-19.1-4.1-25.6 24.4-6.6 29.1 110.7 23.2 204-60 204-162.3C358.6 74.7 284 .1 192 .1z"], 50007 "themeco": [441, 512, [], "f5c6", "M199.74 12.29c9.74-5.64 25.59-5.73 35.39-.21l188.13 105.95c9.81 5.52 17.76 19.14 17.76 30.38v213.87c0 11.26-7.93 24.89-17.71 30.46L235.09 499.88c-9.78 5.57-25.58 5.48-35.29-.21L17.58 392.95C7.87 387.26 0 373.52 0 362.27V148.41c0-11.26 7.9-24.96 17.63-30.59L199.74 12.29zM123.54 209c-15.69 0-31.39.14-47.08.14v99.87h18.83v-29.39h28.25c48.94 0 48.79-70.62 0-70.62zm137.96 98.73l-30.25-34.1c36.4-7.39 34.26-64.21-10.7-64.49-15.84 0-31.67-.14-47.51-.14v100.01h18.83v-33.38H210l29.1 33.38h22.4v-1.28zm-40.94-81.04c22.98 0 22.9 31.96 0 31.96h-28.68v-31.96h28.68zm-94.07-1.57c20.85 0 20.78 38.24 0 38.24H94.68v-38.23l31.81-.01zm189.65-17.97c-67.4 0-69.86 104.15 0 104.15 68.39-.01 68.33-104.15 0-104.15zm0 17.12c43.43 0 44.1 69.76 0 69.76-44.12 0-43.74-69.76 0-69.76z"], 50008 "themeisle": [512, 512, [], "f2b2", "M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.5
5000872-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z"], 50009 "trade-federation": [496, 512, [], "f513", "M202.45 108.42v81.61H38.94l48.22 61.91h114.73v196.75h64.61V252.96h83.27v-62.69h-83.18V171.1h145.62v-62.68H202.45zm4.86 6h197.77v50.68H259.44v30.93h83.18v50.93h-83.26v195.73h-52.73V245.94H89.86l-39.95-49.91h157.4v-81.61zM247.99 8.8C111.03 8.8 0 119.83 0 256.8s111.03 248 247.99 248S496 393.76 496 256.8 384.96 8.8 247.99 8.8zm.02 13.24c129.66 0 234.76 105.12 234.76 234.78s-105.1 234.76-234.76 234.76S13.23 386.47 13.23 256.81 118.35 22.04 248.01 22.04zm0 7.89c-125.3 0-226.89 101.57-226.89 226.87s101.59 226.89 226.89 226.89S474.88 382.1 474.88 256.8 373.31 29.93 248.01 29.93zm-.02 13.3c117.95 0 213.56 95.62 213.56 213.56s-95.62 213.56-213.56 213.56S34.43 374.75 34.43 256.8 130.04 43.23 247.99 43.23zm-73.32 104.8l15.66 18.05-22.16-9.45-12.33 20.47 2.15-23.99-23.28-5.4 23.48-5.37-2.06-23.81 12.37 20.67 22.01-9.32-15.84 18.15zm-47.14-46.54l8.01 12.4 12.69-5.86-9.32 11.45 9.5 10.25-13.77-5.32-6.82 12.2.81-14.74-13.71-2.71 14.27-3.78-1.66-13.89zm250.77 75.59l11.99 19.56 20.88-9.11-14.9 17.45 15.11 17.04-21.2-8.78-11.54 19.64 1.8-22.87-22.24-4.9 22.31-5.36-2.21-22.67zm-107.05 98.45l13.86-3.22-1.28-14.17 7.35 12.18 13.08-5.59-9.31 10.75 9.36 10.71-13.1-5.54-7.29 12.21 1.22-14.17-13.89-3.16zm-125.43 6.5l23.73-3.87-1.73-24.53 11.01 21.38 22.79-9.22-16.93 17.08 15.81 18.83-21.47-10.82-13.02 20.86 3.66-23.77-23.85-5.94zm63.44-165.66v81.61H54.16l36.72 46.01h117.7v196.75h48.82V245.01h83.27v-47.03H257.4v-34.83h145.73v-46.78H209.26zm10.86 11.2h171.8v24.36H246.88v56.23h82.93v23.94h-82.93v197.42h-26.76V232.1H96.31l-20.09-23.94h143.9v-80.59z"], 50010 "trello": [448, 512, [], "f181", "M392 32H56C25.1 32 0 57.1 0 88v336c0 30.9 25.1 56 56 56h336c30.9 0 56-25.1 56-56V88c0-30.9-25.1-56-56-56zM194.9 371.4c0 14.8-12 26.9-26.9 26.9H85.1c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9H168c14.8 0 26.9 12 26.9 26.9v254.3zm194.9-112c0 14.8-12 26.9-26.9 26.9H280c-14.8 0-26.9-12-26.9-26.9V117.1c0-14.8 12-26.9 26.9-26.9h82.9c14.8 0 26.9 12 26.9 26.9v142.3z"], 50011 "tripadvisor": [576, 512, [], "f262", "M166.4 280.521c0 13.236-10.73 23.966-23.966 23.966s-23.966-10.73-23.966-23.966 10.73-23.966 23.966-23.966 23.966 10.729 23.966 23.966zm264.962-23.956c-13.23 0-23.956 10.725-23.956 23.956 0 13.23 10.725 23.956 23.956 23.956 13.23 0 23.956-10.725 23.956-23.956-.001-13.231-10.726-23.956-23.956-23.956zm89.388 139.49c-62.667 49.104-153.276 38.109-202.379-24.559l-30.979 46.325-30.683-45.939c-48.277 60.39-135.622 71.891-197.885 26.055-64.058-47.158-77.759-137.316-30.601-201.374A186.762 186.762 0 0 0 0 139.416l90.286-.05a358.48 358.48 0 0 1 197.065-54.03 350.382 350.382 0 0 1 192.181 53.349l96.218.074a185.713 185.713 0 0 0-28.352 57.649c46.793 62.747 34.964 151.37-26.648 199.647zM259.366 281.761c-.007-63.557-51.535-115.075-115.092-115.068C80.717 166.7 29.2 218.228 29.206 281.785c.007 63.557 51.535 115.075 115.092 115.068 63.513-.075 114.984-51.539 115.068-115.052v-.04zm28.591-10.455c5.433-73.44 65.51-130.884 139.12-133.022a339.146 339.146 0 0 0-139.727-27.812 356.31 356.31 0 0 0-140.164 27.253c74.344 1.582 135.299 59.424 140.771 133.581zm251.706-28.767c-21.992-59.634-88.162-90.148-147.795-68.157-59.634 21.992-90.148 88.162-68.157 147.795v.032c22.038 59.607 88.198 90.091 147.827 68.113 59.615-22.004 90.113-88.162 68.125-147.783zm-326.039 37.975v.115c-.057 39.328-31.986 71.163-71.314 71.106-39.328-.057-71.163-31.986-71.106-71.314.057-39.328 31.986-71.163 71.314-71.106 39.259.116 71.042 31.94 71.106 71.199zm-24.512 0v-.084c-.051-25.784-20.994-46.645-46.778-46.594-25.784.051-46.645 20.994-46.594 46.777.051 25.784 20.994 46.645 46.777 46.594 25.726-.113 46.537-20.968 46.595-46.693zm313.423 0v.048c-.02 39.328-31.918 71.194-71.247 71.173s-71.194-31.918-71.173-71.247c.02-39.328 31.918-71.194 71.247-71.173 39.29.066 71.121 31.909 71.173 71.199zm-24.504-.008c-.009-25.784-20.918-46.679-46.702-46.67-25.784.009-46.679 20.918-46.67 46.702.009 25.784 20.918 46.678 46.702 46.67 25.765-.046 46.636-20.928 46.67-46.693v-.009z"], 50012 "tumblr": [320, 512, [], "f173", "M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z"], 50013 "tumblr-square": [448, 512, [], "f174", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-82.3 364.2c-8.5 9.1-31.2 19.8-60.9 19.8-75.5 0-91.9-55.5-91.9-87.9v-90h-29.7c-3.4 0-6.2-2.8-6.2-6.2v-42.5c0-4.5 2.8-8.5 7.1-10 38.8-13.7 50.9-47.5 52.7-73.2.5-6.9 4.1-10.2 10-10.2h44.3c3.4 0 6.2 2.8 6.2 6.2v72h51.9c3.4 0 6.2 2.8 6.2 6.2v51.1c0 3.4-2.8 6.2-6.2 6.2h-52.1V321c0 21.4 14.8 33.5 42.5 22.4 3-1.2 5.6-2 8-1.4 2.2.5 3.6 2.1 4.6 4.9l13.8 40.2c1 3.2 2 6.7-.3 9.1z"], 50014 "twitch": [448, 512, [], "f1e8", "M40.1 32L10 108.9v314.3h107V480h60.2l56.8-56.8h87l117-117V32H40.1zm357.8 254.1L331 353H224l-56.8 56.8V353H76.9V72.1h321v214zM331 149v116.9h-40.1V149H331zm-107 0v116.9h-40.1V149H224z"], 50015 "twitter": [512, 512, [], "f099", "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"], 50016 "twitter-square": [448, 512, [], "f081", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"], 50017 "typo3": [433, 512, [], "f42b", "M330.8 341c-7 2.3-11.6 2.3-18.5 2.3-57.2 0-140.6-198.5-140.6-264.9 0-24.7 5.4-32.4 13.9-39.4-69.5 8.5-149.3 34-1
5001776.3 66.4-5.4 7.7-9.3 20.8-9.3 37.1C0 246 106.8 480 184.1 480c36.3 0 97.3-59.5 146.7-139M294.5 32c71.8 0 138.8 11.6 138.8 52.5 0 82.6-52.5 182.3-78.8 182.3-47.9 0-101.7-132.1-101.7-198.5 0-30.9 11.6-36.3 41.7-36.3"], 50018 "uber": [448, 512, [], "f402", "M414.1 32H33.9C15.2 32 0 47.2 0 65.9V446c0 18.8 15.2 34 33.9 34H414c18.7 0 33.9-15.2 33.9-33.9V65.9C448 47.2 432.8 32 414.1 32zM237.6 391.1C163 398.6 96.4 344.2 88.9 269.6h94.4V290c0 3.7 3 6.8 6.8 6.8H258c3.7 0 6.8-3 6.8-6.8v-67.9c0-3.7-3-6.8-6.8-6.8h-67.9c-3.7 0-6.8 3-6.8 6.8v20.4H88.9c7-69.4 65.4-122.2 135.1-122.2 69.7 0 128.1 52.8 135.1 122.2 7.5 74.5-46.9 141.1-121.5 148.6z"], 50019 "uikit": [448, 512, [], "f403", "M443.9 128v256L218 512 0 384V169.7l87.6 45.1v117l133.5 75.5 135.8-75.5v-151l-101.1-57.6 87.6-53.1L443.9 128zM308.6 49.1L223.8 0l-88.6 54.8 86 47.3 87.4-53z"], 50020 "uniregistry": [384, 512, [], "f404", "M281.1 220.1H384v-14.8H281.1v14.8zm0-37.1H384v-12.4H281.1V183zm0 74.2H384v-17.3H281.1v17.3zm-157.7 86.7H8.5c2.6 8.5 5.8 16.8 9.6 24.8h138.3c-12.9-5.7-24.1-14.2-33-24.8m145.7-12.4h109.7c1.8-7.3 3.1-14.7 3.9-22.3H278.3c-2.1 7.9-5.2 15.4-9.2 22.3m-41.5 37.1H367c3.7-8 5.8-16.2 8.5-24.8h-115c-8.8 10.7-20.1 19.2-32.9 24.8M384 32H281.1v2.5H384V32zM192 480c39.5 0 76.2-11.8 106.8-32.2H85.3C115.8 468.2 152.5 480 192 480m89.1-334.2H384V136H281.1v9.8zm0-37.1H384v-7.4H281.1v7.4zm0-37.1H384v-4.9H281.1v4.9zm-178.2 99H0V183h102.9v-12.4zM38.8 405.7h305.3c6.7-8.5 12.6-17.6 17.8-27.2H23c5.2 9.6 9.2 18.7 15.8 27.2m64.1-118.8v-12.4H0v12.4c0 2.5 0 5 .1 7.4h103.1c-.2-2.4-.3-4.9-.3-7.4m178.2 0c0 2.5-.1 5-.4 7.4h103.1c.1-2.5.2-4.9.2-7.4v-12.4H281.1v12.4zm-203 156h227.7c11.8-8.7 22.7-18.6 32.2-29.7H44.9c9.6 11 21.4 21 33.2 29.7m24.8-376.2H0v4.9h102.9v-4.9zm0-34.7H0v2.5h102.9V32zm0 173.3H0v14.8h102.9v-14.8zm0 34.6H0v17.3h102.9v-17.3zm0-103.9H0v9.9h102.9V136zm0-34.7H0v7.4h102.9v-7.4zm2.8 207.9H1.3c.9 7.6 2.2 15 3.9 22.3h109.7c-4-6.9-7.2-14.4-9.2-22.3"], 50021 "untappd": [640, 512, [], "f405", "M401.3 49.9c-79.8 160.1-84.6 152.5-87.9 173.2l-5.2 32.8c-1.9 12-6.6 23.5-13.7 33.4L145.6 497.1c-7.6 10.6-20.4 16.2-33.4 14.6-40.3-5-77.8-32.2-95.3-68.5-5.7-11.8-4.5-25.8 3.1-36.4l148.9-207.9c7.1-9.9 16.4-18 27.2-23.7l29.3-15.5c18.5-9.8 9.7-11.9 135.6-138.9 1-4.8 1-7.3 3.6-8 3-.7 6.6-1 6.3-4.6l-.4-4.6c-.2-1.9 1.3-3.6 3.2-3.6 4.5-.1 13.2 1.2 25.6 10 12.3 8.9 16.4 16.8 17.7 21.1.6 1.8-.6 3.7-2.4 4.2l-4.5 1.1c-3.4.9-2.5 4.4-2.3 7.4.1 2.8-2.3 3.6-6.5 6.1zM230.1 36.4c3.4.9 2.5 4.4 2.3 7.4-.2 2.7 2.1 3.5 6.4 6 7.9 15.9 15.3 30.5 22.2 44 .7 1.3 2.3 1.5 3.3.5 11.2-12 24.6-26.2 40.5-42.6 1.3-1.4 1.4-3.5.1-4.9-8-8.2-16.5-16.9-25.6-26.1-1-4.7-1-7.3-3.6-8-3-.8-6.6-1-6.3-4.6.3-3.3 1.4-8.1-2.8-8.2-4.5-.1-13.2 1.1-25.6 10-12.3 8.9-16.4 16.8-17.7 21.1-1.4 4.2 3.6 4.6 6.8 5.4zM620 406.7L471.2 198.8c-13.2-18.5-26.6-23.4-56.4-39.1-11.2-5.9-14.2-10.9-30.5-28.9-1-1.1-2.9-.9-3.6.5-46.3 88.8-47.1 82.8-49 94.8-1.7 10.7-1.3 20 .3 29.8 1.9 12 6.6 23.5 13.7 33.4l148.9 207.9c7.6 10.6 20.2 16.2 33.1 14.7 40.3-4.9 78-32 95.7-68.6 5.4-11.9 4.3-25.9-3.4-36.6z"], 50022 "usb": [640, 512, [], "f287", "M641.5 256c0 3.1-1.7 6.1-4.5 7.5L547.9 317c-1.4.8-2.8 1.4-4.5 1.4-1.4 0-3.1-.3-4.5-1.1-2.8-1.7-4.5-4.5-4.5-7.8v-35.6H295.7c25.3 39.6 40.5 106.9 69.6 106.9H392V354c0-5 3.9-8.9 8.9-8.9H490c5 0 8.9 3.9 8.9 8.9v89.1c0 5-3.9 8.9-8.9 8.9h-89.1c-5 0-8.9-3.9-8.9-8.9v-26.7h-26.7c-75.4 0-81.1-142.5-124.7-142.5H140.3c-8.1 30.6-35.9 53.5-69 53.5C32 327.3 0 295.3 0 256s32-71.3 71.3-71.3c33.1 0 61 22.8 69 53.5 39.1 0 43.9 9.5 74.6-60.4C255 88.7 273 95.7 323.8 95.7c7.5-20.9 27-35.6 50.4-35.6 29.5 0 53.5 23.9 53.5 53.5s-23.9 53.5-53.5 53.5c-23.4 0-42.9-14.8-50.4-35.6H294c-29.1 0-44.3 67.4-69.6 106.9h310.1v-35.6c0-3.3 1.7-6.1 4.5-7.8 2.8-1.7 6.4-1.4 8.9.3l89.1 53.5c2.8 1.1 4.5 4.1 4.5 7.2z"], 50023 "ussunnah": [512, 512, [], "f407", "M156.8 285.1l5.7 14.4h-8.2c-1.3-3.2-3.1-7.7-3.8-9.5-2.5-6.3-1.1-8.4 0-10 1.9-2.7 3.2-4.4 3.6-5.2 0 2.2.8 5.7 2.7 10.3zm297.3 18.8c-2.1 13.8-5.7 27.1-10.5 39.7l43 23.4-44.8-18.8c-5.3 13.2-12 25.6-19.9 37.2l34.2 30.2-36.8-26.4c-8.4 11.8-18 22.6-28.7 32.3l24.9 34.7-28.1-31.8c-11 9.6-23.1 18-36.1 25.1l15.7 37.2-19.3-35.3c-13.1 6.8-27 12.1-41.6 15.9l6.7 38.4-10.5-37.4c-14.3 3.4-29.2 5.3-44.5 5.4L256 512l-1.9-38.4c-15.3-.1-30.2-2-44.5-5.3L199 505.6l6.7-38.2c-14.6-3.7-28.6-9.1-41.7-15.8l-19.2 35.1 15.6-37c-13-7-25.2-15.4-36.2-25.1l-27.9 31.6 24.7-34.4c-10.7-9.7-20.4-20.5-28.8-32.3l-36.5 26.2 33.9-29.9c-7.9-11.6-14.6-24.1-20-37.3l-44.4 18.7L67.8 344c-4.8-12.7-8.4-26.1-10.5-39.9l-51 9 50.3-14.2c-1.1-8.5-1.7-17.1-1.7-25.9 0-4.7.2-9.4.5-14.1L0 256l56-2.8c1.3-13.1 3.8-25.8 7.5-38.1L6.4 199l58.9 10.4c4-12 9.1-23.5 15.2-34.4l-55.1-30 58.3 24.6C90 159 97.2 149.2 105.3 140L55.8 96.4l53.9 38.7c8.1-8.6 17-16.5 26.6-23.6l-40-55.6 45.6 51.6c9.5-6.6 19.7-12.3 30.3-17.2l-27.3-64.9 33.8 62.1c10.5-4.4 21.4-7.9 32.7-10.4L199 6.4l19.5 69.2c11-2.1 22.3-3.2 33.8-3.4L256 0l3.6 72.2c11.5.2 22.8 1.4 33.8 3.5L313 6.4l-12.4 70.7c11.3 2.6 22.2 6.1 32.6 10.5l33.9-62.2-27.4 65.1c10.6 4.9 20.7 10.7 30.2 17.2l45.8-51.8-40.1 55.9c9.5 7.1 18.4
5002315 26.5 23.6l54.2-38.9-49.7 43.9c8 9.1 15.2 18.9 21.5 29.4l58.7-24.7-55.5 30.2c6.1 10.9 11.1 22.3 15.1 34.3l59.3-10.4-57.5 16.2c3.7 12.2 6.2 24.9 7.5 37.9L512 256l-56 2.8c.3 4.6.5 9.3.5 14.1 0 8.7-.6 17.3-1.6 25.8l50.7 14.3-51.5-9.1zm-21.8-31c0-97.5-79-176.5-176.5-176.5s-176.5 79-176.5 176.5 79 176.5 176.5 176.5 176.5-79 176.5-176.5zm-24 0c0 84.3-68.3 152.6-152.6 152.6s-152.6-68.3-152.6-152.6 68.3-152.6 152.6-152.6 152.6 68.3 152.6 152.6zM195 241c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-40.7-19c0 2.1 1.3 3.8 3.6 5.1 3.5 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.5 6.8-9.6 10.9-9.6 12.6zm-19 0c0 2.1 1.3 3.8 3.6 5.1 3.3 1.9 6.2 4.6 8.2 8.2 2.8-5.7 4.3-9.5 4.3-11.2 0-2.2-1.1-4.4-3.2-7-2.1-2.5-3.2-5.2-3.3-7.7-6.4 6.8-9.6 10.9-9.6 12.6zm204.9 87.9c-8.4-3-8.7-6.8-8.7-15.6V182c-8.2 12.5-14.2 18.6-18 18.6 6.3 14.4 9.5 23.9 9.5 28.3v64.3c0 2.2-2.2 6.5-4.7 6.5h-18c-2.8-7.5-10.2-26.9-15.3-40.3-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3 2.6 6.7 6.4 16.5 7.9 20.2h-9.2c-3.9-10.4-9.6-25.4-11.8-31.1-2 2.5-7.2 9.2-10.7 13.7 2.4 1.6 4.1 3.6 5.2 6.3.8 2 2.8 7.3 4.3 10.9H256c-1.5-4.1-5.6-14.6-8.4-22-2 2.5-7.2 9.2-10.7 13.7 2.5 1.6 4.3 3.6 5.2 6.3.2.6.5 1.4.6 1.7H225c-4.6-13.9-11.4-27.7-11.4-34.1 0-2.2.3-5.1 1.1-8.2-8.8 10.8-14 15.9-14 25 0 7.5 10.4 28.3 10.4 33.3 0 1.7-.5 3.3-1.4 4.9-9.6-12.7-15.5-20.7-18.8-20.7h-12l-11.2-28c-3.8-9.6-5.7-16-5.7-18.8 0-3.8.5-7.7 1.7-12.2-1 1.3-3.7 4.7-5.5 7.1-.8-2.1-3.1-7.7-4.6-11.5-2.1 2.5-7.5 9.1-11.2 13.6.9 2.3 3.3 8.1 4.9 12.2-2.5 3.3-9.1 11.8-13.6 17.7-4 5.3-5.8 13.3-2.7 21.8 2.5 6.7 2 7.9-1.7 14.1H191c5.5 0 14.3 14 15.5 22 13.2-16 15.4-19.6 16.8-21.6h107c3.9 0 7.2-1.9 9.9-5.8zm20.1-26.6V181.7c-9 12.5-15.9 18.6-20.7 18.6 7.1 14.4 10.7 23.9 10.7 28.3v66.3c0 17.5 8.6 20.4 24 20.4 8.1 0 12.5-.8 13.7-2.7-4.3-1.6-7.6-2.5-9.9-3.3-8.1-3.2-17.8-7.4-17.8-26z"], 50024 "vaadin": [448, 512, [], "f408", "M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z"], 50025 "viacoin": [384, 512, [], "f237", "M384 32h-64l-80.7 192h-94.5L64 32H0l48 112H0v48h68.5l13.8 32H0v48h102.8L192 480l89.2-208H384v-48h-82.3l13.8-32H384v-48h-48l48-112zM192 336l-27-64h54l-27 64z"], 50026 "viadeo": [448, 512, [], "f2a9", "M276.2 150.5v.7C258.3 98.6 233.6 47.8 205.4 0c43.3 29.2 67 100 70.8 150.5zm32.7 121.7c7.6 18.2 11 37.5 11 57 0 77.7-57.8 141-137.8 139.4l3.8-.3c74.2-46.7 109.3-118.6 109.3-205.1 0-38.1-6.5-75.9-18.9-112 1 11.7 1 23.7 1 35.4 0 91.8-18.1 241.6-116.6 280C95 455.2 49.4 398 49.4 329.2c0-75.6 57.4-142.3 135.4-142.3 16.8 0 33.7 3.1 49.1 9.6 1.7-15.1 6.5-29.9 13.4-43.3-19.9-7.2-41.2-10.7-62.5-10.7-161.5 0-238.7 195.9-129.9 313.7 67.9 74.6 192 73.9 259.8 0 56.6-61.3 60.9-142.4 36.4-201-12.7 8-27.1 13.9-42.2 17zM418.1 11.7c-31 66.5-81.3 47.2-115.8 80.1-12.4 12-20.6 34-20.6 50.5 0 14.1 4.5 27.1 12 38.8 47.4-11 98.3-46 118.2-90.7-.7 5.5-4.8 14.4-7.2 19.2-20.3 35.7-64.6 65.6-99.7 84.9 14.8 14.4 33.7 25.8 55 25.8 79 0 110.1-134.6 58.1-208.6z"], 50027 "viadeo-square": [448, 512, [], "f2aa", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM280.7 381.2c-42.4 46.2-120 46.6-162.4 0-68-73.6-19.8-196.1 81.2-196.1 13.3 0 26.6 2.1 39.1 6.7-4.3 8.4-7.3 17.6-8.4 27.1-9.7-4.1-20.2-6-30.7-6-48.8 0-84.6 41.7-84.6 88.9 0 43 28.5 78.7 69.5 85.9 61.5-24 72.9-117.6 72.9-175 0-7.3 0-14.8-.6-22.1-11.2-32.9-26.6-64.6-44.2-94.5 27.1 18.3 41.9 62.5 44.2 94.1v.4c7.7 22.5 11.8 46.2 11.8 70 0 54.1-21.9 99-68.3 128.2l-2.4.2c50 1 86.2-38.6 86.2-87.2 0-12.2-2.1-24.3-6.9-35.7 9.5-1.9 18.5-5.6 26.4-10.5 15.3 36.6 12.6 87.3-22.8 125.6zM309 233.7c-13.3 0-25.1-7.1-34.4-16.1 21.9-12 49.6-30.7 62.3-53 1.5-3 4.1-8.6 4.5-12-12.5 27.9-44.2 49.8-73.9 56.7-4.7-7.3-7.5-15.5-7.5-24.3 0-10.3 5.2-24.1 12.9-31.6 21.6-20.5 53-8.5 72.4-50 32.5 46.2 13.1 130.3-36.3 130.3z"], 50028 "viber": [512, 512, [], "f409", "M444 49.9C431.3 38.2 379.9.9 265.3.4c0 0-135.1-8.1-200.9 52.3C27.8 89.3 14.9 143 13.5 209.5c-1.4 66.5-3.1 191.1 117 224.9h.1l-.1 51.6s-.8 20.9 13 25.1c16.6 5.2 26.4-10.7 42.3-27.8 8.7-9.4 20.7-23.2 29.8-33.7 82.2 6.9 145.3-8.9 152.5-11.2 16.6-
500285.4 110.5-17.4 125.7-142 15.8-128.6-7.6-209.8-49.8-246.5zM457.9 287c-12.9 104-89 110.6-103 115.1-6 1.9-61.5 15.7-131.2 11.2 0 0-52 62.7-68.2 79-5.3 5.3-11.1 4.8-11-5.7 0-6.9.4-85.7.4-85.7-.1 0-.1 0 0 0-101.8-28.2-95.8-134.3-94.7-189.8 1.1-55.5 11.6-101 42.6-131.6 55.7-50.5 170.4-43 170.4-43 96.9.4 143.3 29.6 154.1 39.4 35.7 30.6 53.9 103.8 40.6 211.1zm-139-80.8c.4 8.6-12.5 9.2-12.9.6-1.1-22-11.4-32.7-32.6-33.9-8.6-.5-7.8-13.4.7-12.9 27.9 1.5 43.4 17.5 44.8 46.2zm20.3 11.3c1-42.4-25.5-75.6-75.8-79.3-8.5-.6-7.6-13.5.9-12.9 58 4.2 88.9 44.1 87.8 92.5-.1 8.6-13.1 8.2-12.9-.3zm47 13.4c.1 8.6-12.9 8.7-12.9.1-.6-81.5-54.9-125.9-120.8-126.4-8.5-.1-8.5-12.9 0-12.9 73.7.5 133 51.4 133.7 139.2zM374.9 329v.2c-10.8 19-31 40-51.8 33.3l-.2-.3c-21.1-5.9-70.8-31.5-102.2-56.5-16.2-12.8-31-27.9-42.4-42.4-10.3-12.9-20.7-28.2-30.8-46.6-21.3-38.5-26-55.7-26-55.7-6.7-20.8 14.2-41 33.3-51.8h.2c9.2-4.8 18-3.2 23.9 3.9 0 0 12.4 14.8 17.7 22.1 5 6.8 11.7 17.7 15.2 23.8 6.1 10.9 2.3 22-3.7 26.6l-12 9.6c-6.1 4.9-5.3 14-5.3 14s17.8 67.3 84.3 84.3c0 0 9.1.8 14-5.3l9.6-12c4.6-6 15.7-9.8 26.6-3.7 14.7 8.3 33.4 21.2 45.8 32.9 7 5.7 8.6 14.4 3.8 23.6z"], 50029 "vimeo": [448, 512, [], "f40a", "M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z"], 50030 "vimeo-square": [448, 512, [], "f194", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16.2 149.6c-1.4 31.1-23.2 73.8-65.3 127.9-43.5 56.5-80.3 84.8-110.4 84.8-18.7 0-34.4-17.2-47.3-51.6-25.2-92.3-35.9-146.4-56.7-146.4-2.4 0-10.8 5-25.1 15.1L64 192c36.9-32.4 72.1-68.4 94.1-70.4 24.9-2.4 40.2 14.6 46 51.1 20.5 129.6 29.6 149.2 66.8 90.5 13.4-21.2 20.6-37.2 21.5-48.3 3.4-32.8-25.6-30.6-45.2-22.2 15.7-51.5 45.8-76.5 90.1-75.1 32.9 1 48.4 22.4 46.5 64z"], 50031 "vimeo-v": [448, 512, [], "f27d", "M447.8 153.6c-2 43.6-32.4 103.3-91.4 179.1-60.9 79.2-112.4 118.8-154.6 118.8-26.1 0-48.2-24.1-66.3-72.3C100.3 250 85.3 174.3 56.2 174.3c-3.4 0-15.1 7.1-35.2 21.1L0 168.2c51.6-45.3 100.9-95.7 131.8-98.5 34.9-3.4 56.3 20.5 64.4 71.5 28.7 181.5 41.4 208.9 93.6 126.7 18.7-29.6 28.8-52.1 30.2-67.6 4.8-45.9-35.8-42.8-63.3-31 22-72.1 64.1-107.1 126.2-105.1 45.8 1.2 67.5 31.1 64.9 89.4z"], 50032 "vine": [384, 512, [], "f1ca", "M384 254.7v52.1c-18.4 4.2-36.9 6.1-52.1 6.1-36.9 77.4-103 143.8-125.1 156.2-14 7.9-27.1 8.4-42.7-.8C137 452 34.2 367.7 0 102.7h74.5C93.2 261.8 139 343.4 189.3 404.5c27.9-27.9 54.8-65.1 75.6-106.9-49.8-25.3-80.1-80.9-80.1-145.6 0-65.6 37.7-115.1 102.2-115.1 114.9 0 106.2 127.9 81.6 181.5 0 0-46.4 9.2-63.5-20.5 3.4-11.3 8.2-30.8 8.2-48.5 0-31.3-11.3-46.6-28.4-46.6-18.2 0-30.8 17.1-30.8 50 .1 79.2 59.4 118.7 129.9 101.9z"], 50033 "vk": [576, 512, [], "f189", "M545 117.7c3.7-12.5 0-21.7-17.8-21.7h-58.9c-15 0-21.9 7.9-25.6 16.7 0 0-30 73.1-72.4 120.5-13.7 13.7-20 18.1-27.5 18.1-3.7 0-9.4-4.4-9.4-16.9V117.7c0-15-4.2-21.7-16.6-21.7h-92.6c-9.4 0-15 7-15 13.5 0 14.2 21.2 17.5 23.4 57.5v86.8c0 19-3.4 22.5-10.9 22.5-20 0-68.6-73.4-97.4-157.4-5.8-16.3-11.5-22.9-26.6-22.9H38.8c-16.8 0-20.2 7.9-20.2 16.7 0 15.6 20 93.1 93.1 195.5C160.4 378.1 229 416 291.4 416c37.5 0 42.1-8.4 42.1-22.9 0-66.8-3.4-73.1 15.4-73.1 8.7 0 23.7 4.4 58.7 38.1 40 40 46.6 57.9 69 57.9h58.9c16.8 0 25.3-8.4 20.4-25-11.2-34.9-86.9-106.7-90.3-111.5-8.7-11.2-6.2-16.2 0-26.2.1-.1 72-101.3 79.4-135.6z"], 50034 "vnv": [640, 512, [], "f40b", "M104.9 352c-34.1 0-46.4-30.4-46.4-30.4L2.6 210.1S-7.8 192 13 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.7-74.5c5.6-9.5 8.4-18.1 18.8-18.1h32.8c20.8 0 10.4 18.1 10.4 18.1l-55.8 111.5S174.2 352 140 352h-35.1zm395 0c-34.1 0-46.4-30.4-46.4-30.4l-55.9-111.5S387.2 192 408 192h32.8c10.4 0 13.2 8.7 18.8 18.1l36.7 74.5s5.2 13.1 21.1 13.1 21.1-13.1 21.1-13.1l36.8-74.5c5.6-9.5 8.4-18.1 18.8-18.1H627c20.8 0 10.4 18.1 10.4 18.1l-55.9 111.5S569.3 352 535.1 352h-35.2zM337.6 192c34.1 0 46.4 30.4 46.4 30.4l55.9 111.5s10.4 18.1-10.4 18.1h-32.8c-10.4 0-13.2-8.7-18.8-18.1l-36.7-74.5s-5.2-13.1-21.1-13.1c-15.9 0-21.1 13.1-21.1 13.1l-36.7 74.5c-5.6 9.4-8.4 18.1-18.8 18.1h-32.9c-20.8 0-10.4-18.1-10.4-18.1l55.9-111.5s12.2-30.4 46.4-30.4h35.1z"], 50035 "vuejs": [448, 512, [], "f41f", "M356.9 64.3H280l-56 88.6-48-88.6H0L224 448 448 64.3h-91.1zm-301.2 32h53.8L224 294.5 338.4 96.3h53.8L224 384.5 55.7 96.3z"], 50036 "weebly": [512, 512, [], "f5cc", "M425.09 65.83c-39.88 0-73.28 25.73-83.66 64.33-18.16-58.06-65.5-64.33-84.95-64.33-19.78 0-66.8 6.28-85.28 64.33-10.38-38.6-43.45-64.33-83.66-64.33C38.59 65.83 0 99.72 0 143.03c0 28.96 4.18 33.27 77.17 233.48 22.37 60.57 67.77 69.35 92.74 69.35 39.23 0 70.04-19.46 85.93-53.98 15.89 34.83 46.69 54.29 85.93 54.29 24.97 0 70.36-9.1 92.74-69.67 76.55-208.65 77.5-205.58 77.5-227.2.63-48.32-36.01-83.47-86.92-83.47zm26.34 114.81l-65.57 176.44c-7.92 21.49-21.22 37.22-46.24 37.22-23.44 0-37.38-12.41-44.03-33.9l-39.28-117.42h-.95L216.08 360.4c-6.96 21.5-20.9 33.6-44.02 33.6-25.02 0-38.33-15.74-46.24
50036-37.22L60.88 181.55c-5.38-14.83-7.92-23.91-7.92-34.5 0-16.34 15.84-29.36 38.33-29.36 18.69 0 31.99 11.8 36.11 29.05l44.03 139.82h.95l44.66-136.79c6.02-19.67 16.47-32.08 38.96-32.08s32.94 12.11 38.96 32.08l44.66 136.79h.95l44.03-139.82c4.12-17.25 17.42-29.05 36.11-29.05 22.17 0 38.33 13.32 38.33 35.71-.32 7.87-4.12 16.04-7.61 27.24z"], 50037 "weibo": [512, 512, [], "f18a", "M407 177.6c7.6-24-13.4-46.8-37.4-41.7-22 4.8-28.8-28.1-7.1-32.8 50.1-10.9 92.3 37.1 76.5 84.8-6.8 21.2-38.8 10.8-32-10.3zM214.8 446.7C108.5 446.7 0 395.3 0 310.4c0-44.3 28-95.4 76.3-143.7C176 67 279.5 65.8 249.9 161c-4 13.1 12.3 5.7 12.3 6 79.5-33.6 140.5-16.8 114 51.4-3.7 9.4 1.1 10.9 8.3 13.1 135.7 42.3 34.8 215.2-169.7 215.2zm143.7-146.3c-5.4-55.7-78.5-94-163.4-85.7-84.8 8.6-148.8 60.3-143.4 116s78.5 94 163.4 85.7c84.8-8.6 148.8-60.3 143.4-116zM347.9 35.1c-25.9 5.6-16.8 43.7 8.3 38.3 72.3-15.2 134.8 52.8 111.7 124-7.4 24.2 29.1 37 37.4 12 31.9-99.8-55.1-195.9-157.4-174.3zm-78.5 311c-17.1 38.8-66.8 60-109.1 46.3-40.8-13.1-58-53.4-40.3-89.7 17.7-35.4 63.1-55.4 103.4-45.1 42 10.8 63.1 50.2 46 88.5zm-86.3-30c-12.9-5.4-30 .3-38 12.9-8.3 12.9-4.3 28 8.6 34 13.1 6 30.8.3 39.1-12.9 8-13.1 3.7-28.3-9.7-34zm32.6-13.4c-5.1-1.7-11.4.6-14.3 5.4-2.9 5.1-1.4 10.6 3.7 12.9 5.1 2 11.7-.3 14.6-5.4 2.8-5.2 1.1-10.9-4-12.9z"], 50038 "weixin": [576, 512, [], "f1d7", "M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z"], 50039 "whatsapp": [448, 512, [], "f232", "M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"], 50040 "whatsapp-square": [448, 512, [], "f40c", "M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z"], 50041 "whmcs": [448, 512, [], "f40d", "M448 161v-21.3l-28.5-8.8-2.2-10.4 20.1-20.7L427 80.4l-29 7.5-7.2-7.5 7.5-28.2-19.1-11.6-21.3 21-10.7-3.2-7-26.4h-22.6l-6.2 26.4-12.1 3.2-19.7-21-19.4 11 8.1 27.7-8.1 8.4-28.5-7.5-11 19.1 20.7 21-2.9 10.4-28.5 7.8-.3 21.7 28.8 7.5 2.4 12.1-20.1 19.9 10.4 18.5 29.6-7.5 7.2 8.6-8.1 26.9 19.9 11.6 19.4-20.4 11.6 2.9 6.7 28.5 22.6.3 6.7-28.8 11.6-3.5 20.7 21.6 20.4-12.1-8.8-28 7.8-8.1 28.8 8.8 10.3-20.1-20.9-18.8 2.2-12.1 29.1-7zm-119.2 45.2c-31.3 0-56.8-25.4-56.8-56.8s25.4-56.8 56.8-56.8 56.8 25.4 56.8 56.8c0 31.5-25.4 56.8-56.8 56.8zm72.3 16.4l46.9 14.5V277l-55.1 13.4-4.1 22.7 38.9 35.3-19.2 37.9-54-16.7-14.6 15.2 16.7 52.5-38.3 22.7-38.9-40.5-21.7 6.6-12.6 54-42.4-.5-12.6-53.6-21.7-5.6-36.4 38.4-37.4-21.7 15.2-50.5-13.7-16.1-55.5 14.1-19.7-34.8 37.9-37.4-4.8-22.8-54-14.1.5-40.9L54 219.9l5.7-19.7-38.9-39.4L41.5 125l53.6 14.1 15.2-15.7-15.2-52 36.4-20.7 36.8 39.4L191 84l11.6-52H245l11.6 45.9L234 72l-6.3-1.7-3.3 5.7-11 19.1-3.3 5.6 4.6 4.6 17.2 17.4-.3 1-23.8 6.5-6.2 1.7-.1 6.4-.2 12.9C153.8 161.6 118 204 118 254.7c0 58.3 47.3 105.7 105.7 105.7 50.5 0 92.7-35.4 103.2-82.8l13.2.2 6.9.1 1.6-6.7 5.6-24 1.9-.6 17.1 17.8 4.7 4.9 5.8-3.4 20.4-12.1 5.8-3.5-2-6.5-6.8-21.2z"], 50042 "wikipedia-w": [640, 512, [], "f266", "M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4
5004263.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z"], 50043 "windows": [448, 512, [], "f17a", "M0 93.7l183.6-25.3v177.4H0V93.7zm0 324.6l183.6 25.3V268.4H0v149.9zm203.8 28L448 480V268.4H203.8v177.9zm0-380.6v180.1H448V32L203.8 65.7z"], 50044 "wix": [640, 512, [], "f5cf", "M393.38 131.69c0 13.03 2.08 32.69-28.68 43.83-9.52 3.45-15.95 9.66-15.95 9.66 0-31 4.72-42.22 17.4-48.86 9.75-5.11 27.23-4.63 27.23-4.63zm-115.8 35.54l-34.24 132.66-28.48-108.57c-7.69-31.99-20.81-48.53-48.43-48.53-27.37 0-40.66 16.18-48.43 48.53L89.52 299.89 55.28 167.23C49.73 140.51 23.86 128.96 0 131.96l65.57 247.93s21.63 1.56 32.46-3.96c14.22-7.25 20.98-12.84 29.59-46.57 7.67-30.07 29.11-118.41 31.12-124.7 4.76-14.94 11.09-13.81 15.4 0 1.97 6.3 23.45 94.63 31.12 124.7 8.6 33.73 15.37 39.32 29.59 46.57 10.82 5.52 32.46 3.96 32.46 3.96l65.57-247.93c-24.42-3.07-49.82 8.93-55.3 35.27zm115.78 5.21s-4.1 6.34-13.46 11.57c-6.01 3.36-11.78 5.64-17.97 8.61-15.14 7.26-13.18 13.95-13.18 35.2v152.07s16.55 2.09 27.37-3.43c13.93-7.1 17.13-13.95 17.26-44.78V181.41l-.02.01v-8.98zm163.44 84.08L640 132.78s-35.11-5.98-52.5 9.85c-13.3 12.1-24.41 29.55-54.18 72.47-.47.73-6.25 10.54-13.07 0-29.29-42.23-40.8-60.29-54.18-72.47-17.39-15.83-52.5-9.85-52.5-9.85l83.2 123.74-82.97 123.36s36.57 4.62 53.95-11.21c11.49-10.46 17.58-20.37 52.51-70.72 6.81-10.52 12.57-.77 13.07 0 29.4 42.38 39.23 58.06 53.14 70.72 17.39 15.83 53.32 11.21 53.32 11.21L556.8 256.52z"], 50045 "wolf-pack-battalion": [456, 512, [], "f514", "M239.73 471.53l10.56 15.84 5.28-12.32 5.28 7.04V512c21.06-7.92 21.11-66.86 25.51-97.21 4.62-31.89-.88-92.81 81.37-149.11-8.88-23.61-12-49.43-2.64-80.05 27.87 3.34 53.94 10.58 63.34 54.1l-30.35 8.36c11.15 23.04 17.01 46.76 13.2 72.14L384 313.18l-6.16 33.43-18.47-7.04-8.8 33.43-19.35-7.04 26.39 21.11 8.8-28.15 24.63 5.28 7.04-35.63 26.39 14.52c.25-20.02 6.97-58.06-8.8-84.45l26.39 5.28c3.99-22.07-2.38-39.21-7.92-56.74l22.43 9.68c-.44-25.07-29.94-56.79-61.58-58.5-20.22-1.09-56.74-25.17-54.1-51.9 1.96-19.87 17.45-42.62 43.11-49.7-43.99 36.51-9.68 67.3 5.28 73.46 4.4-11.44 17.54-69.08 0-130.2-40.47 22.87-89.73 65.1-93.25 147.79l-58.06 38.71-3.52 93.25 107.33-59.82 7.04 7.04-17.59 3.52-43.99 38.71-15.84-5.28-28.15 49.26-3.52 119.64 21.11 15.84-32.55 15.84-32.55-15.84 21.11-15.84-3.52-119.64-28.15-49.26-15.84 5.28-43.99-38.71-17.59-3.52 7.04-7.04 107.33 59.82-3.52-93.25-58.06-38.71C157.03 65.1 107.77 22.87 67.3 0c-17.54 61.12-4.4 118.76 0 130.2 14.96-6.16 49.26-36.95 5.28-73.46 25.66 7.08 41.15 29.83 43.11 49.7 2.63 26.74-33.88 50.81-54.1 51.9C29.94 160.06.44 191.78 0 216.85l22.43-9.68c-5.54 17.53-11.91 34.67-7.92 56.74l26.39-5.28c-15.76 26.39-9.05 64.43-8.8 84.45l26.39-14.52 7.04 35.63 24.63-5.28 8.8 28.15 26.39-21.11-19.34 7.05-8.8-33.43-18.47 7.04-6.16-33.43-27.27 7.04c-3.82-25.38 2.05-49.1 13.2-72.14l-30.35-8.36c9.4-43.52 35.47-50.77 63.34-54.1 9.36 30.62 6.24 56.45-2.64 80.05 82.25 56.3 76.75 117.23 81.37 149.11 4.4 30.35 4.45 89.29 25.51 97.21v-29.91l5.28-7.04 5.28 12.32 10.56-15.84 11.44 21.11 11.43-21.1zm79.17-95.01l-15.84-10.56c7.47-4.36 13.76-8.42 19.35-12.32-.6 7.26-.27 13.88-3.51 22.88zm28.15-49.26c-.4 10.94-.9 21.66-1.76 31.67-7.85-1.86-15.57-3.8-21.11-7.04 8.24-7.9 15.55-16.27 22.87-24.63zm24.63 5.28c-.02-13.43-2.05-24.21-5.28-33.43-5.38 9.09-11.23 18.18-18.47 27.27l23.75 6.16zm3.52-80.94c19.44 12.81 27.8 33.66 29.91 56.3-12.32-4.53-24.63-9.31-36.95-10.56 5.06-11.99 6.65-28.14 7.04-45.74zm-1.76-45.74c.81 14.3 1.84 28.82 1.76 42.23 19.22-8.11 29.78-9.72 43.99-14.08-10.6-18.95-27.22-25.52-45.75-28.15zM137.68 376.52l15.84-10.56c-7.47-4.36-13.76-8.42-19.35-12.32.6 7.26.27 13.88 3.51 22.88zm-28.15-49.26c.4 10.94.9 21.66 1.76 31.67 7.85-1.86 15.57-3.8 21.11-7.04-8.24-7.9-15.55-16.27-22.87-24.63zm-24.64 5.28c.02-13.43 2.05-24.21 5.28-33.43 5.38 9.09 11.23 18.18 18.47 27.27l-23.75 6.16zm-3.52-80.94c-19.44 12.81-27.8 33.66-29.91 56.3 12.32-4.53 24.63-9.31 36.95-10.56-5.05-11.99-6.65-28.14-7.04-45.74zm1.76-45.74c-.81 14.3-1.84 28.82-1.76 42.23-19.22-8.11-29.78-9.72-43.99-14.08 10.61-18.95 27.22-25.52 45.75-28.15z"],
50046 "wordpress": [512, 512, [], "f19a", "M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"], 50047 "wordpress-simple": [512, 512, [], "f411", "M256 8C119.3 8 8 119.2 8 256c0 136.7 111.3 248 248 248s248-111.3 248-248C504 119.2 392.7 8 256 8zM33 256c0-32.3 6.9-63 19.3-90.7l106.4 291.4C84.3 420.5 33 344.2 33 256zm223 223c-21.9 0-43-3.2-63-9.1l66.9-194.4 68.5 187.8c.5 1.1 1 2.1 1.6 3.1-23.1 8.1-48 12.6-74 12.6zm30.7-327.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-21.9 0-58.7-2.8-58.7-2.8-12-.7-13.4 17.7-1.4 18.4 0 0 11.4 1.4 23.4 2.1l34.7 95.2L200.6 393l-81.2-241.5c13.4-.7 25.5-2.1 25.5-2.1 12-1.4 10.6-19.1-1.4-18.4 0 0-36.1 2.8-59.4 2.8-4.2 0-9.1-.1-14.4-.3C109.6 73 178.1 33 256 33c58 0 110.9 22.2 150.6 58.5-1-.1-1.9-.2-2.9-.2-21.9 0-37.4 19.1-37.4 39.6 0 18.4 10.6 33.9 21.9 52.3 8.5 14.8 18.4 33.9 18.4 61.5 0 19.1-7.3 41.2-17 72.1l-22.2 74.3-80.7-239.6zm81.4 297.2l68.1-196.9c12.7-31.8 17-57.2 17-79.9 0-8.2-.5-15.8-1.5-22.9 17.4 31.8 27.3 68.2 27.3 107 0 82.3-44.6 154.1-110.9 192.7z"], 50048 "wpbeginner": [512, 512, [], "f297", "M462.799 322.374C519.01 386.682 466.961 480 370.944 480c-39.602 0-78.824-17.687-100.142-50.04-6.887.356-22.702.356-29.59 0C219.848 462.381 180.588 480 141.069 480c-95.49 0-148.348-92.996-91.855-157.626C-29.925 190.523 80.479 32 256.006 32c175.632 0 285.87 158.626 206.793 290.374zm-339.647-82.972h41.529v-58.075h-41.529v58.075zm217.18 86.072v-23.839c-60.506 20.915-132.355 9.198-187.589-33.971l.246 24.897c51.101 46.367 131.746 57.875 187.343 32.913zm-150.753-86.072h166.058v-58.075H189.579v58.075z"], 50049 "wpexplorer": [512, 512, [], "f2de", "M512 256c0 141.2-114.7 256-256 256C114.8 512 0 397.3 0 256S114.7 0 256 0s256 114.7 256 256zm-32 0c0-123.2-100.3-224-224-224C132.5 32 32 132.5 32 256s100.5 224 224 224 224-100.5 224-224zM160.9 124.6l86.9 37.1-37.1 86.9-86.9-37.1 37.1-86.9zm110 169.1l46.6 94h-14.6l-50-100-48.9 100h-14l51.1-106.9-22.3-9.4 6-14 68.6 29.1-6 14.3-16.5-7.1zm-11.8-116.3l68.6 29.4-29.4 68.3L230 246l29.1-68.6zm80.3 42.9l54.6 23.1-23.4 54.3-54.3-23.1 23.1-54.3z"], 50050 "wpforms": [448, 512, [], "f298", "M448 75.2v361.7c0 24.3-19 43.2-43.2 43.2H43.2C19.3 480 0 461.4 0 436.8V75.2C0 51.1 18.8 32 43.2 32h361.7c24 0 43.1 18.8 43.1 43.2zm-37.3 361.6V75.2c0-3-2.6-5.8-5.8-5.8h-9.3L285.3 144 224 94.1 162.8 144 52.5 69.3h-9.3c-3.2 0-5.8 2.8-5.8 5.8v361.7c0 3 2.6 5.8 5.8 5.8h361.7c3.2.1 5.8-2.7 5.8-5.8zM150.2 186v37H76.7v-37h73.5zm0 74.4v37.3H76.7v-37.3h73.5zm11.1-147.3l54-43.7H96.8l64.5 43.7zm210 72.9v37h-196v-37h196zm0 74.4v37.3h-196v-37.3h196zm-84.6-147.3l64.5-43.7H232.8l53.9 43.7zM371.3 335v37.3h-99.4V335h99.4z"], 50051 "xbox": [512, 512, [], "f412", "M369.9 318.2c44.3 54.3 64.7 98.8 54.4 118.7-7.9 15.1-56.7 44.6-92.6 55.9-29.6 9.3-68.4 13.3-100.4 10.2-38.2-3.7-76.9-17.4-110.1-39C93.3 445.8 87 438.3 87 423.4c0-29.9 32.9-82.3 89.2-142.1 32-33.9 76.5-73.7 81.4-72.6 9.4 2.1 84.3 75.1 112.3 109.5zM188.6 143.8c-29.7-26.9-58.1-53.9-86.4-63.4-15.2-5.1-16.3-4.8-28.7 8.1-29.2 30.4-53.5 79.7-60.3 122.4-5.4 34.2-6.1 43.8-4.2 60.5 5.6 50.5 17.3 85.4 40.5 120.9 9.5 14.6 12.1 17.3 9.3 9.9-4.2-11-.3-37.5 9.5-64 14.3-39 53.9-112.9 120.3-194.4zm311.6 63.5C483.3 127.3 432.7 77 425.6 77c-7.3 0-24.2 6.5-36 13.9-23.3 14.5-41 31.4-64.3 52.8C367.7 197 427.5 283.1 448.2 346c6.8 20.7 9.7 41.1 7.4 52.3-1.7 8.5-1.7 8.5 1.4 4.6 6.1-7.7 19.9-31.3 25.4-43.5 7.4-16.2 15-40.2 18.6-58.7 4.3-22.5 3.9-70.8-.8-93.4zM141.3 43C189 40.5 251 77.5 255.6 78.4c.7.1 10.4-4.2 21.6-9.7 63.9-31.1 94-25.8 107.4-25.2-63.9-39.3-152.7-50-233.9-11.7-23.4 11.1-24 11.9-9.4 11.2z"], 50052 "xing": [384, 512, [], "f168", "M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7 0-12.1-7.5-8.5-14.4l69-121.3c.2 0 .2-.1 0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H100c7.3 0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6 0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"], 50053 "xing-square": [448, 512, [], "f169", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM140.4 320.2H93.8c-5.5 0-8.7-5.3-6-10.3l49.3-86.7c.1 0 .1-.1 0-.2l-31.4-54c-3-5.6.2-10.1 6-10.1h46.6c5.2 0 9.5 2.9 12.9 8.7l31.9 55.3c-1.3 2.3-18 31.7-50.1 88.2-3.5 6.2-7.7 9.1-12.6 9.1zm219.7-214.1L257.3 286.8v.2l65.5 119c2.8 5.1.1 10.1-6 10.1h-46.6c-5.5 0-9.7-2.9-12.9-8.7l-66-120.3c2.3-4.1 36.8-64.9 103.4-182.3 3.3-5.8 7.4-8.7 12.5-8.7h46.9c5.7-.1 8.8 4.7 6 10z"], 50054 "y-combinator": [448, 512, [], "f23b", "M448 32v448H0V32h448zM236 287.5L313.5 142h-32.7L235 233c-4.7 9.3-9 18.3-12.8 26.8L210 233l-45.2-91h-35l76.7 143.8v94.5H236v-92.8z"], 50055 "yahoo": [448, 512, [], "f19e", "M252 292l4 220c-12.7-2.2-23.5-3.9-32.3-3.9-8.4 0-19.2 1.7-32.3 3.9l4-220C140.4 197.2 85 95.2 21.4 0c11.9 3.1 23 3.9 33.2 3.9 9 0 20.4-.8 34.1-3.9 40.9 72.2 82.1 138.7 135 225.5C261 163.9 314.8 81.4 358.6 0c11.1 2.9 22 3.9 32.9 3.9 11.5 0 23.2-1 35-3.9C392.1 47.9 294.9 216.9 252 292z"], 50056 "yandex": [256, 512, [], "f413", "M153.1 315.8L65.7 512H2l96-209.8c-45.1-22.9-75.2-64.4-75.2-141.1C22.7 53.7 90.8 0 171.7 0H254v512h-55.1V315.8h-45.8zm45.8-269.3h-29.4c-44.4 0-87.4 29.4-87.4 114.6 0 82.3 39.4 108.8 87.4 108.8h29.4V46.5z"], 50057 "yandex-international": [320, 512, [], "f414", "M129.5 512V345.9L18.5 48h55.8l81.8 229.7L250.2 0h51.3L180.8 347.8V512h-51.3z"], 50058 "yelp": [384, 512, [], "f1e9", "M136.9 328c-1 .3-109.2 35.7-115.8 35.7-1
500585.2-.9-18.5-16.2-19.9-31.2-1.5-14.2-1.4-29.8.3-46.8 1.9-18.8 5.5-45.1 24.2-44 4.8 0 67.1 25.9 112.7 44.4 17.1 6.8 18.6 35.8-1.5 41.9zm57.9-113.9c1.8 38.2-25.5 48.5-47.2 14.3L41.3 60.4c-1.5-6.6.3-12.4 5.3-17.4C62.2 26.5 146 3.2 168.1 8.9c7.5 1.9 12.1 6.1 13.8 12.6 1.3 8.3 11.5 167.4 12.9 192.6zm-1.4 164.8c0 4.6.2 116.4-1.7 121.5-2.3 6-7 9.7-14.3 11.2-10.1 1.7-27.1-1.9-51-10.7-22-8.1-56.7-21.5-49.3-42.5 2.8-6.9 51.4-62.8 77.3-93.6 12-15.2 39.8-5.5 39 14.1zm180.2-117.8c-5.6 3.7-110.8 28.2-118.1 30.6l.3-.6c-18.1 4.7-35.4-18.5-23.3-34.6 3.7-3.7 65.9-92.4 72.8-97 5.2-3.6 11.3-3.8 18.3-.6 18.4 8.8 55.1 63.1 57.4 84.6-.1 2.9 1.2 11.7-7.4 17.6zm10.1 130.7c-2.7 20.6-44.5 73.4-63.8 81-6.9 2.6-12.9 2-17.7-2-5-3.5-61.8-97.1-64.9-102.3-10.9-16.2 6.8-39.8 25.6-33.2 0 0 110.5 35.7 114.7 39.4 5.2 4.1 7.2 9.8 6.1 17.1z"], 50059 "yoast": [448, 512, [], "f2b1", "M91.3 76h186l-7 18.9h-179c-39.7 0-71.9 31.6-71.9 70.3v205.4c0 35.4 24.9 70.3 84 70.3V460H91.3C41.2 460 0 419.8 0 370.5V165.2C0 115.9 40.7 76 91.3 76zm229.1-56h66.5C243.1 398.1 241.2 418.9 202.2 459.3c-20.8 21.6-49.3 31.7-78.3 32.7v-51.1c49.2-7.7 64.6-49.9 64.6-75.3 0-20.1.6-12.6-82.1-223.2h61.4L218.2 299 320.4 20zM448 161.5V460H234c6.6-9.6 10.7-16.3 12.1-19.4h182.5V161.5c0-32.5-17.1-51.9-48.2-62.9l6.7-17.6c41.7 13.6 60.9 43.1 60.9 80.5z"], 50060 "youtube": [576, 512, [], "f167", "M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"], 50061 "youtube-square": [448, 512, [], "f431", "M186.8 202.1l95.2 54.1-95.2 54.1V202.1zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-42 176.3s0-59.6-7.6-88.2c-4.2-15.8-16.5-28.2-32.2-32.4C337.9 128 224 128 224 128s-113.9 0-142.2 7.7c-15.7 4.2-28 16.6-32.2 32.4-7.6 28.5-7.6 88.2-7.6 88.2s0 59.6 7.6 88.2c4.2 15.8 16.5 27.7 32.2 31.9C110.1 384 224 384 224 384s113.9 0 142.2-7.7c15.7-4.2 28-16.1 32.2-31.9 7.6-28.5 7.6-88.1 7.6-88.1z"], 50062 "zhihu": [640, 512, [], "f63f", "M170.54 148.13v217.54l23.43.01 7.71 26.37 42.01-26.37h49.53V148.13H170.54zm97.75 193.93h-27.94l-27.9 17.51-5.08-17.47-11.9-.04V171.75h72.82v170.31zm-118.46-94.39H97.5c1.74-27.1 2.2-51.59 2.2-73.46h51.16s1.97-22.56-8.58-22.31h-88.5c3.49-13.12 7.87-26.66 13.12-40.67 0 0-24.07 0-32.27 21.57-3.39 8.9-13.21 43.14-30.7 78.12 5.89-.64 25.37-1.18 36.84-22.21 2.11-5.89 2.51-6.66 5.14-14.53h28.87c0 10.5-1.2 66.88-1.68 73.44H20.83c-11.74 0-15.56 23.62-15.56 23.62h65.58C66.45 321.1 42.83 363.12 0 396.34c20.49 5.85 40.91-.93 51-9.9 0 0 22.98-20.9 35.59-69.25l53.96 64.94s7.91-26.89-1.24-39.99c-7.58-8.92-28.06-33.06-36.79-41.81L87.9 311.95c4.36-13.98 6.99-27.55 7.87-40.67h61.65s-.09-23.62-7.59-23.62v.01zm412.02-1.6c20.83-25.64 44.98-58.57 44.98-58.57s-18.65-14.8-27.38-4.06c-6 8.15-36.83 48.2-36.83 48.2l19.23 14.43zm-150.09-59.09c-9.01-8.25-25.91 2.13-25.91 2.13s39.52 55.04 41.12 57.45l19.46-13.73s-25.67-37.61-34.66-45.86h-.01zM640 258.35c-19.78 0-130.91.93-131.06.93v-101c4.81 0 12.42-.4 22.85-1.2 40.88-2.41 70.13-4 87.77-4.81 0 0 12.22-27.19-.59-33.44-3.07-1.18-23.17 4.58-23.17 4.58s-165.22 16.49-232.36 18.05c1.6 8.82 7.62 17.08 15.78 19.55 13.31 3.48 22.69 1.7 49.15.89 24.83-1.6 43.68-2.43 56.51-2.43v99.81H351.41s2.82 22.31 25.51 22.85h107.94v70.92c0 13.97-11.19 21.99-24.48 21.12-14.08.11-26.08-1.15-41.69-1.81 1.99 3.97 6.33 14.39 19.31 21.84 9.88 4.81 16.17 6.57 26.02 6.57 29.56 0 45.67-17.28 44.89-45.31v-73.32h122.36c9.68 0 8.7-23.78 8.7-23.78l.03-.01z"] 50063}; 50064 50065bunker(function () { 50066 define('fab', icons); 50067}); 50068 50069}()); 50070 50071/*! 50072 * Font Awesome Free 5.2.0 by @fontawesome - https://fontawesome.com 50073 * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 50074 */ 50075(function () { 50076'use strict'; 50077 50078var noop = function noop() {}; 50079 50080var _WINDOW = {}; 50081var _DOCUMENT = {}; 50082var _MUTATION_OBSERVER$1 = null; 50083var _PERFORMANCE = { mark: noop, measure: noop }; 50084 50085try { 50086 if (typeof window !== 'undefined') _WINDOW = window; 50087 if (typeof document !== 'undefined') _DOCUMENT = document; 50088 if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER$1 = MutationObserver; 50089 if (typeof performance !== 'undefined') _PERFORMANCE = performance; 50090} catch (e) {} 50091 50092var _ref = _WINDOW.navigator || {}; 50093var _ref$userAgent = _ref.userAgent; 50094var userAgent = _ref$userAgent === undefined ? '' : _ref$userAgent; 50095 50096var WINDOW = _WINDOW; 50097var DOCUMENT = _DOCUMENT; 50098var MUTATION_OBSERVER = _MUTATION_OBSERVER$1; 50099var PERFORMANCE = _PERFORMANCE;
50100var IS_BROWSER = !!WINDOW.document; 50101var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; 50102var IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); 50103 50104var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; 50105var UNITS_IN_GRID = 16; 50106var DEFAULT_FAMILY_PREFIX = 'fa'; 50107var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa'; 50108var DATA_FA_I2SVG = 'data-fa-i2svg'; 50109var DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element'; 50110var DATA_PREFIX = 'data-prefix'; 50111var DATA_ICON = 'data-icon'; 50112var HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg'; 50113var TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT']; 50114var PRODUCTION = function () { 50115 try { 50116 return "production" === 'production'; 50117 } catch (e) { 50118 return false; 50119 } 50120}(); 50121 50122var oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 50123var oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]); 50124 50125var ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask']; 50126 50127var RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) { 50128 return n + 'x'; 50129})).concat(oneToTwenty.map(function (n) { 50130 return 'w-' + n; 50131})); 50132 50133var classCallCheck = function (instance, Constructor) { 50134 if (!(instance instanceof Constructor)) { 50135 throw new TypeError("Cannot call a class as a function"); 50136 } 50137}; 50138 50139var createClass = function () { 50140 function defineProperties(target, props) { 50141 for (var i = 0; i < props.length; i++) { 50142 var descriptor = props[i]; 50143 descriptor.enumerable = descriptor.enumerable || false; 50144 descriptor.configurable = true; 50145 if ("value" in descriptor) descriptor.writable = true; 50146 Object.defineProperty(target, descriptor.key, descriptor); 50147 } 50148 } 50149 50150 return function (Constructor, protoProps, staticProps) { 50151 if (protoProps) defineProperties(Constructor.prototype, protoProps); 50152 if (staticProps) defineProperties(Constructor, staticProps); 50153 return Constructor; 50154 }; 50155}(); 50156 50157 50158 50159var _extends = Object.assign || function (target) { 50160 for (var i = 1; i < arguments.length; i++) { 50161 var source = arguments[i]; 50162 50163 for (var key in source) { 50164 if (Object.prototype.hasOwnProperty.call(source, key)) { 50165 target[key] = source[key]; 50166 } 50167 } 50168 } 50169 50170 return target; 50171}; 50172 50173 50174 50175var slicedToArray = function () { 50176 function sliceIterator(arr, i) { 50177 var _arr = []; 50178 var _n = true; 50179 var _d = false; 50180 var _e = undefined; 50181 50182 try { 50183 for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { 50184 _arr.push(_s.value); 50185 50186 if (i && _arr.length === i) break; 50187 } 50188 } catch (err) { 50189 _d = true; 50190 _e = err; 50191 } finally { 50192 try { 50193 if (!_n && _i["return"]) _i["return"](); 50194 } finally { 50195 if (_d) throw _e; 50196 } 50197 } 50198 50199 return _arr; 50200 } 50201 50202 return function (arr, i) { 50203 if (Array.isArray(arr)) { 50204 return arr; 50205 } else if (Symbol.iterator in Object(arr)) { 50206 return sliceIterator(arr, i); 50207 } else { 50208 throw new TypeError("Invalid attempt to destructure non-iterable instance"); 50209 } 50210 }; 50211}(); 50212 50213var toConsumableArray = function (arr) { 50214 if (Array.isArray(arr)) { 50215 for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; 50216 50217 return arr2; 50218 } else { 50219 return Array.from(arr); 50220 } 50221}; 50222 50223var initial = WINDOW.FontAwesomeConfig || {}; 50224 50225function getAttrConfig(attr) { 50226 var element = DOCUMENT.querySelector('script[' + attr + ']'); 50227 50228 if (element) { 50229 return element.getAttribute(attr); 50230 } 50231} 50232 50233function coerce(val) { 50234 // Getting an empty string will occur if the attribute is set on the HTML tag but without a value 50235 // We'll assume that this is an indication that it should be toggled to true 50236 // For example <script data-search-pseudo-elements src="..."></script> 50237 if (val === '') return true; 50238 if (val === 'false') return false;
50239 if (val === 'true') return true; 50240 return val; 50241} 50242 50243if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') { 50244 var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']]; 50245 50246 attrs.forEach(function (_ref) { 50247 var _ref2 = slicedToArray(_ref, 2), 50248 attr = _ref2[0], 50249 key = _ref2[1]; 50250 50251 var val = coerce(getAttrConfig(attr)); 50252 50253 if (val !== undefined && val !== null) { 50254 initial[key] = val; 50255 } 50256 }); 50257} 50258 50259var _default = _extends({ 50260 familyPrefix: DEFAULT_FAMILY_PREFIX, 50261 replacementClass: DEFAULT_REPLACEMENT_CLASS, 50262 autoReplaceSvg: true, 50263 autoAddCss: true, 50264 autoA11y: true, 50265 searchPseudoElements: false, 50266 observeMutations: true, 50267 keepOriginalSource: true, 50268 measurePerformance: false, 50269 showMissingIcons: true 50270}, initial); 50271 50272if (!_default.autoReplaceSvg) _default.observeMutations = false; 50273 50274var config = _extends({}, _default); 50275 50276WINDOW.FontAwesomeConfig = config; 50277 50278var w = WINDOW || {}; 50279 50280if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; 50281if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; 50282if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; 50283if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; 50284 50285var namespace = w[NAMESPACE_IDENTIFIER]; 50286 50287var functions = []; 50288var listener = function listener() { 50289 DOCUMENT.removeEventListener('DOMContentLoaded', listener); 50290 loaded = 1; 50291 functions.map(function (fn) { 50292 return fn(); 50293 }); 50294}; 50295 50296var loaded = false; 50297 50298if (IS_DOM) { 50299 loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); 50300 50301 if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener); 50302} 50303 50304var domready = function (fn) { 50305 if (!IS_DOM) return; 50306 loaded ? setTimeout(fn, 0) : functions.push(fn); 50307}; 50308 50309var d = UNITS_IN_GRID; 50310 50311var meaninglessTransform = { 50312 size: 16, 50313 x: 0, 50314 y: 0, 50315 rotate: 0, 50316 flipX: false, 50317 flipY: false 50318}; 50319 50320function isReserved(name) { 50321 return ~RESERVED_CLASSES.indexOf(name); 50322} 50323 50324function bunker(fn) { 50325 try { 50326 fn(); 50327 } catch (e) { 50328 if (!PRODUCTION) { 50329 throw e; 50330 } 50331 } 50332} 50333 50334function insertCss(css) { 50335 if (!css || !IS_DOM) { 50336 return; 50337 } 50338 50339 var style = DOCUMENT.createElement('style'); 50340 style.setAttribute('type', 'text/css'); 50341 style.innerHTML = css; 50342 50343 var headChildren = DOCUMENT.head.childNodes; 50344 var beforeChild = null; 50345 50346 for (var i = headChildren.length - 1; i > -1; i--) { 50347 var child = headChildren[i]; 50348 var tagName = (child.tagName || '').toUpperCase(); 50349 if (['STYLE', 'LINK'].indexOf(tagName) > -1) { 50350 beforeChild = child; 50351 } 50352 } 50353 50354 DOCUMENT.head.insertBefore(style, beforeChild); 50355 50356 return css; 50357} 50358 50359var _uniqueId = 0; 50360 50361function nextUniqueId() { 50362 _uniqueId++; 50363 50364 return _uniqueId; 50365} 50366 50367function toArray(obj) { 50368 var array = []; 50369 50370 for (var i = (obj || []).length >>> 0; i--;) { 50371 array[i] = obj[i]; 50372 } 50373 50374 return array; 50375} 50376 50377function classArray(node) { 50378 if (node.classList) { 50379 return toArray(node.classList); 50380 } else { 50381 return (node.getAttribute('class') || '').split(' ').filter(function (i) { 50382 return i; 50383 }); 50384 } 50385} 50386 50387function getIconName(familyPrefix, cls) { 50388 var parts = cls.split('-'); 50389 var prefix = parts[0]; 50390 var iconName = parts.slice(1).join('-'); 50391 50392 if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) { 50393 return iconName; 50394 } else { 50395 return null; 50396 } 50397} 50398 50399function htmlEscape(str) { 50400 return ('' + str).replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>'); 50401} 50402 50403function joinAttributes(attributes) { 50404 return Object.keys(attributes || {}).reduce(function (acc, attributeName) { 50405 return acc + (attributeName + '="' + htmlEscape(attributes[attributeName]) + '" '); 50406 }, '').trim(); 50407} 50408 50409function joinStyles(styles) { 50410 return Object.keys(styles || {}).reduce(function (acc, styleName) { 50411 return acc + (styleName + ': ' + styles[styleName] + ';'); 50412 }, ''); 50413} 50414 50415function transformIsMeaningful(transform) { 50416 return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY; 50417} 50418 50419function transformForSvg(_ref) { 50420 var transform = _ref.transform, 50421 containerWidth = _ref.containerWidth, 50422 iconWidth = _ref.iconWidth; 50423 50424 var outer = { 50425 transform: 'translate(' + containerWidth / 2 + ' 256)' 50426 }; 50427 var innerTranslate = 'translate(' + transform.x * 32 + ', ' + transform.y * 32 + ') '; 50428 var innerScale = 'scale(' + transform.size / 16 * (transform.flipX ? -1 : 1) + ', ' + transform.size / 16 * (transform.flipY ? -1 : 1) + ') '; 50429 var innerRotate = 'rotate(' + transform.rotate + ' 0 0)'; 50430 var inner = { 50431 transform: innerTranslate + ' ' + innerScale + ' ' + innerRotate 50432 }; 50433 var path = { 50434 transform: 'translate(' + iconWidth / 2 * -1 + ' -256)' 50435 }; 50436 return { 50437 outer: outer, 50438 inner: inner, 50439 path: path 50440 }; 50441} 50442 50443function transformForCss(_ref2) { 50444 var transform = _ref2.transform, 50445 _ref2$width = _ref2.width, 50446 width = _ref2$width === undefined ? UNITS_IN_GRID : _ref2$width, 50447 _ref2$height = _ref2.height, 50448 height = _ref2$height === undefined ? UNITS_IN_GRID : _ref2$height, 50449 _ref2$startCentered = _ref2.startCentered, 50450 startCentered = _ref2$startCentered === undefined ? false : _ref2$startCentered; 50451 50452 var val = ''; 50453 50454 if (startCentered && IS_IE) { 50455 val += 'translate(' + (transform.x / d - width / 2) + 'em, ' + (transform.y / d - height / 2) + 'em) '; 50456 } else if (startCentered) { 50457 val += 'translate(calc(-50% + ' + transform.x / d + 'em), calc(-50% + ' + transform.y / d + 'em)) '; 50458 } else { 50459 val += 'translate(' + transform.x / d + 'em, ' + transform.y / d + 'em) '; 50460 } 50461 50462 val += 'scale(' + transform.size / d * (transform.flipX ? -1 : 1) + ', ' + transform.size / d * (transform.flipY ? -1 : 1) + ') '; 50463 val += 'rotate(' + transform.rotate + 'deg) '; 50464 50465 return val; 50466} 50467 50468var ALL_SPACE = { 50469 x: 0, 50470 y: 0, 50471 width: '100%', 50472 height: '100%' 50473}; 50474 50475var makeIconMasking = function (_ref) { 50476 var children = _ref.children, 50477 attributes = _ref.attributes, 50478 main = _ref.main, 50479 mask = _ref.mask, 50480 transform = _ref.transform; 50481 var mainWidth = main.width, 50482 mainPath = main.icon; 50483 var maskWidth = mask.width, 50484 maskPath = mask.icon; 50485 50486 50487 var trans = transformForSvg({ transform: transform, containerWidth: maskWidth, iconWidth: mainWidth }); 50488 50489 var maskRect = { 50490 tag: 'rect', 50491 attributes: _extends({}, ALL_SPACE, { 50492 fill: 'white' 50493 }) 50494 }; 50495 var maskInnerGroup = { 50496 tag: 'g', 50497 attributes: _extends({}, trans.inner), 50498 children: [{ tag: 'path', attributes: _extends({}, mainPath.attributes, trans.path, { fill: 'black' }) }] 50499 }; 50500 var maskOuterGroup = { 50501 tag: 'g', 50502 attributes: _extends({}, trans.outer), 50503 children: [maskInnerGroup] 50504 }; 50505 var maskId = 'mask-' + nextUniqueId(); 50506 var clipId = 'clip-' + nextUniqueId(); 50507 var maskTag = { 50508 tag: 'mask', 50509 attributes: _extends({}, ALL_SPACE, { 50510 id: maskId, 50511 maskUnits: 'userSpaceOnUse', 50512 maskContentUnits: 'userSpaceOnUse' 50513 }), 50514 children: [maskRect, maskOuterGroup] 50515 }; 50516 var defs = { 50517 tag: 'defs', 50518 children: [{ tag: 'clipPath', attributes: { id: clipId }, children: [maskPath] }, maskTag] 50519 }; 50520 50521 children.push(defs, { tag: 'rect', attributes: _extends({ fill: 'currentColor', 'clip-path': 'url(#' + clipId + ')', mask: 'url(#' + maskId + ')' }, ALL_SPACE) }); 50522 50523 return { 50524 children: children, 50525 attributes: attributes 50526 }; 50527}; 50528 50529var makeIconStandard = function (_ref) { 50530 var children = _ref.children, 50531 attributes = _ref.attributes, 50532 main = _ref.main, 50533 transform = _ref.transform, 50534 styles = _ref.styles; 50535
50536 var styleString = joinStyles(styles); 50537 50538 if (styleString.length > 0) { 50539 attributes['style'] = styleString; 50540 } 50541 50542 if (transformIsMeaningful(transform)) { 50543 var trans = transformForSvg({ transform: transform, containerWidth: main.width, iconWidth: main.width }); 50544 children.push({ 50545 tag: 'g', 50546 attributes: _extends({}, trans.outer), 50547 children: [{ 50548 tag: 'g', 50549 attributes: _extends({}, trans.inner), 50550 children: [{ 50551 tag: main.icon.tag, 50552 children: main.icon.children, 50553 attributes: _extends({}, main.icon.attributes, trans.path) 50554 }] 50555 }] 50556 }); 50557 } else { 50558 children.push(main.icon); 50559 } 50560 50561 return { 50562 children: children, 50563 attributes: attributes 50564 }; 50565}; 50566 50567var asIcon = function (_ref) { 50568 var children = _ref.children, 50569 main = _ref.main, 50570 mask = _ref.mask, 50571 attributes = _ref.attributes, 50572 styles = _ref.styles, 50573 transform = _ref.transform; 50574 50575 if (transformIsMeaningful(transform) && main.found && !mask.found) { 50576 var width = main.width, 50577 height = main.height; 50578 50579 var offset = { 50580 x: width / height / 2, 50581 y: 0.5 50582 }; 50583 attributes['style'] = joinStyles(_extends({}, styles, { 50584 'transform-origin': offset.x + transform.x / 16 + 'em ' + (offset.y + transform.y / 16) + 'em' 50585 })); 50586 } 50587 50588 return [{ 50589 tag: 'svg', 50590 attributes: attributes, 50591 children: children 50592 }]; 50593}; 50594 50595var asSymbol = function (_ref) { 50596 var prefix = _ref.prefix, 50597 iconName = _ref.iconName, 50598 children = _ref.children, 50599 attributes = _ref.attributes, 50600 symbol = _ref.symbol; 50601 50602 var id = symbol === true ? prefix + '-' + config.familyPrefix + '-' + iconName : symbol; 50603 50604 return [{ 50605 tag: 'svg', 50606 attributes: { 50607 style: 'display: none;' 50608 }, 50609 children: [{ 50610 tag: 'symbol', 50611 attributes: _extends({}, attributes, { id: id }), 50612 children: children 50613 }] 50614 }]; 50615}; 50616 50617function makeInlineSvgAbstract(params) { 50618 var _params$icons = params.icons, 50619 main = _params$icons.main, 50620 mask = _params$icons.mask, 50621 prefix = params.prefix, 50622 iconName = params.iconName, 50623 transform = params.transform, 50624 symbol = params.symbol, 50625 title = params.title, 50626 extra = params.extra, 50627 _params$watchable = params.watchable, 50628 watchable = _params$watchable === undefined ? false : _params$watchable; 50629 50630 var _ref = mask.found ? mask : main, 50631 width = _ref.width, 50632 height = _ref.height; 50633 50634 var widthClass = 'fa-w-' + Math.ceil(width / height * 16); 50635 var attrClass = [config.replacementClass, iconName ? config.familyPrefix + '-' + iconName : '', widthClass].filter(function (c) { 50636 return extra.classes.indexOf(c) === -1; 50637 }).concat(extra.classes).join(' '); 50638 50639 var content = { 50640 children: [], 50641 attributes: _extends({}, extra.attributes, { 50642 'data-prefix': prefix, 50643 'data-icon': iconName, 50644 'class': attrClass, 50645 'role': 'img', 50646 'xmlns': 'http://www.w3.org/2000/svg', 50647 'viewBox': '0 0 ' + width + ' ' + height 50648 }) 50649 }; 50650 50651 if (watchable) { 50652 content.attributes[DATA_FA_I2SVG] = ''; 50653 } 50654 50655 if (title) content.children.push({ tag: 'title', attributes: { id: content.attributes['aria-labelledby'] || 'title-' + nextUniqueId() }, children: [title] }); 50656 50657 var args = _extends({}, content, { 50658 prefix: prefix, 50659 iconName: iconName, 50660 main: main, 50661 mask: mask, 50662 transform: transform, 50663 symbol: symbol, 50664 styles: extra.styles 50665 }); 50666 50667 var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args), 50668 children = _ref2.children, 50669 attributes = _ref2.attributes; 50670 50671 args.children = children; 50672 args.attributes = attributes; 50673 50674 if (symbol) { 50675 return asSymbol(args); 50676 } else { 50677 return asIcon(args); 50678 } 50679} 50680 50681function makeLayersTextAbstract(params) { 50682 var content = params.content, 50683 width = params.width, 50684 height = params.height, 50685 transform = params.transform, 50686 title = params.title, 50687 extra = params.extra, 50688 _params$watchable2 = params.watchable, 50689 watchable = _params$watchable2 === undefined ? false : _params$watchable2; 50690 50691 50692 var attributes = _extends({}, extra.attributes, title ? { 'title': title } : {}, { 50693 'class': extra.classes.join(' ') 50694 }); 50695 50696 if (watchable) { 50697 attributes[DATA_FA_I2SVG] = ''; 50698 } 50699 50700 var styles = _extends({}, extra.styles); 50701 50702 if (transformIsMeaningful(transform)) { 50703 styles['transform'] = transformForCss({ transform: transform, startCentered: true, width: width, height: height }); 50704 styles['-webkit-transform'] = styles['transform']; 50705 } 50706
vendor: 7,952 bytes, lines 50707-51035
50707 var styleString = joinStyles(styles); 50708 50709 if (styleString.length > 0) { 50710 attributes['style'] = styleString; 50711 } 50712 50713 var val = []; 50714 50715 val.push({ 50716 tag: 'span', 50717 attributes: attributes, 50718 children: [content] 50719 }); 50720 50721 if (title) { 50722 val.push({ tag: 'span', attributes: { class: 'sr-only' }, children: [title] }); 50723 } 50724 50725 return val; 50726} 50727 50728function makeLayersCounterAbstract(params) { 50729 var content = params.content, 50730 title = params.title, 50731 extra = params.extra; 50732 50733 50734 var attributes = _extends({}, extra.attributes, title ? { 'title': title } : {}, { 50735 'class': extra.classes.join(' ') 50736 }); 50737 50738 var styleString = joinStyles(extra.styles); 50739 50740 if (styleString.length > 0) { 50741 attributes['style'] = styleString; 50742 } 50743 50744 var val = []; 50745 50746 val.push({ 50747 tag: 'span', 50748 attributes: attributes, 50749 children: [content] 50750 }); 50751 50752 if (title) { 50753 val.push({ tag: 'span', attributes: { class: 'sr-only' }, children: [title] }); 50754 } 50755 50756 return val; 50757} 50758 50759var noop$2 = function noop() {}; 50760var p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { mark: noop$2, measure: noop$2 }; 50761var preamble = 'FA "5.2.0"'; 50762 50763var begin = function begin(name) { 50764 p.mark(preamble + ' ' + name + ' begins'); 50765 return function () { 50766 return end(name); 50767 }; 50768}; 50769 50770var end = function end(name) { 50771 p.mark(preamble + ' ' + name + ' ends'); 50772 p.measure(preamble + ' ' + name, preamble + ' ' + name + ' begins', preamble + ' ' + name + ' ends'); 50773}; 50774 50775var perf = { begin: begin, end: end }; 50776 50777'use strict'; 50778 50779/** 50780 * Internal helper to bind a function known to have 4 arguments 50781 * to a given context. 50782 */ 50783var bindInternal4 = function bindInternal4 (func, thisContext) { 50784 return function (a, b, c, d) { 50785 return func.call(thisContext, a, b, c, d); 50786 }; 50787}; 50788 50789'use strict'; 50790 50791 50792 50793/** 50794 * # Reduce 50795 * 50796 * A fast object `.reduce()` implementation. 50797 * 50798 * @param {Object} subject The object to reduce over. 50799 * @param {Function} fn The reducer function. 50800 * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0]. 50801 * @param {Object} thisContext The context for the reducer. 50802 * @return {mixed} The final result. 50803 */ 50804var reduce = function fastReduceObject (subject, fn, initialValue, thisContext) { 50805 var keys = Object.keys(subject), 50806 length = keys.length, 50807 iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, 50808 i, key, result; 50809 50810 if (initialValue === undefined) { 50811 i = 1; 50812 result = subject[keys[0]]; 50813 } 50814 else { 50815 i = 0; 50816 result = initialValue; 50817 } 50818 50819 for (; i < length; i++) { 50820 key = keys[i]; 50821 result = iterator(result, subject[key], key, subject); 50822 } 50823 50824 return result; 50825}; 50826 50827var styles$2 = namespace.styles; 50828var shims = namespace.shims; 50829 50830 50831var _byUnicode = {}; 50832var _byLigature = {}; 50833var _byOldName = {}; 50834 50835var build = function build() { 50836 var lookup = function lookup(reducer) { 50837 return reduce(styles$2, function (o, style, prefix) { 50838 o[prefix] = reduce(style, reducer, {}); 50839 return o; 50840 }, {}); 50841 }; 50842 50843 _byUnicode = lookup(function (acc, icon, iconName) { 50844 acc[icon[3]] = iconName; 50845 50846 return acc; 50847 }); 50848 50849 _byLigature = lookup(function (acc, icon, iconName) { 50850 var ligatures = icon[2]; 50851 50852 acc[iconName] = iconName; 50853 50854 ligatures.forEach(function (ligature) { 50855 acc[ligature] = iconName; 50856 }); 50857 50858 return acc; 50859 }); 50860 50861 var hasRegular = 'far' in styles$2; 50862 50863 _byOldName = reduce(shims, function (acc, shim) { 50864 var oldName = shim[0]; 50865 var prefix = shim[1]; 50866 var iconName = shim[2]; 50867 50868 if (prefix === 'far' && !hasRegular) { 50869 prefix = 'fas'; 50870 } 50871 50872 acc[oldName] = { prefix: prefix, iconName: iconName }; 50873 50874 return acc; 50875 }, {}); 50876}; 50877 50878build(); 50879 50880function byUnicode(prefix, unicode) { 50881 return _byUnicode[prefix][unicode]; 50882} 50883 50884function byLigature(prefix, ligature) { 50885 return _byLigature[prefix][ligature]; 50886} 50887 50888function byOldName(name) { 50889 return _byOldName[name] || { prefix: null, iconName: null }; 50890} 50891 50892var styles$1 = namespace.styles; 50893 50894 50895var emptyCanonicalIcon = function emptyCanonicalIcon() { 50896 return { prefix: null, iconName: null, rest: [] }; 50897}; 50898 50899function getCanonicalIcon(values) { 50900 return values.reduce(function (acc, cls) { 50901 var iconName = getIconName(config.familyPrefix, cls); 50902 50903 if (styles$1[cls]) { 50904 acc.prefix = cls; 50905 } else if (iconName) { 50906 var shim = acc.prefix === 'fa' ? byOldName(iconName) : {}; 50907 50908 acc.iconName = shim.iconName || iconName; 50909 acc.prefix = shim.prefix || acc.prefix; 50910 } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) { 50911 acc.rest.push(cls); 50912 } 50913 50914 return acc; 50915 }, emptyCanonicalIcon()); 50916} 50917 50918function iconFromMapping(mapping, prefix, iconName) { 50919 if (mapping && mapping[prefix] && mapping[prefix][iconName]) { 50920 return { 50921 prefix: prefix, 50922 iconName: iconName, 50923 icon: mapping[prefix][iconName] 50924 }; 50925 } 50926} 50927 50928function toHtml(abstractNodes) { 50929 var tag = abstractNodes.tag, 50930 _abstractNodes$attrib = abstractNodes.attributes, 50931 attributes = _abstractNodes$attrib === undefined ? {} : _abstractNodes$attrib, 50932 _abstractNodes$childr = abstractNodes.children, 50933 children = _abstractNodes$childr === undefined ? [] : _abstractNodes$childr; 50934 50935 50936 if (typeof abstractNodes === 'string') { 50937 return htmlEscape(abstractNodes); 50938 } else { 50939 return '<' + tag + ' ' + joinAttributes(attributes) + '>' + children.map(toHtml).join('') + '</' + tag + '>'; 50940 } 50941} 50942 50943var noop$1 = function noop() {}; 50944 50945function isWatched(node) { 50946 var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null; 50947 50948 return typeof i2svg === 'string'; 50949} 50950 50951function getMutator() { 50952 if (config.autoReplaceSvg === true) { 50953 return mutators.replace; 50954 } 50955 50956 var mutator = mutators[config.autoReplaceSvg]; 50957 50958 return mutator || mutators.replace; 50959} 50960 50961var mutators = { 50962 replace: function replace(mutation) { 50963 var node = mutation[0]; 50964 var abstract = mutation[1]; 50965 var newOuterHTML = abstract.map(function (a) { 50966 return toHtml(a); 50967 }).join('\n'); 50968 50969 if (node.parentNode && node.outerHTML) { 50970 node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? '<!-- ' + node.outerHTML + ' -->' : ''); 50971 } else if (node.parentNode) { 50972 var newNode = document.createElement('span'); 50973 node.parentNode.replaceChild(newNode, node); 50974 newNode.outerHTML = newOuterHTML; 50975 } 50976 }, 50977 nest: function nest(mutation) { 50978 var node = mutation[0]; 50979 var abstract = mutation[1]; 50980 50981 // If we already have a replaced node we do not want to continue nesting within it. 50982 // Short-circuit to the standard replacement 50983 if (~classArray(node).indexOf(config.replacementClass)) { 50984 return mutators.replace(mutation); 50985 } 50986 50987 var forSvg = new RegExp(config.familyPrefix + '-.*'); 50988 50989 delete abstract[0].attributes.style; 50990 50991 var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) { 50992 if (cls === config.replacementClass || cls.match(forSvg)) { 50993 acc.toSvg.push(cls); 50994 } else { 50995 acc.toNode.push(cls); 50996 } 50997 50998 return acc; 50999 }, { toNode: [], toSvg: [] }); 51000 51001 abstract[0].attributes.class = splitClasses.toSvg.join(' '); 51002 51003 var newInnerHTML = abstract.map(function (a) { 51004 return toHtml(a); 51005 }).join('\n'); 51006 node.setAttribute('class', splitClasses.toNode.join(' ')); 51007 node.setAttribute(DATA_FA_I2SVG, ''); 51008 node.innerHTML = newInnerHTML; 51009 } 51010}; 51011 51012function perform(mutations, callback) { 51013 var callbackFunction = typeof callback === 'function' ? callback : noop$1; 51014 51015 if (mutations.length === 0) { 51016 callbackFunction(); 51017 } else { 51018 var frame = WINDOW.requestAnimationFrame || function (op) { 51019 return op(); 51020 }; 51021 51022 frame(function () { 51023 var mutator = getMutator(); 51024 var mark = perf.begin('mutate'); 51025 51026 mutations.map(mutator); 51027 51028 mark(); 51029 51030 callbackFunction(); 51031 }); 51032 } 51033} 51034 51035var disabled = false;
51036 51037function disableObservation(operation) { 51038 disabled = true; 51039 operation(); 51040 disabled = false; 51041} 51042 51043var mo = null; 51044 51045function observe(options) { 51046 if (!MUTATION_OBSERVER) { 51047 return; 51048 } 51049 51050 if (!config.observeMutations) { 51051 return; 51052 } 51053 51054 var treeCallback = options.treeCallback, 51055 nodeCallback = options.nodeCallback, 51056 pseudoElementsCallback = options.pseudoElementsCallback, 51057 _options$observeMutat = options.observeMutationsRoot, 51058 observeMutationsRoot = _options$observeMutat === undefined ? DOCUMENT.body : _options$observeMutat; 51059 51060 51061 mo = new MUTATION_OBSERVER(function (objects) { 51062 if (disabled) return; 51063 51064 toArray(objects).forEach(function (mutationRecord) { 51065 if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) { 51066 if (config.searchPseudoElements) { 51067 pseudoElementsCallback(mutationRecord.target); 51068 } 51069 51070 treeCallback(mutationRecord.target); 51071 } 51072 51073 if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) { 51074 pseudoElementsCallback(mutationRecord.target.parentNode); 51075 } 51076 51077 if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) { 51078 if (mutationRecord.attributeName === 'class') { 51079 var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)), 51080 prefix = _getCanonicalIcon.prefix, 51081 iconName = _getCanonicalIcon.iconName; 51082 51083 if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix); 51084 if (iconName) mutationRecord.target.setAttribute('data-icon', iconName); 51085 } else { 51086 nodeCallback(mutationRecord.target); 51087 } 51088 } 51089 }); 51090 }); 51091 51092 if (!IS_DOM) return; 51093 51094 mo.observe(observeMutationsRoot, { 51095 childList: true, attributes: true, characterData: true, subtree: true 51096 }); 51097} 51098 51099function disconnect() { 51100 if (!mo) return; 51101 51102 mo.disconnect(); 51103} 51104 51105var styleParser = function (node) { 51106 var style = node.getAttribute('style'); 51107 51108 var val = []; 51109 51110 if (style) { 51111 val = style.split(';').reduce(function (acc, style) { 51112 var styles = style.split(':'); 51113 var prop = styles[0]; 51114 var value = styles.slice(1); 51115 51116 if (prop && value.length > 0) { 51117 acc[prop] = value.join(':').trim(); 51118 } 51119 51120 return acc; 51121 }, {}); 51122 } 51123 51124 return val; 51125}; 51126 51127function toHex(unicode) { 51128 var result = ''; 51129 51130 for (var i = 0; i < unicode.length; i++) { 51131 var hex = unicode.charCodeAt(i).toString(16); 51132 result += ('000' + hex).slice(-4); 51133 } 51134 51135 return result; 51136} 51137 51138var classParser = function (node) { 51139 var existingPrefix = node.getAttribute('data-prefix'); 51140 var existingIconName = node.getAttribute('data-icon'); 51141 var innerText = node.innerText !== undefined ? node.innerText.trim() : ''; 51142 51143 var val = getCanonicalIcon(classArray(node)); 51144 51145 if (existingPrefix && existingIconName) { 51146 val.prefix = existingPrefix; 51147 val.iconName = existingIconName; 51148 } 51149 51150 if (val.prefix && innerText.length > 1) { 51151 val.iconName = byLigature(val.prefix, node.innerText); 51152 } else if (val.prefix && innerText.length === 1) { 51153 val.iconName = byUnicode(val.prefix, toHex(node.innerText)); 51154 } 51155 51156 return val; 51157}; 51158 51159var parseTransformString = function parseTransformString(transformString) { 51160 var transform = { 51161 size: 16, 51162 x: 0, 51163 y: 0, 51164 flipX: false, 51165 flipY: false, 51166 rotate: 0 51167 }; 51168 51169 if (!transformString) { 51170 return transform; 51171 } else { 51172 return transformString.toLowerCase().split(' ').reduce(function (acc, n) { 51173 var parts = n.toLowerCase().split('-'); 51174 var first = parts[0]; 51175 var rest = parts.slice(1).join('-'); 51176 51177 if (first && rest === 'h') { 51178 acc.flipX = true; 51179 return acc; 51180 } 51181 51182 if (first && rest === 'v') { 51183 acc.flipY = true; 51184 return acc; 51185 } 51186 51187 rest = parseFloat(rest); 51188 51189 if (isNaN(rest)) { 51190 return acc; 51191 } 51192 51193 switch (first) { 51194 case 'grow': 51195 acc.size = acc.size + rest; 51196 break; 51197 case 'shrink': 51198 acc.size = acc.size - rest; 51199 break; 51200 case 'left': 51201 acc.x = acc.x - rest; 51202 break; 51203 case 'right': 51204 acc.x = acc.x + rest; 51205 break; 51206 case 'up': 51207 acc.y = acc.y - rest; 51208 break; 51209 case 'down': 51210 acc.y = acc.y + rest; 51211 break; 51212 case 'rotate': 51213 acc.rotate = acc.rotate + rest; 51214 break; 51215 } 51216 51217 return acc; 51218 }, transform); 51219 } 51220}; 51221 51222var transformParser = function (node) { 51223 return parseTransformString(node.getAttribute('data-fa-transform')); 51224}; 51225 51226var symbolParser = function (node) { 51227 var symbol = node.getAttribute('data-fa-symbol'); 51228 51229 return symbol === null ? false : symbol === '' ? true : symbol; 51230}; 51231 51232var attributesParser = function (node) { 51233 var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) { 51234 if (acc.name !== 'class' && acc.name !== 'style') { 51235 acc[attr.name] = attr.value; 51236 } 51237 return acc; 51238 }, {}); 51239 51240 var title = node.getAttribute('title'); 51241 51242 if (config.autoA11y) { 51243 if (title) { 51244 extraAttributes['aria-labelledby'] = config.replacementClass + '-title-' + nextUniqueId(); 51245 } else { 51246 extraAttributes['aria-hidden'] = 'true'; 51247 } 51248 } 51249 51250 return extraAttributes; 51251}; 51252 51253var maskParser = function (node) { 51254 var mask = node.getAttribute('data-fa-mask'); 51255 51256 if (!mask) { 51257 return emptyCanonicalIcon(); 51258 } else { 51259 return getCanonicalIcon(mask.split(' ').map(function (i) { 51260 return i.trim(); 51261 })); 51262 } 51263}; 51264
51265var blankMeta = { 51266 iconName: null, 51267 title: null, 51268 prefix: null, 51269 transform: meaninglessTransform, 51270 symbol: false, 51271 mask: null, 51272 extra: { classes: [], styles: {}, attributes: {} } 51273}; 51274 51275function parseMeta(node) { 51276 var _classParser = classParser(node), 51277 iconName = _classParser.iconName, 51278 prefix = _classParser.prefix, 51279 extraClasses = _classParser.rest; 51280 51281 var extraStyles = styleParser(node); 51282 var transform = transformParser(node); 51283 var symbol = symbolParser(node); 51284 var extraAttributes = attributesParser(node); 51285 var mask = maskParser(node); 51286 51287 return { 51288 iconName: iconName, 51289 title: node.getAttribute('title'), 51290 prefix: prefix, 51291 transform: transform, 51292 symbol: symbol, 51293 mask: mask, 51294 extra: { 51295 classes: extraClasses, 51296 styles: extraStyles, 51297 attributes: extraAttributes 51298 } 51299 }; 51300} 51301 51302function MissingIcon(error) { 51303 this.name = 'MissingIcon'; 51304 this.message = error || 'Icon unavailable'; 51305 this.stack = new Error().stack; 51306} 51307 51308MissingIcon.prototype = Object.create(Error.prototype); 51309MissingIcon.prototype.constructor = MissingIcon; 51310 51311var FILL = { fill: 'currentColor' }; 51312var ANIMATION_BASE = { 51313 attributeType: 'XML', 51314 repeatCount: 'indefinite', 51315 dur: '2s' 51316}; 51317var RING = { 51318 tag: 'path', 51319 attributes: _extends({}, FILL, { 51320 d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z' 51321 }) 51322}; 51323var OPACITY_ANIMATE = _extends({}, ANIMATION_BASE, { 51324 attributeName: 'opacity' 51325}); 51326var DOT = { 51327 tag: 'circle', 51328 attributes: _extends({}, FILL, { 51329 cx: '256', 51330 cy: '364', 51331 r: '28' 51332 }), 51333 children: [{ tag: 'animate', attributes: _extends({}, ANIMATION_BASE, { attributeName: 'r', values: '28;14;28;28;14;28;' }) }, { tag: 'animate', attributes: _extends({}, OPACITY_ANIMATE, { values: '1;0;1;1;0;1;' }) }] 51334}; 51335var QUESTION = { 51336 tag: 'path', 51337 attributes: _extends({}, FILL, { 51338 opacity: '1', 51339 d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z' 51340 }), 51341 children: [{ tag: 'animate', attributes: _extends({}, OPACITY_ANIMATE, { values: '1;0;0;0;0;1;' }) }] 51342}; 51343var EXCLAMATION = { 51344 tag: 'path', 51345 attributes: _extends({}, FILL, { 51346 opacity: '0', 51347 d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z' 51348 }), 51349 children: [{ tag: 'animate', attributes: _extends({}, OPACITY_ANIMATE, { values: '0;0;1;1;0;0;' }) }] 51350}; 51351 51352var missing = { tag: 'g', children: [RING, DOT, QUESTION, EXCLAMATION] }; 51353 51354var styles = namespace.styles; 51355 51356var LAYERS_TEXT_CLASSNAME = 'fa-layers-text'; 51357var FONT_FAMILY_PATTERN = /Font Awesome 5 (Solid|Regular|Light|Brands|Free|Pro)/; 51358var STYLE_TO_PREFIX = { 51359 'Solid': 'fas', 51360 'Regular': 'far', 51361 'Light': 'fal', 51362 'Brands': 'fab' 51363}; 51364var FONT_WEIGHT_TO_PREFIX = { 51365 '900': 'fas', 51366 '400': 'far', 51367 '300': 'fal' 51368}; 51369 51370function findIcon(iconName, prefix) { 51371 var val = { 51372 found: false, 51373 width: 512, 51374 height: 512, 51375 icon: missing 51376 }; 51377 51378 if (iconName && prefix && styles[prefix] && styles[prefix][iconName]) { 51379 var icon = styles[prefix][iconName]; 51380 var width = icon[0]; 51381 var height = icon[1]; 51382 var vectorData = icon.slice(4); 51383 51384 val = { 51385 found: true, 51386 width: width, 51387 height: height, 51388 icon: { tag: 'path', attributes: { fill: 'currentColor', d: vectorData[0] } } 51389 }; 51390 } else if (iconName && prefix && !config.showMissingIcons) { 51391 throw new MissingIcon('Icon is missing for prefix ' + prefix + ' with icon name ' + iconName); 51392 } 51393 51394 return val; 51395} 51396 51397function generateSvgReplacementMutation(node, nodeMeta) {
51398 var iconName = nodeMeta.iconName, 51399 title = nodeMeta.title, 51400 prefix = nodeMeta.prefix, 51401 transform = nodeMeta.transform, 51402 symbol = nodeMeta.symbol, 51403 mask = nodeMeta.mask, 51404 extra = nodeMeta.extra; 51405 51406 51407 return [node, makeInlineSvgAbstract({ 51408 icons: { 51409 main: findIcon(iconName, prefix), 51410 mask: findIcon(mask.iconName, mask.prefix) 51411 }, 51412 prefix: prefix, 51413 iconName: iconName, 51414 transform: transform, 51415 symbol: symbol, 51416 mask: mask, 51417 title: title, 51418 extra: extra, 51419 watchable: true 51420 })]; 51421} 51422 51423function generateLayersText(node, nodeMeta) { 51424 var title = nodeMeta.title, 51425 transform = nodeMeta.transform, 51426 extra = nodeMeta.extra; 51427 51428 51429 var width = null; 51430 var height = null; 51431 51432 if (IS_IE) { 51433 var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10); 51434 var boundingClientRect = node.getBoundingClientRect(); 51435 width = boundingClientRect.width / computedFontSize; 51436 height = boundingClientRect.height / computedFontSize; 51437 } 51438 51439 if (config.autoA11y && !title) { 51440 extra.attributes['aria-hidden'] = 'true'; 51441 } 51442 51443 return [node, makeLayersTextAbstract({ 51444 content: node.innerHTML, 51445 width: width, 51446 height: height, 51447 transform: transform, 51448 title: title, 51449 extra: extra, 51450 watchable: true 51451 })]; 51452} 51453 51454function generateMutation(node) { 51455 var nodeMeta = parseMeta(node); 51456 51457 if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) { 51458 return generateLayersText(node, nodeMeta); 51459 } else { 51460 return generateSvgReplacementMutation(node, nodeMeta); 51461 } 51462} 51463 51464function searchPseudoElements(root) { 51465 if (!IS_DOM) return; 51466 51467 var end = perf.begin('searchPseudoElements'); 51468 51469 disableObservation(function () { 51470 toArray(root.querySelectorAll('*')).filter(function (n) { 51471 return n.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(n.tagName.toUpperCase()) && !n.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!n.parentNode || n.parentNode.tagName !== 'svg'); 51472 }
51472).forEach(function (node) { 51473 [':before', ':after'].forEach(function (pos) { 51474 var children = toArray(node.children); 51475 var alreadyProcessedPseudoElement = children.filter(function (c) { 51476 return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === pos; 51477 })[0]; 51478 51479 var styles = WINDOW.getComputedStyle(node, pos); 51480 var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN); 51481 var fontWeight = styles.getPropertyValue('font-weight'); 51482 51483 if (alreadyProcessedPseudoElement && !fontFamily) { 51484 // If we've already processed it but the current computed style does not result in a font-family, 51485 // that probably means that a class name that was previously present to make the icon has been 51486 // removed. So we now should delete the icon. 51487 node.removeChild(alreadyProcessedPseudoElement); 51488 } else if (fontFamily) { 51489 var content = styles.getPropertyValue('content'); 51490 var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1]] : FONT_WEIGHT_TO_PREFIX[fontWeight]; 51491 var iconName = byUnicode(prefix, toHex(content.length === 3 ? content.substr(1, 1) : content)); 51492 // Only convert the pseudo element in this :before/:after position into an icon if we haven't 51493 // already done so with the same prefix and iconName 51494 if (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconName) { 51495 if (alreadyProcessedPseudoElement) { 51496 // Delete the old one, since we're replacing it with a new one 51497 node.removeChild(alreadyProcessedPseudoElement); 51498 } 51499 51500 var extra = blankMeta.extra; 51501 51502 extra.attributes[DATA_FA_PSEUDO_ELEMENT] = pos; 51503 var abstract = makeInlineSvgAbstract(_extends({}, blankMeta, { 51504 icons: { 51505 main: findIcon(iconName, prefix), 51506 mask: emptyCanonicalIcon() 51507 }, 51508 prefix: prefix, 51509 iconName: iconName, 51510 extra: extra, 51511 watchable: true 51512 })); 51513 51514 var element = DOCUMENT.createElement('svg'); 51515 51516 if (pos === ':before') { 51517 node.insertBefore(element, node.firstChild); 51518 } else { 51519 node.appendChild(element); 51520 } 51521 51522 element.outerHTML = abstract.map(function (a) { 51523 return toHtml(a); 51524 }).join('\n'); 51525 } 51526 } 51527 }); 51528 }); 51529 }); 51530 51531 end(); 51532} 51533 51534function onTree(root) { 51535 var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 51536 51537 if (!IS_DOM) return; 51538 51539 var htmlClassList = DOCUMENT.documentElement.classList; 51540 var hclAdd = function hclAdd(suffix) { 51541 return htmlClassList.add(HTML_CLASS_I2SVG_BASE_CLASS + '-' + suffix); 51542 }; 51543 var hclRemove = function hclRemove(suffix) { 51544 return htmlClassList.remove(HTML_CLASS_I2SVG_BASE_CLASS + '-' + suffix); 51545 }; 51546 var prefixes = Object.keys(styles); 51547 var prefixesDomQuery = ['.' + LAYERS_TEXT_CLASSNAME + ':not([' + DATA_FA_I2SVG + '])'].concat(prefixes.map(function (p) { 51548 return '.' + p + ':not([' + DATA_FA_I2SVG + '])'; 51549 })).join(', '); 51550 51551 if (prefixesDomQuery.length === 0) { 51552 return; 51553 } 51554 51555 var candidates = toArray(root.querySelectorAll(prefixesDomQuery)); 51556 51557 if (candidates.length > 0) { 51558 hclAdd('pending'); 51559 hclRemove('complete'); 51560 } else { 51561 return; 51562 } 51563 51564 var mark = perf.begin('onTree'); 51565 51566 var mutations = candidates.reduce(function (acc, node) { 51567 try { 51568 var mutation = generateMutation(node); 51569 51570 if (mutation) { 51571 acc.push(mutation); 51572 } 51573 } catch (e) { 51574 if (!PRODUCTION) { 51575 if (e instanceof MissingIcon) { 51576 console.error(e); 51577 } 51578 } 51579 } 51580 51581 return acc; 51582 }, []); 51583 51584 mark(); 51585 51586 perform(mutations, function () { 51587 hclAdd('active'); 51588 hclAdd('complete'); 51589 hclRemove('pending'); 51590 51591 if (typeof callback === 'function') callback(); 51592 }); 51593} 51594 51595function onNode(node) { 51596 var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 51597 51598 var mutation = generateMutation(node); 51599 51600 if (mutation) { 51601 perform([mutation], callback); 51602 } 51603} 51604 51605var baseStyles = "svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}
51605.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}
51605.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}"; 51606 51607var css = function () { 51608 var dfp = DEFAULT_FAMILY_PREFIX; 51609 var drc = DEFAULT_REPLACEMENT_CLASS; 51610 var fp = config.familyPrefix; 51611 var rc = config.replacementClass; 51612 var s = baseStyles; 51613 51614 if (fp !== dfp || rc !== drc) { 51615 var dPatt = new RegExp('\\.' + dfp + '\\-', 'g'); 51616 var rPatt = new RegExp('\\.' + drc, 'g'); 51617 51618 s = s.replace(dPatt, '.' + fp + '-').replace(rPatt, '.' + rc); 51619 } 51620 51621 return s; 51622}; 51623 51624function define(prefix, icons) { 51625 var normalized = Object.keys(icons).reduce(function (acc, iconName) { 51626 var icon = icons[iconName]; 51627 var expanded = !!icon.icon; 51628 51629 if (expanded) { 51630 acc[icon.iconName] = icon.icon; 51631 } else { 51632 acc[iconName] = icon; 51633 } 51634 return acc; 51635 }, {}); 51636 51637 if (typeof namespace.hooks.addPack === 'function') { 51638 namespace.hooks.addPack(prefix, normalized); 51639 } else { 51640 namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, normalized); 51641 } 51642 51643 /** 51644 * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction 51645 * of new styles we needed to differentiate between them. Prefix `fa` is now an alias 51646 * for `fas` so we'll easy the upgrade process for our users by automatically defining 51647 * this as well. 51648 */ 51649 if (prefix === 'fas') { 51650 define('fa', icons); 51651 } 51652} 51653 51654var Library = function () { 51655 function Library() { 51656 classCallCheck(this, Library); 51657 51658 this.definitions = {}; 51659 } 51660 51661 createClass(Library, [{ 51662 key: 'add', 51663 value: function add() { 51664 var _this = this; 51665 51666 for (var _len = arguments.length, definitions = Array(_len), _key = 0; _key < _len; _key++) { 51667 definitions[_key] = arguments[_key]; 51668 } 51669 51670 var additions = definitions.reduce(this._pullDefinitions, {}); 51671 51672 Object.keys(additions).forEach(function (key) { 51673 _this.definitions[key] = _extends({}, _this.definitions[key] || {}, additions[key]); 51674 define(key, additions[key]); 51675 build(); 51676 }); 51677 } 51678 }, { 51679 key: 'reset', 51680 value: function reset() { 51681 this.definitions = {}; 51682 } 51683 }, { 51684 key: '_pullDefinitions', 51685 value: function _pullDefinitions(additions, definition) { 51686 var normalized = definition.prefix && definition.iconName && definition.icon ? { 0: definition } : definition; 51687 51688 Object.keys(normalized).map(function (key) { 51689 var _normalized$key = normalized[key], 51690 prefix = _normalized$key.prefix, 51691 iconName = _normalized$key.iconName, 51692 icon = _normalized$key.icon; 51693 51694 51695 if (!additions[prefix]) additions[prefix] = {}; 51696 51697 additions[prefix][iconName] = icon; 51698 }); 51699 51700 return additions; 51701 } 51702 }]); 51703 return Library; 51704}(); 51705 51706function prepIcon(icon) { 51707 var width = icon[0]; 51708 var height = icon[1]; 51709 var vectorData = icon.slice(4); 51710 51711 return { 51712 found: true, 51713 width: width, 51714 height: height, 51715 icon: { tag: 'path', attributes: { fill: 'currentColor', d: vectorData[0] } } 51716 }; 51717} 51718 51719function ensureCss() { 51720 if (config.autoAddCss && !_cssInserted) { 51721 insertCss(css()); 51722 _cssInserted = true; 51723 } 51724} 51725 51726function apiObject(val, abstractCreator) { 51727 Object.defineProperty(val, 'abstract', { 51728 get: abstractCreator 51729 }); 51730 51731 Object.defineProperty(val, 'html', { 51732 get: function get() { 51733 return val.abstract.map(function (a) { 51734 return toHtml(a); 51735 }); 51736 } 51737 }); 51738 51739 Object.defineProperty(val, 'node', { 51740 get: function get() { 51741 if (!IS_DOM) return; 51742 51743 var container = DOCUMENT.createElement('div'); 51744 container.innerHTML = val.html; 51745 return container.children; 51746 } 51747 }); 51748 51749 return val; 51750} 51751 51752function findIconDefinition(params) { 51753 var _params$prefix = params.prefix, 51754 prefix = _params$prefix === undefined ? 'fa' : _params$prefix, 51755 iconName = params.iconName; 51756 51757 51758 if (!iconName) return; 51759 51760 return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName); 51761} 51762 51763function resolveIcons(next) { 51764 return function (maybeIconDefinition) { 51765 var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 51766 51767 var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {}); 51768 51769 var mask = params.mask; 51770 51771 51772 if (mask) { 51773 mask = (mask || {}).icon ? mask : findIconDefinition(mask || {}); 51774 } 51775 51776 return next(iconDefinition, _extends({}, params, { mask: mask })); 51777 }; 51778} 51779 51780var library = new Library(); 51781 51782var noAuto = function noAuto() { 51783 config.autoReplaceSvg = false;
51784 config.observeMutations = false; 51785 51786 disconnect(); 51787}; 51788 51789var _cssInserted = false; 51790 51791var dom = { 51792 i2svg: function i2svg() { 51793 var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 51794 51795 if (IS_DOM) { 51796 ensureCss(); 51797 51798 var _params$node = params.node, 51799 node = _params$node === undefined ? DOCUMENT : _params$node, 51800 _params$callback = params.callback, 51801 callback = _params$callback === undefined ? function () {} : _params$callback; 51802 51803 51804 if (config.searchPseudoElements) { 51805 searchPseudoElements(node); 51806 } 51807 51808 onTree(node, callback); 51809 } 51810 }, 51811 51812 css: css, 51813 51814 insertCss: function insertCss$$1() { 51815 if (!_cssInserted) { 51816 insertCss(css()); 51817 _cssInserted = true; 51818 } 51819 }, 51820 51821 watch: function watch() { 51822 var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 51823 var autoReplaceSvgRoot = params.autoReplaceSvgRoot, 51824 observeMutationsRoot = params.observeMutationsRoot; 51825 51826 51827 if (config.autoReplaceSvg === false) { 51828 config.autoReplaceSvg = true; 51829 } 51830 51831 config.observeMutations = true; 51832 51833 domready(function () { 51834 autoReplace({ 51835 autoReplaceSvgRoot: autoReplaceSvgRoot 51836 }); 51837 51838 observe({ 51839 treeCallback: onTree, 51840 nodeCallback: onNode, 51841 pseudoElementsCallback: searchPseudoElements, 51842 observeMutationsRoot: observeMutationsRoot 51843 }); 51844 }); 51845 } 51846}; 51847 51848var parse = { 51849 transform: function transform(transformString) { 51850 return parseTransformString(transformString); 51851 } 51852}; 51853 51854var icon = resolveIcons(function (iconDefinition) { 51855 var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 51856 var _params$transform = params.transform, 51857 transform = _params$transform === undefined ? meaninglessTransform : _params$transform, 51858 _params$symbol = params.symbol, 51859 symbol = _params$symbol === undefined ? false : _params$symbol, 51860 _params$mask = params.mask, 51861 mask = _params$mask === undefined ? null : _params$mask, 51862 _params$title = params.title, 51863 title = _params$title === undefined ? null : _params$title, 51864 _params$classes = params.classes, 51865 classes = _params$classes === undefined ? [] : _params$classes, 51866 _params$attributes = params.attributes, 51867 attributes = _params$attributes === undefined ? {} : _params$attributes, 51868 _params$styles = params.styles, 51869 styles = _params$styles === undefined ? {} : _params$styles; 51870 51871 51872 if (!iconDefinition) return; 51873 51874 var prefix = iconDefinition.prefix, 51875 iconName = iconDefinition.iconName, 51876 icon = iconDefinition.icon; 51877 51878 51879 return apiObject(_extends({ type: 'icon' }, iconDefinition), function () { 51880 ensureCss(); 51881 51882 if (config.autoA11y) { 51883 if (title) { 51884 attributes['aria-labelledby'] = config.replacementClass + '-title-' + nextUniqueId(); 51885 } else { 51886 attributes['aria-hidden'] = 'true'; 51887 } 51888 } 51889 51890 return makeInlineSvgAbstract({ 51891 icons: { 51892 main: prepIcon(icon), 51893 mask: mask ? prepIcon(mask.icon) : { found: false, width: null, height: null, icon: {} } 51894 }, 51895 prefix: prefix, 51896 iconName: iconName, 51897 transform: _extends({}, meaninglessTransform, transform), 51898 symbol: symbol, 51899 title: title, 51900 extra: { 51901 attributes: attributes, 51902 styles: styles, 51903 classes: classes 51904 } 51905 }); 51906 }); 51907}); 51908 51909var text = function text(content) { 51910 var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 51911 var _params$transform2 = params.transform, 51912 transform = _params$transform2 === undefined ? meaninglessTransform : _params$transform2, 51913 _params$title2 = params.title, 51914 title = _params$title2 === undefined ? null : _params$title2, 51915 _params$classes2 = params.classes, 51916 classes = _params$classes2 === undefined ? [] : _params$classes2, 51917 _params$attributes2 = params.attributes, 51918 attributes = _params$attributes2 === undefined ? {} : _params$attributes2, 51919 _params$styles2 = params.styles, 51920 styles = _params$styles2 === undefined ? {} : _params$styles2; 51921 51922 51923 return apiObject({ type: 'text', content: content }, function () { 51924 ensureCss(); 51925 51926 return makeLayersTextAbstract({ 51927 content: content, 51928 transform: _extends({}, meaninglessTransform, transform), 51929 title: title, 51930 extra: { 51931 attributes: attributes, 51932 styles: styles, 51933 classes: [config.familyPrefix + '-layers-text'].concat(toConsumableArray(classe
51933s)) 51934 } 51935 }); 51936 }); 51937}; 51938 51939var counter = function counter(content) { 51940 var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 51941 var _params$title3 = params.title, 51942 title = _params$title3 === undefined ? null : _params$title3, 51943 _params$classes3 = params.classes, 51944 classes = _params$classes3 === undefined ? [] : _params$classes3, 51945 _params$attributes3 = params.attributes, 51946 attributes = _params$attributes3 === undefined ? {} : _params$attributes3, 51947 _params$styles3 = params.styles, 51948 styles = _params$styles3 === undefined ? {} : _params$styles3; 51949 51950 51951 return apiObject({ type: 'counter', content: content }, function () { 51952 ensureCss(); 51953 51954 return makeLayersCounterAbstract({ 51955 content: content.toString(), 51956 title: title, 51957 extra: { 51958 attributes: attributes, 51959 styles: styles, 51960 classes: [config.familyPrefix + '-layers-counter'].concat(toConsumableArray(classes)) 51961 } 51962 }); 51963 }); 51964}; 51965 51966var layer = function layer(assembler) { 51967 return apiObject({ type: 'layer' }, function () { 51968 ensureCss(); 51969 51970 var children = []; 51971 51972 assembler(function (args) { 51973 Array.isArray(args) ? args.map(function (a) { 51974 children = children.concat(a.abstract); 51975 }) : children = children.concat(args.abstract); 51976 }); 51977 51978 return [{ 51979 tag: 'span', 51980 attributes: { class: config.familyPrefix + '-layers' }, 51981 children: children 51982 }]; 51983 }); 51984}; 51985 51986var api = { 51987 noAuto: noAuto, 51988 config: config, 51989 dom: dom, 51990 library: library, 51991 parse: parse, 51992 findIconDefinition: findIconDefinition, 51993 icon: icon, 51994 text: text, 51995 counter: counter, 51996 layer: layer, 51997 toHtml: toHtml 51998}; 51999 52000var autoReplace = function autoReplace() { 52001 var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 52002 var _params$autoReplaceSv = params.autoReplaceSvgRoot, 52003 autoReplaceSvgRoot = _params$autoReplaceSv === undefined ? DOCUMENT : _params$autoReplaceSv; 52004 52005 52006 if (Object.keys(namespace.styles).length > 0 && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({ node: autoReplaceSvgRoot }); 52007}; 52008 52009function bootstrap() { 52010 if (IS_BROWSER) { 52011 if (!WINDOW.FontAwesome) { 52012 WINDOW.FontAwesome = api; 52013 } 52014 52015 domready(function () { 52016 autoReplace(); 52017 52018 observe({ 52019 treeCallback: onTree, 52020 nodeCallback: onNode, 52021 pseudoElementsCallback: searchPseudoElements 52022 }); 52023 }); 52024 } 52025 52026 namespace.hooks = _extends({}, namespace.hooks, { 52027 52028 addPack: function addPack(prefix, icons) { 52029 namespace.styles[prefix] = _extends({}, namespace.styles[prefix] || {}, icons); 52030 52031 build(); 52032 autoReplace(); 52033 }, 52034 52035 addShims: function addShims(shims) { 52036 var _namespace$shims; 52037 52038 (_namespace$shims = namespace.shims).push.apply(_namespace$shims, toConsumableArray(shims)); 52039 52040 build(); 52041 autoReplace(); 52042 } 52043 }); 52044} 52045 52046bunker(bootstrap); 52047 52048}()); 52049 52050jQuery(function ($) { 52051 function showFullScreenMenu(callback) { 52052 if (callback) { 52053 $fullScreenMenu.one('transitionend', callback); 52054 } 52055 52056 $bodyHtml.stop().animate({ scrollTop: 0 }, 300, 'swing'); 52057 $fullScreenMenu.show(); 52058 $body.addClass('full-screen-open'); 52059 } 52060 52061 function hideFullScreenMenu() { 52062 $(window).scrollTop(0); 52063 52064 $fullScreenMenu.one('transitionend', function() { 52065 $fullScreenMenu.hide(); 52066 }); 52067 52068 $body.removeClass('full-screen-open'); 52069 } 52070 52071 var $body = $('body'); 52072 var $bodyHtml = $('body, html'); 52073 var $fullScreenMenu = $('#full-screen-menu'); 52074 var $world = $('#world'); 52075 var $worldContent = $world.find('.world-content'); 52076 52077 $fullScreenMenu.find('.close-button').on('click', function() { 52078 hideFullScreenMenu(); 52079 }); 52080 52081 $('.show-full-screen-menu').on('click', function() { 52082 var callback = null; 52083 52084 if ($(this).hasClass('search-button')) { 52085 callback = function() { 52086 $('#full-screen-menu-search-field').focus(); 52087 } 52088 } 52089 52090 showFullScreenMenu(callback); 52091 }); 52092 52093 $body.on('teha.cookie.consent', function() { 52094 console.log('Cookie consent: Loading GA');
vendor: 384 bytes, lines 52094-52101
52094 52095 52096 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 52097 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 52098 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 52099 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 52100 52101 ga('create', '
52101UA-2803438-1
vendor: 20 bytes, lines 52101-52102
52101', 'auto'); 52102
52102ga('set', 'anonymizeIp', true); 52103 ga('send', 'pageview'); 52104 }); 52105 52106 skCookieConsent({ 52107 infoLinkLabel: 'Les mer om informasjonskapsler i personvernserklæringen', 52108 message: 'Vi benytter cookies/informasjonskapsler for å forbedre brukeropplevelsen og optimalisere vår hjemmeside. Ved å trykke OK godtar du bruken av informasjonskapsler på afag.no.', 52109 acceptButtonLabel: 'OK', 52110 52111 infoLinkUrl: '/personvernerklaering', 52112 infoLinkTemplate: '<a target="_blank" class="more-button" href="%url%">%label%</a>', 52113 acceptButtonTemplate: '<button type="button" class="cookie-consent-accept-button more-button">%label%</button>' 52114 }); 52115}); 52116
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.