{"version":3,"sources":["webpack:///verdict-index-bef109a214aa0e57ba54.bundle.js","webpack:///webpack/bootstrap bef109a214aa0e57ba54?ca99*****","webpack:///./~/underscore/underscore.js?31a5*****","webpack:///external \"$\"?57aa*****","webpack:///./~/promise/lib/finally.js?1c58*****","webpack:///./js/pages/verdict-index.js","webpack:///./~/date-fns/is_date/index.js","webpack:///./~/date-fns/parse/index.js","webpack:///./~/promise/lib/index.js?d0e4*****","webpack:///./~/owl.carousel/dist/owl.carousel.js","webpack:///./~/promise/lib/node-extensions.js?001f*****","webpack:///./~/promise/lib/synchronous.js?70fd*****","webpack:///./~/promise/~/asap/browser-asap.js?9b3f*****","webpack:///./js/lib/models/pagination.js?3ea7*","webpack:///./js/lib/views/pagination-list.js?bd04*","webpack:///./~/promise/lib/core.js?fed0*****","webpack:///./js/lib/views/pagination-infinite.js","webpack:///./~/backbone/backbone.js?b8b2*****","webpack:///./js/lib/events.js","webpack:///(webpack)/buildin/global.js?3698*****","webpack:///./js/lib/dates.js","webpack:///./~/promise/~/asap/browser-raw.js?0985*****","webpack:///./js/lib/views/carousel.js","webpack:///./js/lib/helpers.js?5321*****","webpack:///./~/promise/index.js?2167*****","webpack:///./sass/pages/verdict-index.scss","webpack:///./~/promise/lib/done.js?24cc*****","webpack:///./~/promise/lib/es6-extensions.js?5bdc*****"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","0","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","createReduce","dir","iterator","obj","iteratee","memo","keys","index","length","currentKey","context","optimizeCb","isArrayLike","_","arguments","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","idx","Math","max","min","slice","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","constructor","proto","isFunction","ObjProto","prop","has","contains","push","root","this","previousUnderscore","ArrayProto","Array","FuncProto","Function","toString","nativeIsArray","isArray","nativeKeys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","VERSION","func","argCount","other","collection","accumulator","apply","identity","isObject","matcher","Infinity","createAssigner","keysFunc","undefinedOnly","source","key","baseCreate","result","MAX_ARRAY_INDEX","pow","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","includes","include","fromIndex","guard","values","indexOf","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extend","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","text","settings","oldSettings","offset","variable","render","e","data","chain","instance","_chain","mixin","valueOf","toJSON","undefined","1","$","10","Promise","f","then","resolve","err","104","_interopRequireDefault","default","_carousel","_carousel2","_pagination","_pagination2","_paginationInfinite","_paginationList","_paginationList2","sortedResults","window","MM","r","amount","paginator","perPage","makeInfinitePaginator","el","model","item_template","html","trigger","items","106","isDate","argument","107","parse","dirtyOptions","additionalDigits","DEFAULT_ADDITIONAL_DIGITS","Number","dateStrings","splitDateString","parseYearResult","parseYear","date","year","restDateString","parseDate","time","parseTime","timezone","parseTimezone","getTimezoneOffset","MILLISECONDS_IN_MINUTE","dateString","timeString","split","parseTokenDateTimeDelimeter","parseTokenPlainTime","token","parseTokenTimezone","exec","parseTokenYYY","parseTokensYYY","parseTokenYYYYY","parseTokensYYYYY","parseTokenYYYY","yearString","parseInt","parseTokenYY","centuryString","month","week","setUTCFullYear","parseTokenMM","parseTokenDDD","dayOfYear","parseTokenMMDD","day","parseTokenWww","dayOfISOYear","parseTokenWwwD","hours","minutes","parseTokenHH","MILLISECONDS_IN_HOUR","parseTokenHHMM","parseTokenHHMMSS","seconds","timezoneString","absoluteOffset","parseTokenTimezoneZ","parseTokenTimezoneHH","parseTokenTimezoneHHMM","isoYear","fourthOfJanuaryDay","getUTCDay","diff","setUTCDate","getUTCDate","11","117","__webpack_provided_window_dot_jQuery","jQuery","document","Owl","element","Defaults","$element","_handlers","_plugins","_supress","_current","_speed","_coordinates","_breakpoint","_width","_items","_clones","_mergers","_widths","_invalidated","_pipe","_drag","target","pointer","stage","current","direction","_states","tags","initializing","animating","dragging","proxy","handler","Plugins","plugin","charAt","toLowerCase","Workers","priority","worker","run","setup","initialize","loop","center","rewind","mouseDrag","touchDrag","pullDrag","freeDrag","margin","stagePadding","merge","mergeFit","autoWidth","startPosition","rtl","smartSpeed","fluidSpeed","dragEndSpeed","responsive","responsiveRefreshRate","responsiveBaseElement","fallbackEasing","info","nestedItemSelector","itemElement","stageElement","refreshClass","loadedClass","loadingClass","rtlClass","responsiveClass","dragClass","itemClass","stageClass","stageOuterClass","grabClass","Width","Default","Inner","Outer","Type","Event","State","width","relative","$stage","children","remove","grid","css","margin-left","margin-right","toFixed","widths","clones","view","repeat","append","prepend","normalize","outerHTML","addClass","appendTo","prependTo","coordinates","padding","abs","padding-left","padding-right","removeAttr","minimum","maximum","reset","animate","inner","outer","begin","end","op","removeClass","enter","toggleClass","is","imgs","nestedSelector","preloadAutoWidthImages","parent","not","refresh","invalidate","registerEventHandlers","leave","viewport","overwrites","breakpoint","attr","optionsLogic","prepare","event","content","update","grep","dimension","onThrottledResize","resizeTimer","onResize","isDefaultPrevented","support","transition","on","onTransitionEnd","onDragStart","onDragEnd","which","transform","x","y","top","speed","one","delta","onDragMove","preventDefault","pull","off","closest","coordinate","transform3d","state","part","v","suppress","release","isNumeric","reciprocalItemsWidth","elementWidth","mergers","odd","even","multiplier","newPosition","duration","from","to","factor","revert","distance","next","prev","stopPropagation","srcElement","originalTarget","innerWidth","documentElement","clientWidth","empty","addBack","add","splice","images","Image","src","destroy","unwrap","contents","removeData","listener","capture","addEventListener","attachEvent","removeEventListener","detachEvent","namespace","status","count","camelCase","relatedTarget","onTrigger","register","special","owl","_default","tag","inArray","events","originalEvent","touches","changedTouches","pageX","pageY","clientX","clientY","number","second","fn","owlCarousel","option","$this","Constructor","Zepto","AutoRefresh","carousel","_core","_interval","_visible","initialized.owl.carousel","autoRefresh","watch","autoRefreshInterval","setInterval","clearInterval","getOwnPropertyNames","Lazy","_loaded","initialized.owl.carousel change.owl.carousel resized.owl.carousel","lazyLoad","load","$item","$elements","image","url","devicePixelRatio","onload","background-image","opacity","handlers","AutoHeight","initialized.owl.carousel refreshed.owl.carousel","autoHeight","changed.owl.carousel","loaded.owl.lazy","autoHeightClass","visible","heights","maxheight","height","Video","_videos","_playing","resize.owl.carousel","video","isInFullScreen","refreshed.owl.carousel","prepared.owl.carousel","fetch","play","videoHeight","videoWidth","thumbnail","tnLink","icon","path","dimensions","customTn","srcType","lazyClass","ajax","jsonp","dataType","success","thumbnail_large","framegrab_url","insertAfter","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","hasClass","Animate","scope","core","swapping","change.owl.carousel","drag.owl.carousel dragged.owl.carousel translated.owl.carousel","translate.owl.carousel","animateOut","animateIn","swap","animation","clear","incoming","outgoing","Autoplay","_timeout","_paused","autoplay","_setAutoPlayInterval","play.owl.autoplay","t","stop.owl.autoplay","mouseover.owl.autoplay","autoplayHoverPause","pause","mouseleave.owl.autoplay","touchstart.owl.core","touchend.owl.core","autoplayTimeout","autoplaySpeed","_getNextTimeout","hidden","Navigation","_initialized","_pages","_controls","_templates","_overrides","dotsData","dotClass","added.owl.carousel","remove.owl.carousel","draw","nav","navText","navSpeed","navElement","navContainer","navContainerClass","navClass","slideBy","dotsClass","dots","dotsEach","dotsSpeed","dotsContainer","override","$relative","$previous","$next","$absolute","control","overides","k","lower","upper","disabled","page","getPosition","successor","standard","Hash","_hashes","hash","location","substring","URLhashListener","prefixed","toUpperCase","prefixes","style","WebkitTransition","MozTransition","OTransition","WebkitAnimation","MozAnimation","OAnimation","tests","csstransforms","csstransforms3d","csstransitions","cssanimations","12","denodeifyWithCount","argumentCount","body","callbackFn","denodeifyWithoutCount","fnLength","asap","denodeify","nodeify","callback","ctx","ex","13","enableSynchronous","isPending","getState","isFulfilled","isRejected","getValue","_65","_55","getReason","disableSynchronous","14","throwFirstError","pendingErrors","shift","task","rawTask","freeTasks","RawTask","rawAsap","requestErrorThrow","makeRequestCallFromTimer","error","onerror","15","Backbone","Paginator","Model","isLoading","numPages","getPageItems","getLoadedData","nextPage","getPage","getPerPage","isLastPage","17","PaginationList","View","opts","extra_context","renderInitial","_this","$el","_this2","2","getThen","LAST_ERROR","IS_ERROR","tryCallOne","tryCallTwo","_40","_72","doResolve","safeThen","onFulfilled","onRejected","res","handle","Handler","deferred","_37","handleResolved","promise","ret","newValue","finale","_87","done","reason","_61","28","infiniteEl","infinite","InfinitePagination","makeInfinite","paginatorOpts","_events2","presort","silent","postsort","models","deactivatePaginator","_events","_helpers","loader","bottom_offset","load_more_delay","maybeLoadMore","scrollTopDistance","innerHeight","3","global","factory","previousBackbone","emulateHTTP","emulateJSON","addMethod","attribute","defaultVal","unshift","addUnderscoreMethods","Class","_isModel","modelMatcher","attributes","Events","eventSplitter","eventsApi","internalOn","listening","onApi","_listeners","listenTo","_listenId","listeningTo","_listeningTo","thisId","objId","offApi","listeners","stopListening","ids","_callback","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","unbind","cid","cidPrefix","changed","validationError","idAttribute","sync","val","_validate","unset","changes","changing","_changing","_previousAttributes","_pending","hasChanged","changedAttributes","old","previousAttributes","resp","serverAttrs","wrapError","save","validate","isNew","patch","xhr","base","urlError","encodeURIComponent","isValid","Collection","comparator","_reset","setOptions","addOptions","insert","at","singular","removed","_removeModels","added","merged","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","_onModelEvent","prevId","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","_removeElement","setElement","undelegateEvents","_setElement","delegateEvents","delegate","eventName","undelegate","_createElement","createElement","_setAttributes","methodMap","params","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","param","decodeURIComponent","History","checkUrl","routeStripper","rootStripper","pathStripper","started","interval","atRoot","pathname","getSearch","matchRoot","decodeFragment","decodeURI","href","getHash","getPath","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iframe","display","tabIndex","iWindow","insertBefore","firstChild","contentWindow","open","close","_checkUrlInterval","loadUrl","removeChild","title","_updateHash","protoProps","staticProps","child","__super__","30","4","g","eval","48","_parse2","_parse","5","queue","requestFlush","flushing","flush","currentIndex","capacity","scan","newLength","handleTimer","timeoutHandle","intervalHandle","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","toggle","observer","node","createTextNode","observe","characterData","51","createCarousel","6","getParameterByName","regex","getHashFromCurrentUrl","truncateWords","truncationChars","words","truncateCharacters","toTitleCase","str","txt","substr","randomString","possible","pageYOffset","scrollTop","toggleScroll","flag","whenScrollReached","onScroll","7","79","fa-cc-visa","desktop-search-overlay","fa-sheqel","fa-rocket","fa-battery-1","fa-scribd","fa-sort-numeric-desc","fa-arrow-circle-o-down","fa-hand-pointer-o","fa-meh-o","fa-blind","fa-globe","fa-yahoo","fa-map-o","fa-feed","fa-moon-o","fa-hand-lizard-o","social-share-flat","hs-input","fa-sort-up","fa-cc-diners-club","fa-anchor","fa-bell-slash","fa-birthday-cake","fa-sort-desc","fa-mobile","fa-optin-monster","fa-columns","fa-facebook","fa-fonticons","fa-github-alt","highlighted","fa-angle-double-down","ctc-container","fa-paste","fa-git-square","fa-calculator","fa-registered","wide","fa-dollar","fa-hashtag","fa-play-circle","fa-chevron-down","fa-sticky-note-o","fa-mars","hero-header","fa-window-minimize","fa-amazon","fa-square","fa-code-fork","fa-navicon","fa-qq","fa-map-signs","fa-play-circle-o","navbar-toggle","footer-contact","fa-weixin","fa-caret-square-o-right","fa-superscript","fa-recycle","fa-question-circle","side-bar","fa-file-movie-o","fa-ra","fa-hourglass-3","li","fa-gbp","fa-inverse","fa-credit-card-alt","fa-edit","fa-hourglass-half","fa-paperclip","fa-download","fa-flickr","fa-thumbs-down","fa-git","fa-hand-paper-o","fa-plus-square-o","fa-bank","fa-hotel","fa-sticky-note","owl-carousel","fa-sort-asc","fa-share-alt","section","fa-euro","fa-thermometer-3","fa-li","fa-pied-piper","fa-close","fa-gear","fa-adjust","fa-stumbleupon","fa-wpforms","dropdown-mega","fa-paypal","fa-toggle-left","card-top-alert","fa-id-badge","fa-hand-o-right","fa-exchange","fa-binoculars","fa-gg","fa-plus-circle","fa-toggle-right","dropdown-florida-list","no-float","input-container","fa-facebook-square","fa-indent","fa-calendar-minus-o","placeholder","fa-heartbeat","fa-windows","fa-vimeo-square","nav-email-col","stats-inner","nav-ctc-container","fa-viacoin","fa-drivers-license","mobile-container","navbar","fa-long-arrow-left","results-container","fa-money","recent-firm-news-item","fa-sign-in","fa-arrow-circle-right","fa-puzzle-piece","sr-only-focusable","fa-codiepie","btn-black","fa-openid","fa-shopping-bag","fa-info","fa-check-square","fa-cc-paypal","fa-circle","mm-recent-firm-news","fa-eraser","fa-chevron-up","fa-copy","fa-chevron-circle-down","fa-bluetooth","fa-share-square","fa-repeat","fa-desktop","result-case","fa-hand-rock-o","fa-th-large","fa-arrow-circle-o-up","fa-google","social-share-expanding","fa-bold","pullquote-right","result-header-gray","fa-video-camera","fa-file-audio-o","fa-bus","btn-ctc","fa-stumbleupon-circle","fa-yc","fa-heart","fa-frown-o","fa-mail-reply","fa-vine","fa-sign-language","fa-tv","fa-user-times","faq-card","fa-database","fa-codepen","fa-simplybuilt","experiment-semaphore","fa-window-maximize","fa-map-marker","fa-sort-amount-desc","fa-file-picture-o","fa-usb","fa-terminal","fa-bar-chart","fa-product-hunt","fa-image","fa-stop-circle-o","fa-venus-mars","fa-commenting","fa-trophy","fa-rotate-270","fa-soundcloud","highlighteable","fa-gavel","fa-random","fa-stack-2x","fa-ul","fa-asterisk","fa-arrows-h","fa-jpy","fa-y-combinator","fa-mail-forward","fa-legal","email","fa-volume-off","fa-external-link-square","fa-opera","fa-superpowers","fa-maxcdn","fa-apple","fa-foursquare","fa-scissors","sub-title","fa-cloud-download","fa-twitch","pullquote-left","fa-snowflake-o","fa-tablet","fa-star","fa-leanpub","fa-play","fa-creative-commons","fa-wechat","fa-stop","fa-tachometer","fa-ambulance","fa-weibo","settlements-results","btn-pagination","recent-firm-news-more-results","fa-wifi","fa-mail-reply-all","fa-space-shuttle","fa-soccer-ball-o","fa-user-o","modal-body","fa-trash","settlements-featured","fa-paw","items-3","fa-ticket","fa-times-circle","fa-grav","fa-angle-left","fa-btc","fa-medkit","fa-user-circle","fa-unlock","fa-linkedin","fa-area-chart","fa-arrow-circle-o-right","fa-address-book-o","fa-thermometer-three-quarters","fa-american-sign-language-interpreting","fa-fast-backward","fa-github-square","fa-times-rectangle-o","nav-call-col","fa-subway","fa-newspaper-o","fa-google-plus-circle","fa-bitbucket","mm-search","fa-reorder","focused","fa-thumbs-o-down","fa-street-view","fa-calendar-times-o","fa-keyboard-o","fa-magnet","fa-ship","general-form","fa-automobile","fa-wpbeginner","fa-battery-half","fa-pinterest","result-left","fa-th","fa-share","fa-sort-numeric-asc","fa-percent","fa-mercury","breadcrumb","fa-thermometer","fa-mortar-board","header-title","fa-key","fa-s15","dropdown-locations","btn-red","fa-cab","fa-slideshare","fa-angle-double-left","fa-ravelry","fb-comments","fa-lastfm","fa-rebel","fa-chain-broken","items-1","fa-strikethrough","fa-sort-alpha-desc","fa-phone-square","pull-right","fa-envelope","fa-th-list","fa-at","fa-remove","fa-life-bouy","fa-battery-empty","yt","fa-arrow-circle-left","fa-arrow-circle-up","fa-pulse","advertisement","fa-expand","fa-mars-double","fa-comment-o","fa-adn","fa-vk","fa-ruble","fa-laptop","fa-xing-square","fa-expeditedssl","fa-first-order","btn-twitter","fa-google-plus","fa-caret-right","fa-code","btn","fa-building-o","fa-check-circle-o","fa-circle-thin","fa-angle-up","fa-text-height","fa-gittip","fa-angle-double-up","fa-usd","fa-file-archive-o","fa-gift","fa-thermometer-full","sr-only","fa-steam","fa-3x","fa-battery-4","fa-address-card","fa-fw","fa-motorcycle","fa-times","fa-list-ol","fa-black-tie","footer-form","hs-error-msgs","fa-address-card-o","fa-map","selected","btn-ghost-black","fa-file-sound-o","fa-meanpath","fa-info-circle","fa-dedent","search-expand-lg","fa-toggle-off","fa-certificate","fa-font-awesome","mm-table","fa-camera","fa-sort-down","fa-thermometer-2","footer-logo","fa-user","fa-group","fa-power-off","fa-android","fa-futbol-o","fa-circle-o","fa-pencil","fa-sign-out","fa-sort-amount-asc","nav-search","stats-recovered","fa-spin","fa-users","fa-align-center","fa-connectdevelop","fa-qrcode","fa-tags","fa-minus-square-o","fa-star-half","fa-eject","fa-stack-overflow","fa-bicycle","fa-cut","fa-rss","fa-joomla","more","fa-server","modal-header","fa-4x","fa-chevron-circle-right","fa-clone","fa-align-left","fa-mouse-pointer","fa-hourglass-o","result-container","metadata","fa-linode","fa-bug","fa-thumb-tack","fa-bed","fa-link","dropdown-menu","fa-reply-all","fa-subscript","masthead","card-content-alert","mobile","fa-align-justify","fa-ioxhost","fa-credit-card","social-card","fa-youtube-square","fa-battery-three-quarters","fa-bullhorn","fa-tasks","fa-filter","fa-pinterest-p","fa-bathtub","fa-2x","fa-share-square-o","fa-flag-o","fa-thumbs-up","fa-underline","fa-star-half-full","fa-delicious","fa-gg-circle","fa-vcard","fa-hand-o-left","fa-i-cursor","fa-arrow-left","fa-won","fa-odnoklassniki","fa-caret-square-o-left","fa-search-plus","fa-pied-piper-alt","fa-chrome","fa-youtube-play","fa-bitcoin","fa-crop","form-control","fa-object-ungroup","fa-neuter","fa-dropbox","fa-assistive-listening-systems","fa-linkedin-square","fa-ellipsis-v","fa-caret-square-o-up","fa-glide","btn-close","fa-eye","fa-list-ul","facebook-comment-wrapper","rt","fa-cogs","fa-bar-chart-o","fa-question","fa-pause-circle-o","btn-social","fa-volume-down","fa-map-pin","expander","fa-file","fa-check","fa-reply","fa-hand-spock-o","fa-unlock-alt","fa-drivers-license-o","card-content","fa-compress","gp","affix","fa-inbox","fa-cart-arrow-down","fa-reddit-alien","fa-behance","fa-calendar","recent-firm-news-title","fa-google-plus-square","fa-wheelchair-alt","follow-row","fa-folder-open","fa-yen","fa-spoon","fa-ils","fa-trello","fa-envelope-open","fa-cc-discover","fa-mobile-phone","fa-comment","fa-eercast","fa-cc-amex","fa-archive","fa-sun-o","fa-thermometer-1","results-loader-container","fa-arrows","fa-quote-right","fa-universal-access","fa-train","hidden-lg","network","fa-pie-chart","fa-buysellads","fa-taxi","footer-subnav-links","fa-sellsy","fa-glide-g","fa-retweet","fa-text-width","fa-rupee","fa-ellipsis-h","fa-folder-open-o","fa-photo","fa-object-group","fa-unlink","pin","fa-slack","fa-twitter","hs_yes_sign_me_up_for_the_newsletter_","fa-caret-left","fa-exclamation","fa-file-powerpoint-o","fa-eyedropper","fa-contao","fa-search","fa-exclamation-triangle","hero-unit","fa-twitter-square","fa-plug","fa-dashboard","dropdown-toggle","fa-file-word-o","fa-eye-slash","fa-xing","fa-thermometer-half","fa-handshake-o","fa-chevron-circle-left","fa-glass","desktop","fa-eur","fa-braille","fa-floppy-o","card-top","fa-skype","fa-volume-up","fa-cc-stripe","fa-hourglass-end","stats-header","fa-microphone","fa-5x","fa-font","fa-meetup","fa-arrows-alt","fa-pencil-square-o","fa-hdd-o","fa-home","fa-road","fa-crosshairs","nav-logo","fa-building","recent-firm-news-details","featured-result","fa-level-up","fa-stop-circle","expandable","fa-id-card-o","fa-thermometer-empty","fa-chevron-right","fa-file-excel-o","fa-plane","fa-venus-double","fa-check-circle","fa-envelope-o","fa-toggle-up","fa-snapchat-ghost","fa-try","fa-file-photo-o","result-mobile","image-column","fa-long-arrow-down","fa-plus","fa-battery-quarter","fa-hourglass-start","fa-line-chart","double-wide","fa-history","fa-folder","btn-dark","fa-microchip","fa-bomb","pointer-wrapper","fa-tint","fa-low-vision","fa-snapchat-square","caret","fa-bolt","fa-undo","settlements-stats","fa-arrow-up","search-expand-md","fa-pagelines","fa-heart-o","fa-send-o","fa-television","fa-support","fa-opencart","fa-diamond","modal-title","fa-battery","fa-500px","fa-film","fa-book","fa-window-close","fa-comments","fa-themeisle","more-related-articles","fa-suitcase","fa-clipboard","fa-check-square-o","links-row","fa-tree","search-expand-sm","fa-medium","fa-location-arrow","fa-user-plus","fa-stack","fa-krw","result-header-white","fa-hand-scissors-o","fa-houzz","fa-volume-control-phone","fa-clock-o","fa-fire","fa-file-text-o","fa-arrow-circle-o-left","fa-hand-o-up","fa-lg","fa-life-buoy","fa-align-right","fa-arrows-v","fa-viadeo","fa-vcard-o","testimonials-items","fa-hand-peace-o","sidebar-form","fa-safari","fa-reddit-square","fa-vimeo","fa-files-o","fa-file-text","fa-copyright","fa-id-card","fa-chain","fa-dashcube","fa-facebook-official","fa-pull-left","fa-pied-piper-pp","fa-audio-description","has-results","fa-cog","fa-venus","fa-odnoklassniki-square","fa-angle-down","fa-minus-circle","fa-drupal","fa-dribbble","btn-red-centered","fa-file-video-o","fa-industry","fa-user-md","fa-pull-right","fa-folder-o","fa-fire-extinguisher","fa-shopping-basket","fa-yc-square","show","fa-life-saver","fa-square-o","fa-etsy","pull-left","fa-resistance","fa-bell-o","fa-skyatlas","fa-battery-3","fa-quote-left","mm-header-container","nav-desktop","fa-toggle-down","fa-shield","fa-step-forward","fa-commenting-o","fa-camera-retro","fa-paper-plane","fa-briefcase","fa-digg","centered-button","fa-thumbs-o-up","fa-behance-square","fa-italic","stats-clients","col-md-4","fa-sort-alpha-asc","fa-step-backward","fb","fa-flip-vertical","fa-stack-1x","fa-sitemap","clicktocall","header-bar","fa-border","fa-file-image-o","fa-asl-interpreting","fa-pencil-square","tw","fa-linux","fa-wordpress","fa-comments-o","fa-toggle-on","fa-cloud","result-right","inputs-list","fa-user-secret","btn-fb","fa-deviantart","fa-signal","fa-rotate-right","testimonials-header","fa-star-o","fa-angellist","fa-tumblr-square","fa-cny","fa-battery-0","visible-lg","fa-list","fa-lemon-o","fa-fort-awesome","fa-chevron-circle-up","fa-fighter-jet","item-container","stats-resolved","btn-yt","fa-cc-jcb","fa-deaf","fa-bookmark-o","fa-arrow-circle-down","fa-warning","fa-empire","fa-turkish-lira","fa-long-arrow-up","mm-search-input","fa-steam-square","fa-chevron-left","fa-facebook-f","fa-transgender-alt","btn-ghost","form-blurb","fa-tag","fa-bath","fa-cutlery","footer-subnav","fa-shekel","fa-flag","fa-fax","fa-envira","go-to-top-container","recent-firm-news-header","fa-shopping-cart","fa-file-o","fa-thermometer-4","fa-angle-right","fa-mars-stroke-h","fa-user-circle-o","fa-arrow-down","popup-contact-form","fa-life-ring","fa-ge","hs-button","fa-battery-2","fa-address-book","fa-caret-square-o-down","fa-google-wallet","fa-hand-grab-o","fa-barcode","fa-thermometer-0","fa-header","fa-beer","fa-inr","fa-hourglass-1","fa-minus-square","fa-reddit","num","fa-renren","fa-backward","contact-card","fa-calendar-check-o","fa-gamepad","fa-calendar-plus-o","hs-richtext","fa-caret-up","fa-file-code-o","fa-star-half-empty","fa-youtube","go-top","fa-bell","fa-telegram","fa-viadeo-square","fa-external-link","call-us","fa-cube","fa-forumbee","fa-snapchat","fa-graduation-cap","fa-arrow-right","stats-attorneys","fa-flash","fa-smile-o","fa-headphones","fa-instagram","most-popular","mm-sortable-table","fa-yelp","fa-y-combinator-square","fa-hand-stop-o","fa-edge","hs-form-field","hs_submit","fa-cubes","fa-pause","fa-ban","fa-rouble","featured-link","dropdown","fa-tumblr","fa-unsorted","navbar-header","fa-rmb","expanded","fa-window-close-o","fa-circle-o-notch","fa-coffee","fa-hand-o-down","fa-paragraph","fa-gitlab","phone","fa-mars-stroke-v","fa-stethoscope","fa-quora","fa-institution","fa-stack-exchange","fa-shirtsinbulk","fa-thermometer-quarter","fa-cc","fa-h-square","fa-leaf","fa-compass","related-article-box","fa-window-restore","fa-github","fa-times-rectangle","mm-news-articles-basic","fa-print","fa-wikipedia-w","fa-css3","row-testimonials","fa-intersex","fa-bell-slash-o","fa-firefox","fa-hard-of-hearing","fa-wheelchair","fa-picture-o","social","testimonials-see-more","fa-bars","fa-get-pocket","fa-pause-circle","fa-exclamation-circle","fa-question-circle-o","fa-modx","fa-hacker-news","fa-trash-o","fa-forward","fa-fast-forward","fa-google-plus-official","fa-rss-square","ca-logo","fa-child","fa-spinner","fa-rotate-left","fa-balance-scale","btn-play","fa-music","fa-rub","fa-internet-explorer","fa-sliders","more-related-articles-container","row","fa-times-circle-o","fa-car","fa-paint-brush","fa-tty","in","fa-bitbucket-square","fa-rotate-90","fa-envelope-square","fa-lightbulb-o","fa-file-zip-o","footer-form-wrapper","fa-tencent-weibo","fa-dot-circle-o","fa-truck","fa-male","fa-microphone-slash","fa-umbrella","fa-hourglass-2","fa-genderless","basic-see-more","fa-lastfm-square","fa-phone","fa-whatsapp","fa-signing","fa-university","fa-battery-full","fa-magic","fa-html5","fa-trademark","star-black","fa-sort","fa-envelope-open-o","fa-gears","star-orange","fa-bluetooth-b","icon-bar","fa-file-pdf-o","fa-list-alt","fa-yoast","grouped","recent-firm-news-description","fa-language","fa-long-arrow-right","fa-send","fa-refresh","fa-search-minus","fa-hospital-o","fa-jsfiddle","items-2","fa-spotify","fa-shower","fa-flag-checkered","fa-podcast","see-all","fa-imdb","fa-bookmark","fa-level-down","fa-wrench","fa-mixcloud","fa-outdent","fa-share-alt-square","fa-lock","fa-gratipay","fa-table","fa-flip-horizontal","fa-plus-square","fa-transgender","actions","fa-bullseye","fa-star-half-o","fa","fa-female","fa-angle-double-right","fa-free-code-camp","fa-cart-plus","fa-rotate-180","fa-calendar-o","fa-flask","fa-bandcamp","fa-caret-down","fa-hourglass","social-share-flat-wrapper","fa-pinterest-square","verdicts-and-settlements","fa-paper-plane-o","fa-fa","fa-mars-stroke","fa-save","fa-upload","fa-cc-mastercard","fa-wpexplorer","fa-cloud-upload","fa-minus","recent-firm-news-image","fa-tripadvisor","fa-deafness","btn-close-expander","8","9","valuePromise","TRUE","FALSE","NULL","UNDEFINED","ZERO","EMPTYSTRING","arr","race"],"mappings":"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","file":"verdict-index-bef109a214aa0e57ba54.bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 104);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (true) {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n return _;\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n}.call(this));\n\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports) {\n\nmodule.exports = $;\n\n/***/ }),\n\n/***/ 10:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Promise = __webpack_require__(2);\n\nmodule.exports = Promise;\nPromise.prototype['finally'] = function (f) {\n return this.then(function (value) {\n return Promise.resolve(f()).then(function () {\n return value;\n });\n }, function (err) {\n return Promise.resolve(f()).then(function () {\n throw err;\n });\n });\n};\n\n\n/***/ }),\n\n/***/ 104:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(_, $) {\n\nvar _dates = __webpack_require__(48);\n\nvar _carousel = __webpack_require__(51);\n\nvar _carousel2 = _interopRequireDefault(_carousel);\n\nvar _pagination = __webpack_require__(15);\n\nvar _pagination2 = _interopRequireDefault(_pagination);\n\nvar _paginationInfinite = __webpack_require__(28);\n\nvar _paginationList = __webpack_require__(17);\n\nvar _paginationList2 = _interopRequireDefault(_paginationList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n__webpack_require__(79);\n\n//-- Pagination\nvar sortedResults = _.sortBy(window.MM.data.results, function (r) {\n return parseFloat(r.amount.replace(/[,\\$]/g, '') * -1);\n});\n\nvar paginator = new _pagination2.default({\n data: sortedResults,\n perPage: 20\n});\n\n(0, _paginationInfinite.makeInfinitePaginator)(paginator, '.results-container .results-loader-container');\n\nnew _paginationList2.default({\n el: '.results-container .mm-static-table tbody',\n model: paginator,\n item_template: _.template($('#verdict-template').html())\n});\n\n// TODO: this is a hack to get around sorting in Jekyll by amount not working (this triggers proper sort when loaded)\npaginator.trigger('change:data');\n\n//-- Carousel\n(0, _carousel2.default)('.settlements-stats.owl-carousel', {\n items: 1\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 106:\n/***/ (function(module, exports) {\n\n/**\n * @category Common Helpers\n * @summary Is the given argument an instance of Date?\n *\n * @description\n * Is the given argument an instance of Date?\n *\n * @param {*} argument - the argument to check\n * @returns {Boolean} the given argument is an instance of Date\n *\n * @example\n * // Is 'mayonnaise' a Date?\n * var result = isDate('mayonnaise')\n * //=> false\n */\nfunction isDate (argument) {\n return argument instanceof Date\n}\n\nmodule.exports = isDate\n\n\n/***/ }),\n\n/***/ 107:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isDate = __webpack_require__(106)\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar parseTokenDateTimeDelimeter = /[T ]/\nvar parseTokenPlainTime = /:/\n\n// year tokens\nvar parseTokenYY = /^(\\d{2})$/\nvar parseTokensYYY = [\n /^([+-]\\d{2})$/, // 0 additional digits\n /^([+-]\\d{3})$/, // 1 additional digit\n /^([+-]\\d{4})$/ // 2 additional digits\n]\n\nvar parseTokenYYYY = /^(\\d{4})/\nvar parseTokensYYYYY = [\n /^([+-]\\d{4})/, // 0 additional digits\n /^([+-]\\d{5})/, // 1 additional digit\n /^([+-]\\d{6})/ // 2 additional digits\n]\n\n// date tokens\nvar parseTokenMM = /^-(\\d{2})$/\nvar parseTokenDDD = /^-?(\\d{3})$/\nvar parseTokenMMDD = /^-?(\\d{2})-?(\\d{2})$/\nvar parseTokenWww = /^-?W(\\d{2})$/\nvar parseTokenWwwD = /^-?W(\\d{2})-?(\\d{1})$/\n\n// time tokens\nvar parseTokenHH = /^(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMM = /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMMSS = /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\n\n// timezone tokens\nvar parseTokenTimezone = /([Z+-].*)$/\nvar parseTokenTimezoneZ = /^(Z)$/\nvar parseTokenTimezoneHH = /^([+-])(\\d{2})$/\nvar parseTokenTimezoneHHMM = /^([+-])(\\d{2}):?(\\d{2})$/\n\n/**\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If all above fails, the function passes the given argument to Date constructor.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {Object} [options] - the object with options\n * @param {0 | 1 | 2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parse('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Parse string '+02014101',\n * // if the additional number of digits in the extended year format is 1:\n * var result = parse('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nfunction parse (argument, dirtyOptions) {\n if (isDate(argument)) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (typeof argument !== 'string') {\n return new Date(argument)\n }\n\n var options = dirtyOptions || {}\n var additionalDigits = options.additionalDigits\n if (additionalDigits == null) {\n additionalDigits = DEFAULT_ADDITIONAL_DIGITS\n } else {\n additionalDigits = Number(additionalDigits)\n }\n\n var dateStrings = splitDateString(argument)\n\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var year = parseYearResult.year\n var restDateString = parseYearResult.restDateString\n\n var date = parseDate(restDateString, year)\n\n if (date) {\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone)\n } else {\n // get offset accurate to hour in timezones that change offset\n offset = new Date(timestamp + time).getTimezoneOffset()\n offset = new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE).getTimezoneOffset()\n }\n\n return new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE)\n } else {\n return new Date(argument)\n }\n}\n\nfunction splitDateString (dateString) {\n var dateStrings = {}\n var array = dateString.split(parseTokenDateTimeDelimeter)\n var timeString\n\n if (parseTokenPlainTime.test(array[0])) {\n dateStrings.date = null\n timeString = array[0]\n } else {\n dateStrings.date = array[0]\n timeString = array[1]\n }\n\n if (timeString) {\n var token = parseTokenTimezone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timezone = token[1]\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear (dateString, additionalDigits) {\n var parseTokenYYY = parseTokensYYY[additionalDigits]\n var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]\n\n var token\n\n // YYYY or ±YYYYY\n token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString)\n if (token) {\n var yearString = token[1]\n return {\n year: parseInt(yearString, 10),\n restDateString: dateString.slice(yearString.length)\n }\n }\n\n // YY or ±YYY\n token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString)\n if (token) {\n var centuryString = token[1]\n return {\n year: parseInt(centuryString, 10) * 100,\n restDateString: dateString.slice(centuryString.length)\n }\n }\n\n // Invalid ISO-formatted year\n return {\n year: null\n }\n}\n\nfunction parseDate (dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) {\n return null\n }\n\n var token\n var date\n var month\n var week\n\n // YYYY\n if (dateString.length === 0) {\n date = new Date(0)\n date.setUTCFullYear(year)\n return date\n }\n\n // YYYY-MM\n token = parseTokenMM.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n date.setUTCFullYear(year, month)\n return date\n }\n\n // YYYY-DDD or YYYYDDD\n token = parseTokenDDD.exec(dateString)\n if (token) {\n date = new Date(0)\n var dayOfYear = parseInt(token[1], 10)\n date.setUTCFullYear(year, 0, dayOfYear)\n return date\n }\n\n // YYYY-MM-DD or YYYYMMDD\n token = parseTokenMMDD.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n var day = parseInt(token[2], 10)\n date.setUTCFullYear(year, month, day)\n return date\n }\n\n // YYYY-Www or YYYYWww\n token = parseTokenWww.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n return dayOfISOYear(year, week)\n }\n\n // YYYY-Www-D or YYYYWwwD\n token = parseTokenWwwD.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n var dayOfWeek = parseInt(token[2], 10) - 1\n return dayOfISOYear(year, week, dayOfWeek)\n }\n\n // Invalid ISO-formatted date\n return null\n}\n\nfunction parseTime (timeString) {\n var token\n var hours\n var minutes\n\n // hh\n token = parseTokenHH.exec(timeString)\n if (token) {\n hours = parseFloat(token[1].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR\n }\n\n // hh:mm or hhmm\n token = parseTokenHHMM.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseFloat(token[2].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE\n }\n\n // hh:mm:ss or hhmmss\n token = parseTokenHHMMSS.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseInt(token[2], 10)\n var seconds = parseFloat(token[3].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * 1000\n }\n\n // Invalid ISO-formatted time\n return null\n}\n\nfunction parseTimezone (timezoneString) {\n var token\n var absoluteOffset\n\n // Z\n token = parseTokenTimezoneZ.exec(timezoneString)\n if (token) {\n return 0\n }\n\n // ±hh\n token = parseTokenTimezoneHH.exec(timezoneString)\n if (token) {\n absoluteOffset = parseInt(token[2], 10) * 60\n return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n }\n\n // ±hh:mm or ±hhmm\n token = parseTokenTimezoneHHMM.exec(timezoneString)\n if (token) {\n absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10)\n return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n }\n\n return 0\n}\n\nfunction dayOfISOYear (isoYear, week, day) {\n week = week || 0\n day = day || 0\n var date = new Date(0)\n date.setUTCFullYear(isoYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\nmodule.exports = parse\n\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = __webpack_require__(2);\n__webpack_require__(8);\n__webpack_require__(10);\n__webpack_require__(9);\n__webpack_require__(12);\n__webpack_require__(13);\n\n\n/***/ }),\n\n/***/ 117:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery, jQuery) {/**\n * Owl Carousel v2.2.0\n * Copyright 2013-2016 David Deutsch\n * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE)\n */\n/**\n * Owl carousel\n * @version 2.1.6\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat--) {\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\n\t\t\t.wrap('
');\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.$element.is(':visible')) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.$element.is(':visible')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\telementWidth = this.$element.width();\n\t\t\twhile (iterator--) {\n\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.$element.is(':visible')) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tthrow 'Can not detect viewport width.';\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * AutoRefresh Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.$element.is(':visible');\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Lazy Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n\t\t\t\turl = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(' + url + ')',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * AutoHeight Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Video Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '
';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap('
');\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\tif (video.type === 'youtube') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml = '';\n\t\t}\n\n\t\t$('
' + html + '
').insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Animate Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Autoplay Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout.\n\t\t * @type {Timeout}\n\t\t */\n\t\tthis._timeout = null;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = false;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tthis._paused = false;\n\n\t\tif (this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('rotating');\n\n\t\tthis._setAutoPlayInterval();\n\t};\n\n\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\n\t\tif ( this._timeout ) {\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t}\n\t\treturn window.setTimeout($.proxy(function() {\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t};\n\n\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\tAutoplay.prototype._setAutoPlayInterval = function() {\n\t\tthis._timeout = this._getNextTimeout();\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this._timeout);\n\t\tthis._core.leave('rotating');\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._paused = true;\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Navigation Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('
' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [ 'prev', 'next' ],\n\t\tnavSpeed: false,\n\t\tnavElement: 'div',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('
')\n\t\t\t\t.addClass(settings.dotClass)\n\t\t\t\t.append($(''))\n\t\t\t\t.prop('outerHTML') ];\n\t\t}\n\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\n\t\t\t: $('
').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\n\n\t\t\te.preventDefault();\n\n\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t}, this));\n\n\t\t// override public methods of the carousel\n\t\tfor (override in this._overrides) {\n\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\tNavigation.prototype.destroy = function() {\n\t\tvar handler, control, property, override;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (control in this._controls) {\n\t\t\tthis._controls[control].remove();\n\t\t}\n\t\tfor (override in this.overides) {\n\t\t\tthis._core[override] = this._overrides[override];\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\tNavigation.prototype.update = function() {\n\t\tvar i, j, k,\n\t\t\tlower = this._core.clones().length / 2,\n\t\t\tupper = lower + this._core.items().length,\n\t\t\tmaximum = this._core.maximum(true),\n\t\t\tsettings = this._core.settings,\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\n\n\t\tif (settings.slideBy !== 'page') {\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t}\n\n\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\tthis._pages = [];\n\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t});\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj = 0, ++k;\n\t\t\t\t}\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\tNavigation.prototype.draw = function() {\n\t\tvar difference,\n\t\t\tsettings = this._core.settings,\n\t\t\tdisabled = this._core.items().length <= settings.items,\n\t\t\tindex = this._core.relative(this._core.current()),\n\t\t\tloop = settings.loop || settings.rewind;\n\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\n\t\tif (settings.nav) {\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t}\n\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\n\t\tif (settings.dots) {\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\n\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t} else if (difference > 0) {\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t} else if (difference < 0) {\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t}\n\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t}\n\t};\n\n\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\tNavigation.prototype.onTrigger = function(event) {\n\t\tvar settings = this._core.settings;\n\n\t\tevent.page = {\n\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\tcount: this._pages.length,\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\n\t\t};\n\t};\n\n\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.current = function() {\n\t\tvar current = this._core.relative(this._core.current());\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\n\t\t\treturn page.start <= current && page.end >= current;\n\t\t}, this)).pop();\n\t};\n\n\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.getPosition = function(successor) {\n\t\tvar position, length,\n\t\t\tsettings = this._core.settings;\n\n\t\tif (settings.slideBy == 'page') {\n\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\tlength = this._pages.length;\n\t\t\tsuccessor ? ++position : --position;\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\n\t\t} else {\n\t\t\tposition = this._core.relative(this._core.current());\n\t\t\tlength = this._core.items().length;\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.next = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t};\n\n\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.prev = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t};\n\n\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\tNavigation.prototype.to = function(position, speed, standard) {\n\t\tvar length;\n\n\t\tif (!standard && this._pages.length) {\n\t\t\tlength = this._pages.length;\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\n\t\t} else {\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Hash Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Hash = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Hash index for the items.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._hashes = {};\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\n\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\thash = $.map(this._hashes, function(item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\n\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\n\t\t// register the event handlers\n\t\tthis.$element.on(this._handlers);\n\n\t\t// register event listener for hash navigation\n\t\t$(window).on('hashchange.owl.navigation', $.proxy(function(e) {\n\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\titems = this._core.$stage.children(),\n\t\t\t\tposition = this._hashes[hash] && items.index(this._hashes[hash]);\n\n\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tHash.Defaults = {\n\t\tURLhashListener: false\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tHash.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\t$(window).off('hashchange.owl.navigation');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/**\n * Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\tvar style = $('').get(0).style,\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\n\t\tevents = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttests = {\n\t\t\tcsstransforms: function() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\n\tfunction test(property, prefixed) {\n\t\tvar result = false,\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\n\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\n\t\t\tif (style[property] !== undefined) {\n\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction prefixed(property) {\n\t\treturn test(property, true);\n\t}\n\n\tif (tests.csstransitions()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t}\n\n\tif (tests.cssanimations()) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (tests.csstransforms()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(prefixed('transform'));\n\t\t$.support.transform3d = tests.csstransforms3d();\n\t}\n\n})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 12:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// This file contains then/promise specific extensions that are only useful\n// for node.js interop\n\nvar Promise = __webpack_require__(2);\nvar asap = __webpack_require__(14);\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nPromise.denodeify = function (fn, argumentCount) {\n if (\n typeof argumentCount === 'number' && argumentCount !== Infinity\n ) {\n return denodeifyWithCount(fn, argumentCount);\n } else {\n return denodeifyWithoutCount(fn);\n }\n};\n\nvar callbackFn = (\n 'function (err, res) {' +\n 'if (err) { rj(err); } else { rs(res); }' +\n '}'\n);\nfunction denodeifyWithCount(fn, argumentCount) {\n var args = [];\n for (var i = 0; i < argumentCount; i++) {\n args.push('a' + i);\n }\n var body = [\n 'return function (' + args.join(',') + ') {',\n 'var self = this;',\n 'return new Promise(function (rs, rj) {',\n 'var res = fn.call(',\n ['self'].concat(args).concat([callbackFn]).join(','),\n ');',\n 'if (res &&',\n '(typeof res === \"object\" || typeof res === \"function\") &&',\n 'typeof res.then === \"function\"',\n ') {rs(res);}',\n '});',\n '};'\n ].join('');\n return Function(['Promise', 'fn'], body)(Promise, fn);\n}\nfunction denodeifyWithoutCount(fn) {\n var fnLength = Math.max(fn.length - 1, 3);\n var args = [];\n for (var i = 0; i < fnLength; i++) {\n args.push('a' + i);\n }\n var body = [\n 'return function (' + args.join(',') + ') {',\n 'var self = this;',\n 'var args;',\n 'var argLength = arguments.length;',\n 'if (arguments.length > ' + fnLength + ') {',\n 'args = new Array(arguments.length + 1);',\n 'for (var i = 0; i < arguments.length; i++) {',\n 'args[i] = arguments[i];',\n '}',\n '}',\n 'return new Promise(function (rs, rj) {',\n 'var cb = ' + callbackFn + ';',\n 'var res;',\n 'switch (argLength) {',\n args.concat(['extra']).map(function (_, index) {\n return (\n 'case ' + (index) + ':' +\n 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +\n 'break;'\n );\n }).join(''),\n 'default:',\n 'args[argLength] = cb;',\n 'res = fn.apply(self, args);',\n '}',\n \n 'if (res &&',\n '(typeof res === \"object\" || typeof res === \"function\") &&',\n 'typeof res.then === \"function\"',\n ') {rs(res);}',\n '});',\n '};'\n ].join('');\n\n return Function(\n ['Promise', 'fn'],\n body\n )(Promise, fn);\n}\n\nPromise.nodeify = function (fn) {\n return function () {\n var args = Array.prototype.slice.call(arguments);\n var callback =\n typeof args[args.length - 1] === 'function' ? args.pop() : null;\n var ctx = this;\n try {\n return fn.apply(this, arguments).nodeify(callback, ctx);\n } catch (ex) {\n if (callback === null || typeof callback == 'undefined') {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n } else {\n asap(function () {\n callback.call(ctx, ex);\n })\n }\n }\n }\n};\n\nPromise.prototype.nodeify = function (callback, ctx) {\n if (typeof callback != 'function') return this;\n\n this.then(function (value) {\n asap(function () {\n callback.call(ctx, null, value);\n });\n }, function (err) {\n asap(function () {\n callback.call(ctx, err);\n });\n });\n};\n\n\n/***/ }),\n\n/***/ 13:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Promise = __webpack_require__(2);\n\nmodule.exports = Promise;\nPromise.enableSynchronous = function () {\n Promise.prototype.isPending = function() {\n return this.getState() == 0;\n };\n\n Promise.prototype.isFulfilled = function() {\n return this.getState() == 1;\n };\n\n Promise.prototype.isRejected = function() {\n return this.getState() == 2;\n };\n\n Promise.prototype.getValue = function () {\n if (this._65 === 3) {\n return this._55.getValue();\n }\n\n if (!this.isFulfilled()) {\n throw new Error('Cannot get a value of an unfulfilled promise.');\n }\n\n return this._55;\n };\n\n Promise.prototype.getReason = function () {\n if (this._65 === 3) {\n return this._55.getReason();\n }\n\n if (!this.isRejected()) {\n throw new Error('Cannot get a rejection reason of a non-rejected promise.');\n }\n\n return this._55;\n };\n\n Promise.prototype.getState = function () {\n if (this._65 === 3) {\n return this._55.getState();\n }\n if (this._65 === -1 || this._65 === -2) {\n return 0;\n }\n\n return this._65;\n };\n};\n\nPromise.disableSynchronous = function() {\n Promise.prototype.isPending = undefined;\n Promise.prototype.isFulfilled = undefined;\n Promise.prototype.isRejected = undefined;\n Promise.prototype.getValue = undefined;\n Promise.prototype.getReason = undefined;\n Promise.prototype.getState = undefined;\n};\n\n\n/***/ }),\n\n/***/ 14:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = __webpack_require__(5);\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar Paginator = Backbone.Model.extend({\n defaults: {\n data: [],\n page: 0,\n perPage: 5,\n isLoading: false\n },\n\n numPages: function numPages() {\n return Math.ceil(this.get('data').length / this.get('perPage'));\n },\n getPageItems: function getPageItems() {\n return this.get('data').slice(this.get('page') * this.get('perPage'), (this.get('page') + 1) * this.get('perPage'));\n },\n getLoadedData: function getLoadedData() {\n return this.get('data').slice(0, (this.get('page') + 1) * this.get('perPage'));\n },\n nextPage: function nextPage() {\n this.set({ page: this.get('page') + 1, isLoading: false });\n },\n getPage: function getPage() {\n return this.get('page');\n },\n getPerPage: function getPerPage() {\n return this.get('perPage');\n },\n isLastPage: function isLastPage() {\n return this.get('page') >= this.numPages() - 1;\n }\n});\n\nexports.default = Paginator;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))\n\n/***/ }),\n\n/***/ 17:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/** a generic list view for paginated items. We hand the list the template to be used for each item and render that\n template, passing the models' attributes as variables **/\n\nvar PaginationList = Backbone.View.extend({\n initialize: function initialize(opts) {\n this.options = {\n extra_context: {},\n item_template: null\n };\n\n _.extend(this.options, opts || {});\n\n if (!this.options.item_template) {\n throw 'an item_template must be passed, this is what will be used to render each item in the paginated list';\n }\n\n this.model.on('change:page', this.render, this);\n this.model.on('change:data', this.renderInitial, this);\n },\n render: function render() {\n var _this = this;\n\n this.$el.append(this.model.getPageItems().map(function (d) {\n return _this.options.item_template(_.extend({}, d, _this.options.extra_context));\n }));\n },\n renderInitial: function renderInitial() {\n var _this2 = this;\n\n this.$el.html(this.model.getPageItems().map(function (d) {\n return _this2.options.item_template(_.extend({}, d, _this2.options.extra_context));\n }));\n }\n});\n\nexports.default = PaginationList;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3), __webpack_require__(0)))\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar asap = __webpack_require__(5);\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._40 = 0;\n this._65 = 0;\n this._55 = null;\n this._72 = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._37 = null;\nPromise._87 = null;\nPromise._61 = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._65 === 3) {\n self = self._55;\n }\n if (Promise._37) {\n Promise._37(self);\n }\n if (self._65 === 0) {\n if (self._40 === 0) {\n self._40 = 1;\n self._72 = deferred;\n return;\n }\n if (self._40 === 1) {\n self._40 = 2;\n self._72 = [self._72, deferred];\n return;\n }\n self._72.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n asap(function() {\n var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._65 === 1) {\n resolve(deferred.promise, self._55);\n } else {\n reject(deferred.promise, self._55);\n }\n return;\n }\n var ret = tryCallOne(cb, self._55);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._65 = 3;\n self._55 = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._65 = 1;\n self._55 = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._65 = 2;\n self._55 = newValue;\n if (Promise._87) {\n Promise._87(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._40 === 1) {\n handle(self, self._72);\n self._72 = null;\n }\n if (self._40 === 2) {\n for (var i = 0; i < self._72.length; i++) {\n handle(self, self._72[i]);\n }\n self._72 = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n\n\n/***/ }),\n\n/***/ 28:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.makeInfinitePaginator = makeInfinitePaginator;\nexports.default = makeInfinite;\n\nvar _events = __webpack_require__(30);\n\nvar _events2 = _interopRequireDefault(_events);\n\nvar _pagination = __webpack_require__(15);\n\nvar _pagination2 = _interopRequireDefault(_pagination);\n\nvar _helpers = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar InfinitePagination = Backbone.View.extend({\n template: _.template('\" />'),\n\n initialize: function initialize(opts) {\n this.options = {\n loader: '/images/icons/loader.gif',\n bottom_offset: 50,\n load_more_delay: 1500\n };\n\n _.extend(this.options, opts || {});\n\n $(window).on('scroll', _.throttle(this.maybeLoadMore.bind(this), 300));\n\n this.model.on('change:isLoading', this.render, this);\n },\n maybeLoadMore: function maybeLoadMore() {\n var elOffsetY = this.$el.offset().top;\n var scrollOffsetY = (0, _helpers.scrollTopDistance)();\n var windowHeight = window.innerHeight;\n\n if (elOffsetY - (scrollOffsetY + windowHeight) <= this.options.bottom_offset && !this.model.get('isLoading') && !this.model.isLastPage()) {\n this.model.set({ isLoading: true });\n setTimeout(this.model.nextPage.bind(this.model), this.options.load_more_delay);\n }\n },\n render: function render() {\n this.model.get('isLoading') ? this.$el.html(this.template({ loader: this.options.loader })) : this.$el.html('');\n }\n});\n\n/**\n * bind an InfinitePagination view to the given paginator\n * @param paginator {Paginator} instance to bind an InfinitePagination view to\n * @param infiniteEl {String} selector for the container for the infinite pagination loading view\n * @returns {function()} closure which when executed unbinds the paginator from the loader view\n */\nfunction makeInfinitePaginator(paginator, infiniteEl) {\n var infinite = new InfinitePagination({\n model: paginator,\n el: infiniteEl\n });\n\n return function () {\n paginator.off();\n infinite.$el.html('');\n\n paginator = null;\n infinite = null;\n };\n}\n\n/**\n * make a collection an infinite collection in that it's state at any given point in time is representative of how far\n * down the page a user has scrolled (in addition to any pagination specific options given in paginatorOpts)\n * @param collection\n * @param infiniteEl\n * @param paginatorOpts\n * @returns {function()} closure unbinding the collection from pagination\n */\nfunction makeInfinite(collection, infiniteEl, paginatorOpts) {\n // we start the pagination on the second page, since we're showing the first page of results by default on page load\n var paginator = new _pagination2.default(paginatorOpts);\n\n if (collection) {\n collection.reset(paginator.getPageItems());\n paginator.on('change:page', function () {\n return collection.add(paginator.getPageItems());\n });\n\n // when a collection is to be sorted, the response of pagination is a bit tricky:\n // 1) load all the data from the paginator into the collection (so that we're sorting the full collection, rather than only a page)\n // 2) after sorting is complete, reset the paginators data with the collection's data (so we're maintaining the same sort order in the paginator)\n // 3) after resetting the paginators data, reset the collection's data to only include the pages loaded\n collection.on(_events2.default.presort, function () {\n return collection.reset(paginator.get('data'), { silent: true, sort: false });\n });\n collection.on(_events2.default.postsort, function () {\n paginator.set({ data: collection.models });\n collection.reset(paginator.getLoadedData(), { sort: false });\n });\n }\n\n var deactivatePaginator = makeInfinitePaginator(paginator, infiniteEl);\n\n return function () {\n deactivatePaginator();\n\n if (collection) {\n collection.off(_events2.default.presort);\n collection.off(_events2.default.postsort);\n }\n };\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.js 1.3.3\n\n// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global);\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0), __webpack_require__(1), exports], __WEBPACK_AMD_DEFINE_RESULT__ = function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.3.3';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return _[method](this[attribute]);\n };\n case 2: return function(value) {\n return _[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return _[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return _[method].apply(_, args);\n };\n }\n };\n var addUnderscoreMethods = function(Class, methods, attribute) {\n _.each(methods, function(length, method) {\n if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n return internalOn(this, name, callback, context);\n };\n\n // Guard the `listening` argument from the public API.\n var internalOn = function(obj, name, callback, context, listening) {\n obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n context: context,\n ctx: obj,\n listening: listening\n });\n\n if (listening) {\n var listeners = obj._listeners || (obj._listeners = {});\n listeners[listening.id] = listening;\n }\n\n return obj;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n }\n\n // Bind callbacks on obj, and keep track of them on listening.\n internalOn(obj, name, callback, this, listening);\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n }\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var i = 0, listening;\n var context = options.context, listeners = options.listeners;\n\n // Delete all events listeners and \"drop\" events.\n if (!name && !callback && !context) {\n var ids = _.keys(listeners);\n for (; i < ids.length; i++) {\n listening = listeners[ids[i]];\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n return;\n }\n\n var names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Replace events if there are any remaining. Otherwise, clean up.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n listening = handler.listening;\n if (listening && --listening.count === 0) {\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n }\n }\n\n // Update tail event if the list has any events. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n }\n return _.size(changed) ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n addUnderscoreMethods(Model, modelMethods, 'attributes');\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(obj.attributes || obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n addUnderscoreMethods(Collection, collectionMethods, 'models');\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], _.bind(method, this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = _.bind(this.checkUrl, this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the hash and decode for matching.\n fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n custom events triggerable by event emitters\n **/\nexports.default = {\n presort: 'pre-sort', // triggered right before a sort event\n postsort: 'post-sort' // triggered right after a sort event\n};\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n\n/***/ 48:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseDate = parseDate;\n\nvar _parse = __webpack_require__(107);\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction parseDate(d) {\n return (0, _parse2.default)(d);\n}\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n\n/***/ 51:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(_, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createCarousel;\n\n__webpack_require__(117);\n\nfunction createCarousel(el, opts) {\n var defaults = {\n items: 3,\n stagePadding: 0, //if set, can see neighbors\n dots: true\n };\n\n opts = _.extend({}, defaults, opts || {});\n\n $(el).owlCarousel(opts);\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getParameterByName = getParameterByName;\nexports.getHashFromCurrentUrl = getHashFromCurrentUrl;\nexports.truncateWords = truncateWords;\nexports.truncateCharacters = truncateCharacters;\nexports.toTitleCase = toTitleCase;\nexports.randomString = randomString;\nexports.scrollTopDistance = scrollTopDistance;\nexports.toggleScroll = toggleScroll;\nexports.whenScrollReached = whenScrollReached;\nvar Promise = __webpack_require__(7);\n\n// http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\nfunction getParameterByName(name, url) {\n if (!url) url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(url);\n\n if (!results) return null;\n if (!results[2]) return '';\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\n/**\n * get the current value of the hash in the URL - if it exists\n * @return @{String}\n */\nfunction getHashFromCurrentUrl() {\n return window.location.hash ? window.location.hash.replace('#', '') : null;\n}\n\n/**\n * truncate the given string after `n` words\n * @param s\n * @param n\n * @param truncationChars @{String} the value to append to the truncated value (if truncation occurs)\n */\nfunction truncateWords(s, n) {\n var truncationChars = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '...';\n\n var words = s.split(' ');\n\n if (words.length <= n) {\n return s;\n }\n\n var truncated = words.slice(0, n).join(' ');\n return truncated + truncationChars;\n}\n\n/**\n * truncate the given string after `n` characters\n * @param s\n * @param n\n * @param truncationChars\n */\nfunction truncateCharacters(s, n) {\n var truncationChars = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '...';\n\n if (s.length <= n) {\n return s;\n }\n\n return s.substring(0, n) + truncationChars;\n}\n\nfunction toTitleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n}\n\n/**\n * generate a random string of size n (wripped from https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript)\n * @param n\n * @returns {string}\n */\nfunction randomString() {\n var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;\n\n var text = '';\n var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (var i = 0; i < n; i++) {\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n }return text;\n}\n\n/**\n * browsers handle calculating the scroll distance from the top of the page differently. This method reconciles the different\n * ways browsers handle getting this value and returns the distance scrolled from the top:\n *\n * https://stackoverflow.com/questions/28633221/document-body-scrolltop-firefox-returns-0-only-js\n *\n * @returns {Number|number}\n */\nfunction scrollTopDistance() {\n return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n}\n\n/**\n * toggle the ability to scroll in the page\n * @param flag {Boolean}\n */\nfunction toggleScroll(flag) {\n $('html,body').css('overflow-y', flag ? 'auto' : 'hidden');\n}\n\n/**\n * listen for the window being scrolled to the given `limit` pixels down.\n * @param offset {Number} offset - in pixels - to reach\n * @return {Promise} resolving when the given offset is reached\n */\nfunction whenScrollReached() {\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n\n return new Promise(function (resolve, reject) {\n var onScroll = _.throttle(function () {\n if (scrollTopDistance() >= offset) {\n window.removeEventListener('scroll', onScroll);\n resolve();\n }\n }, 100);\n\n window.addEventListener('scroll', onScroll);\n });\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = __webpack_require__(11)\n\n\n/***/ }),\n\n/***/ 79:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\nmodule.exports = {\"fa-cc-visa\":\"fa-cc-visa\",\"desktop-search-overlay\":\"desktop-search-overlay\",\"fa-sheqel\":\"fa-sheqel\",\"fa-rocket\":\"fa-rocket\",\"fa-battery-1\":\"fa-battery-1\",\"fa-scribd\":\"fa-scribd\",\"fa-sort-numeric-desc\":\"fa-sort-numeric-desc\",\"fa-arrow-circle-o-down\":\"fa-arrow-circle-o-down\",\"fa-hand-pointer-o\":\"fa-hand-pointer-o\",\"fa-meh-o\":\"fa-meh-o\",\"fa-blind\":\"fa-blind\",\"fa-globe\":\"fa-globe\",\"fa-yahoo\":\"fa-yahoo\",\"fa-map-o\":\"fa-map-o\",\"fa-feed\":\"fa-feed\",\"fa-moon-o\":\"fa-moon-o\",\"fa-hand-lizard-o\":\"fa-hand-lizard-o\",\"social-share-flat\":\"social-share-flat\",\"hs-input\":\"hs-input\",\"fa-sort-up\":\"fa-sort-up\",\"fa-cc-diners-club\":\"fa-cc-diners-club\",\"fa-anchor\":\"fa-anchor\",\"fa-bell-slash\":\"fa-bell-slash\",\"fa-birthday-cake\":\"fa-birthday-cake\",\"fa-sort-desc\":\"fa-sort-desc\",\"fa-mobile\":\"fa-mobile\",\"fa-optin-monster\":\"fa-optin-monster\",\"fa-columns\":\"fa-columns\",\"fa-facebook\":\"fa-facebook\",\"fa-fonticons\":\"fa-fonticons\",\"fa-github-alt\":\"fa-github-alt\",\"highlighted\":\"highlighted\",\"fa-angle-double-down\":\"fa-angle-double-down\",\"ctc-container\":\"ctc-container\",\"fa-paste\":\"fa-paste\",\"fa-git-square\":\"fa-git-square\",\"fa-calculator\":\"fa-calculator\",\"fa-registered\":\"fa-registered\",\"wide\":\"wide\",\"fa-dollar\":\"fa-dollar\",\"fa-hashtag\":\"fa-hashtag\",\"fa-play-circle\":\"fa-play-circle\",\"fa-chevron-down\":\"fa-chevron-down\",\"fa-sticky-note-o\":\"fa-sticky-note-o\",\"fa-mars\":\"fa-mars\",\"hero-header\":\"hero-header\",\"fa-window-minimize\":\"fa-window-minimize\",\"fa-amazon\":\"fa-amazon\",\"fa-square\":\"fa-square\",\"fa-code-fork\":\"fa-code-fork\",\"fa-navicon\":\"fa-navicon\",\"fa-qq\":\"fa-qq\",\"fa-map-signs\":\"fa-map-signs\",\"fa-play-circle-o\":\"fa-play-circle-o\",\"navbar-toggle\":\"navbar-toggle\",\"footer-contact\":\"footer-contact\",\"fa-weixin\":\"fa-weixin\",\"fa-caret-square-o-right\":\"fa-caret-square-o-right\",\"fa-superscript\":\"fa-superscript\",\"fa-recycle\":\"fa-recycle\",\"fa-question-circle\":\"fa-question-circle\",\"side-bar\":\"side-bar\",\"fa-file-movie-o\":\"fa-file-movie-o\",\"fa-ra\":\"fa-ra\",\"fa-hourglass-3\":\"fa-hourglass-3\",\"li\":\"li\",\"fa-gbp\":\"fa-gbp\",\"fa-inverse\":\"fa-inverse\",\"fa-credit-card-alt\":\"fa-credit-card-alt\",\"fa-edit\":\"fa-edit\",\"fa-hourglass-half\":\"fa-hourglass-half\",\"fa-paperclip\":\"fa-paperclip\",\"fa-download\":\"fa-download\",\"fa-flickr\":\"fa-flickr\",\"fa-thumbs-down\":\"fa-thumbs-down\",\"fa-git\":\"fa-git\",\"fa-hand-paper-o\":\"fa-hand-paper-o\",\"fa-plus-square-o\":\"fa-plus-square-o\",\"fa-bank\":\"fa-bank\",\"fa-hotel\":\"fa-hotel\",\"fa-sticky-note\":\"fa-sticky-note\",\"owl-carousel\":\"owl-carousel\",\"fa-sort-asc\":\"fa-sort-asc\",\"fa-share-alt\":\"fa-share-alt\",\"section\":\"section\",\"fa-euro\":\"fa-euro\",\"fa-thermometer-3\":\"fa-thermometer-3\",\"fa-li\":\"fa-li\",\"fa-pied-piper\":\"fa-pied-piper\",\"fa-close\":\"fa-close\",\"fa-gear\":\"fa-gear\",\"fa-adjust\":\"fa-adjust\",\"fa-stumbleupon\":\"fa-stumbleupon\",\"fa-wpforms\":\"fa-wpforms\",\"dropdown-mega\":\"dropdown-mega\",\"fa-paypal\":\"fa-paypal\",\"fa-toggle-left\":\"fa-toggle-left\",\"card-top-alert\":\"card-top-alert\",\"fa-id-badge\":\"fa-id-badge\",\"fa-hand-o-right\":\"fa-hand-o-right\",\"fa-exchange\":\"fa-exchange\",\"fa-binoculars\":\"fa-binoculars\",\"fa-gg\":\"fa-gg\",\"fa-plus-circle\":\"fa-plus-circle\",\"fa-toggle-right\":\"fa-toggle-right\",\"dropdown-florida-list\":\"dropdown-florida-list\",\"no-float\":\"no-float\",\"input-container\":\"input-container\",\"fa-facebook-square\":\"fa-facebook-square\",\"fa-indent\":\"fa-indent\",\"fa-calendar-minus-o\":\"fa-calendar-minus-o\",\"placeholder\":\"placeholder\",\"fa-heartbeat\":\"fa-heartbeat\",\"fa-windows\":\"fa-windows\",\"fa-vimeo-square\":\"fa-vimeo-square\",\"nav-email-col\":\"nav-email-col\",\"stats-inner\":\"stats-inner\",\"nav-ctc-container\":\"nav-ctc-container\",\"fa-viacoin\":\"fa-viacoin\",\"fa-drivers-license\":\"fa-drivers-license\",\"mobile-container\":\"mobile-container\",\"navbar\":\"navbar\",\"fa-long-arrow-left\":\"fa-long-arrow-left\",\"results-container\":\"results-container\",\"fa-money\":\"fa-money\",\"recent-firm-news-item\":\"recent-firm-news-item\",\"fa-sign-in\":\"fa-sign-in\",\"fa-arrow-circle-right\":\"fa-arrow-circle-right\",\"fa-puzzle-piece\":\"fa-puzzle-piece\",\"sr-only-focusable\":\"sr-only-focusable\",\"fa-codiepie\":\"fa-codiepie\",\"btn-black\":\"btn-black\",\"fa-openid\":\"fa-openid\",\"fa-shopping-bag\":\"fa-shopping-bag\",\"fa-info\":\"fa-info\",\"fa-check-square\":\"fa-check-square\",\"pointer\":\"pointer\",\"fa-cc-paypal\":\"fa-cc-paypal\",\"fa-circle\":\"fa-circle\",\"mm-recent-firm-news\":\"mm-recent-firm-news\",\"fa-eraser\":\"fa-eraser\",\"fa-chevron-up\":\"fa-chevron-up\",\"fa-copy\":\"fa-copy\",\"fa-chevron-circle-down\":\"fa-chevron-circle-down\",\"fa-bluetooth\":\"fa-bluetooth\",\"fa-share-square\":\"fa-share-square\",\"fa-repeat\":\"fa-repeat\",\"fa-desktop\":\"fa-desktop\",\"result-case\":\"result-case\",\"fa-hand-rock-o\":\"fa-hand-rock-o\",\"fa-th-large\":\"fa-th-large\",\"fa-arrow-circle-o-up\":\"fa-arrow-circle-o-up\",\"fa-google\":\"fa-google\",\"social-share-expanding\":\"social-share-expanding\",\"fa-bold\":\"fa-bold\",\"pullquote-right\":\"pullquote-right\",\"result-header-gray\":\"result-header-gray\",\"fa-video-camera\":\"fa-video-camera\",\"fa-file-audio-o\":\"fa-file-audio-o\",\"fa-bus\":\"fa-bus\",\"btn-ctc\":\"btn-ctc\",\"fa-stumbleupon-circle\":\"fa-stumbleupon-circle\",\"fa-yc\":\"fa-yc\",\"fa-heart\":\"fa-heart\",\"fa-frown-o\":\"fa-frown-o\",\"fa-mail-reply\":\"fa-mail-reply\",\"fa-vine\":\"fa-vine\",\"fa-sign-language\":\"fa-sign-language\",\"fa-tv\":\"fa-tv\",\"fa-user-times\":\"fa-user-times\",\"faq-card\":\"faq-card\",\"fa-database\":\"fa-database\",\"fa-codepen\":\"fa-codepen\",\"fa-simplybuilt\":\"fa-simplybuilt\",\"experiment-semaphore\":\"experiment-semaphore\",\"fa-window-maximize\":\"fa-window-maximize\",\"fa-map-marker\":\"fa-map-marker\",\"fa-sort-amount-desc\":\"fa-sort-amount-desc\",\"fa-file-picture-o\":\"fa-file-picture-o\",\"fa-usb\":\"fa-usb\",\"fa-terminal\":\"fa-terminal\",\"fa-bar-chart\":\"fa-bar-chart\",\"fa-product-hunt\":\"fa-product-hunt\",\"fa-image\":\"fa-image\",\"fa-stop-circle-o\":\"fa-stop-circle-o\",\"fa-venus-mars\":\"fa-venus-mars\",\"fa-commenting\":\"fa-commenting\",\"fa-trophy\":\"fa-trophy\",\"fa-rotate-270\":\"fa-rotate-270\",\"fa-soundcloud\":\"fa-soundcloud\",\"highlighteable\":\"highlighteable\",\"fa-gavel\":\"fa-gavel\",\"fa-random\":\"fa-random\",\"fa-stack-2x\":\"fa-stack-2x\",\"fa-ul\":\"fa-ul\",\"fa-asterisk\":\"fa-asterisk\",\"fa-arrows-h\":\"fa-arrows-h\",\"fa-jpy\":\"fa-jpy\",\"fa-y-combinator\":\"fa-y-combinator\",\"fa-mail-forward\":\"fa-mail-forward\",\"fa-legal\":\"fa-legal\",\"email\":\"email\",\"fa-volume-off\":\"fa-volume-off\",\"fa-external-link-square\":\"fa-external-link-square\",\"fa-opera\":\"fa-opera\",\"fa-superpowers\":\"fa-superpowers\",\"fa-maxcdn\":\"fa-maxcdn\",\"fa-apple\":\"fa-apple\",\"fa-foursquare\":\"fa-foursquare\",\"fa-scissors\":\"fa-scissors\",\"sub-title\":\"sub-title\",\"fa-cloud-download\":\"fa-cloud-download\",\"fa-twitch\":\"fa-twitch\",\"pullquote-left\":\"pullquote-left\",\"fa-snowflake-o\":\"fa-snowflake-o\",\"fa-tablet\":\"fa-tablet\",\"fa-star\":\"fa-star\",\"fa-leanpub\":\"fa-leanpub\",\"fa-play\":\"fa-play\",\"fa-creative-commons\":\"fa-creative-commons\",\"fa-wechat\":\"fa-wechat\",\"fa-stop\":\"fa-stop\",\"fa-tachometer\":\"fa-tachometer\",\"fa-ambulance\":\"fa-ambulance\",\"fa-weibo\":\"fa-weibo\",\"settlements-results\":\"settlements-results\",\"btn-pagination\":\"btn-pagination\",\"recent-firm-news-more-results\":\"recent-firm-news-more-results\",\"fa-wifi\":\"fa-wifi\",\"fa-mail-reply-all\":\"fa-mail-reply-all\",\"fa-space-shuttle\":\"fa-space-shuttle\",\"fa-soccer-ball-o\":\"fa-soccer-ball-o\",\"fa-user-o\":\"fa-user-o\",\"modal-body\":\"modal-body\",\"fa-trash\":\"fa-trash\",\"settlements-featured\":\"settlements-featured\",\"fa-paw\":\"fa-paw\",\"items-3\":\"items-3\",\"fa-ticket\":\"fa-ticket\",\"fa-times-circle\":\"fa-times-circle\",\"fa-grav\":\"fa-grav\",\"fa-angle-left\":\"fa-angle-left\",\"fa-btc\":\"fa-btc\",\"fa-medkit\":\"fa-medkit\",\"fa-user-circle\":\"fa-user-circle\",\"fa-unlock\":\"fa-unlock\",\"fa-linkedin\":\"fa-linkedin\",\"fa-area-chart\":\"fa-area-chart\",\"fa-arrow-circle-o-right\":\"fa-arrow-circle-o-right\",\"fa-address-book-o\":\"fa-address-book-o\",\"fa-thermometer-three-quarters\":\"fa-thermometer-three-quarters\",\"fa-american-sign-language-interpreting\":\"fa-american-sign-language-interpreting\",\"fa-fast-backward\":\"fa-fast-backward\",\"fa-github-square\":\"fa-github-square\",\"fa-times-rectangle-o\":\"fa-times-rectangle-o\",\"nav-call-col\":\"nav-call-col\",\"fa-subway\":\"fa-subway\",\"fa-newspaper-o\":\"fa-newspaper-o\",\"fa-google-plus-circle\":\"fa-google-plus-circle\",\"fa-bitbucket\":\"fa-bitbucket\",\"mm-search\":\"mm-search\",\"fa-reorder\":\"fa-reorder\",\"focused\":\"focused\",\"fa-thumbs-o-down\":\"fa-thumbs-o-down\",\"fa-street-view\":\"fa-street-view\",\"fa-calendar-times-o\":\"fa-calendar-times-o\",\"fa-keyboard-o\":\"fa-keyboard-o\",\"fa-magnet\":\"fa-magnet\",\"fa-ship\":\"fa-ship\",\"general-form\":\"general-form\",\"fa-automobile\":\"fa-automobile\",\"fa-wpbeginner\":\"fa-wpbeginner\",\"fa-battery-half\":\"fa-battery-half\",\"fa-pinterest\":\"fa-pinterest\",\"result-left\":\"result-left\",\"fa-th\":\"fa-th\",\"fa-share\":\"fa-share\",\"fa-sort-numeric-asc\":\"fa-sort-numeric-asc\",\"fa-percent\":\"fa-percent\",\"fa-mercury\":\"fa-mercury\",\"breadcrumb\":\"breadcrumb\",\"fa-thermometer\":\"fa-thermometer\",\"fa-mortar-board\":\"fa-mortar-board\",\"header-title\":\"header-title\",\"fa-key\":\"fa-key\",\"fa-s15\":\"fa-s15\",\"dropdown-locations\":\"dropdown-locations\",\"btn-red\":\"btn-red\",\"fa-cab\":\"fa-cab\",\"fa-slideshare\":\"fa-slideshare\",\"fa-angle-double-left\":\"fa-angle-double-left\",\"fa-ravelry\":\"fa-ravelry\",\"fb-comments\":\"fb-comments\",\"fa-lastfm\":\"fa-lastfm\",\"fa-rebel\":\"fa-rebel\",\"fa-chain-broken\":\"fa-chain-broken\",\"items-1\":\"items-1\",\"fa-strikethrough\":\"fa-strikethrough\",\"fa-sort-alpha-desc\":\"fa-sort-alpha-desc\",\"fa-phone-square\":\"fa-phone-square\",\"pull-right\":\"pull-right\",\"fa-envelope\":\"fa-envelope\",\"fa-th-list\":\"fa-th-list\",\"fa-at\":\"fa-at\",\"fa-remove\":\"fa-remove\",\"fa-life-bouy\":\"fa-life-bouy\",\"fa-battery-empty\":\"fa-battery-empty\",\"yt\":\"yt\",\"fa-arrow-circle-left\":\"fa-arrow-circle-left\",\"fa-arrow-circle-up\":\"fa-arrow-circle-up\",\"fa-pulse\":\"fa-pulse\",\"advertisement\":\"advertisement\",\"fa-expand\":\"fa-expand\",\"fa-mars-double\":\"fa-mars-double\",\"fa-comment-o\":\"fa-comment-o\",\"fa-adn\":\"fa-adn\",\"fa-vk\":\"fa-vk\",\"fa-ruble\":\"fa-ruble\",\"fa-laptop\":\"fa-laptop\",\"fa-xing-square\":\"fa-xing-square\",\"fa-expeditedssl\":\"fa-expeditedssl\",\"fa-first-order\":\"fa-first-order\",\"btn-twitter\":\"btn-twitter\",\"fa-google-plus\":\"fa-google-plus\",\"fa-caret-right\":\"fa-caret-right\",\"fa-code\":\"fa-code\",\"btn\":\"btn\",\"fa-building-o\":\"fa-building-o\",\"fa-check-circle-o\":\"fa-check-circle-o\",\"fa-circle-thin\":\"fa-circle-thin\",\"fa-angle-up\":\"fa-angle-up\",\"fa-text-height\":\"fa-text-height\",\"fa-gittip\":\"fa-gittip\",\"fa-angle-double-up\":\"fa-angle-double-up\",\"fa-usd\":\"fa-usd\",\"fa-file-archive-o\":\"fa-file-archive-o\",\"fa-gift\":\"fa-gift\",\"fa-thermometer-full\":\"fa-thermometer-full\",\"sr-only\":\"sr-only\",\"fa-steam\":\"fa-steam\",\"fa-3x\":\"fa-3x\",\"fa-battery-4\":\"fa-battery-4\",\"fa-address-card\":\"fa-address-card\",\"fa-fw\":\"fa-fw\",\"fa-motorcycle\":\"fa-motorcycle\",\"fa-times\":\"fa-times\",\"fa-list-ol\":\"fa-list-ol\",\"fa-black-tie\":\"fa-black-tie\",\"footer-form\":\"footer-form\",\"hs-error-msgs\":\"hs-error-msgs\",\"fa-address-card-o\":\"fa-address-card-o\",\"fa-map\":\"fa-map\",\"selected\":\"selected\",\"btn-ghost-black\":\"btn-ghost-black\",\"fa-file-sound-o\":\"fa-file-sound-o\",\"fa-meanpath\":\"fa-meanpath\",\"fa-info-circle\":\"fa-info-circle\",\"fa-dedent\":\"fa-dedent\",\"search-expand-lg\":\"search-expand-lg\",\"fa-toggle-off\":\"fa-toggle-off\",\"fa-certificate\":\"fa-certificate\",\"fa-font-awesome\":\"fa-font-awesome\",\"mm-table\":\"mm-table\",\"fa-camera\":\"fa-camera\",\"fa-sort-down\":\"fa-sort-down\",\"fa-thermometer-2\":\"fa-thermometer-2\",\"footer-logo\":\"footer-logo\",\"fa-user\":\"fa-user\",\"fa-group\":\"fa-group\",\"fa-power-off\":\"fa-power-off\",\"fa-android\":\"fa-android\",\"fa-futbol-o\":\"fa-futbol-o\",\"fa-circle-o\":\"fa-circle-o\",\"fa-pencil\":\"fa-pencil\",\"fa-sign-out\":\"fa-sign-out\",\"fa-sort-amount-asc\":\"fa-sort-amount-asc\",\"nav-search\":\"nav-search\",\"stats-recovered\":\"stats-recovered\",\"fa-spin\":\"fa-spin\",\"fa-users\":\"fa-users\",\"fa-align-center\":\"fa-align-center\",\"fa-connectdevelop\":\"fa-connectdevelop\",\"fa-qrcode\":\"fa-qrcode\",\"fa-tags\":\"fa-tags\",\"fa-minus-square-o\":\"fa-minus-square-o\",\"fa-star-half\":\"fa-star-half\",\"fa-eject\":\"fa-eject\",\"fa-stack-overflow\":\"fa-stack-overflow\",\"fa-bicycle\":\"fa-bicycle\",\"fa-cut\":\"fa-cut\",\"fa-rss\":\"fa-rss\",\"fa-joomla\":\"fa-joomla\",\"more\":\"more\",\"fa-server\":\"fa-server\",\"modal-header\":\"modal-header\",\"fa-4x\":\"fa-4x\",\"fa-chevron-circle-right\":\"fa-chevron-circle-right\",\"fa-clone\":\"fa-clone\",\"fa-align-left\":\"fa-align-left\",\"fa-mouse-pointer\":\"fa-mouse-pointer\",\"fa-hourglass-o\":\"fa-hourglass-o\",\"result-container\":\"result-container\",\"metadata\":\"metadata\",\"fa-linode\":\"fa-linode\",\"fa-bug\":\"fa-bug\",\"fa-thumb-tack\":\"fa-thumb-tack\",\"fa-bed\":\"fa-bed\",\"fa-link\":\"fa-link\",\"dropdown-menu\":\"dropdown-menu\",\"fa-reply-all\":\"fa-reply-all\",\"fa-subscript\":\"fa-subscript\",\"masthead\":\"masthead\",\"card-content-alert\":\"card-content-alert\",\"mobile\":\"mobile\",\"fa-align-justify\":\"fa-align-justify\",\"fa-ioxhost\":\"fa-ioxhost\",\"fa-credit-card\":\"fa-credit-card\",\"social-card\":\"social-card\",\"fa-youtube-square\":\"fa-youtube-square\",\"fa-battery-three-quarters\":\"fa-battery-three-quarters\",\"fa-bullhorn\":\"fa-bullhorn\",\"fa-tasks\":\"fa-tasks\",\"fa-filter\":\"fa-filter\",\"fa-pinterest-p\":\"fa-pinterest-p\",\"fa-bathtub\":\"fa-bathtub\",\"fa-2x\":\"fa-2x\",\"fa-share-square-o\":\"fa-share-square-o\",\"fa-flag-o\":\"fa-flag-o\",\"fa-thumbs-up\":\"fa-thumbs-up\",\"fa-underline\":\"fa-underline\",\"fa-star-half-full\":\"fa-star-half-full\",\"fa-delicious\":\"fa-delicious\",\"fa-gg-circle\":\"fa-gg-circle\",\"fa-vcard\":\"fa-vcard\",\"fa-hand-o-left\":\"fa-hand-o-left\",\"fa-i-cursor\":\"fa-i-cursor\",\"fa-arrow-left\":\"fa-arrow-left\",\"fa-won\":\"fa-won\",\"fa-odnoklassniki\":\"fa-odnoklassniki\",\"fa-caret-square-o-left\":\"fa-caret-square-o-left\",\"fa-search-plus\":\"fa-search-plus\",\"fa-pied-piper-alt\":\"fa-pied-piper-alt\",\"fa-chrome\":\"fa-chrome\",\"fa-youtube-play\":\"fa-youtube-play\",\"fa-bitcoin\":\"fa-bitcoin\",\"fa-crop\":\"fa-crop\",\"form-control\":\"form-control\",\"fa-object-ungroup\":\"fa-object-ungroup\",\"fa-neuter\":\"fa-neuter\",\"fa-dropbox\":\"fa-dropbox\",\"fa-assistive-listening-systems\":\"fa-assistive-listening-systems\",\"fa-linkedin-square\":\"fa-linkedin-square\",\"fa-ellipsis-v\":\"fa-ellipsis-v\",\"fa-caret-square-o-up\":\"fa-caret-square-o-up\",\"fa-glide\":\"fa-glide\",\"btn-close\":\"btn-close\",\"fa-eye\":\"fa-eye\",\"fa-list-ul\":\"fa-list-ul\",\"facebook-comment-wrapper\":\"facebook-comment-wrapper\",\"rt\":\"rt\",\"fa-cogs\":\"fa-cogs\",\"fa-bar-chart-o\":\"fa-bar-chart-o\",\"fa-question\":\"fa-question\",\"fa-pause-circle-o\":\"fa-pause-circle-o\",\"btn-social\":\"btn-social\",\"fa-volume-down\":\"fa-volume-down\",\"fa-map-pin\":\"fa-map-pin\",\"expander\":\"expander\",\"fa-file\":\"fa-file\",\"fa-check\":\"fa-check\",\"fa-reply\":\"fa-reply\",\"fa-hand-spock-o\":\"fa-hand-spock-o\",\"fa-unlock-alt\":\"fa-unlock-alt\",\"fa-drivers-license-o\":\"fa-drivers-license-o\",\"card-content\":\"card-content\",\"fa-compress\":\"fa-compress\",\"gp\":\"gp\",\"affix\":\"affix\",\"fa-inbox\":\"fa-inbox\",\"fa-cart-arrow-down\":\"fa-cart-arrow-down\",\"fa-reddit-alien\":\"fa-reddit-alien\",\"fa-behance\":\"fa-behance\",\"fa-calendar\":\"fa-calendar\",\"recent-firm-news-title\":\"recent-firm-news-title\",\"fa-google-plus-square\":\"fa-google-plus-square\",\"fa-wheelchair-alt\":\"fa-wheelchair-alt\",\"follow-row\":\"follow-row\",\"fa-folder-open\":\"fa-folder-open\",\"fa-yen\":\"fa-yen\",\"fa-spoon\":\"fa-spoon\",\"fa-ils\":\"fa-ils\",\"fa-trello\":\"fa-trello\",\"fa-envelope-open\":\"fa-envelope-open\",\"fa-cc-discover\":\"fa-cc-discover\",\"fa-mobile-phone\":\"fa-mobile-phone\",\"fa-comment\":\"fa-comment\",\"fa-eercast\":\"fa-eercast\",\"nav\":\"nav\",\"fa-cc-amex\":\"fa-cc-amex\",\"fa-archive\":\"fa-archive\",\"fa-sun-o\":\"fa-sun-o\",\"fa-thermometer-1\":\"fa-thermometer-1\",\"results-loader-container\":\"results-loader-container\",\"fa-arrows\":\"fa-arrows\",\"fa-quote-right\":\"fa-quote-right\",\"fa-universal-access\":\"fa-universal-access\",\"fa-train\":\"fa-train\",\"hidden-lg\":\"hidden-lg\",\"network\":\"network\",\"fa-pie-chart\":\"fa-pie-chart\",\"fa-buysellads\":\"fa-buysellads\",\"fa-taxi\":\"fa-taxi\",\"footer-subnav-links\":\"footer-subnav-links\",\"fa-sellsy\":\"fa-sellsy\",\"fa-glide-g\":\"fa-glide-g\",\"fa-retweet\":\"fa-retweet\",\"fa-text-width\":\"fa-text-width\",\"fa-rupee\":\"fa-rupee\",\"fa-ellipsis-h\":\"fa-ellipsis-h\",\"fa-folder-open-o\":\"fa-folder-open-o\",\"fa-photo\":\"fa-photo\",\"fa-object-group\":\"fa-object-group\",\"fa-unlink\":\"fa-unlink\",\"pin\":\"pin\",\"fa-slack\":\"fa-slack\",\"fa-twitter\":\"fa-twitter\",\"hs_yes_sign_me_up_for_the_newsletter_\":\"hs_yes_sign_me_up_for_the_newsletter_\",\"fa-caret-left\":\"fa-caret-left\",\"fa-exclamation\":\"fa-exclamation\",\"fa-file-powerpoint-o\":\"fa-file-powerpoint-o\",\"fa-eyedropper\":\"fa-eyedropper\",\"fa-contao\":\"fa-contao\",\"fa-search\":\"fa-search\",\"fa-exclamation-triangle\":\"fa-exclamation-triangle\",\"hero-unit\":\"hero-unit\",\"fa-twitter-square\":\"fa-twitter-square\",\"fa-plug\":\"fa-plug\",\"fa-dashboard\":\"fa-dashboard\",\"dropdown-toggle\":\"dropdown-toggle\",\"fa-file-word-o\":\"fa-file-word-o\",\"fa-eye-slash\":\"fa-eye-slash\",\"fa-xing\":\"fa-xing\",\"fa-thermometer-half\":\"fa-thermometer-half\",\"fa-handshake-o\":\"fa-handshake-o\",\"fa-chevron-circle-left\":\"fa-chevron-circle-left\",\"fa-glass\":\"fa-glass\",\"desktop\":\"desktop\",\"fa-eur\":\"fa-eur\",\"fa-braille\":\"fa-braille\",\"fa-floppy-o\":\"fa-floppy-o\",\"card-top\":\"card-top\",\"fa-skype\":\"fa-skype\",\"fa-volume-up\":\"fa-volume-up\",\"fa-cc-stripe\":\"fa-cc-stripe\",\"fa-hourglass-end\":\"fa-hourglass-end\",\"stats-header\":\"stats-header\",\"fa-microphone\":\"fa-microphone\",\"fa-5x\":\"fa-5x\",\"close\":\"close\",\"fa-font\":\"fa-font\",\"fa-meetup\":\"fa-meetup\",\"fa-arrows-alt\":\"fa-arrows-alt\",\"fa-pencil-square-o\":\"fa-pencil-square-o\",\"fa-hdd-o\":\"fa-hdd-o\",\"fa-home\":\"fa-home\",\"fa-road\":\"fa-road\",\"fa-crosshairs\":\"fa-crosshairs\",\"nav-logo\":\"nav-logo\",\"fa-building\":\"fa-building\",\"recent-firm-news-details\":\"recent-firm-news-details\",\"featured-result\":\"featured-result\",\"fa-level-up\":\"fa-level-up\",\"fa-stop-circle\":\"fa-stop-circle\",\"expandable\":\"expandable\",\"fa-id-card-o\":\"fa-id-card-o\",\"fa-thermometer-empty\":\"fa-thermometer-empty\",\"fa-chevron-right\":\"fa-chevron-right\",\"fa-file-excel-o\":\"fa-file-excel-o\",\"fa-plane\":\"fa-plane\",\"fa-venus-double\":\"fa-venus-double\",\"address\":\"address\",\"fa-check-circle\":\"fa-check-circle\",\"fa-envelope-o\":\"fa-envelope-o\",\"fa-toggle-up\":\"fa-toggle-up\",\"fa-snapchat-ghost\":\"fa-snapchat-ghost\",\"fa-try\":\"fa-try\",\"fa-file-photo-o\":\"fa-file-photo-o\",\"result-mobile\":\"result-mobile\",\"image-column\":\"image-column\",\"fa-long-arrow-down\":\"fa-long-arrow-down\",\"fa-plus\":\"fa-plus\",\"fa-battery-quarter\":\"fa-battery-quarter\",\"fa-hourglass-start\":\"fa-hourglass-start\",\"fa-line-chart\":\"fa-line-chart\",\"open\":\"open\",\"double-wide\":\"double-wide\",\"fa-history\":\"fa-history\",\"fa-folder\":\"fa-folder\",\"btn-dark\":\"btn-dark\",\"fa-microchip\":\"fa-microchip\",\"fa-bomb\":\"fa-bomb\",\"pointer-wrapper\":\"pointer-wrapper\",\"fa-tint\":\"fa-tint\",\"fa-low-vision\":\"fa-low-vision\",\"fa-snapchat-square\":\"fa-snapchat-square\",\"caret\":\"caret\",\"fa-bolt\":\"fa-bolt\",\"fa-undo\":\"fa-undo\",\"settlements-stats\":\"settlements-stats\",\"fa-arrow-up\":\"fa-arrow-up\",\"search-expand-md\":\"search-expand-md\",\"fa-pagelines\":\"fa-pagelines\",\"fa-heart-o\":\"fa-heart-o\",\"fa-send-o\":\"fa-send-o\",\"fa-television\":\"fa-television\",\"fa-support\":\"fa-support\",\"fa-opencart\":\"fa-opencart\",\"fa-diamond\":\"fa-diamond\",\"modal-title\":\"modal-title\",\"fa-battery\":\"fa-battery\",\"fa-500px\":\"fa-500px\",\"fa-film\":\"fa-film\",\"fa-book\":\"fa-book\",\"fa-window-close\":\"fa-window-close\",\"fa-comments\":\"fa-comments\",\"fa-themeisle\":\"fa-themeisle\",\"more-related-articles\":\"more-related-articles\",\"fa-suitcase\":\"fa-suitcase\",\"fa-clipboard\":\"fa-clipboard\",\"fa-check-square-o\":\"fa-check-square-o\",\"links-row\":\"links-row\",\"fa-tree\":\"fa-tree\",\"search-expand-sm\":\"search-expand-sm\",\"fa-medium\":\"fa-medium\",\"fa-location-arrow\":\"fa-location-arrow\",\"fa-user-plus\":\"fa-user-plus\",\"fa-stack\":\"fa-stack\",\"fa-krw\":\"fa-krw\",\"result-header-white\":\"result-header-white\",\"fa-hand-scissors-o\":\"fa-hand-scissors-o\",\"fa-houzz\":\"fa-houzz\",\"fa-volume-control-phone\":\"fa-volume-control-phone\",\"fa-clock-o\":\"fa-clock-o\",\"fa-fire\":\"fa-fire\",\"fa-file-text-o\":\"fa-file-text-o\",\"fa-arrow-circle-o-left\":\"fa-arrow-circle-o-left\",\"fa-hand-o-up\":\"fa-hand-o-up\",\"fa-lg\":\"fa-lg\",\"fa-life-buoy\":\"fa-life-buoy\",\"fa-align-right\":\"fa-align-right\",\"fa-arrows-v\":\"fa-arrows-v\",\"fa-viadeo\":\"fa-viadeo\",\"fa-vcard-o\":\"fa-vcard-o\",\"testimonials-items\":\"testimonials-items\",\"fa-hand-peace-o\":\"fa-hand-peace-o\",\"sidebar-form\":\"sidebar-form\",\"fa-safari\":\"fa-safari\",\"fa-reddit-square\":\"fa-reddit-square\",\"fa-vimeo\":\"fa-vimeo\",\"fa-files-o\":\"fa-files-o\",\"fa-file-text\":\"fa-file-text\",\"fa-copyright\":\"fa-copyright\",\"fa-id-card\":\"fa-id-card\",\"fa-chain\":\"fa-chain\",\"fa-dashcube\":\"fa-dashcube\",\"fa-facebook-official\":\"fa-facebook-official\",\"fa-pull-left\":\"fa-pull-left\",\"fa-pied-piper-pp\":\"fa-pied-piper-pp\",\"fa-audio-description\":\"fa-audio-description\",\"has-results\":\"has-results\",\"fa-cog\":\"fa-cog\",\"fa-venus\":\"fa-venus\",\"fa-odnoklassniki-square\":\"fa-odnoklassniki-square\",\"fa-angle-down\":\"fa-angle-down\",\"fa-minus-circle\":\"fa-minus-circle\",\"fa-drupal\":\"fa-drupal\",\"fa-dribbble\":\"fa-dribbble\",\"btn-red-centered\":\"btn-red-centered\",\"fa-file-video-o\":\"fa-file-video-o\",\"fa-industry\":\"fa-industry\",\"fa-user-md\":\"fa-user-md\",\"fa-pull-right\":\"fa-pull-right\",\"fa-folder-o\":\"fa-folder-o\",\"fa-fire-extinguisher\":\"fa-fire-extinguisher\",\"fa-shopping-basket\":\"fa-shopping-basket\",\"fa-yc-square\":\"fa-yc-square\",\"show\":\"show\",\"fa-life-saver\":\"fa-life-saver\",\"fa-square-o\":\"fa-square-o\",\"fa-etsy\":\"fa-etsy\",\"pull-left\":\"pull-left\",\"fa-resistance\":\"fa-resistance\",\"fa-bell-o\":\"fa-bell-o\",\"fa-skyatlas\":\"fa-skyatlas\",\"fa-battery-3\":\"fa-battery-3\",\"fa-quote-left\":\"fa-quote-left\",\"mm-header-container\":\"mm-header-container\",\"nav-desktop\":\"nav-desktop\",\"fa-toggle-down\":\"fa-toggle-down\",\"fa-shield\":\"fa-shield\",\"fa-step-forward\":\"fa-step-forward\",\"fa-commenting-o\":\"fa-commenting-o\",\"fa-camera-retro\":\"fa-camera-retro\",\"fa-paper-plane\":\"fa-paper-plane\",\"fa-briefcase\":\"fa-briefcase\",\"fa-digg\":\"fa-digg\",\"centered-button\":\"centered-button\",\"fa-thumbs-o-up\":\"fa-thumbs-o-up\",\"fa-behance-square\":\"fa-behance-square\",\"fa-italic\":\"fa-italic\",\"stats-clients\":\"stats-clients\",\"col-md-4\":\"col-md-4\",\"fa-sort-alpha-asc\":\"fa-sort-alpha-asc\",\"fa-step-backward\":\"fa-step-backward\",\"fb\":\"fb\",\"fa-flip-vertical\":\"fa-flip-vertical\",\"fa-stack-1x\":\"fa-stack-1x\",\"fa-sitemap\":\"fa-sitemap\",\"clicktocall\":\"clicktocall\",\"header-bar\":\"header-bar\",\"fa-border\":\"fa-border\",\"fa-file-image-o\":\"fa-file-image-o\",\"fa-asl-interpreting\":\"fa-asl-interpreting\",\"fa-pencil-square\":\"fa-pencil-square\",\"tw\":\"tw\",\"fa-linux\":\"fa-linux\",\"fa-wordpress\":\"fa-wordpress\",\"fa-comments-o\":\"fa-comments-o\",\"fa-toggle-on\":\"fa-toggle-on\",\"fa-cloud\":\"fa-cloud\",\"result-right\":\"result-right\",\"inputs-list\":\"inputs-list\",\"fa-user-secret\":\"fa-user-secret\",\"btn-fb\":\"btn-fb\",\"fa-deviantart\":\"fa-deviantart\",\"fa-signal\":\"fa-signal\",\"fa-rotate-right\":\"fa-rotate-right\",\"testimonials-header\":\"testimonials-header\",\"fa-star-o\":\"fa-star-o\",\"fa-angellist\":\"fa-angellist\",\"fa-tumblr-square\":\"fa-tumblr-square\",\"fa-cny\":\"fa-cny\",\"fa-battery-0\":\"fa-battery-0\",\"visible-lg\":\"visible-lg\",\"fa-list\":\"fa-list\",\"fa-lemon-o\":\"fa-lemon-o\",\"fa-fort-awesome\":\"fa-fort-awesome\",\"fa-chevron-circle-up\":\"fa-chevron-circle-up\",\"fa-fighter-jet\":\"fa-fighter-jet\",\"item-container\":\"item-container\",\"stats-resolved\":\"stats-resolved\",\"btn-yt\":\"btn-yt\",\"fa-cc-jcb\":\"fa-cc-jcb\",\"fa-deaf\":\"fa-deaf\",\"fa-bookmark-o\":\"fa-bookmark-o\",\"fa-arrow-circle-down\":\"fa-arrow-circle-down\",\"fa-warning\":\"fa-warning\",\"fa-empire\":\"fa-empire\",\"fa-turkish-lira\":\"fa-turkish-lira\",\"fa-long-arrow-up\":\"fa-long-arrow-up\",\"mm-search-input\":\"mm-search-input\",\"fa-steam-square\":\"fa-steam-square\",\"fa-chevron-left\":\"fa-chevron-left\",\"fa-facebook-f\":\"fa-facebook-f\",\"fa-transgender-alt\":\"fa-transgender-alt\",\"btn-ghost\":\"btn-ghost\",\"form-blurb\":\"form-blurb\",\"fa-tag\":\"fa-tag\",\"fa-bath\":\"fa-bath\",\"fa-cutlery\":\"fa-cutlery\",\"footer-subnav\":\"footer-subnav\",\"fa-shekel\":\"fa-shekel\",\"fa-flag\":\"fa-flag\",\"fa-fax\":\"fa-fax\",\"fa-envira\":\"fa-envira\",\"go-to-top-container\":\"go-to-top-container\",\"recent-firm-news-header\":\"recent-firm-news-header\",\"fa-shopping-cart\":\"fa-shopping-cart\",\"fa-file-o\":\"fa-file-o\",\"fa-thermometer-4\":\"fa-thermometer-4\",\"fa-angle-right\":\"fa-angle-right\",\"fa-mars-stroke-h\":\"fa-mars-stroke-h\",\"fa-user-circle-o\":\"fa-user-circle-o\",\"fa-arrow-down\":\"fa-arrow-down\",\"popup-contact-form\":\"popup-contact-form\",\"fa-life-ring\":\"fa-life-ring\",\"fa-ge\":\"fa-ge\",\"hs-button\":\"hs-button\",\"fa-battery-2\":\"fa-battery-2\",\"fa-address-book\":\"fa-address-book\",\"fa-caret-square-o-down\":\"fa-caret-square-o-down\",\"fa-google-wallet\":\"fa-google-wallet\",\"fa-hand-grab-o\":\"fa-hand-grab-o\",\"fa-barcode\":\"fa-barcode\",\"fa-thermometer-0\":\"fa-thermometer-0\",\"fa-header\":\"fa-header\",\"fa-beer\":\"fa-beer\",\"fa-inr\":\"fa-inr\",\"fa-hourglass-1\":\"fa-hourglass-1\",\"fa-minus-square\":\"fa-minus-square\",\"fa-reddit\":\"fa-reddit\",\"num\":\"num\",\"fa-renren\":\"fa-renren\",\"fa-backward\":\"fa-backward\",\"contact-card\":\"contact-card\",\"fa-calendar-check-o\":\"fa-calendar-check-o\",\"fa-gamepad\":\"fa-gamepad\",\"fa-calendar-plus-o\":\"fa-calendar-plus-o\",\"hs-richtext\":\"hs-richtext\",\"fa-caret-up\":\"fa-caret-up\",\"fa-file-code-o\":\"fa-file-code-o\",\"fa-star-half-empty\":\"fa-star-half-empty\",\"fa-youtube\":\"fa-youtube\",\"go-top\":\"go-top\",\"fa-bell\":\"fa-bell\",\"fa-telegram\":\"fa-telegram\",\"fa-viadeo-square\":\"fa-viadeo-square\",\"fa-external-link\":\"fa-external-link\",\"call-us\":\"call-us\",\"fa-cube\":\"fa-cube\",\"fa-forumbee\":\"fa-forumbee\",\"fa-snapchat\":\"fa-snapchat\",\"fa-graduation-cap\":\"fa-graduation-cap\",\"fa-arrow-right\":\"fa-arrow-right\",\"stats-attorneys\":\"stats-attorneys\",\"fa-flash\":\"fa-flash\",\"fa-smile-o\":\"fa-smile-o\",\"fa-headphones\":\"fa-headphones\",\"fa-instagram\":\"fa-instagram\",\"most-popular\":\"most-popular\",\"mm-sortable-table\":\"mm-sortable-table\",\"fa-yelp\":\"fa-yelp\",\"fa-y-combinator-square\":\"fa-y-combinator-square\",\"fa-hand-stop-o\":\"fa-hand-stop-o\",\"fa-edge\":\"fa-edge\",\"hs-form-field\":\"hs-form-field\",\"hs_submit\":\"hs_submit\",\"fa-cubes\":\"fa-cubes\",\"fa-pause\":\"fa-pause\",\"fa-ban\":\"fa-ban\",\"fa-rouble\":\"fa-rouble\",\"featured-link\":\"featured-link\",\"dropdown\":\"dropdown\",\"fa-tumblr\":\"fa-tumblr\",\"fa-unsorted\":\"fa-unsorted\",\"navbar-header\":\"navbar-header\",\"fa-rmb\":\"fa-rmb\",\"expanded\":\"expanded\",\"fa-window-close-o\":\"fa-window-close-o\",\"fa-circle-o-notch\":\"fa-circle-o-notch\",\"fa-coffee\":\"fa-coffee\",\"fa-hand-o-down\":\"fa-hand-o-down\",\"fa-paragraph\":\"fa-paragraph\",\"fa-gitlab\":\"fa-gitlab\",\"phone\":\"phone\",\"fa-mars-stroke-v\":\"fa-mars-stroke-v\",\"fa-stethoscope\":\"fa-stethoscope\",\"fa-quora\":\"fa-quora\",\"fa-institution\":\"fa-institution\",\"fa-stack-exchange\":\"fa-stack-exchange\",\"fa-shirtsinbulk\":\"fa-shirtsinbulk\",\"fa-thermometer-quarter\":\"fa-thermometer-quarter\",\"fa-cc\":\"fa-cc\",\"fa-h-square\":\"fa-h-square\",\"fa-leaf\":\"fa-leaf\",\"fa-compass\":\"fa-compass\",\"related-article-box\":\"related-article-box\",\"fa-window-restore\":\"fa-window-restore\",\"fa-github\":\"fa-github\",\"fa-times-rectangle\":\"fa-times-rectangle\",\"mm-news-articles-basic\":\"mm-news-articles-basic\",\"fa-print\":\"fa-print\",\"fa-wikipedia-w\":\"fa-wikipedia-w\",\"fa-css3\":\"fa-css3\",\"row-testimonials\":\"row-testimonials\",\"fa-intersex\":\"fa-intersex\",\"fa-bell-slash-o\":\"fa-bell-slash-o\",\"fa-firefox\":\"fa-firefox\",\"fa-hard-of-hearing\":\"fa-hard-of-hearing\",\"fa-wheelchair\":\"fa-wheelchair\",\"fa-picture-o\":\"fa-picture-o\",\"social\":\"social\",\"testimonials-see-more\":\"testimonials-see-more\",\"fa-bars\":\"fa-bars\",\"fa-get-pocket\":\"fa-get-pocket\",\"fa-pause-circle\":\"fa-pause-circle\",\"fa-exclamation-circle\":\"fa-exclamation-circle\",\"fa-question-circle-o\":\"fa-question-circle-o\",\"fa-modx\":\"fa-modx\",\"fa-hacker-news\":\"fa-hacker-news\",\"fa-trash-o\":\"fa-trash-o\",\"fa-forward\":\"fa-forward\",\"fa-fast-forward\":\"fa-fast-forward\",\"fa-google-plus-official\":\"fa-google-plus-official\",\"fa-rss-square\":\"fa-rss-square\",\"ca-logo\":\"ca-logo\",\"fa-child\":\"fa-child\",\"fa-spinner\":\"fa-spinner\",\"fa-rotate-left\":\"fa-rotate-left\",\"fa-balance-scale\":\"fa-balance-scale\",\"btn-play\":\"btn-play\",\"fa-music\":\"fa-music\",\"fa-rub\":\"fa-rub\",\"fa-internet-explorer\":\"fa-internet-explorer\",\"fa-sliders\":\"fa-sliders\",\"more-related-articles-container\":\"more-related-articles-container\",\"row\":\"row\",\"fa-times-circle-o\":\"fa-times-circle-o\",\"fa-car\":\"fa-car\",\"fa-paint-brush\":\"fa-paint-brush\",\"fa-tty\":\"fa-tty\",\"in\":\"in\",\"fa-bitbucket-square\":\"fa-bitbucket-square\",\"fa-rotate-90\":\"fa-rotate-90\",\"fa-envelope-square\":\"fa-envelope-square\",\"fa-lightbulb-o\":\"fa-lightbulb-o\",\"fa-file-zip-o\":\"fa-file-zip-o\",\"footer-form-wrapper\":\"footer-form-wrapper\",\"fa-tencent-weibo\":\"fa-tencent-weibo\",\"fa-dot-circle-o\":\"fa-dot-circle-o\",\"fa-truck\":\"fa-truck\",\"fa-male\":\"fa-male\",\"fa-microphone-slash\":\"fa-microphone-slash\",\"fa-umbrella\":\"fa-umbrella\",\"fa-hourglass-2\":\"fa-hourglass-2\",\"fa-genderless\":\"fa-genderless\",\"basic-see-more\":\"basic-see-more\",\"fa-lastfm-square\":\"fa-lastfm-square\",\"fa-phone\":\"fa-phone\",\"fa-whatsapp\":\"fa-whatsapp\",\"fa-signing\":\"fa-signing\",\"fa-university\":\"fa-university\",\"fa-battery-full\":\"fa-battery-full\",\"fa-magic\":\"fa-magic\",\"fa-html5\":\"fa-html5\",\"fa-trademark\":\"fa-trademark\",\"star-black\":\"star-black\",\"fa-sort\":\"fa-sort\",\"fa-envelope-open-o\":\"fa-envelope-open-o\",\"fa-gears\":\"fa-gears\",\"star-orange\":\"star-orange\",\"fa-bluetooth-b\":\"fa-bluetooth-b\",\"icon-bar\":\"icon-bar\",\"fa-file-pdf-o\":\"fa-file-pdf-o\",\"fa-list-alt\":\"fa-list-alt\",\"fa-yoast\":\"fa-yoast\",\"grouped\":\"grouped\",\"recent-firm-news-description\":\"recent-firm-news-description\",\"fa-language\":\"fa-language\",\"fa-long-arrow-right\":\"fa-long-arrow-right\",\"fa-send\":\"fa-send\",\"fa-refresh\":\"fa-refresh\",\"fa-search-minus\":\"fa-search-minus\",\"fa-hospital-o\":\"fa-hospital-o\",\"fa-jsfiddle\":\"fa-jsfiddle\",\"items-2\":\"items-2\",\"fa-spotify\":\"fa-spotify\",\"fa-shower\":\"fa-shower\",\"fa-flag-checkered\":\"fa-flag-checkered\",\"fa-podcast\":\"fa-podcast\",\"see-all\":\"see-all\",\"fa-imdb\":\"fa-imdb\",\"fa-bookmark\":\"fa-bookmark\",\"fa-level-down\":\"fa-level-down\",\"fa-wrench\":\"fa-wrench\",\"fa-mixcloud\":\"fa-mixcloud\",\"fa-outdent\":\"fa-outdent\",\"fa-share-alt-square\":\"fa-share-alt-square\",\"fa-lock\":\"fa-lock\",\"fa-gratipay\":\"fa-gratipay\",\"fa-table\":\"fa-table\",\"fa-flip-horizontal\":\"fa-flip-horizontal\",\"fa-plus-square\":\"fa-plus-square\",\"fa-transgender\":\"fa-transgender\",\"actions\":\"actions\",\"fa-bullseye\":\"fa-bullseye\",\"fa-star-half-o\":\"fa-star-half-o\",\"fa\":\"fa\",\"fa-female\":\"fa-female\",\"fa-angle-double-right\":\"fa-angle-double-right\",\"fa-free-code-camp\":\"fa-free-code-camp\",\"fa-cart-plus\":\"fa-cart-plus\",\"fa-rotate-180\":\"fa-rotate-180\",\"fa-calendar-o\":\"fa-calendar-o\",\"fa-flask\":\"fa-flask\",\"fa-bandcamp\":\"fa-bandcamp\",\"fa-caret-down\":\"fa-caret-down\",\"fa-hourglass\":\"fa-hourglass\",\"social-share-flat-wrapper\":\"social-share-flat-wrapper\",\"fa-pinterest-square\":\"fa-pinterest-square\",\"verdicts-and-settlements\":\"verdicts-and-settlements\",\"fa-paper-plane-o\":\"fa-paper-plane-o\",\"fa-fa\":\"fa-fa\",\"fa-mars-stroke\":\"fa-mars-stroke\",\"fa-save\":\"fa-save\",\"fa-upload\":\"fa-upload\",\"fa-cc-mastercard\":\"fa-cc-mastercard\",\"fa-wpexplorer\":\"fa-wpexplorer\",\"fa-cloud-upload\":\"fa-cloud-upload\",\"fa-minus\":\"fa-minus\",\"recent-firm-news-image\":\"recent-firm-news-image\",\"fa-tripadvisor\":\"fa-tripadvisor\",\"fa-deafness\":\"fa-deafness\",\"btn-close-expander\":\"btn-close-expander\"};\n\n/***/ }),\n\n/***/ 8:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Promise = __webpack_require__(2);\n\nmodule.exports = Promise;\nPromise.prototype.done = function (onFulfilled, onRejected) {\n var self = arguments.length ? this.then.apply(this, arguments) : this;\n self.then(null, function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n });\n};\n\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//This file contains the ES6 extensions to the core Promises/A+ API\n\nvar Promise = __webpack_require__(2);\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nvar TRUE = valuePromise(true);\nvar FALSE = valuePromise(false);\nvar NULL = valuePromise(null);\nvar UNDEFINED = valuePromise(undefined);\nvar ZERO = valuePromise(0);\nvar EMPTYSTRING = valuePromise('');\n\nfunction valuePromise(value) {\n var p = new Promise(Promise._61);\n p._65 = 1;\n p._55 = value;\n return p;\n}\nPromise.resolve = function (value) {\n if (value instanceof Promise) return value;\n\n if (value === null) return NULL;\n if (value === undefined) return UNDEFINED;\n if (value === true) return TRUE;\n if (value === false) return FALSE;\n if (value === 0) return ZERO;\n if (value === '') return EMPTYSTRING;\n\n if (typeof value === 'object' || typeof value === 'function') {\n try {\n var then = value.then;\n if (typeof then === 'function') {\n return new Promise(then.bind(value));\n }\n } catch (ex) {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n }\n }\n return valuePromise(value);\n};\n\nPromise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n if (val instanceof Promise && val.then === Promise.prototype.then) {\n while (val._65 === 3) {\n val = val._55;\n }\n if (val._65 === 1) return res(i, val._55);\n if (val._65 === 2) reject(val._55);\n val.then(function (val) {\n res(i, val);\n }, reject);\n return;\n } else {\n var then = val.then;\n if (typeof then === 'function') {\n var p = new Promise(then.bind(val));\n p.then(function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n values.forEach(function(value){\n Promise.resolve(value).then(resolve, reject);\n });\n });\n};\n\n/* Prototype Methods */\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// verdict-index-bef109a214aa0e57ba54.bundle.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 104);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bef109a214aa0e57ba54","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/underscore/underscore.js\n// module id = 0\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21","module.exports = $;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"$\"\n// module id = 1\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.prototype['finally'] = function (f) {\n return this.then(function (value) {\n return Promise.resolve(f()).then(function () {\n return value;\n });\n }, function (err) {\n return Promise.resolve(f()).then(function () {\n throw err;\n });\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/finally.js\n// module id = 10\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","require('sass/pages/verdict-index.scss');\n\nimport { parseDate } from 'js/lib/dates';\nimport createCarousel from 'js/lib/views/carousel';\nimport Paginator from 'js/lib/models/pagination';\nimport { makeInfinitePaginator } from 'js/lib/views/pagination-infinite';\nimport PaginationList from 'js/lib/views/pagination-list';\n\n//-- Pagination\nconst sortedResults = _.sortBy(window.MM.data.results, r => parseFloat(r.amount.replace(/[,\\$]/g, '') * -1));\n\nlet paginator = new Paginator({\n data: sortedResults,\n perPage: 20\n});\n\nmakeInfinitePaginator(paginator, '.results-container .results-loader-container');\n\nnew PaginationList({\n el: '.results-container .mm-static-table tbody',\n model: paginator,\n item_template: _.template($('#verdict-template').html())\n});\n\n// TODO: this is a hack to get around sorting in Jekyll by amount not working (this triggers proper sort when loaded)\npaginator.trigger('change:data');\n\n//-- Carousel\ncreateCarousel('.settlements-stats.owl-carousel', {\n items: 1\n});\n\n\n// WEBPACK FOOTER //\n// ./js/pages/verdict-index.js","/**\n * @category Common Helpers\n * @summary Is the given argument an instance of Date?\n *\n * @description\n * Is the given argument an instance of Date?\n *\n * @param {*} argument - the argument to check\n * @returns {Boolean} the given argument is an instance of Date\n *\n * @example\n * // Is 'mayonnaise' a Date?\n * var result = isDate('mayonnaise')\n * //=> false\n */\nfunction isDate (argument) {\n return argument instanceof Date\n}\n\nmodule.exports = isDate\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/date-fns/is_date/index.js\n// module id = 106\n// module chunks = 5","var isDate = require('../is_date/index.js')\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar parseTokenDateTimeDelimeter = /[T ]/\nvar parseTokenPlainTime = /:/\n\n// year tokens\nvar parseTokenYY = /^(\\d{2})$/\nvar parseTokensYYY = [\n /^([+-]\\d{2})$/, // 0 additional digits\n /^([+-]\\d{3})$/, // 1 additional digit\n /^([+-]\\d{4})$/ // 2 additional digits\n]\n\nvar parseTokenYYYY = /^(\\d{4})/\nvar parseTokensYYYYY = [\n /^([+-]\\d{4})/, // 0 additional digits\n /^([+-]\\d{5})/, // 1 additional digit\n /^([+-]\\d{6})/ // 2 additional digits\n]\n\n// date tokens\nvar parseTokenMM = /^-(\\d{2})$/\nvar parseTokenDDD = /^-?(\\d{3})$/\nvar parseTokenMMDD = /^-?(\\d{2})-?(\\d{2})$/\nvar parseTokenWww = /^-?W(\\d{2})$/\nvar parseTokenWwwD = /^-?W(\\d{2})-?(\\d{1})$/\n\n// time tokens\nvar parseTokenHH = /^(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMM = /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMMSS = /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\n\n// timezone tokens\nvar parseTokenTimezone = /([Z+-].*)$/\nvar parseTokenTimezoneZ = /^(Z)$/\nvar parseTokenTimezoneHH = /^([+-])(\\d{2})$/\nvar parseTokenTimezoneHHMM = /^([+-])(\\d{2}):?(\\d{2})$/\n\n/**\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If all above fails, the function passes the given argument to Date constructor.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {Object} [options] - the object with options\n * @param {0 | 1 | 2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parse('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Parse string '+02014101',\n * // if the additional number of digits in the extended year format is 1:\n * var result = parse('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nfunction parse (argument, dirtyOptions) {\n if (isDate(argument)) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (typeof argument !== 'string') {\n return new Date(argument)\n }\n\n var options = dirtyOptions || {}\n var additionalDigits = options.additionalDigits\n if (additionalDigits == null) {\n additionalDigits = DEFAULT_ADDITIONAL_DIGITS\n } else {\n additionalDigits = Number(additionalDigits)\n }\n\n var dateStrings = splitDateString(argument)\n\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var year = parseYearResult.year\n var restDateString = parseYearResult.restDateString\n\n var date = parseDate(restDateString, year)\n\n if (date) {\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone)\n } else {\n // get offset accurate to hour in timezones that change offset\n offset = new Date(timestamp + time).getTimezoneOffset()\n offset = new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE).getTimezoneOffset()\n }\n\n return new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE)\n } else {\n return new Date(argument)\n }\n}\n\nfunction splitDateString (dateString) {\n var dateStrings = {}\n var array = dateString.split(parseTokenDateTimeDelimeter)\n var timeString\n\n if (parseTokenPlainTime.test(array[0])) {\n dateStrings.date = null\n timeString = array[0]\n } else {\n dateStrings.date = array[0]\n timeString = array[1]\n }\n\n if (timeString) {\n var token = parseTokenTimezone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timezone = token[1]\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear (dateString, additionalDigits) {\n var parseTokenYYY = parseTokensYYY[additionalDigits]\n var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]\n\n var token\n\n // YYYY or ±YYYYY\n token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString)\n if (token) {\n var yearString = token[1]\n return {\n year: parseInt(yearString, 10),\n restDateString: dateString.slice(yearString.length)\n }\n }\n\n // YY or ±YYY\n token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString)\n if (token) {\n var centuryString = token[1]\n return {\n year: parseInt(centuryString, 10) * 100,\n restDateString: dateString.slice(centuryString.length)\n }\n }\n\n // Invalid ISO-formatted year\n return {\n year: null\n }\n}\n\nfunction parseDate (dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) {\n return null\n }\n\n var token\n var date\n var month\n var week\n\n // YYYY\n if (dateString.length === 0) {\n date = new Date(0)\n date.setUTCFullYear(year)\n return date\n }\n\n // YYYY-MM\n token = parseTokenMM.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n date.setUTCFullYear(year, month)\n return date\n }\n\n // YYYY-DDD or YYYYDDD\n token = parseTokenDDD.exec(dateString)\n if (token) {\n date = new Date(0)\n var dayOfYear = parseInt(token[1], 10)\n date.setUTCFullYear(year, 0, dayOfYear)\n return date\n }\n\n // YYYY-MM-DD or YYYYMMDD\n token = parseTokenMMDD.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n var day = parseInt(token[2], 10)\n date.setUTCFullYear(year, month, day)\n return date\n }\n\n // YYYY-Www or YYYYWww\n token = parseTokenWww.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n return dayOfISOYear(year, week)\n }\n\n // YYYY-Www-D or YYYYWwwD\n token = parseTokenWwwD.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n var dayOfWeek = parseInt(token[2], 10) - 1\n return dayOfISOYear(year, week, dayOfWeek)\n }\n\n // Invalid ISO-formatted date\n return null\n}\n\nfunction parseTime (timeString) {\n var token\n var hours\n var minutes\n\n // hh\n token = parseTokenHH.exec(timeString)\n if (token) {\n hours = parseFloat(token[1].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR\n }\n\n // hh:mm or hhmm\n token = parseTokenHHMM.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseFloat(token[2].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE\n }\n\n // hh:mm:ss or hhmmss\n token = parseTokenHHMMSS.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseInt(token[2], 10)\n var seconds = parseFloat(token[3].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * 1000\n }\n\n // Invalid ISO-formatted time\n return null\n}\n\nfunction parseTimezone (timezoneString) {\n var token\n var absoluteOffset\n\n // Z\n token = parseTokenTimezoneZ.exec(timezoneString)\n if (token) {\n return 0\n }\n\n // ±hh\n token = parseTokenTimezoneHH.exec(timezoneString)\n if (token) {\n absoluteOffset = parseInt(token[2], 10) * 60\n return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n }\n\n // ±hh:mm or ±hhmm\n token = parseTokenTimezoneHHMM.exec(timezoneString)\n if (token) {\n absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10)\n return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n }\n\n return 0\n}\n\nfunction dayOfISOYear (isoYear, week, day) {\n week = week || 0\n day = day || 0\n var date = new Date(0)\n date.setUTCFullYear(isoYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\nmodule.exports = parse\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/date-fns/parse/index.js\n// module id = 107\n// module chunks = 5","'use strict';\n\nmodule.exports = require('./core.js');\nrequire('./done.js');\nrequire('./finally.js');\nrequire('./es6-extensions.js');\nrequire('./node-extensions.js');\nrequire('./synchronous.js');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/index.js\n// module id = 11\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","/**\n * Owl Carousel v2.2.0\n * Copyright 2013-2016 David Deutsch\n * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE)\n */\n/**\n * Owl carousel\n * @version 2.1.6\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n * @todo Lazy Load Icon\n * @todo prevent animationend bubling\n * @todo itemsScaleUp\n * @todo Test Zepto\n * @todo stagePadding calculate wrong active classes\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates a carousel.\n\t * @class The Owl Carousel.\n\t * @public\n\t * @param {HTMLElement|jQuery} element - The element to create the carousel for.\n\t * @param {Object} [options] - The options\n\t */\n\tfunction Owl(element, options) {\n\n\t\t/**\n\t\t * Current settings for the carousel.\n\t\t * @public\n\t\t */\n\t\tthis.settings = null;\n\n\t\t/**\n\t\t * Current options set by the caller including defaults.\n\t\t * @public\n\t\t */\n\t\tthis.options = $.extend({}, Owl.Defaults, options);\n\n\t\t/**\n\t\t * Plugin element.\n\t\t * @public\n\t\t */\n\t\tthis.$element = $(element);\n\n\t\t/**\n\t\t * Proxied event handlers.\n\t\t * @protected\n\t\t */\n\t\tthis._handlers = {};\n\n\t\t/**\n\t\t * References to the running plugins of this carousel.\n\t\t * @protected\n\t\t */\n\t\tthis._plugins = {};\n\n\t\t/**\n\t\t * Currently suppressed events to prevent them from beeing retriggered.\n\t\t * @protected\n\t\t */\n\t\tthis._supress = {};\n\n\t\t/**\n\t\t * Absolute current position.\n\t\t * @protected\n\t\t */\n\t\tthis._current = null;\n\n\t\t/**\n\t\t * Animation speed in milliseconds.\n\t\t * @protected\n\t\t */\n\t\tthis._speed = null;\n\n\t\t/**\n\t\t * Coordinates of all items in pixel.\n\t\t * @todo The name of this member is missleading.\n\t\t * @protected\n\t\t */\n\t\tthis._coordinates = [];\n\n\t\t/**\n\t\t * Current breakpoint.\n\t\t * @todo Real media queries would be nice.\n\t\t * @protected\n\t\t */\n\t\tthis._breakpoint = null;\n\n\t\t/**\n\t\t * Current width of the plugin element.\n\t\t */\n\t\tthis._width = null;\n\n\t\t/**\n\t\t * All real items.\n\t\t * @protected\n\t\t */\n\t\tthis._items = [];\n\n\t\t/**\n\t\t * All cloned items.\n\t\t * @protected\n\t\t */\n\t\tthis._clones = [];\n\n\t\t/**\n\t\t * Merge values of all items.\n\t\t * @todo Maybe this could be part of a plugin.\n\t\t * @protected\n\t\t */\n\t\tthis._mergers = [];\n\n\t\t/**\n\t\t * Widths of all items.\n\t\t */\n\t\tthis._widths = [];\n\n\t\t/**\n\t\t * Invalidated parts within the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._invalidated = {};\n\n\t\t/**\n\t\t * Ordered list of workers for the update process.\n\t\t * @protected\n\t\t */\n\t\tthis._pipe = [];\n\n\t\t/**\n\t\t * Current state information for the drag operation.\n\t\t * @todo #261\n\t\t * @protected\n\t\t */\n\t\tthis._drag = {\n\t\t\ttime: null,\n\t\t\ttarget: null,\n\t\t\tpointer: null,\n\t\t\tstage: {\n\t\t\t\tstart: null,\n\t\t\t\tcurrent: null\n\t\t\t},\n\t\t\tdirection: null\n\t\t};\n\n\t\t/**\n\t\t * Current state information and their tags.\n\t\t * @type {Object}\n\t\t * @protected\n\t\t */\n\t\tthis._states = {\n\t\t\tcurrent: {},\n\t\t\ttags: {\n\t\t\t\t'initializing': [ 'busy' ],\n\t\t\t\t'animating': [ 'busy' ],\n\t\t\t\t'dragging': [ 'interacting' ]\n\t\t\t}\n\t\t};\n\n\t\t$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {\n\t\t\tthis._handlers[handler] = $.proxy(this[handler], this);\n\t\t}, this));\n\n\t\t$.each(Owl.Plugins, $.proxy(function(key, plugin) {\n\t\t\tthis._plugins[key.charAt(0).toLowerCase() + key.slice(1)]\n\t\t\t\t= new plugin(this);\n\t\t}, this));\n\n\t\t$.each(Owl.Workers, $.proxy(function(priority, worker) {\n\t\t\tthis._pipe.push({\n\t\t\t\t'filter': worker.filter,\n\t\t\t\t'run': $.proxy(worker.run, this)\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.setup();\n\t\tthis.initialize();\n\t}\n\n\t/**\n\t * Default options for the carousel.\n\t * @public\n\t */\n\tOwl.Defaults = {\n\t\titems: 3,\n\t\tloop: false,\n\t\tcenter: false,\n\t\trewind: false,\n\n\t\tmouseDrag: true,\n\t\ttouchDrag: true,\n\t\tpullDrag: true,\n\t\tfreeDrag: false,\n\n\t\tmargin: 0,\n\t\tstagePadding: 0,\n\n\t\tmerge: false,\n\t\tmergeFit: true,\n\t\tautoWidth: false,\n\n\t\tstartPosition: 0,\n\t\trtl: false,\n\n\t\tsmartSpeed: 250,\n\t\tfluidSpeed: false,\n\t\tdragEndSpeed: false,\n\n\t\tresponsive: {},\n\t\tresponsiveRefreshRate: 200,\n\t\tresponsiveBaseElement: window,\n\n\t\tfallbackEasing: 'swing',\n\n\t\tinfo: false,\n\n\t\tnestedItemSelector: false,\n\t\titemElement: 'div',\n\t\tstageElement: 'div',\n\n\t\trefreshClass: 'owl-refresh',\n\t\tloadedClass: 'owl-loaded',\n\t\tloadingClass: 'owl-loading',\n\t\trtlClass: 'owl-rtl',\n\t\tresponsiveClass: 'owl-responsive',\n\t\tdragClass: 'owl-drag',\n\t\titemClass: 'owl-item',\n\t\tstageClass: 'owl-stage',\n\t\tstageOuterClass: 'owl-stage-outer',\n\t\tgrabClass: 'owl-grab'\n\t};\n\n\t/**\n\t * Enumeration for width.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Width = {\n\t\tDefault: 'default',\n\t\tInner: 'inner',\n\t\tOuter: 'outer'\n\t};\n\n\t/**\n\t * Enumeration for types.\n\t * @public\n\t * @readonly\n\t * @enum {String}\n\t */\n\tOwl.Type = {\n\t\tEvent: 'event',\n\t\tState: 'state'\n\t};\n\n\t/**\n\t * Contains all registered plugins.\n\t * @public\n\t */\n\tOwl.Plugins = {};\n\n\t/**\n\t * List of workers involved in the update process.\n\t */\n\tOwl.Workers = [ {\n\t\tfilter: [ 'width', 'settings' ],\n\t\trun: function() {\n\t\t\tthis._width = this.$element.width();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = this._items && this._items[this.relative(this._current)];\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tthis.$stage.children('.cloned').remove();\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar margin = this.settings.margin || '',\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\trtl = this.settings.rtl,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': 'auto',\n\t\t\t\t\t'margin-left': rtl ? margin : '',\n\t\t\t\t\t'margin-right': rtl ? '' : margin\n\t\t\t\t};\n\n\t\t\t!grid && this.$stage.children().css(css);\n\n\t\t\tcache.css = css;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n\t\t\t\tmerge = null,\n\t\t\t\titerator = this._items.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\twidths = [];\n\n\t\t\tcache.items = {\n\t\t\t\tmerge: false,\n\t\t\t\twidth: width\n\t\t\t};\n\n\t\t\twhile (iterator--) {\n\t\t\t\tmerge = this._mergers[iterator];\n\t\t\t\tmerge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;\n\n\t\t\t\tcache.items.merge = merge > 1 || cache.items.merge;\n\n\t\t\t\twidths[iterator] = !grid ? this._items[iterator].width() : width * merge;\n\t\t\t}\n\n\t\t\tthis._widths = widths;\n\t\t}\n\t}, {\n\t\tfilter: [ 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar clones = [],\n\t\t\t\titems = this._items,\n\t\t\t\tsettings = this.settings,\n\t\t\t\tview = Math.max(settings.items * 2, 4),\n\t\t\t\tsize = Math.ceil(items.length / 2) * 2,\n\t\t\t\trepeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,\n\t\t\t\tappend = '',\n\t\t\t\tprepend = '';\n\n\t\t\trepeat /= 2;\n\n\t\t\twhile (repeat--) {\n\t\t\t\tclones.push(this.normalize(clones.length / 2, true));\n\t\t\t\tappend = append + items[clones[clones.length - 1]][0].outerHTML;\n\t\t\t\tclones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));\n\t\t\t\tprepend = items[clones[clones.length - 1]][0].outerHTML + prepend;\n\t\t\t}\n\n\t\t\tthis._clones = clones;\n\n\t\t\t$(append).addClass('cloned').appendTo(this.$stage);\n\t\t\t$(prepend).addClass('cloned').prependTo(this.$stage);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tsize = this._clones.length + this._items.length,\n\t\t\t\titerator = -1,\n\t\t\t\tprevious = 0,\n\t\t\t\tcurrent = 0,\n\t\t\t\tcoordinates = [];\n\n\t\t\twhile (++iterator < size) {\n\t\t\t\tprevious = coordinates[iterator - 1] || 0;\n\t\t\t\tcurrent = this._widths[this.relative(iterator)] + this.settings.margin;\n\t\t\t\tcoordinates.push(previous + current * rtl);\n\t\t\t}\n\n\t\t\tthis._coordinates = coordinates;\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar padding = this.settings.stagePadding,\n\t\t\t\tcoordinates = this._coordinates,\n\t\t\t\tcss = {\n\t\t\t\t\t'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,\n\t\t\t\t\t'padding-left': padding || '',\n\t\t\t\t\t'padding-right': padding || ''\n\t\t\t\t};\n\n\t\t\tthis.$stage.css(css);\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tvar iterator = this._coordinates.length,\n\t\t\t\tgrid = !this.settings.autoWidth,\n\t\t\t\titems = this.$stage.children();\n\n\t\t\tif (grid && cache.items.merge) {\n\t\t\t\twhile (iterator--) {\n\t\t\t\t\tcache.css.width = this._widths[this.relative(iterator)];\n\t\t\t\t\titems.eq(iterator).css(cache.css);\n\t\t\t\t}\n\t\t\t} else if (grid) {\n\t\t\t\tcache.css.width = cache.items.width;\n\t\t\t\titems.css(cache.css);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tfilter: [ 'items' ],\n\t\trun: function() {\n\t\t\tthis._coordinates.length < 1 && this.$stage.removeAttr('style');\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'items', 'settings' ],\n\t\trun: function(cache) {\n\t\t\tcache.current = cache.current ? this.$stage.children().index(cache.current) : 0;\n\t\t\tcache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));\n\t\t\tthis.reset(cache.current);\n\t\t}\n\t}, {\n\t\tfilter: [ 'position' ],\n\t\trun: function() {\n\t\t\tthis.animate(this.coordinates(this._current));\n\t\t}\n\t}, {\n\t\tfilter: [ 'width', 'position', 'items', 'settings' ],\n\t\trun: function() {\n\t\t\tvar rtl = this.settings.rtl ? 1 : -1,\n\t\t\t\tpadding = this.settings.stagePadding * 2,\n\t\t\t\tbegin = this.coordinates(this.current()) + padding,\n\t\t\t\tend = begin + this.width() * rtl,\n\t\t\t\tinner, outer, matches = [], i, n;\n\n\t\t\tfor (i = 0, n = this._coordinates.length; i < n; i++) {\n\t\t\t\tinner = this._coordinates[i - 1] || 0;\n\t\t\t\touter = Math.abs(this._coordinates[i]) + padding * rtl;\n\n\t\t\t\tif ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))\n\t\t\t\t\t|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {\n\t\t\t\t\tmatches.push(i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.$stage.children('.active').removeClass('active');\n\t\t\tthis.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');\n\n\t\t\tif (this.settings.center) {\n\t\t\t\tthis.$stage.children('.center').removeClass('center');\n\t\t\t\tthis.$stage.children().eq(this.current()).addClass('center');\n\t\t\t}\n\t\t}\n\t} ];\n\n\t/**\n\t * Initializes the carousel.\n\t * @protected\n\t */\n\tOwl.prototype.initialize = function() {\n\t\tthis.enter('initializing');\n\t\tthis.trigger('initialize');\n\n\t\tthis.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);\n\n\t\tif (this.settings.autoWidth && !this.is('pre-loading')) {\n\t\t\tvar imgs, nestedSelector, width;\n\t\t\timgs = this.$element.find('img');\n\t\t\tnestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;\n\t\t\twidth = this.$element.children(nestedSelector).width();\n\n\t\t\tif (imgs.length && width <= 0) {\n\t\t\t\tthis.preloadAutoWidthImages(imgs);\n\t\t\t}\n\t\t}\n\n\t\tthis.$element.addClass(this.options.loadingClass);\n\n\t\t// create stage\n\t\tthis.$stage = $('<' + this.settings.stageElement + ' class=\"' + this.settings.stageClass + '\"/>')\n\t\t\t.wrap('
');\n\n\t\t// append stage\n\t\tthis.$element.append(this.$stage.parent());\n\n\t\t// append content\n\t\tthis.replace(this.$element.children().not(this.$stage.parent()));\n\n\t\t// check visibility\n\t\tif (this.$element.is(':visible')) {\n\t\t\t// update view\n\t\t\tthis.refresh();\n\t\t} else {\n\t\t\t// invalidate width\n\t\t\tthis.invalidate('width');\n\t\t}\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.addClass(this.options.loadedClass);\n\n\t\t// register event handlers\n\t\tthis.registerEventHandlers();\n\n\t\tthis.leave('initializing');\n\t\tthis.trigger('initialized');\n\t};\n\n\t/**\n\t * Setups the current settings.\n\t * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?\n\t * @todo Support for media queries by using `matchMedia` would be nice.\n\t * @public\n\t */\n\tOwl.prototype.setup = function() {\n\t\tvar viewport = this.viewport(),\n\t\t\toverwrites = this.options.responsive,\n\t\t\tmatch = -1,\n\t\t\tsettings = null;\n\n\t\tif (!overwrites) {\n\t\t\tsettings = $.extend({}, this.options);\n\t\t} else {\n\t\t\t$.each(overwrites, function(breakpoint) {\n\t\t\t\tif (breakpoint <= viewport && breakpoint > match) {\n\t\t\t\t\tmatch = Number(breakpoint);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings = $.extend({}, this.options, overwrites[match]);\n\t\t\tif (typeof settings.stagePadding === 'function') {\n\t\t\t\tsettings.stagePadding = settings.stagePadding();\n\t\t\t}\n\t\t\tdelete settings.responsive;\n\n\t\t\t// responsive class\n\t\t\tif (settings.responsiveClass) {\n\t\t\t\tthis.$element.attr('class',\n\t\t\t\t\tthis.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'), '$1' + match)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.trigger('change', { property: { name: 'settings', value: settings } });\n\t\tthis._breakpoint = match;\n\t\tthis.settings = settings;\n\t\tthis.invalidate('settings');\n\t\tthis.trigger('changed', { property: { name: 'settings', value: this.settings } });\n\t};\n\n\t/**\n\t * Updates option logic if necessery.\n\t * @protected\n\t */\n\tOwl.prototype.optionsLogic = function() {\n\t\tif (this.settings.autoWidth) {\n\t\t\tthis.settings.stagePadding = false;\n\t\t\tthis.settings.merge = false;\n\t\t}\n\t};\n\n\t/**\n\t * Prepares an item before add.\n\t * @todo Rename event parameter `content` to `item`.\n\t * @protected\n\t * @returns {jQuery|HTMLElement} - The item container.\n\t */\n\tOwl.prototype.prepare = function(item) {\n\t\tvar event = this.trigger('prepare', { content: item });\n\n\t\tif (!event.data) {\n\t\t\tevent.data = $('<' + this.settings.itemElement + '/>')\n\t\t\t\t.addClass(this.options.itemClass).append(item)\n\t\t}\n\n\t\tthis.trigger('prepared', { content: event.data });\n\n\t\treturn event.data;\n\t};\n\n\t/**\n\t * Updates the view.\n\t * @public\n\t */\n\tOwl.prototype.update = function() {\n\t\tvar i = 0,\n\t\t\tn = this._pipe.length,\n\t\t\tfilter = $.proxy(function(p) { return this[p] }, this._invalidated),\n\t\t\tcache = {};\n\n\t\twhile (i < n) {\n\t\t\tif (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {\n\t\t\t\tthis._pipe[i].run(cache);\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tthis._invalidated = {};\n\n\t\t!this.is('valid') && this.enter('valid');\n\t};\n\n\t/**\n\t * Gets the width of the view.\n\t * @public\n\t * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.\n\t * @returns {Number} - The width of the view in pixel.\n\t */\n\tOwl.prototype.width = function(dimension) {\n\t\tdimension = dimension || Owl.Width.Default;\n\t\tswitch (dimension) {\n\t\t\tcase Owl.Width.Inner:\n\t\t\tcase Owl.Width.Outer:\n\t\t\t\treturn this._width;\n\t\t\tdefault:\n\t\t\t\treturn this._width - this.settings.stagePadding * 2 + this.settings.margin;\n\t\t}\n\t};\n\n\t/**\n\t * Refreshes the carousel primarily for adaptive purposes.\n\t * @public\n\t */\n\tOwl.prototype.refresh = function() {\n\t\tthis.enter('refreshing');\n\t\tthis.trigger('refresh');\n\n\t\tthis.setup();\n\n\t\tthis.optionsLogic();\n\n\t\tthis.$element.addClass(this.options.refreshClass);\n\n\t\tthis.update();\n\n\t\tthis.$element.removeClass(this.options.refreshClass);\n\n\t\tthis.leave('refreshing');\n\t\tthis.trigger('refreshed');\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onThrottledResize = function() {\n\t\twindow.clearTimeout(this.resizeTimer);\n\t\tthis.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);\n\t};\n\n\t/**\n\t * Checks window `resize` event.\n\t * @protected\n\t */\n\tOwl.prototype.onResize = function() {\n\t\tif (!this._items.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._width === this.$element.width()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.$element.is(':visible')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.enter('resizing');\n\n\t\tif (this.trigger('resize').isDefaultPrevented()) {\n\t\t\tthis.leave('resizing');\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.invalidate('width');\n\n\t\tthis.refresh();\n\n\t\tthis.leave('resizing');\n\t\tthis.trigger('resized');\n\t};\n\n\t/**\n\t * Registers event handlers.\n\t * @todo Check `msPointerEnabled`\n\t * @todo #261\n\t * @protected\n\t */\n\tOwl.prototype.registerEventHandlers = function() {\n\t\tif ($.support.transition) {\n\t\t\tthis.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));\n\t\t}\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\tthis.on(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tif (this.settings.mouseDrag) {\n\t\t\tthis.$element.addClass(this.options.dragClass);\n\t\t\tthis.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });\n\t\t}\n\n\t\tif (this.settings.touchDrag){\n\t\t\tthis.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));\n\t\t\tthis.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));\n\t\t}\n\t};\n\n\t/**\n\t * Handles `touchstart` and `mousedown` events.\n\t * @todo Horizontal swipe threshold as option\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragStart = function(event) {\n\t\tvar stage = null;\n\n\t\tif (event.which === 3) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ($.support.transform) {\n\t\t\tstage = this.$stage.css('transform').replace(/.*\\(|\\)| /g, '').split(',');\n\t\t\tstage = {\n\t\t\t\tx: stage[stage.length === 16 ? 12 : 4],\n\t\t\t\ty: stage[stage.length === 16 ? 13 : 5]\n\t\t\t};\n\t\t} else {\n\t\t\tstage = this.$stage.position();\n\t\t\tstage = {\n\t\t\t\tx: this.settings.rtl ?\n\t\t\t\t\tstage.left + this.$stage.width() - this.width() + this.settings.margin :\n\t\t\t\t\tstage.left,\n\t\t\t\ty: stage.top\n\t\t\t};\n\t\t}\n\n\t\tif (this.is('animating')) {\n\t\t\t$.support.transform ? this.animate(stage.x) : this.$stage.stop()\n\t\t\tthis.invalidate('position');\n\t\t}\n\n\t\tthis.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');\n\n\t\tthis.speed(0);\n\n\t\tthis._drag.time = new Date().getTime();\n\t\tthis._drag.target = $(event.target);\n\t\tthis._drag.stage.start = stage;\n\t\tthis._drag.stage.current = stage;\n\t\tthis._drag.pointer = this.pointer(event);\n\n\t\t$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));\n\n\t\t$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {\n\t\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event));\n\n\t\t\t$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));\n\n\t\t\tif (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.enter('dragging');\n\t\t\tthis.trigger('drag');\n\t\t}, this));\n\t};\n\n\t/**\n\t * Handles the `touchmove` and `mousemove` events.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragMove = function(event) {\n\t\tvar minimum = null,\n\t\t\tmaximum = null,\n\t\t\tpull = null,\n\t\t\tdelta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this.difference(this._drag.stage.start, delta);\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent.preventDefault();\n\n\t\tif (this.settings.loop) {\n\t\t\tminimum = this.coordinates(this.minimum());\n\t\t\tmaximum = this.coordinates(this.maximum() + 1) - minimum;\n\t\t\tstage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;\n\t\t} else {\n\t\t\tminimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());\n\t\t\tmaximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());\n\t\t\tpull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;\n\t\t\tstage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);\n\t\t}\n\n\t\tthis._drag.stage.current = stage;\n\n\t\tthis.animate(stage.x);\n\t};\n\n\t/**\n\t * Handles the `touchend` and `mouseup` events.\n\t * @todo #261\n\t * @todo Threshold for click event\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onDragEnd = function(event) {\n\t\tvar delta = this.difference(this._drag.pointer, this.pointer(event)),\n\t\t\tstage = this._drag.stage.current,\n\t\t\tdirection = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';\n\n\t\t$(document).off('.owl.core');\n\n\t\tthis.$element.removeClass(this.options.grabClass);\n\n\t\tif (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {\n\t\t\tthis.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);\n\t\t\tthis.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));\n\t\t\tthis.invalidate('position');\n\t\t\tthis.update();\n\n\t\t\tthis._drag.direction = direction;\n\n\t\t\tif (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {\n\t\t\t\tthis._drag.target.one('click.owl.core', function() { return false; });\n\t\t\t}\n\t\t}\n\n\t\tif (!this.is('dragging')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.leave('dragging');\n\t\tthis.trigger('dragged');\n\t};\n\n\t/**\n\t * Gets absolute position of the closest item for a coordinate.\n\t * @todo Setting `freeDrag` makes `closest` not reusable. See #165.\n\t * @protected\n\t * @param {Number} coordinate - The coordinate in pixel.\n\t * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.\n\t * @return {Number} - The absolute position of the closest item.\n\t */\n\tOwl.prototype.closest = function(coordinate, direction) {\n\t\tvar position = -1,\n\t\t\tpull = 30,\n\t\t\twidth = this.width(),\n\t\t\tcoordinates = this.coordinates();\n\n\t\tif (!this.settings.freeDrag) {\n\t\t\t// check closest item\n\t\t\t$.each(coordinates, $.proxy(function(index, value) {\n\t\t\t\t// on a left pull, check on current index\n\t\t\t\tif (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {\n\t\t\t\t\tposition = index;\n\t\t\t\t// on a right pull, check on previous index\n\t\t\t\t// to do so, subtract width from value and set position = index + 1\n\t\t\t\t} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t} else if (this.op(coordinate, '<', value)\n\t\t\t\t\t&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {\n\t\t\t\t\tposition = direction === 'left' ? index + 1 : index;\n\t\t\t\t}\n\t\t\t\treturn position === -1;\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.settings.loop) {\n\t\t\t// non loop boundries\n\t\t\tif (this.op(coordinate, '>', coordinates[this.minimum()])) {\n\t\t\t\tposition = coordinate = this.minimum();\n\t\t\t} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {\n\t\t\t\tposition = coordinate = this.maximum();\n\t\t\t}\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Animates the stage.\n\t * @todo #270\n\t * @public\n\t * @param {Number} coordinate - The coordinate in pixels.\n\t */\n\tOwl.prototype.animate = function(coordinate) {\n\t\tvar animate = this.speed() > 0;\n\n\t\tthis.is('animating') && this.onTransitionEnd();\n\n\t\tif (animate) {\n\t\t\tthis.enter('animating');\n\t\t\tthis.trigger('translate');\n\t\t}\n\n\t\tif ($.support.transform3d && $.support.transition) {\n\t\t\tthis.$stage.css({\n\t\t\t\ttransform: 'translate3d(' + coordinate + 'px,0px,0px)',\n\t\t\t\ttransition: (this.speed() / 1000) + 's'\n\t\t\t});\n\t\t} else if (animate) {\n\t\t\tthis.$stage.animate({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));\n\t\t} else {\n\t\t\tthis.$stage.css({\n\t\t\t\tleft: coordinate + 'px'\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Checks whether the carousel is in a specific state or not.\n\t * @param {String} state - The state to check.\n\t * @returns {Boolean} - The flag which indicates if the carousel is busy.\n\t */\n\tOwl.prototype.is = function(state) {\n\t\treturn this._states.current[state] && this._states.current[state] > 0;\n\t};\n\n\t/**\n\t * Sets the absolute position of the current item.\n\t * @public\n\t * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.\n\t * @returns {Number} - The absolute position of the current item.\n\t */\n\tOwl.prototype.current = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._current;\n\t\t}\n\n\t\tif (this._items.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tposition = this.normalize(position);\n\n\t\tif (this._current !== position) {\n\t\t\tvar event = this.trigger('change', { property: { name: 'position', value: position } });\n\n\t\t\tif (event.data !== undefined) {\n\t\t\t\tposition = this.normalize(event.data);\n\t\t\t}\n\n\t\t\tthis._current = position;\n\n\t\t\tthis.invalidate('position');\n\n\t\t\tthis.trigger('changed', { property: { name: 'position', value: this._current } });\n\t\t}\n\n\t\treturn this._current;\n\t};\n\n\t/**\n\t * Invalidates the given part of the update routine.\n\t * @param {String} [part] - The part to invalidate.\n\t * @returns {Array.} - The invalidated parts.\n\t */\n\tOwl.prototype.invalidate = function(part) {\n\t\tif ($.type(part) === 'string') {\n\t\t\tthis._invalidated[part] = true;\n\t\t\tthis.is('valid') && this.leave('valid');\n\t\t}\n\t\treturn $.map(this._invalidated, function(v, i) { return i });\n\t};\n\n\t/**\n\t * Resets the absolute position of the current item.\n\t * @public\n\t * @param {Number} position - The absolute position of the new item.\n\t */\n\tOwl.prototype.reset = function(position) {\n\t\tposition = this.normalize(position);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._speed = 0;\n\t\tthis._current = position;\n\n\t\tthis.suppress([ 'translate', 'translated' ]);\n\n\t\tthis.animate(this.coordinates(position));\n\n\t\tthis.release([ 'translate', 'translated' ]);\n\t};\n\n\t/**\n\t * Normalizes an absolute or a relative position of an item.\n\t * @public\n\t * @param {Number} position - The absolute or relative position to normalize.\n\t * @param {Boolean} [relative=false] - Whether the given position is relative or not.\n\t * @returns {Number} - The normalized position.\n\t */\n\tOwl.prototype.normalize = function(position, relative) {\n\t\tvar n = this._items.length,\n\t\t\tm = relative ? 0 : this._clones.length;\n\n\t\tif (!this.isNumeric(position) || n < 1) {\n\t\t\tposition = undefined;\n\t\t} else if (position < 0 || position >= n + m) {\n\t\t\tposition = ((position - m / 2) % n + n) % n + m / 2;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Converts an absolute position of an item into a relative one.\n\t * @public\n\t * @param {Number} position - The absolute position to convert.\n\t * @returns {Number} - The converted position.\n\t */\n\tOwl.prototype.relative = function(position) {\n\t\tposition -= this._clones.length / 2;\n\t\treturn this.normalize(position, true);\n\t};\n\n\t/**\n\t * Gets the maximum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.maximum = function(relative) {\n\t\tvar settings = this.settings,\n\t\t\tmaximum = this._coordinates.length,\n\t\t\titerator,\n\t\t\treciprocalItemsWidth,\n\t\t\telementWidth;\n\n\t\tif (settings.loop) {\n\t\t\tmaximum = this._clones.length / 2 + this._items.length - 1;\n\t\t} else if (settings.autoWidth || settings.merge) {\n\t\t\titerator = this._items.length;\n\t\t\treciprocalItemsWidth = this._items[--iterator].width();\n\t\t\telementWidth = this.$element.width();\n\t\t\twhile (iterator--) {\n\t\t\t\treciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;\n\t\t\t\tif (reciprocalItemsWidth > elementWidth) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmaximum = iterator + 1;\n\t\t} else if (settings.center) {\n\t\t\tmaximum = this._items.length - 1;\n\t\t} else {\n\t\t\tmaximum = this._items.length - settings.items;\n\t\t}\n\n\t\tif (relative) {\n\t\t\tmaximum -= this._clones.length / 2;\n\t\t}\n\n\t\treturn Math.max(maximum, 0);\n\t};\n\n\t/**\n\t * Gets the minimum position for the current item.\n\t * @public\n\t * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.\n\t * @returns {Number}\n\t */\n\tOwl.prototype.minimum = function(relative) {\n\t\treturn relative ? 0 : this._clones.length / 2;\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.items = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._items.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._items[position];\n\t};\n\n\t/**\n\t * Gets an item at the specified relative position.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @return {jQuery|Array.} - The item at the given position or all items if no position was given.\n\t */\n\tOwl.prototype.mergers = function(position) {\n\t\tif (position === undefined) {\n\t\t\treturn this._mergers.slice();\n\t\t}\n\n\t\tposition = this.normalize(position, true);\n\t\treturn this._mergers[position];\n\t};\n\n\t/**\n\t * Gets the absolute positions of clones for an item.\n\t * @public\n\t * @param {Number} [position] - The relative position of the item.\n\t * @returns {Array.} - The absolute positions of clones for the item or all if no position was given.\n\t */\n\tOwl.prototype.clones = function(position) {\n\t\tvar odd = this._clones.length / 2,\n\t\t\teven = odd + this._items.length,\n\t\t\tmap = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._clones, function(v, i) { return map(i) });\n\t\t}\n\n\t\treturn $.map(this._clones, function(v, i) { return v === position ? map(i) : null });\n\t};\n\n\t/**\n\t * Sets the current animation speed.\n\t * @public\n\t * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.\n\t * @returns {Number} - The current animation speed in milliseconds.\n\t */\n\tOwl.prototype.speed = function(speed) {\n\t\tif (speed !== undefined) {\n\t\t\tthis._speed = speed;\n\t\t}\n\n\t\treturn this._speed;\n\t};\n\n\t/**\n\t * Gets the coordinate of an item.\n\t * @todo The name of this method is missleanding.\n\t * @public\n\t * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.\n\t * @returns {Number|Array.} - The coordinate of the item in pixel or all coordinates.\n\t */\n\tOwl.prototype.coordinates = function(position) {\n\t\tvar multiplier = 1,\n\t\t\tnewPosition = position - 1,\n\t\t\tcoordinate;\n\n\t\tif (position === undefined) {\n\t\t\treturn $.map(this._coordinates, $.proxy(function(coordinate, index) {\n\t\t\t\treturn this.coordinates(index);\n\t\t\t}, this));\n\t\t}\n\n\t\tif (this.settings.center) {\n\t\t\tif (this.settings.rtl) {\n\t\t\t\tmultiplier = -1;\n\t\t\t\tnewPosition = position + 1;\n\t\t\t}\n\n\t\t\tcoordinate = this._coordinates[position];\n\t\t\tcoordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;\n\t\t} else {\n\t\t\tcoordinate = this._coordinates[newPosition] || 0;\n\t\t}\n\n\t\tcoordinate = Math.ceil(coordinate);\n\n\t\treturn coordinate;\n\t};\n\n\t/**\n\t * Calculates the speed for a translation.\n\t * @protected\n\t * @param {Number} from - The absolute position of the start item.\n\t * @param {Number} to - The absolute position of the target item.\n\t * @param {Number} [factor=undefined] - The time factor in milliseconds.\n\t * @returns {Number} - The time in milliseconds for the translation.\n\t */\n\tOwl.prototype.duration = function(from, to, factor) {\n\t\tif (factor === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));\n\t};\n\n\t/**\n\t * Slides to the specified item.\n\t * @public\n\t * @param {Number} position - The position of the item.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.to = function(position, speed) {\n\t\tvar current = this.current(),\n\t\t\trevert = null,\n\t\t\tdistance = position - this.relative(current),\n\t\t\tdirection = (distance > 0) - (distance < 0),\n\t\t\titems = this._items.length,\n\t\t\tminimum = this.minimum(),\n\t\t\tmaximum = this.maximum();\n\n\t\tif (this.settings.loop) {\n\t\t\tif (!this.settings.rewind && Math.abs(distance) > items / 2) {\n\t\t\t\tdistance += direction * -1 * items;\n\t\t\t}\n\n\t\t\tposition = current + distance;\n\t\t\trevert = ((position - minimum) % items + items) % items + minimum;\n\n\t\t\tif (revert !== position && revert - distance <= maximum && revert - distance > 0) {\n\t\t\t\tcurrent = revert - distance;\n\t\t\t\tposition = revert;\n\t\t\t\tthis.reset(current);\n\t\t\t}\n\t\t} else if (this.settings.rewind) {\n\t\t\tmaximum += 1;\n\t\t\tposition = (position % maximum + maximum) % maximum;\n\t\t} else {\n\t\t\tposition = Math.max(minimum, Math.min(maximum, position));\n\t\t}\n\n\t\tthis.speed(this.duration(current, position, speed));\n\t\tthis.current(position);\n\n\t\tif (this.$element.is(':visible')) {\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\t/**\n\t * Slides to the next item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.next = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) + 1, speed);\n\t};\n\n\t/**\n\t * Slides to the previous item.\n\t * @public\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t */\n\tOwl.prototype.prev = function(speed) {\n\t\tspeed = speed || false;\n\t\tthis.to(this.relative(this.current()) - 1, speed);\n\t};\n\n\t/**\n\t * Handles the end of an animation.\n\t * @protected\n\t * @param {Event} event - The event arguments.\n\t */\n\tOwl.prototype.onTransitionEnd = function(event) {\n\n\t\t// if css2 animation then event object is undefined\n\t\tif (event !== undefined) {\n\t\t\tevent.stopPropagation();\n\n\t\t\t// Catch only owl-stage transitionEnd event\n\t\t\tif ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.leave('animating');\n\t\tthis.trigger('translated');\n\t};\n\n\t/**\n\t * Gets viewport width.\n\t * @protected\n\t * @return {Number} - The width in pixel.\n\t */\n\tOwl.prototype.viewport = function() {\n\t\tvar width;\n\t\tif (this.options.responsiveBaseElement !== window) {\n\t\t\twidth = $(this.options.responsiveBaseElement).width();\n\t\t} else if (window.innerWidth) {\n\t\t\twidth = window.innerWidth;\n\t\t} else if (document.documentElement && document.documentElement.clientWidth) {\n\t\t\twidth = document.documentElement.clientWidth;\n\t\t} else {\n\t\t\tthrow 'Can not detect viewport width.';\n\t\t}\n\t\treturn width;\n\t};\n\n\t/**\n\t * Replaces the current content.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The new content.\n\t */\n\tOwl.prototype.replace = function(content) {\n\t\tthis.$stage.empty();\n\t\tthis._items = [];\n\n\t\tif (content) {\n\t\t\tcontent = (content instanceof jQuery) ? content : $(content);\n\t\t}\n\n\t\tif (this.settings.nestedItemSelector) {\n\t\t\tcontent = content.find('.' + this.settings.nestedItemSelector);\n\t\t}\n\n\t\tcontent.filter(function() {\n\t\t\treturn this.nodeType === 1;\n\t\t}).each($.proxy(function(index, item) {\n\t\t\titem = this.prepare(item);\n\t\t\tthis.$stage.append(item);\n\t\t\tthis._items.push(item);\n\t\t\tthis._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}, this));\n\n\t\tthis.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);\n\n\t\tthis.invalidate('items');\n\t};\n\n\t/**\n\t * Adds an item.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {HTMLElement|jQuery|String} content - The item content to add.\n\t * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.\n\t */\n\tOwl.prototype.add = function(content, position) {\n\t\tvar current = this.relative(this._current);\n\n\t\tposition = position === undefined ? this._items.length : this.normalize(position, true);\n\t\tcontent = content instanceof jQuery ? content : $(content);\n\n\t\tthis.trigger('add', { content: content, position: position });\n\n\t\tcontent = this.prepare(content);\n\n\t\tif (this._items.length === 0 || position === this._items.length) {\n\t\t\tthis._items.length === 0 && this.$stage.append(content);\n\t\t\tthis._items.length !== 0 && this._items[position - 1].after(content);\n\t\t\tthis._items.push(content);\n\t\t\tthis._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t} else {\n\t\t\tthis._items[position].before(content);\n\t\t\tthis._items.splice(position, 0, content);\n\t\t\tthis._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);\n\t\t}\n\n\t\tthis._items[current] && this.reset(this._items[current].index());\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('added', { content: content, position: position });\n\t};\n\n\t/**\n\t * Removes an item by its position.\n\t * @todo Use `item` instead of `content` for the event arguments.\n\t * @public\n\t * @param {Number} position - The relative position of the item to remove.\n\t */\n\tOwl.prototype.remove = function(position) {\n\t\tposition = this.normalize(position, true);\n\n\t\tif (position === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.trigger('remove', { content: this._items[position], position: position });\n\n\t\tthis._items[position].remove();\n\t\tthis._items.splice(position, 1);\n\t\tthis._mergers.splice(position, 1);\n\n\t\tthis.invalidate('items');\n\n\t\tthis.trigger('removed', { content: null, position: position });\n\t};\n\n\t/**\n\t * Preloads images with auto width.\n\t * @todo Replace by a more generic approach\n\t * @protected\n\t */\n\tOwl.prototype.preloadAutoWidthImages = function(images) {\n\t\timages.each($.proxy(function(i, element) {\n\t\t\tthis.enter('pre-loading');\n\t\t\telement = $(element);\n\t\t\t$(new Image()).one('load', $.proxy(function(e) {\n\t\t\t\telement.attr('src', e.target.src);\n\t\t\t\telement.css('opacity', 1);\n\t\t\t\tthis.leave('pre-loading');\n\t\t\t\t!this.is('pre-loading') && !this.is('initializing') && this.refresh();\n\t\t\t}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));\n\t\t}, this));\n\t};\n\n\t/**\n\t * Destroys the carousel.\n\t * @public\n\t */\n\tOwl.prototype.destroy = function() {\n\n\t\tthis.$element.off('.owl.core');\n\t\tthis.$stage.off('.owl.core');\n\t\t$(document).off('.owl.core');\n\n\t\tif (this.settings.responsive !== false) {\n\t\t\twindow.clearTimeout(this.resizeTimer);\n\t\t\tthis.off(window, 'resize', this._handlers.onThrottledResize);\n\t\t}\n\n\t\tfor (var i in this._plugins) {\n\t\t\tthis._plugins[i].destroy();\n\t\t}\n\n\t\tthis.$stage.children('.cloned').remove();\n\n\t\tthis.$stage.unwrap();\n\t\tthis.$stage.children().contents().unwrap();\n\t\tthis.$stage.children().unwrap();\n\n\t\tthis.$element\n\t\t\t.removeClass(this.options.refreshClass)\n\t\t\t.removeClass(this.options.loadingClass)\n\t\t\t.removeClass(this.options.loadedClass)\n\t\t\t.removeClass(this.options.rtlClass)\n\t\t\t.removeClass(this.options.dragClass)\n\t\t\t.removeClass(this.options.grabClass)\n\t\t\t.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''))\n\t\t\t.removeData('owl.carousel');\n\t};\n\n\t/**\n\t * Operators to calculate right-to-left and left-to-right.\n\t * @protected\n\t * @param {Number} [a] - The left side operand.\n\t * @param {String} [o] - The operator.\n\t * @param {Number} [b] - The right side operand.\n\t */\n\tOwl.prototype.op = function(a, o, b) {\n\t\tvar rtl = this.settings.rtl;\n\t\tswitch (o) {\n\t\t\tcase '<':\n\t\t\t\treturn rtl ? a > b : a < b;\n\t\t\tcase '>':\n\t\t\t\treturn rtl ? a < b : a > b;\n\t\t\tcase '>=':\n\t\t\t\treturn rtl ? a <= b : a >= b;\n\t\t\tcase '<=':\n\t\t\t\treturn rtl ? a >= b : a <= b;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t/**\n\t * Attaches to an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The event handler to attach.\n\t * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.\n\t */\n\tOwl.prototype.on = function(element, event, listener, capture) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener(event, listener, capture);\n\t\t} else if (element.attachEvent) {\n\t\t\telement.attachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Detaches from an internal event.\n\t * @protected\n\t * @param {HTMLElement} element - The event source.\n\t * @param {String} event - The event name.\n\t * @param {Function} listener - The attached event handler to detach.\n\t * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.\n\t */\n\tOwl.prototype.off = function(element, event, listener, capture) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener(event, listener, capture);\n\t\t} else if (element.detachEvent) {\n\t\t\telement.detachEvent('on' + event, listener);\n\t\t}\n\t};\n\n\t/**\n\t * Triggers a public event.\n\t * @todo Remove `status`, `relatedTarget` should be used instead.\n\t * @protected\n\t * @param {String} name - The event name.\n\t * @param {*} [data=null] - The event data.\n\t * @param {String} [namespace=carousel] - The event namespace.\n\t * @param {String} [state] - The state which is associated with the event.\n\t * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.\n\t * @returns {Event} - The event arguments.\n\t */\n\tOwl.prototype.trigger = function(name, data, namespace, state, enter) {\n\t\tvar status = {\n\t\t\titem: { count: this._items.length, index: this.current() }\n\t\t}, handler = $.camelCase(\n\t\t\t$.grep([ 'on', name, namespace ], function(v) { return v })\n\t\t\t\t.join('-').toLowerCase()\n\t\t), event = $.Event(\n\t\t\t[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),\n\t\t\t$.extend({ relatedTarget: this }, status, data)\n\t\t);\n\n\t\tif (!this._supress[name]) {\n\t\t\t$.each(this._plugins, function(name, plugin) {\n\t\t\t\tif (plugin.onTrigger) {\n\t\t\t\t\tplugin.onTrigger(event);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.register({ type: Owl.Type.Event, name: name });\n\t\t\tthis.$element.trigger(event);\n\n\t\t\tif (this.settings && typeof this.settings[handler] === 'function') {\n\t\t\t\tthis.settings[handler].call(this, event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t};\n\n\t/**\n\t * Enters a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.enter = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tif (this._states.current[name] === undefined) {\n\t\t\t\tthis._states.current[name] = 0;\n\t\t\t}\n\n\t\t\tthis._states.current[name]++;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Leaves a state.\n\t * @param name - The state name.\n\t */\n\tOwl.prototype.leave = function(name) {\n\t\t$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {\n\t\t\tthis._states.current[name]--;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Registers an event or state.\n\t * @public\n\t * @param {Object} object - The event or state to register.\n\t */\n\tOwl.prototype.register = function(object) {\n\t\tif (object.type === Owl.Type.Event) {\n\t\t\tif (!$.event.special[object.name]) {\n\t\t\t\t$.event.special[object.name] = {};\n\t\t\t}\n\n\t\t\tif (!$.event.special[object.name].owl) {\n\t\t\t\tvar _default = $.event.special[object.name]._default;\n\t\t\t\t$.event.special[object.name]._default = function(e) {\n\t\t\t\t\tif (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {\n\t\t\t\t\t\treturn _default.apply(this, arguments);\n\t\t\t\t\t}\n\t\t\t\t\treturn e.namespace && e.namespace.indexOf('owl') > -1;\n\t\t\t\t};\n\t\t\t\t$.event.special[object.name].owl = true;\n\t\t\t}\n\t\t} else if (object.type === Owl.Type.State) {\n\t\t\tif (!this._states.tags[object.name]) {\n\t\t\t\tthis._states.tags[object.name] = object.tags;\n\t\t\t} else {\n\t\t\t\tthis._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);\n\t\t\t}\n\n\t\t\tthis._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {\n\t\t\t\treturn $.inArray(tag, this._states.tags[object.name]) === i;\n\t\t\t}, this));\n\t\t}\n\t};\n\n\t/**\n\t * Suppresses events.\n\t * @protected\n\t * @param {Array.} events - The events to suppress.\n\t */\n\tOwl.prototype.suppress = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tthis._supress[event] = true;\n\t\t}, this));\n\t};\n\n\t/**\n\t * Releases suppressed events.\n\t * @protected\n\t * @param {Array.} events - The events to release.\n\t */\n\tOwl.prototype.release = function(events) {\n\t\t$.each(events, $.proxy(function(index, event) {\n\t\t\tdelete this._supress[event];\n\t\t}, this));\n\t};\n\n\t/**\n\t * Gets unified pointer coordinates from event.\n\t * @todo #261\n\t * @protected\n\t * @param {Event} - The `mousedown` or `touchstart` event.\n\t * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.\n\t */\n\tOwl.prototype.pointer = function(event) {\n\t\tvar result = { x: null, y: null };\n\n\t\tevent = event.originalEvent || event || window.event;\n\n\t\tevent = event.touches && event.touches.length ?\n\t\t\tevent.touches[0] : event.changedTouches && event.changedTouches.length ?\n\t\t\t\tevent.changedTouches[0] : event;\n\n\t\tif (event.pageX) {\n\t\t\tresult.x = event.pageX;\n\t\t\tresult.y = event.pageY;\n\t\t} else {\n\t\t\tresult.x = event.clientX;\n\t\t\tresult.y = event.clientY;\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t/**\n\t * Determines if the input is a Number or something that can be coerced to a Number\n\t * @protected\n\t * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested\n\t * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number\n\t */\n\tOwl.prototype.isNumeric = function(number) {\n\t\treturn !isNaN(parseFloat(number));\n\t};\n\n\t/**\n\t * Gets the difference of two vectors.\n\t * @todo #261\n\t * @protected\n\t * @param {Object} - The first vector.\n\t * @param {Object} - The second vector.\n\t * @returns {Object} - The difference.\n\t */\n\tOwl.prototype.difference = function(first, second) {\n\t\treturn {\n\t\t\tx: first.x - second.x,\n\t\t\ty: first.y - second.y\n\t\t};\n\t};\n\n\t/**\n\t * The jQuery Plugin for the Owl Carousel\n\t * @todo Navigation plugin `next` and `prev`\n\t * @public\n\t */\n\t$.fn.owlCarousel = function(option) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\t\treturn this.each(function() {\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('owl.carousel');\n\n\t\t\tif (!data) {\n\t\t\t\tdata = new Owl(this, typeof option == 'object' && option);\n\t\t\t\t$this.data('owl.carousel', data);\n\n\t\t\t\t$.each([\n\t\t\t\t\t'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'\n\t\t\t\t], function(i, event) {\n\t\t\t\t\tdata.register({ type: Owl.Type.Event, name: event });\n\t\t\t\t\tdata.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {\n\t\t\t\t\t\tif (e.namespace && e.relatedTarget !== this) {\n\t\t\t\t\t\t\tthis.suppress([ event ]);\n\t\t\t\t\t\t\tdata[event].apply(this, [].slice.call(arguments, 1));\n\t\t\t\t\t\t\tthis.release([ event ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, data));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof option == 'string' && option.charAt(0) !== '_') {\n\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n\t/**\n\t * The constructor for the jQuery Plugin\n\t * @public\n\t */\n\t$.fn.owlCarousel.Constructor = Owl;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoRefresh Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto refresh plugin.\n\t * @class The Auto Refresh Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoRefresh = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Refresh interval.\n\t\t * @protected\n\t\t * @type {number}\n\t\t */\n\t\tthis._interval = null;\n\n\t\t/**\n\t\t * Whether the element is currently visible or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._visible = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoRefresh) {\n\t\t\t\t\tthis.watch();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoRefresh.Defaults = {\n\t\tautoRefresh: true,\n\t\tautoRefreshInterval: 500\n\t};\n\n\t/**\n\t * Watches the element.\n\t */\n\tAutoRefresh.prototype.watch = function() {\n\t\tif (this._interval) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = this._core.$element.is(':visible');\n\t\tthis._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);\n\t};\n\n\t/**\n\t * Refreshes the element.\n\t */\n\tAutoRefresh.prototype.refresh = function() {\n\t\tif (this._core.$element.is(':visible') === this._visible) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._visible = !this._visible;\n\n\t\tthis._core.$element.toggleClass('owl-hidden', !this._visible);\n\n\t\tthis._visible && (this._core.invalidate('width') && this._core.refresh());\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoRefresh.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\twindow.clearInterval(this._interval);\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Lazy Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the lazy plugin.\n\t * @class The Lazy Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Lazy = function(carousel) {\n\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Already loaded items.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._loaded = [];\n\n\t\t/**\n\t\t * Event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this._core.settings || !this._core.settings.lazyLoad) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ((e.property && e.property.name == 'position') || e.type == 'initialized') {\n\t\t\t\t\tvar settings = this._core.settings,\n\t\t\t\t\t\tn = (settings.center && Math.ceil(settings.items / 2) || settings.items),\n\t\t\t\t\t\ti = ((settings.center && n * -1) || 0),\n\t\t\t\t\t\tposition = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,\n\t\t\t\t\t\tclones = this._core.clones().length,\n\t\t\t\t\t\tload = $.proxy(function(i, v) { this.load(v) }, this);\n\n\t\t\t\t\twhile (i++ < n) {\n\t\t\t\t\t\tthis.load(clones / 2 + this._core.relative(position));\n\t\t\t\t\t\tclones && $.each(this._core.clones(this._core.relative(position)), load);\n\t\t\t\t\t\tposition++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set the default options\n\t\tthis._core.options = $.extend({}, Lazy.Defaults, this._core.options);\n\n\t\t// register event handler\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tLazy.Defaults = {\n\t\tlazyLoad: false\n\t};\n\n\t/**\n\t * Loads all resources of an item at the specified position.\n\t * @param {Number} position - The absolute position of the item.\n\t * @protected\n\t */\n\tLazy.prototype.load = function(position) {\n\t\tvar $item = this._core.$stage.children().eq(position),\n\t\t\t$elements = $item && $item.find('.owl-lazy');\n\n\t\tif (!$elements || $.inArray($item.get(0), this._loaded) > -1) {\n\t\t\treturn;\n\t\t}\n\n\t\t$elements.each($.proxy(function(index, element) {\n\t\t\tvar $element = $(element), image,\n\t\t\t\turl = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');\n\n\t\t\tthis._core.trigger('load', { element: $element, url: url }, 'lazy');\n\n\t\t\tif ($element.is('img')) {\n\t\t\t\t$element.one('load.owl.lazy', $.proxy(function() {\n\t\t\t\t\t$element.css('opacity', 1);\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this)).attr('src', url);\n\t\t\t} else {\n\t\t\t\timage = new Image();\n\t\t\t\timage.onload = $.proxy(function() {\n\t\t\t\t\t$element.css({\n\t\t\t\t\t\t'background-image': 'url(' + url + ')',\n\t\t\t\t\t\t'opacity': '1'\n\t\t\t\t\t});\n\t\t\t\t\tthis._core.trigger('loaded', { element: $element, url: url }, 'lazy');\n\t\t\t\t}, this);\n\t\t\t\timage.src = url;\n\t\t\t}\n\t\t}, this));\n\n\t\tthis._loaded.push($item.get(0));\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tLazy.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis._core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * AutoHeight Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the auto height plugin.\n\t * @class The Auto Height Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar AutoHeight = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'loaded.owl.lazy': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoHeight\n\t\t\t\t\t&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {\n\t\t\t\t\tthis.update();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoHeight.Defaults = {\n\t\tautoHeight: false,\n\t\tautoHeightClass: 'owl-height'\n\t};\n\n\t/**\n\t * Updates the view.\n\t */\n\tAutoHeight.prototype.update = function() {\n\t\tvar start = this._core._current,\n\t\t\tend = start + this._core.settings.items,\n\t\t\tvisible = this._core.$stage.children().toArray().slice(start, end),\n\t\t\theights = [],\n\t\t\tmaxheight = 0;\n\n\t\t$.each(visible, function(index, item) {\n\t\t\theights.push($(item).height());\n\t\t});\n\n\t\tmaxheight = Math.max.apply(null, heights);\n\n\t\tthis._core.$stage.parent()\n\t\t\t.height(maxheight)\n\t\t\t.addClass(this._core.settings.autoHeightClass);\n\t};\n\n\tAutoHeight.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Video Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the video plugin.\n\t * @class The Video Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Video = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Cache all video URLs.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._videos = {};\n\n\t\t/**\n\t\t * Current playing item.\n\t\t * @protected\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis._playing = null;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @todo The cloned content removale is too late\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'resize.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.video && this.isInFullScreen()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.is('resizing')) {\n\t\t\t\t\tthis._core.$stage.find('.cloned .owl-video-frame').remove();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position' && this._playing) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (!e.namespace) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar $element = $(e.content).find('.owl-video');\n\n\t\t\t\tif ($element.length) {\n\t\t\t\t\t$element.css('display', 'none');\n\t\t\t\t\tthis.fetch($element, $(e.content));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Video.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\tthis._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {\n\t\t\tthis.play(e);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tVideo.Defaults = {\n\t\tvideo: false,\n\t\tvideoHeight: false,\n\t\tvideoWidth: false\n\t};\n\n\t/**\n\t * Gets the video ID and the type (YouTube/Vimeo/vzaar only).\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {jQuery} item - The item containing the video.\n\t */\n\tVideo.prototype.fetch = function(target, item) {\n\t\t\tvar type = (function() {\n\t\t\t\t\tif (target.attr('data-vimeo-id')) {\n\t\t\t\t\t\treturn 'vimeo';\n\t\t\t\t\t} else if (target.attr('data-vzaar-id')) {\n\t\t\t\t\t\treturn 'vzaar'\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 'youtube';\n\t\t\t\t\t}\n\t\t\t\t})(),\n\t\t\t\tid = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),\n\t\t\t\twidth = target.attr('data-width') || this._core.settings.videoWidth,\n\t\t\t\theight = target.attr('data-height') || this._core.settings.videoHeight,\n\t\t\t\turl = target.attr('href');\n\n\t\tif (url) {\n\n\t\t\t/*\n\t\t\t\t\tParses the id's out of the following urls (and probably more):\n\t\t\t\t\thttps://www.youtube.com/watch?v=:id\n\t\t\t\t\thttps://youtu.be/:id\n\t\t\t\t\thttps://vimeo.com/:id\n\t\t\t\t\thttps://vimeo.com/channels/:channel/:id\n\t\t\t\t\thttps://vimeo.com/groups/:group/videos/:id\n\t\t\t\t\thttps://app.vzaar.com/videos/:id\n\n\t\t\t\t\tVisual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F\n\t\t\t*/\n\n\t\t\tid = url.match(/(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/);\n\n\t\t\tif (id[3].indexOf('youtu') > -1) {\n\t\t\t\ttype = 'youtube';\n\t\t\t} else if (id[3].indexOf('vimeo') > -1) {\n\t\t\t\ttype = 'vimeo';\n\t\t\t} else if (id[3].indexOf('vzaar') > -1) {\n\t\t\t\ttype = 'vzaar';\n\t\t\t} else {\n\t\t\t\tthrow new Error('Video URL not supported.');\n\t\t\t}\n\t\t\tid = id[6];\n\t\t} else {\n\t\t\tthrow new Error('Missing video URL.');\n\t\t}\n\n\t\tthis._videos[url] = {\n\t\t\ttype: type,\n\t\t\tid: id,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\n\t\titem.attr('data-video', url);\n\n\t\tthis.thumbnail(target, this._videos[url]);\n\t};\n\n\t/**\n\t * Creates video thumbnail.\n\t * @protected\n\t * @param {jQuery} target - The target containing the video data.\n\t * @param {Object} info - The video info object.\n\t * @see `fetch`\n\t */\n\tVideo.prototype.thumbnail = function(target, video) {\n\t\tvar tnLink,\n\t\t\ticon,\n\t\t\tpath,\n\t\t\tdimensions = video.width && video.height ? 'style=\"width:' + video.width + 'px;height:' + video.height + 'px;\"' : '',\n\t\t\tcustomTn = target.find('img'),\n\t\t\tsrcType = 'src',\n\t\t\tlazyClass = '',\n\t\t\tsettings = this._core.settings,\n\t\t\tcreate = function(path) {\n\t\t\t\ticon = '
';\n\n\t\t\t\tif (settings.lazyLoad) {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t} else {\n\t\t\t\t\ttnLink = '
';\n\t\t\t\t}\n\t\t\t\ttarget.after(tnLink);\n\t\t\t\ttarget.after(icon);\n\t\t\t};\n\n\t\t// wrap video content into owl-video-wrapper div\n\t\ttarget.wrap('
');\n\n\t\tif (this._core.settings.lazyLoad) {\n\t\t\tsrcType = 'data-src';\n\t\t\tlazyClass = 'owl-lazy';\n\t\t}\n\n\t\t// custom thumbnail\n\t\tif (customTn.length) {\n\t\t\tcreate(customTn.attr(srcType));\n\t\t\tcustomTn.remove();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (video.type === 'youtube') {\n\t\t\tpath = \"//img.youtube.com/vi/\" + video.id + \"/hqdefault.jpg\";\n\t\t\tcreate(path);\n\t\t} else if (video.type === 'vimeo') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vimeo.com/api/v2/video/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data[0].thumbnail_large;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (video.type === 'vzaar') {\n\t\t\t$.ajax({\n\t\t\t\ttype: 'GET',\n\t\t\t\turl: '//vzaar.com/api/videos/' + video.id + '.json',\n\t\t\t\tjsonp: 'callback',\n\t\t\t\tdataType: 'jsonp',\n\t\t\t\tsuccess: function(data) {\n\t\t\t\t\tpath = data.framegrab_url;\n\t\t\t\t\tcreate(path);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Stops the current video.\n\t * @public\n\t */\n\tVideo.prototype.stop = function() {\n\t\tthis._core.trigger('stop', null, 'video');\n\t\tthis._playing.find('.owl-video-frame').remove();\n\t\tthis._playing.removeClass('owl-video-playing');\n\t\tthis._playing = null;\n\t\tthis._core.leave('playing');\n\t\tthis._core.trigger('stopped', null, 'video');\n\t};\n\n\t/**\n\t * Starts the current video.\n\t * @public\n\t * @param {Event} event - The event arguments.\n\t */\n\tVideo.prototype.play = function(event) {\n\t\tvar target = $(event.target),\n\t\t\titem = target.closest('.' + this._core.settings.itemClass),\n\t\t\tvideo = this._videos[item.attr('data-video')],\n\t\t\twidth = video.width || '100%',\n\t\t\theight = video.height || this._core.$stage.height(),\n\t\t\thtml;\n\n\t\tif (this._playing) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('playing');\n\t\tthis._core.trigger('play', null, 'video');\n\n\t\titem = this._core.items(this._core.relative(item.index()));\n\n\t\tthis._core.reset(item.index());\n\n\t\tif (video.type === 'youtube') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vimeo') {\n\t\t\thtml = '';\n\t\t} else if (video.type === 'vzaar') {\n\t\t\thtml = '';\n\t\t}\n\n\t\t$('
' + html + '
').insertAfter(item.find('.owl-video'));\n\n\t\tthis._playing = item.addClass('owl-video-playing');\n\t};\n\n\t/**\n\t * Checks whether an video is currently in full screen mode or not.\n\t * @todo Bad style because looks like a readonly method but changes members.\n\t * @protected\n\t * @returns {Boolean}\n\t */\n\tVideo.prototype.isInFullScreen = function() {\n\t\tvar element = document.fullscreenElement || document.mozFullScreenElement ||\n\t\t\t\tdocument.webkitFullscreenElement;\n\n\t\treturn element && $(element).parent().hasClass('owl-video-frame');\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tVideo.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis._core.$element.off('click.owl.video');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Video = Video;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Animate Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the animate plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Animate = function(scope) {\n\t\tthis.core = scope;\n\t\tthis.core.options = $.extend({}, Animate.Defaults, this.core.options);\n\t\tthis.swapping = true;\n\t\tthis.previous = undefined;\n\t\tthis.next = undefined;\n\n\t\tthis.handlers = {\n\t\t\t'change.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.previous = this.core.current();\n\t\t\t\t\tthis.next = e.property.value;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.swapping = e.type == 'translated';\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'translate.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {\n\t\t\t\t\tthis.swap();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\tthis.core.$element.on(this.handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAnimate.Defaults = {\n\t\tanimateOut: false,\n\t\tanimateIn: false\n\t};\n\n\t/**\n\t * Toggles the animation classes whenever an translations starts.\n\t * @protected\n\t * @returns {Boolean|undefined}\n\t */\n\tAnimate.prototype.swap = function() {\n\n\t\tif (this.core.settings.items !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!$.support.animation || !$.support.transition) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.core.speed(0);\n\n\t\tvar left,\n\t\t\tclear = $.proxy(this.clear, this),\n\t\t\tprevious = this.core.$stage.children().eq(this.previous),\n\t\t\tnext = this.core.$stage.children().eq(this.next),\n\t\t\tincoming = this.core.settings.animateIn,\n\t\t\toutgoing = this.core.settings.animateOut;\n\n\t\tif (this.core.current() === this.previous) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (outgoing) {\n\t\t\tleft = this.core.coordinates(this.previous) - this.core.coordinates(this.next);\n\t\t\tprevious.one($.support.animation.end, clear)\n\t\t\t\t.css( { 'left': left + 'px' } )\n\t\t\t\t.addClass('animated owl-animated-out')\n\t\t\t\t.addClass(outgoing);\n\t\t}\n\n\t\tif (incoming) {\n\t\t\tnext.one($.support.animation.end, clear)\n\t\t\t\t.addClass('animated owl-animated-in')\n\t\t\t\t.addClass(incoming);\n\t\t}\n\t};\n\n\tAnimate.prototype.clear = function(e) {\n\t\t$(e.target).css( { 'left': '' } )\n\t\t\t.removeClass('animated owl-animated-out owl-animated-in')\n\t\t\t.removeClass(this.core.settings.animateIn)\n\t\t\t.removeClass(this.core.settings.animateOut);\n\t\tthis.core.onTransitionEnd();\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tAnimate.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tfor (handler in this.handlers) {\n\t\t\tthis.core.$element.off(handler, this.handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Autoplay Plugin\n * @version 2.1.0\n * @author Bartosz Wojciechowski\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\t/**\n\t * Creates the autoplay plugin.\n\t * @class The Autoplay Plugin\n\t * @param {Owl} scope - The Owl Carousel\n\t */\n\tvar Autoplay = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * The autoplay timeout.\n\t\t * @type {Timeout}\n\t\t */\n\t\tthis._timeout = null;\n\n\t\t/**\n\t\t * Indicates whenever the autoplay is paused.\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._paused = false;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'settings') {\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis.play();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.stop();\n\t\t\t\t\t}\n\t\t\t\t} else if (e.namespace && e.property.name === 'position') {\n\t\t\t\t\t//console.log('play?', e);\n\t\t\t\t\tif (this._core.settings.autoplay) {\n\t\t\t\t\t\tthis._setAutoPlayInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.autoplay) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'play.owl.autoplay': $.proxy(function(e, t, s) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.play(t, s);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'stop.owl.autoplay': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tthis.stop();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseover.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'mouseleave.owl.autoplay': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchstart.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'touchend.owl.core': $.proxy(function() {\n\t\t\t\tif (this._core.settings.autoplayHoverPause) {\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// register event handlers\n\t\tthis._core.$element.on(this._handlers);\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Autoplay.Defaults, this._core.options);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tAutoplay.Defaults = {\n\t\tautoplay: false,\n\t\tautoplayTimeout: 5000,\n\t\tautoplayHoverPause: false,\n\t\tautoplaySpeed: false\n\t};\n\n\t/**\n\t * Starts the autoplay.\n\t * @public\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t */\n\tAutoplay.prototype.play = function(timeout, speed) {\n\t\tthis._paused = false;\n\n\t\tif (this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._core.enter('rotating');\n\n\t\tthis._setAutoPlayInterval();\n\t};\n\n\t/**\n\t * Gets a new timeout\n\t * @private\n\t * @param {Number} [timeout] - The interval before the next animation starts.\n\t * @param {Number} [speed] - The animation speed for the animations.\n\t * @return {Timeout}\n\t */\n\tAutoplay.prototype._getNextTimeout = function(timeout, speed) {\n\t\tif ( this._timeout ) {\n\t\t\twindow.clearTimeout(this._timeout);\n\t\t}\n\t\treturn window.setTimeout($.proxy(function() {\n\t\t\tif (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._core.next(speed || this._core.settings.autoplaySpeed);\n\t\t}, this), timeout || this._core.settings.autoplayTimeout);\n\t};\n\n\t/**\n\t * Sets autoplay in motion.\n\t * @private\n\t */\n\tAutoplay.prototype._setAutoPlayInterval = function() {\n\t\tthis._timeout = this._getNextTimeout();\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.stop = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.clearTimeout(this._timeout);\n\t\tthis._core.leave('rotating');\n\t};\n\n\t/**\n\t * Stops the autoplay.\n\t * @public\n\t */\n\tAutoplay.prototype.pause = function() {\n\t\tif (!this._core.is('rotating')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._paused = true;\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t */\n\tAutoplay.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\tthis.stop();\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Navigation Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the navigation plugin.\n\t * @class The Navigation Plugin\n\t * @param {Owl} carousel - The Owl Carousel.\n\t */\n\tvar Navigation = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Indicates whether the plugin is initialized or not.\n\t\t * @protected\n\t\t * @type {Boolean}\n\t\t */\n\t\tthis._initialized = false;\n\n\t\t/**\n\t\t * The current paging indexes.\n\t\t * @protected\n\t\t * @type {Array}\n\t\t */\n\t\tthis._pages = [];\n\n\t\t/**\n\t\t * All DOM elements of the user interface.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._controls = {};\n\n\t\t/**\n\t\t * Markup for an indicator.\n\t\t * @protected\n\t\t * @type {Array.}\n\t\t */\n\t\tthis._templates = [];\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * Overridden methods of the carousel.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._overrides = {\n\t\t\tnext: this._core.next,\n\t\t\tprev: this._core.prev,\n\t\t\tto: this._core.to\n\t\t};\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.push('
' +\n\t\t\t\t\t\t$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '
');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'added.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 0, this._templates.pop());\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'remove.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.dotsData) {\n\t\t\t\t\tthis._templates.splice(e.position, 1);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name == 'position') {\n\t\t\t\t\tthis.draw();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && !this._initialized) {\n\t\t\t\t\tthis._core.trigger('initialize', null, 'navigation');\n\t\t\t\t\tthis.initialize();\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._initialized = true;\n\t\t\t\t\tthis._core.trigger('initialized', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'refreshed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._initialized) {\n\t\t\t\t\tthis._core.trigger('refresh', null, 'navigation');\n\t\t\t\t\tthis.update();\n\t\t\t\t\tthis.draw();\n\t\t\t\t\tthis._core.trigger('refreshed', null, 'navigation');\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Navigation.Defaults, this._core.options);\n\n\t\t// register event handlers\n\t\tthis.$element.on(this._handlers);\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t * @todo Rename `slideBy` to `navBy`\n\t */\n\tNavigation.Defaults = {\n\t\tnav: false,\n\t\tnavText: [ 'prev', 'next' ],\n\t\tnavSpeed: false,\n\t\tnavElement: 'div',\n\t\tnavContainer: false,\n\t\tnavContainerClass: 'owl-nav',\n\t\tnavClass: [ 'owl-prev', 'owl-next' ],\n\t\tslideBy: 1,\n\t\tdotClass: 'owl-dot',\n\t\tdotsClass: 'owl-dots',\n\t\tdots: true,\n\t\tdotsEach: false,\n\t\tdotsData: false,\n\t\tdotsSpeed: false,\n\t\tdotsContainer: false\n\t};\n\n\t/**\n\t * Initializes the layout of the plugin and extends the carousel.\n\t * @protected\n\t */\n\tNavigation.prototype.initialize = function() {\n\t\tvar override,\n\t\t\tsettings = this._core.settings;\n\n\t\t// create DOM structure for relative navigation\n\t\tthis._controls.$relative = (settings.navContainer ? $(settings.navContainer)\n\t\t\t: $('
').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$previous = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[0])\n\t\t\t.html(settings.navText[0])\n\t\t\t.prependTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.prev(settings.navSpeed);\n\t\t\t}, this));\n\t\tthis._controls.$next = $('<' + settings.navElement + '>')\n\t\t\t.addClass(settings.navClass[1])\n\t\t\t.html(settings.navText[1])\n\t\t\t.appendTo(this._controls.$relative)\n\t\t\t.on('click', $.proxy(function(e) {\n\t\t\t\tthis.next(settings.navSpeed);\n\t\t\t}, this));\n\n\t\t// create DOM structure for absolute navigation\n\t\tif (!settings.dotsData) {\n\t\t\tthis._templates = [ $('
')\n\t\t\t\t.addClass(settings.dotClass)\n\t\t\t\t.append($(''))\n\t\t\t\t.prop('outerHTML') ];\n\t\t}\n\n\t\tthis._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)\n\t\t\t: $('
').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');\n\n\t\tthis._controls.$absolute.on('click', 'div', $.proxy(function(e) {\n\t\t\tvar index = $(e.target).parent().is(this._controls.$absolute)\n\t\t\t\t? $(e.target).index() : $(e.target).parent().index();\n\n\t\t\te.preventDefault();\n\n\t\t\tthis.to(index, settings.dotsSpeed);\n\t\t}, this));\n\n\t\t// override public methods of the carousel\n\t\tfor (override in this._overrides) {\n\t\t\tthis._core[override] = $.proxy(this[override], this);\n\t\t}\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @protected\n\t */\n\tNavigation.prototype.destroy = function() {\n\t\tvar handler, control, property, override;\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (control in this._controls) {\n\t\t\tthis._controls[control].remove();\n\t\t}\n\t\tfor (override in this.overides) {\n\t\t\tthis._core[override] = this._overrides[override];\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t/**\n\t * Updates the internal state.\n\t * @protected\n\t */\n\tNavigation.prototype.update = function() {\n\t\tvar i, j, k,\n\t\t\tlower = this._core.clones().length / 2,\n\t\t\tupper = lower + this._core.items().length,\n\t\t\tmaximum = this._core.maximum(true),\n\t\t\tsettings = this._core.settings,\n\t\t\tsize = settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items;\n\n\t\tif (settings.slideBy !== 'page') {\n\t\t\tsettings.slideBy = Math.min(settings.slideBy, settings.items);\n\t\t}\n\n\t\tif (settings.dots || settings.slideBy == 'page') {\n\t\t\tthis._pages = [];\n\n\t\t\tfor (i = lower, j = 0, k = 0; i < upper; i++) {\n\t\t\t\tif (j >= size || j === 0) {\n\t\t\t\t\tthis._pages.push({\n\t\t\t\t\t\tstart: Math.min(maximum, i - lower),\n\t\t\t\t\t\tend: i - lower + size - 1\n\t\t\t\t\t});\n\t\t\t\t\tif (Math.min(maximum, i - lower) === maximum) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj = 0, ++k;\n\t\t\t\t}\n\t\t\t\tj += this._core.mergers(this._core.relative(i));\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Draws the user interface.\n\t * @todo The option `dotsData` wont work.\n\t * @protected\n\t */\n\tNavigation.prototype.draw = function() {\n\t\tvar difference,\n\t\t\tsettings = this._core.settings,\n\t\t\tdisabled = this._core.items().length <= settings.items,\n\t\t\tindex = this._core.relative(this._core.current()),\n\t\t\tloop = settings.loop || settings.rewind;\n\n\t\tthis._controls.$relative.toggleClass('disabled', !settings.nav || disabled);\n\n\t\tif (settings.nav) {\n\t\t\tthis._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));\n\t\t\tthis._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));\n\t\t}\n\n\t\tthis._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);\n\n\t\tif (settings.dots) {\n\t\t\tdifference = this._pages.length - this._controls.$absolute.children().length;\n\n\t\t\tif (settings.dotsData && difference !== 0) {\n\t\t\t\tthis._controls.$absolute.html(this._templates.join(''));\n\t\t\t} else if (difference > 0) {\n\t\t\t\tthis._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));\n\t\t\t} else if (difference < 0) {\n\t\t\t\tthis._controls.$absolute.children().slice(difference).remove();\n\t\t\t}\n\n\t\t\tthis._controls.$absolute.find('.active').removeClass('active');\n\t\t\tthis._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');\n\t\t}\n\t};\n\n\t/**\n\t * Extends event data.\n\t * @protected\n\t * @param {Event} event - The event object which gets thrown.\n\t */\n\tNavigation.prototype.onTrigger = function(event) {\n\t\tvar settings = this._core.settings;\n\n\t\tevent.page = {\n\t\t\tindex: $.inArray(this.current(), this._pages),\n\t\t\tcount: this._pages.length,\n\t\t\tsize: settings && (settings.center || settings.autoWidth || settings.dotsData\n\t\t\t\t? 1 : settings.dotsEach || settings.items)\n\t\t};\n\t};\n\n\t/**\n\t * Gets the current page position of the carousel.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.current = function() {\n\t\tvar current = this._core.relative(this._core.current());\n\t\treturn $.grep(this._pages, $.proxy(function(page, index) {\n\t\t\treturn page.start <= current && page.end >= current;\n\t\t}, this)).pop();\n\t};\n\n\t/**\n\t * Gets the current succesor/predecessor position.\n\t * @protected\n\t * @returns {Number}\n\t */\n\tNavigation.prototype.getPosition = function(successor) {\n\t\tvar position, length,\n\t\t\tsettings = this._core.settings;\n\n\t\tif (settings.slideBy == 'page') {\n\t\t\tposition = $.inArray(this.current(), this._pages);\n\t\t\tlength = this._pages.length;\n\t\t\tsuccessor ? ++position : --position;\n\t\t\tposition = this._pages[((position % length) + length) % length].start;\n\t\t} else {\n\t\t\tposition = this._core.relative(this._core.current());\n\t\t\tlength = this._core.items().length;\n\t\t\tsuccessor ? position += settings.slideBy : position -= settings.slideBy;\n\t\t}\n\n\t\treturn position;\n\t};\n\n\t/**\n\t * Slides to the next item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.next = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);\n\t};\n\n\t/**\n\t * Slides to the previous item or page.\n\t * @public\n\t * @param {Number} [speed=false] - The time in milliseconds for the transition.\n\t */\n\tNavigation.prototype.prev = function(speed) {\n\t\t$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);\n\t};\n\n\t/**\n\t * Slides to the specified item or page.\n\t * @public\n\t * @param {Number} position - The position of the item or page.\n\t * @param {Number} [speed] - The time in milliseconds for the transition.\n\t * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.\n\t */\n\tNavigation.prototype.to = function(position, speed, standard) {\n\t\tvar length;\n\n\t\tif (!standard && this._pages.length) {\n\t\t\tlength = this._pages.length;\n\t\t\t$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);\n\t\t} else {\n\t\t\t$.proxy(this._overrides.to, this._core)(position, speed);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Hash Plugin\n * @version 2.1.0\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\t'use strict';\n\n\t/**\n\t * Creates the hash plugin.\n\t * @class The Hash Plugin\n\t * @param {Owl} carousel - The Owl Carousel\n\t */\n\tvar Hash = function(carousel) {\n\t\t/**\n\t\t * Reference to the core.\n\t\t * @protected\n\t\t * @type {Owl}\n\t\t */\n\t\tthis._core = carousel;\n\n\t\t/**\n\t\t * Hash index for the items.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._hashes = {};\n\n\t\t/**\n\t\t * The carousel element.\n\t\t * @type {jQuery}\n\t\t */\n\t\tthis.$element = this._core.$element;\n\n\t\t/**\n\t\t * All event handlers.\n\t\t * @protected\n\t\t * @type {Object}\n\t\t */\n\t\tthis._handlers = {\n\t\t\t'initialized.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && this._core.settings.startPosition === 'URLHash') {\n\t\t\t\t\t$(window).trigger('hashchange.owl.navigation');\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'prepared.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace) {\n\t\t\t\t\tvar hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');\n\n\t\t\t\t\tif (!hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._hashes[hash] = e.content;\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\t'changed.owl.carousel': $.proxy(function(e) {\n\t\t\t\tif (e.namespace && e.property.name === 'position') {\n\t\t\t\t\tvar current = this._core.items(this._core.relative(this._core.current())),\n\t\t\t\t\t\thash = $.map(this._hashes, function(item, hash) {\n\t\t\t\t\t\t\treturn item === current ? hash : null;\n\t\t\t\t\t\t}).join();\n\n\t\t\t\t\tif (!hash || window.location.hash.slice(1) === hash) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t}\n\t\t\t}, this)\n\t\t};\n\n\t\t// set default options\n\t\tthis._core.options = $.extend({}, Hash.Defaults, this._core.options);\n\n\t\t// register the event handlers\n\t\tthis.$element.on(this._handlers);\n\n\t\t// register event listener for hash navigation\n\t\t$(window).on('hashchange.owl.navigation', $.proxy(function(e) {\n\t\t\tvar hash = window.location.hash.substring(1),\n\t\t\t\titems = this._core.$stage.children(),\n\t\t\t\tposition = this._hashes[hash] && items.index(this._hashes[hash]);\n\n\t\t\tif (position === undefined || position === this._core.current()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._core.to(this._core.relative(position), false, true);\n\t\t}, this));\n\t};\n\n\t/**\n\t * Default options.\n\t * @public\n\t */\n\tHash.Defaults = {\n\t\tURLhashListener: false\n\t};\n\n\t/**\n\t * Destroys the plugin.\n\t * @public\n\t */\n\tHash.prototype.destroy = function() {\n\t\tvar handler, property;\n\n\t\t$(window).off('hashchange.owl.navigation');\n\n\t\tfor (handler in this._handlers) {\n\t\t\tthis._core.$element.off(handler, this._handlers[handler]);\n\t\t}\n\t\tfor (property in Object.getOwnPropertyNames(this)) {\n\t\t\ttypeof this[property] != 'function' && (this[property] = null);\n\t\t}\n\t};\n\n\t$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;\n\n})(window.Zepto || window.jQuery, window, document);\n\n/**\n * Support Plugin\n *\n * @version 2.1.0\n * @author Vivid Planet Software GmbH\n * @author Artus Kolanowski\n * @author David Deutsch\n * @license The MIT License (MIT)\n */\n;(function($, window, document, undefined) {\n\n\tvar style = $('').get(0).style,\n\t\tprefixes = 'Webkit Moz O ms'.split(' '),\n\t\tevents = {\n\t\t\ttransition: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\t\t\t\tMozTransition: 'transitionend',\n\t\t\t\t\tOTransition: 'oTransitionEnd',\n\t\t\t\t\ttransition: 'transitionend'\n\t\t\t\t}\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tend: {\n\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\tMozAnimation: 'animationend',\n\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\tanimation: 'animationend'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttests = {\n\t\t\tcsstransforms: function() {\n\t\t\t\treturn !!test('transform');\n\t\t\t},\n\t\t\tcsstransforms3d: function() {\n\t\t\t\treturn !!test('perspective');\n\t\t\t},\n\t\t\tcsstransitions: function() {\n\t\t\t\treturn !!test('transition');\n\t\t\t},\n\t\t\tcssanimations: function() {\n\t\t\t\treturn !!test('animation');\n\t\t\t}\n\t\t};\n\n\tfunction test(property, prefixed) {\n\t\tvar result = false,\n\t\t\tupper = property.charAt(0).toUpperCase() + property.slice(1);\n\n\t\t$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {\n\t\t\tif (style[property] !== undefined) {\n\t\t\t\tresult = prefixed ? property : true;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tfunction prefixed(property) {\n\t\treturn test(property, true);\n\t}\n\n\tif (tests.csstransitions()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transition = new String(prefixed('transition'))\n\t\t$.support.transition.end = events.transition.end[ $.support.transition ];\n\t}\n\n\tif (tests.cssanimations()) {\n\t\t/* jshint -W053 */\n\t\t$.support.animation = new String(prefixed('animation'))\n\t\t$.support.animation.end = events.animation.end[ $.support.animation ];\n\t}\n\n\tif (tests.csstransforms()) {\n\t\t/* jshint -W053 */\n\t\t$.support.transform = new String(prefixed('transform'));\n\t\t$.support.transform3d = tests.csstransforms3d();\n\t}\n\n})(window.Zepto || window.jQuery, window, document);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/owl.carousel/dist/owl.carousel.js\n// module id = 117\n// module chunks = 5","'use strict';\n\n// This file contains then/promise specific extensions that are only useful\n// for node.js interop\n\nvar Promise = require('./core.js');\nvar asap = require('asap');\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nPromise.denodeify = function (fn, argumentCount) {\n if (\n typeof argumentCount === 'number' && argumentCount !== Infinity\n ) {\n return denodeifyWithCount(fn, argumentCount);\n } else {\n return denodeifyWithoutCount(fn);\n }\n};\n\nvar callbackFn = (\n 'function (err, res) {' +\n 'if (err) { rj(err); } else { rs(res); }' +\n '}'\n);\nfunction denodeifyWithCount(fn, argumentCount) {\n var args = [];\n for (var i = 0; i < argumentCount; i++) {\n args.push('a' + i);\n }\n var body = [\n 'return function (' + args.join(',') + ') {',\n 'var self = this;',\n 'return new Promise(function (rs, rj) {',\n 'var res = fn.call(',\n ['self'].concat(args).concat([callbackFn]).join(','),\n ');',\n 'if (res &&',\n '(typeof res === \"object\" || typeof res === \"function\") &&',\n 'typeof res.then === \"function\"',\n ') {rs(res);}',\n '});',\n '};'\n ].join('');\n return Function(['Promise', 'fn'], body)(Promise, fn);\n}\nfunction denodeifyWithoutCount(fn) {\n var fnLength = Math.max(fn.length - 1, 3);\n var args = [];\n for (var i = 0; i < fnLength; i++) {\n args.push('a' + i);\n }\n var body = [\n 'return function (' + args.join(',') + ') {',\n 'var self = this;',\n 'var args;',\n 'var argLength = arguments.length;',\n 'if (arguments.length > ' + fnLength + ') {',\n 'args = new Array(arguments.length + 1);',\n 'for (var i = 0; i < arguments.length; i++) {',\n 'args[i] = arguments[i];',\n '}',\n '}',\n 'return new Promise(function (rs, rj) {',\n 'var cb = ' + callbackFn + ';',\n 'var res;',\n 'switch (argLength) {',\n args.concat(['extra']).map(function (_, index) {\n return (\n 'case ' + (index) + ':' +\n 'res = fn.call(' + ['self'].concat(args.slice(0, index)).concat('cb').join(',') + ');' +\n 'break;'\n );\n }).join(''),\n 'default:',\n 'args[argLength] = cb;',\n 'res = fn.apply(self, args);',\n '}',\n \n 'if (res &&',\n '(typeof res === \"object\" || typeof res === \"function\") &&',\n 'typeof res.then === \"function\"',\n ') {rs(res);}',\n '});',\n '};'\n ].join('');\n\n return Function(\n ['Promise', 'fn'],\n body\n )(Promise, fn);\n}\n\nPromise.nodeify = function (fn) {\n return function () {\n var args = Array.prototype.slice.call(arguments);\n var callback =\n typeof args[args.length - 1] === 'function' ? args.pop() : null;\n var ctx = this;\n try {\n return fn.apply(this, arguments).nodeify(callback, ctx);\n } catch (ex) {\n if (callback === null || typeof callback == 'undefined') {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n } else {\n asap(function () {\n callback.call(ctx, ex);\n })\n }\n }\n }\n};\n\nPromise.prototype.nodeify = function (callback, ctx) {\n if (typeof callback != 'function') return this;\n\n this.then(function (value) {\n asap(function () {\n callback.call(ctx, null, value);\n });\n }, function (err) {\n asap(function () {\n callback.call(ctx, err);\n });\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/node-extensions.js\n// module id = 12\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.enableSynchronous = function () {\n Promise.prototype.isPending = function() {\n return this.getState() == 0;\n };\n\n Promise.prototype.isFulfilled = function() {\n return this.getState() == 1;\n };\n\n Promise.prototype.isRejected = function() {\n return this.getState() == 2;\n };\n\n Promise.prototype.getValue = function () {\n if (this._65 === 3) {\n return this._55.getValue();\n }\n\n if (!this.isFulfilled()) {\n throw new Error('Cannot get a value of an unfulfilled promise.');\n }\n\n return this._55;\n };\n\n Promise.prototype.getReason = function () {\n if (this._65 === 3) {\n return this._55.getReason();\n }\n\n if (!this.isRejected()) {\n throw new Error('Cannot get a rejection reason of a non-rejected promise.');\n }\n\n return this._55;\n };\n\n Promise.prototype.getState = function () {\n if (this._65 === 3) {\n return this._55.getState();\n }\n if (this._65 === -1 || this._65 === -2) {\n return 0;\n }\n\n return this._65;\n };\n};\n\nPromise.disableSynchronous = function() {\n Promise.prototype.isPending = undefined;\n Promise.prototype.isFulfilled = undefined;\n Promise.prototype.isRejected = undefined;\n Promise.prototype.getValue = undefined;\n Promise.prototype.getReason = undefined;\n Promise.prototype.getState = undefined;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/synchronous.js\n// module id = 13\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n if (pendingErrors.length) {\n throw pendingErrors.shift();\n }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n var rawTask;\n if (freeTasks.length) {\n rawTask = freeTasks.pop();\n } else {\n rawTask = new RawTask();\n }\n rawTask.task = task;\n rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects. A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n try {\n this.task.call();\n } catch (error) {\n if (asap.onerror) {\n // This hook exists purely for testing purposes.\n // Its name will be periodically randomized to break any code that\n // depends on its existence.\n asap.onerror(error);\n } else {\n // In a web browser, exceptions are not fatal. However, to avoid\n // slowing down the queue of pending tasks, we rethrow the error in a\n // lower priority turn.\n pendingErrors.push(error);\n requestErrorThrow();\n }\n } finally {\n this.task = null;\n freeTasks[freeTasks.length] = this;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/~/asap/browser-asap.js\n// module id = 14\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","const Paginator = Backbone.Model.extend({\n defaults: {\n data: [],\n page: 0,\n perPage: 5,\n isLoading: false\n },\n\n numPages() {\n return Math.ceil(this.get('data').length / this.get('perPage'));\n },\n\n getPageItems() {\n return this.get('data').slice(this.get('page') * this.get('perPage'), (this.get('page') + 1) * this.get('perPage'));\n },\n\n getLoadedData() {\n return this.get('data').slice(0, (this.get('page') + 1) * this.get('perPage'));\n },\n\n nextPage() {\n this.set({ page: this.get('page') + 1, isLoading: false });\n },\n\n getPage() {\n return this.get('page');\n },\n\n getPerPage() {\n return this.get('perPage');\n },\n\n isLastPage() {\n return this.get('page') >= this.numPages() - 1;\n }\n});\n\n\nexport default Paginator;\n\n\n// WEBPACK FOOTER //\n// ./js/lib/models/pagination.js","/** a generic list view for paginated items. We hand the list the template to be used for each item and render that\n template, passing the models' attributes as variables **/\n\nconst PaginationList = Backbone.View.extend({\n initialize(opts) {\n this.options = {\n extra_context: {},\n item_template: null\n };\n\n _.extend(this.options, opts || {});\n\n if (!this.options.item_template) {\n throw 'an item_template must be passed, this is what will be used to render each item in the paginated list';\n }\n\n this.model.on('change:page', this.render, this);\n this.model.on('change:data', this.renderInitial, this);\n },\n\n render() {\n this.$el.append(\n this.model.getPageItems().map(d => this.options.item_template(_.extend({}, d, this.options.extra_context)))\n );\n },\n\n renderInitial() {\n this.$el.html(\n this.model.getPageItems().map(d => this.options.item_template(_.extend({}, d, this.options.extra_context)))\n );\n }\n});\n\n\nexport default PaginationList;\n\n\n// WEBPACK FOOTER //\n// ./js/lib/views/pagination-list.js","'use strict';\n\nvar asap = require('asap/raw');\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._40 = 0;\n this._65 = 0;\n this._55 = null;\n this._72 = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._37 = null;\nPromise._87 = null;\nPromise._61 = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._65 === 3) {\n self = self._55;\n }\n if (Promise._37) {\n Promise._37(self);\n }\n if (self._65 === 0) {\n if (self._40 === 0) {\n self._40 = 1;\n self._72 = deferred;\n return;\n }\n if (self._40 === 1) {\n self._40 = 2;\n self._72 = [self._72, deferred];\n return;\n }\n self._72.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n asap(function() {\n var cb = self._65 === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._65 === 1) {\n resolve(deferred.promise, self._55);\n } else {\n reject(deferred.promise, self._55);\n }\n return;\n }\n var ret = tryCallOne(cb, self._55);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._65 = 3;\n self._55 = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._65 = 1;\n self._55 = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._65 = 2;\n self._55 = newValue;\n if (Promise._87) {\n Promise._87(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._40 === 1) {\n handle(self, self._72);\n self._72 = null;\n }\n if (self._40 === 2) {\n for (var i = 0; i < self._72.length; i++) {\n handle(self, self._72[i]);\n }\n self._72 = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/core.js\n// module id = 2\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","import events from 'js/lib/events';\nimport Paginator from 'js/lib/models/pagination';\nimport { scrollTopDistance } from 'js/lib/helpers';\n\n\nconst InfinitePagination = Backbone.View.extend({\n template: _.template('\" />'),\n\n initialize(opts) {\n this.options = {\n loader: '/images/icons/loader.gif',\n bottom_offset: 50,\n load_more_delay: 1500\n };\n\n _.extend(this.options, opts || {});\n\n $(window).on('scroll', _.throttle(this.maybeLoadMore.bind(this), 300));\n\n this.model.on('change:isLoading', this.render, this);\n },\n\n maybeLoadMore() {\n const elOffsetY = this.$el.offset().top;\n const scrollOffsetY = scrollTopDistance();\n const windowHeight = window.innerHeight;\n\n if ((elOffsetY - (scrollOffsetY + windowHeight)) <= this.options.bottom_offset && !this.model.get('isLoading') && !this.model.isLastPage()) {\n this.model.set({ isLoading: true });\n setTimeout(this.model.nextPage.bind(this.model), this.options.load_more_delay);\n }\n },\n\n render() {\n this.model.get('isLoading') ? this.$el.html(this.template({ loader: this.options.loader })) : this.$el.html('');\n }\n});\n\n/**\n * bind an InfinitePagination view to the given paginator\n * @param paginator {Paginator} instance to bind an InfinitePagination view to\n * @param infiniteEl {String} selector for the container for the infinite pagination loading view\n * @returns {function()} closure which when executed unbinds the paginator from the loader view\n */\nexport function makeInfinitePaginator(paginator, infiniteEl) {\n let infinite = new InfinitePagination({\n model: paginator,\n el: infiniteEl\n });\n\n return () => {\n paginator.off();\n infinite.$el.html('');\n\n paginator = null;\n infinite = null;\n };\n}\n\n/**\n * make a collection an infinite collection in that it's state at any given point in time is representative of how far\n * down the page a user has scrolled (in addition to any pagination specific options given in paginatorOpts)\n * @param collection\n * @param infiniteEl\n * @param paginatorOpts\n * @returns {function()} closure unbinding the collection from pagination\n */\nexport default function makeInfinite(collection, infiniteEl, paginatorOpts) {\n // we start the pagination on the second page, since we're showing the first page of results by default on page load\n let paginator = new Paginator(paginatorOpts);\n\n if (collection) {\n collection.reset(paginator.getPageItems());\n paginator.on('change:page', () => collection.add(paginator.getPageItems()));\n\n // when a collection is to be sorted, the response of pagination is a bit tricky:\n // 1) load all the data from the paginator into the collection (so that we're sorting the full collection, rather than only a page)\n // 2) after sorting is complete, reset the paginators data with the collection's data (so we're maintaining the same sort order in the paginator)\n // 3) after resetting the paginators data, reset the collection's data to only include the pages loaded\n collection.on(events.presort, () => collection.reset(paginator.get('data'), { silent: true, sort: false }));\n collection.on(events.postsort, () => {\n paginator.set({ data: collection.models });\n collection.reset(paginator.getLoadedData(), { sort: false });\n });\n }\n\n let deactivatePaginator = makeInfinitePaginator(paginator, infiniteEl);\n\n return () => {\n deactivatePaginator();\n\n if (collection) {\n collection.off(events.presort);\n collection.off(events.postsort);\n }\n };\n}\n\n\n// WEBPACK FOOTER //\n// ./js/lib/views/pagination-infinite.js","// Backbone.js 1.3.3\n\n// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global);\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.3.3';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return _[method](this[attribute]);\n };\n case 2: return function(value) {\n return _[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return _[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return _[method].apply(_, args);\n };\n }\n };\n var addUnderscoreMethods = function(Class, methods, attribute) {\n _.each(methods, function(length, method) {\n if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n return internalOn(this, name, callback, context);\n };\n\n // Guard the `listening` argument from the public API.\n var internalOn = function(obj, name, callback, context, listening) {\n obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n context: context,\n ctx: obj,\n listening: listening\n });\n\n if (listening) {\n var listeners = obj._listeners || (obj._listeners = {});\n listeners[listening.id] = listening;\n }\n\n return obj;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n }\n\n // Bind callbacks on obj, and keep track of them on listening.\n internalOn(obj, name, callback, this, listening);\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n }\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var i = 0, listening;\n var context = options.context, listeners = options.listeners;\n\n // Delete all events listeners and \"drop\" events.\n if (!name && !callback && !context) {\n var ids = _.keys(listeners);\n for (; i < ids.length; i++) {\n listening = listeners[ids[i]];\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n return;\n }\n\n var names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Replace events if there are any remaining. Otherwise, clean up.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n listening = handler.listening;\n if (listening && --listening.count === 0) {\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n }\n }\n\n // Update tail event if the list has any events. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n }\n return _.size(changed) ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n addUnderscoreMethods(Model, modelMethods, 'attributes');\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(obj.attributes || obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n addUnderscoreMethods(Collection, collectionMethods, 'models');\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], _.bind(method, this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = _.bind(this.checkUrl, this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the hash and decode for matching.\n fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/backbone/backbone.js\n// module id = 3\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 20","/**\n custom events triggerable by event emitters\n **/\nexport default {\n presort: 'pre-sort', // triggered right before a sort event\n postsort: 'post-sort', // triggered right after a sort event\n};\n\n\n// WEBPACK FOOTER //\n// ./js/lib/events.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 4\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20","import fns_parse from 'date-fns/parse';\n\n\nexport function parseDate(d) {\n return fns_parse(d);\n}\n\n\n// WEBPACK FOOTER //\n// ./js/lib/dates.js","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/~/asap/browser-raw.js\n// module id = 5\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","import 'owl.carousel';\n\nexport default function createCarousel(el, opts) {\n let defaults = {\n items: 3,\n stagePadding: 0, //if set, can see neighbors\n dots: true\n };\n\n opts = _.extend({}, defaults, opts || {});\n\n $(el).owlCarousel(opts);\n}\n\n\n// WEBPACK FOOTER //\n// ./js/lib/views/carousel.js","const Promise = require('promise');\n\n\n// http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\nexport function getParameterByName(name, url) {\n if (!url) url = window.location.href;\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(url);\n\n if (!results) return null;\n if (!results[2]) return '';\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\n\n/**\n * get the current value of the hash in the URL - if it exists\n * @return @{String}\n */\nexport function getHashFromCurrentUrl() {\n return window.location.hash ? window.location.hash.replace('#', '') : null;\n}\n\n\n/**\n * truncate the given string after `n` words\n * @param s\n * @param n\n * @param truncationChars @{String} the value to append to the truncated value (if truncation occurs)\n */\nexport function truncateWords(s, n, truncationChars='...') {\n let words = s.split(' ');\n\n if (words.length <= n) {\n return s;\n }\n\n let truncated = words.slice(0, n).join(' ');\n return truncated + truncationChars;\n}\n\n\n/**\n * truncate the given string after `n` characters\n * @param s\n * @param n\n * @param truncationChars\n */\nexport function truncateCharacters(s, n, truncationChars='...') {\n if (s.length <= n) {\n return s;\n }\n\n return s.substring(0, n) + truncationChars;\n}\n\n\nexport function toTitleCase(str) {\n return str.replace(/\\w\\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});\n}\n\n\n/**\n * generate a random string of size n (wripped from https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript)\n * @param n\n * @returns {string}\n */\nexport function randomString(n=10) {\n let text = '';\n const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\n for (let i = 0; i < n; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n\n return text;\n}\n\n\n\n/**\n * browsers handle calculating the scroll distance from the top of the page differently. This method reconciles the different\n * ways browsers handle getting this value and returns the distance scrolled from the top:\n *\n * https://stackoverflow.com/questions/28633221/document-body-scrolltop-firefox-returns-0-only-js\n *\n * @returns {Number|number}\n */\nexport function scrollTopDistance() {\n return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n}\n\n\n/**\n * toggle the ability to scroll in the page\n * @param flag {Boolean}\n */\nexport function toggleScroll(flag) {\n $('html,body').css('overflow-y', flag ? 'auto' : 'hidden');\n}\n\n\n/**\n * listen for the window being scrolled to the given `limit` pixels down.\n * @param offset {Number} offset - in pixels - to reach\n * @return {Promise} resolving when the given offset is reached\n */\nexport function whenScrollReached(offset=100) {\n return new Promise((resolve, reject) => {\n let onScroll = _.throttle(() => {\n if (scrollTopDistance() >= offset) {\n window.removeEventListener('scroll', onScroll);\n resolve();\n }\n }, 100);\n\n window.addEventListener('scroll', onScroll);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./js/lib/helpers.js","'use strict';\n\nmodule.exports = require('./lib')\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/index.js\n// module id = 7\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","// removed by extract-text-webpack-plugin\nmodule.exports = {\"fa-cc-visa\":\"fa-cc-visa\",\"desktop-search-overlay\":\"desktop-search-overlay\",\"fa-sheqel\":\"fa-sheqel\",\"fa-rocket\":\"fa-rocket\",\"fa-battery-1\":\"fa-battery-1\",\"fa-scribd\":\"fa-scribd\",\"fa-sort-numeric-desc\":\"fa-sort-numeric-desc\",\"fa-arrow-circle-o-down\":\"fa-arrow-circle-o-down\",\"fa-hand-pointer-o\":\"fa-hand-pointer-o\",\"fa-meh-o\":\"fa-meh-o\",\"fa-blind\":\"fa-blind\",\"fa-globe\":\"fa-globe\",\"fa-yahoo\":\"fa-yahoo\",\"fa-map-o\":\"fa-map-o\",\"fa-feed\":\"fa-feed\",\"fa-moon-o\":\"fa-moon-o\",\"fa-hand-lizard-o\":\"fa-hand-lizard-o\",\"social-share-flat\":\"social-share-flat\",\"hs-input\":\"hs-input\",\"fa-sort-up\":\"fa-sort-up\",\"fa-cc-diners-club\":\"fa-cc-diners-club\",\"fa-anchor\":\"fa-anchor\",\"fa-bell-slash\":\"fa-bell-slash\",\"fa-birthday-cake\":\"fa-birthday-cake\",\"fa-sort-desc\":\"fa-sort-desc\",\"fa-mobile\":\"fa-mobile\",\"fa-optin-monster\":\"fa-optin-monster\",\"fa-columns\":\"fa-columns\",\"fa-facebook\":\"fa-facebook\",\"fa-fonticons\":\"fa-fonticons\",\"fa-github-alt\":\"fa-github-alt\",\"highlighted\":\"highlighted\",\"fa-angle-double-down\":\"fa-angle-double-down\",\"ctc-container\":\"ctc-container\",\"fa-paste\":\"fa-paste\",\"fa-git-square\":\"fa-git-square\",\"fa-calculator\":\"fa-calculator\",\"fa-registered\":\"fa-registered\",\"wide\":\"wide\",\"fa-dollar\":\"fa-dollar\",\"fa-hashtag\":\"fa-hashtag\",\"fa-play-circle\":\"fa-play-circle\",\"fa-chevron-down\":\"fa-chevron-down\",\"fa-sticky-note-o\":\"fa-sticky-note-o\",\"fa-mars\":\"fa-mars\",\"hero-header\":\"hero-header\",\"fa-window-minimize\":\"fa-window-minimize\",\"fa-amazon\":\"fa-amazon\",\"fa-square\":\"fa-square\",\"fa-code-fork\":\"fa-code-fork\",\"fa-navicon\":\"fa-navicon\",\"fa-qq\":\"fa-qq\",\"fa-map-signs\":\"fa-map-signs\",\"fa-play-circle-o\":\"fa-play-circle-o\",\"navbar-toggle\":\"navbar-toggle\",\"footer-contact\":\"footer-contact\",\"fa-weixin\":\"fa-weixin\",\"fa-caret-square-o-right\":\"fa-caret-square-o-right\",\"fa-superscript\":\"fa-superscript\",\"fa-recycle\":\"fa-recycle\",\"fa-question-circle\":\"fa-question-circle\",\"side-bar\":\"side-bar\",\"fa-file-movie-o\":\"fa-file-movie-o\",\"fa-ra\":\"fa-ra\",\"fa-hourglass-3\":\"fa-hourglass-3\",\"li\":\"li\",\"fa-gbp\":\"fa-gbp\",\"fa-inverse\":\"fa-inverse\",\"fa-credit-card-alt\":\"fa-credit-card-alt\",\"fa-edit\":\"fa-edit\",\"fa-hourglass-half\":\"fa-hourglass-half\",\"fa-paperclip\":\"fa-paperclip\",\"fa-download\":\"fa-download\",\"fa-flickr\":\"fa-flickr\",\"fa-thumbs-down\":\"fa-thumbs-down\",\"fa-git\":\"fa-git\",\"fa-hand-paper-o\":\"fa-hand-paper-o\",\"fa-plus-square-o\":\"fa-plus-square-o\",\"fa-bank\":\"fa-bank\",\"fa-hotel\":\"fa-hotel\",\"fa-sticky-note\":\"fa-sticky-note\",\"owl-carousel\":\"owl-carousel\",\"fa-sort-asc\":\"fa-sort-asc\",\"fa-share-alt\":\"fa-share-alt\",\"section\":\"section\",\"fa-euro\":\"fa-euro\",\"fa-thermometer-3\":\"fa-thermometer-3\",\"fa-li\":\"fa-li\",\"fa-pied-piper\":\"fa-pied-piper\",\"fa-close\":\"fa-close\",\"fa-gear\":\"fa-gear\",\"fa-adjust\":\"fa-adjust\",\"fa-stumbleupon\":\"fa-stumbleupon\",\"fa-wpforms\":\"fa-wpforms\",\"dropdown-mega\":\"dropdown-mega\",\"fa-paypal\":\"fa-paypal\",\"fa-toggle-left\":\"fa-toggle-left\",\"card-top-alert\":\"card-top-alert\",\"fa-id-badge\":\"fa-id-badge\",\"fa-hand-o-right\":\"fa-hand-o-right\",\"fa-exchange\":\"fa-exchange\",\"fa-binoculars\":\"fa-binoculars\",\"fa-gg\":\"fa-gg\",\"fa-plus-circle\":\"fa-plus-circle\",\"fa-toggle-right\":\"fa-toggle-right\",\"dropdown-florida-list\":\"dropdown-florida-list\",\"no-float\":\"no-float\",\"input-container\":\"input-container\",\"fa-facebook-square\":\"fa-facebook-square\",\"fa-indent\":\"fa-indent\",\"fa-calendar-minus-o\":\"fa-calendar-minus-o\",\"placeholder\":\"placeholder\",\"fa-heartbeat\":\"fa-heartbeat\",\"fa-windows\":\"fa-windows\",\"fa-vimeo-square\":\"fa-vimeo-square\",\"nav-email-col\":\"nav-email-col\",\"stats-inner\":\"stats-inner\",\"nav-ctc-container\":\"nav-ctc-container\",\"fa-viacoin\":\"fa-viacoin\",\"fa-drivers-license\":\"fa-drivers-license\",\"mobile-container\":\"mobile-container\",\"navbar\":\"navbar\",\"fa-long-arrow-left\":\"fa-long-arrow-left\",\"results-container\":\"results-container\",\"fa-money\":\"fa-money\",\"recent-firm-news-item\":\"recent-firm-news-item\",\"fa-sign-in\":\"fa-sign-in\",\"fa-arrow-circle-right\":\"fa-arrow-circle-right\",\"fa-puzzle-piece\":\"fa-puzzle-piece\",\"sr-only-focusable\":\"sr-only-focusable\",\"fa-codiepie\":\"fa-codiepie\",\"btn-black\":\"btn-black\",\"fa-openid\":\"fa-openid\",\"fa-shopping-bag\":\"fa-shopping-bag\",\"fa-info\":\"fa-info\",\"fa-check-square\":\"fa-check-square\",\"pointer\":\"pointer\",\"fa-cc-paypal\":\"fa-cc-paypal\",\"fa-circle\":\"fa-circle\",\"mm-recent-firm-news\":\"mm-recent-firm-news\",\"fa-eraser\":\"fa-eraser\",\"fa-chevron-up\":\"fa-chevron-up\",\"fa-copy\":\"fa-copy\",\"fa-chevron-circle-down\":\"fa-chevron-circle-down\",\"fa-bluetooth\":\"fa-bluetooth\",\"fa-share-square\":\"fa-share-square\",\"fa-repeat\":\"fa-repeat\",\"fa-desktop\":\"fa-desktop\",\"result-case\":\"result-case\",\"fa-hand-rock-o\":\"fa-hand-rock-o\",\"fa-th-large\":\"fa-th-large\",\"fa-arrow-circle-o-up\":\"fa-arrow-circle-o-up\",\"fa-google\":\"fa-google\",\"social-share-expanding\":\"social-share-expanding\",\"fa-bold\":\"fa-bold\",\"pullquote-right\":\"pullquote-right\",\"result-header-gray\":\"result-header-gray\",\"fa-video-camera\":\"fa-video-camera\",\"fa-file-audio-o\":\"fa-file-audio-o\",\"fa-bus\":\"fa-bus\",\"btn-ctc\":\"btn-ctc\",\"fa-stumbleupon-circle\":\"fa-stumbleupon-circle\",\"fa-yc\":\"fa-yc\",\"fa-heart\":\"fa-heart\",\"fa-frown-o\":\"fa-frown-o\",\"fa-mail-reply\":\"fa-mail-reply\",\"fa-vine\":\"fa-vine\",\"fa-sign-language\":\"fa-sign-language\",\"fa-tv\":\"fa-tv\",\"fa-user-times\":\"fa-user-times\",\"faq-card\":\"faq-card\",\"fa-database\":\"fa-database\",\"fa-codepen\":\"fa-codepen\",\"fa-simplybuilt\":\"fa-simplybuilt\",\"experiment-semaphore\":\"experiment-semaphore\",\"fa-window-maximize\":\"fa-window-maximize\",\"fa-map-marker\":\"fa-map-marker\",\"fa-sort-amount-desc\":\"fa-sort-amount-desc\",\"fa-file-picture-o\":\"fa-file-picture-o\",\"fa-usb\":\"fa-usb\",\"fa-terminal\":\"fa-terminal\",\"fa-bar-chart\":\"fa-bar-chart\",\"fa-product-hunt\":\"fa-product-hunt\",\"fa-image\":\"fa-image\",\"fa-stop-circle-o\":\"fa-stop-circle-o\",\"fa-venus-mars\":\"fa-venus-mars\",\"fa-commenting\":\"fa-commenting\",\"fa-trophy\":\"fa-trophy\",\"fa-rotate-270\":\"fa-rotate-270\",\"fa-soundcloud\":\"fa-soundcloud\",\"highlighteable\":\"highlighteable\",\"fa-gavel\":\"fa-gavel\",\"fa-random\":\"fa-random\",\"fa-stack-2x\":\"fa-stack-2x\",\"fa-ul\":\"fa-ul\",\"fa-asterisk\":\"fa-asterisk\",\"fa-arrows-h\":\"fa-arrows-h\",\"fa-jpy\":\"fa-jpy\",\"fa-y-combinator\":\"fa-y-combinator\",\"fa-mail-forward\":\"fa-mail-forward\",\"fa-legal\":\"fa-legal\",\"email\":\"email\",\"fa-volume-off\":\"fa-volume-off\",\"fa-external-link-square\":\"fa-external-link-square\",\"fa-opera\":\"fa-opera\",\"fa-superpowers\":\"fa-superpowers\",\"fa-maxcdn\":\"fa-maxcdn\",\"fa-apple\":\"fa-apple\",\"fa-foursquare\":\"fa-foursquare\",\"fa-scissors\":\"fa-scissors\",\"sub-title\":\"sub-title\",\"fa-cloud-download\":\"fa-cloud-download\",\"fa-twitch\":\"fa-twitch\",\"pullquote-left\":\"pullquote-left\",\"fa-snowflake-o\":\"fa-snowflake-o\",\"fa-tablet\":\"fa-tablet\",\"fa-star\":\"fa-star\",\"fa-leanpub\":\"fa-leanpub\",\"fa-play\":\"fa-play\",\"fa-creative-commons\":\"fa-creative-commons\",\"fa-wechat\":\"fa-wechat\",\"fa-stop\":\"fa-stop\",\"fa-tachometer\":\"fa-tachometer\",\"fa-ambulance\":\"fa-ambulance\",\"fa-weibo\":\"fa-weibo\",\"settlements-results\":\"settlements-results\",\"btn-pagination\":\"btn-pagination\",\"recent-firm-news-more-results\":\"recent-firm-news-more-results\",\"fa-wifi\":\"fa-wifi\",\"fa-mail-reply-all\":\"fa-mail-reply-all\",\"fa-space-shuttle\":\"fa-space-shuttle\",\"fa-soccer-ball-o\":\"fa-soccer-ball-o\",\"fa-user-o\":\"fa-user-o\",\"modal-body\":\"modal-body\",\"fa-trash\":\"fa-trash\",\"settlements-featured\":\"settlements-featured\",\"fa-paw\":\"fa-paw\",\"items-3\":\"items-3\",\"fa-ticket\":\"fa-ticket\",\"fa-times-circle\":\"fa-times-circle\",\"fa-grav\":\"fa-grav\",\"fa-angle-left\":\"fa-angle-left\",\"fa-btc\":\"fa-btc\",\"fa-medkit\":\"fa-medkit\",\"fa-user-circle\":\"fa-user-circle\",\"fa-unlock\":\"fa-unlock\",\"fa-linkedin\":\"fa-linkedin\",\"fa-area-chart\":\"fa-area-chart\",\"fa-arrow-circle-o-right\":\"fa-arrow-circle-o-right\",\"fa-address-book-o\":\"fa-address-book-o\",\"fa-thermometer-three-quarters\":\"fa-thermometer-three-quarters\",\"fa-american-sign-language-interpreting\":\"fa-american-sign-language-interpreting\",\"fa-fast-backward\":\"fa-fast-backward\",\"fa-github-square\":\"fa-github-square\",\"fa-times-rectangle-o\":\"fa-times-rectangle-o\",\"nav-call-col\":\"nav-call-col\",\"fa-subway\":\"fa-subway\",\"fa-newspaper-o\":\"fa-newspaper-o\",\"fa-google-plus-circle\":\"fa-google-plus-circle\",\"fa-bitbucket\":\"fa-bitbucket\",\"mm-search\":\"mm-search\",\"fa-reorder\":\"fa-reorder\",\"focused\":\"focused\",\"fa-thumbs-o-down\":\"fa-thumbs-o-down\",\"fa-street-view\":\"fa-street-view\",\"fa-calendar-times-o\":\"fa-calendar-times-o\",\"fa-keyboard-o\":\"fa-keyboard-o\",\"fa-magnet\":\"fa-magnet\",\"fa-ship\":\"fa-ship\",\"general-form\":\"general-form\",\"fa-automobile\":\"fa-automobile\",\"fa-wpbeginner\":\"fa-wpbeginner\",\"fa-battery-half\":\"fa-battery-half\",\"fa-pinterest\":\"fa-pinterest\",\"result-left\":\"result-left\",\"fa-th\":\"fa-th\",\"fa-share\":\"fa-share\",\"fa-sort-numeric-asc\":\"fa-sort-numeric-asc\",\"fa-percent\":\"fa-percent\",\"fa-mercury\":\"fa-mercury\",\"breadcrumb\":\"breadcrumb\",\"fa-thermometer\":\"fa-thermometer\",\"fa-mortar-board\":\"fa-mortar-board\",\"header-title\":\"header-title\",\"fa-key\":\"fa-key\",\"fa-s15\":\"fa-s15\",\"dropdown-locations\":\"dropdown-locations\",\"btn-red\":\"btn-red\",\"fa-cab\":\"fa-cab\",\"fa-slideshare\":\"fa-slideshare\",\"fa-angle-double-left\":\"fa-angle-double-left\",\"fa-ravelry\":\"fa-ravelry\",\"fb-comments\":\"fb-comments\",\"fa-lastfm\":\"fa-lastfm\",\"fa-rebel\":\"fa-rebel\",\"fa-chain-broken\":\"fa-chain-broken\",\"items-1\":\"items-1\",\"fa-strikethrough\":\"fa-strikethrough\",\"fa-sort-alpha-desc\":\"fa-sort-alpha-desc\",\"fa-phone-square\":\"fa-phone-square\",\"pull-right\":\"pull-right\",\"fa-envelope\":\"fa-envelope\",\"fa-th-list\":\"fa-th-list\",\"fa-at\":\"fa-at\",\"fa-remove\":\"fa-remove\",\"fa-life-bouy\":\"fa-life-bouy\",\"fa-battery-empty\":\"fa-battery-empty\",\"yt\":\"yt\",\"fa-arrow-circle-left\":\"fa-arrow-circle-left\",\"fa-arrow-circle-up\":\"fa-arrow-circle-up\",\"fa-pulse\":\"fa-pulse\",\"advertisement\":\"advertisement\",\"fa-expand\":\"fa-expand\",\"fa-mars-double\":\"fa-mars-double\",\"fa-comment-o\":\"fa-comment-o\",\"fa-adn\":\"fa-adn\",\"fa-vk\":\"fa-vk\",\"fa-ruble\":\"fa-ruble\",\"fa-laptop\":\"fa-laptop\",\"fa-xing-square\":\"fa-xing-square\",\"fa-expeditedssl\":\"fa-expeditedssl\",\"fa-first-order\":\"fa-first-order\",\"btn-twitter\":\"btn-twitter\",\"fa-google-plus\":\"fa-google-plus\",\"fa-caret-right\":\"fa-caret-right\",\"fa-code\":\"fa-code\",\"btn\":\"btn\",\"fa-building-o\":\"fa-building-o\",\"fa-check-circle-o\":\"fa-check-circle-o\",\"fa-circle-thin\":\"fa-circle-thin\",\"fa-angle-up\":\"fa-angle-up\",\"fa-text-height\":\"fa-text-height\",\"fa-gittip\":\"fa-gittip\",\"fa-angle-double-up\":\"fa-angle-double-up\",\"fa-usd\":\"fa-usd\",\"fa-file-archive-o\":\"fa-file-archive-o\",\"fa-gift\":\"fa-gift\",\"fa-thermometer-full\":\"fa-thermometer-full\",\"sr-only\":\"sr-only\",\"fa-steam\":\"fa-steam\",\"fa-3x\":\"fa-3x\",\"fa-battery-4\":\"fa-battery-4\",\"fa-address-card\":\"fa-address-card\",\"fa-fw\":\"fa-fw\",\"fa-motorcycle\":\"fa-motorcycle\",\"fa-times\":\"fa-times\",\"fa-list-ol\":\"fa-list-ol\",\"fa-black-tie\":\"fa-black-tie\",\"footer-form\":\"footer-form\",\"hs-error-msgs\":\"hs-error-msgs\",\"fa-address-card-o\":\"fa-address-card-o\",\"fa-map\":\"fa-map\",\"selected\":\"selected\",\"btn-ghost-black\":\"btn-ghost-black\",\"fa-file-sound-o\":\"fa-file-sound-o\",\"fa-meanpath\":\"fa-meanpath\",\"fa-info-circle\":\"fa-info-circle\",\"fa-dedent\":\"fa-dedent\",\"search-expand-lg\":\"search-expand-lg\",\"fa-toggle-off\":\"fa-toggle-off\",\"fa-certificate\":\"fa-certificate\",\"fa-font-awesome\":\"fa-font-awesome\",\"mm-table\":\"mm-table\",\"fa-camera\":\"fa-camera\",\"fa-sort-down\":\"fa-sort-down\",\"fa-thermometer-2\":\"fa-thermometer-2\",\"footer-logo\":\"footer-logo\",\"fa-user\":\"fa-user\",\"fa-group\":\"fa-group\",\"fa-power-off\":\"fa-power-off\",\"fa-android\":\"fa-android\",\"fa-futbol-o\":\"fa-futbol-o\",\"fa-circle-o\":\"fa-circle-o\",\"fa-pencil\":\"fa-pencil\",\"fa-sign-out\":\"fa-sign-out\",\"fa-sort-amount-asc\":\"fa-sort-amount-asc\",\"nav-search\":\"nav-search\",\"stats-recovered\":\"stats-recovered\",\"fa-spin\":\"fa-spin\",\"fa-users\":\"fa-users\",\"fa-align-center\":\"fa-align-center\",\"fa-connectdevelop\":\"fa-connectdevelop\",\"fa-qrcode\":\"fa-qrcode\",\"fa-tags\":\"fa-tags\",\"fa-minus-square-o\":\"fa-minus-square-o\",\"fa-star-half\":\"fa-star-half\",\"fa-eject\":\"fa-eject\",\"fa-stack-overflow\":\"fa-stack-overflow\",\"fa-bicycle\":\"fa-bicycle\",\"fa-cut\":\"fa-cut\",\"fa-rss\":\"fa-rss\",\"fa-joomla\":\"fa-joomla\",\"more\":\"more\",\"fa-server\":\"fa-server\",\"modal-header\":\"modal-header\",\"fa-4x\":\"fa-4x\",\"fa-chevron-circle-right\":\"fa-chevron-circle-right\",\"fa-clone\":\"fa-clone\",\"fa-align-left\":\"fa-align-left\",\"fa-mouse-pointer\":\"fa-mouse-pointer\",\"fa-hourglass-o\":\"fa-hourglass-o\",\"result-container\":\"result-container\",\"metadata\":\"metadata\",\"fa-linode\":\"fa-linode\",\"fa-bug\":\"fa-bug\",\"fa-thumb-tack\":\"fa-thumb-tack\",\"fa-bed\":\"fa-bed\",\"fa-link\":\"fa-link\",\"dropdown-menu\":\"dropdown-menu\",\"fa-reply-all\":\"fa-reply-all\",\"fa-subscript\":\"fa-subscript\",\"masthead\":\"masthead\",\"card-content-alert\":\"card-content-alert\",\"mobile\":\"mobile\",\"fa-align-justify\":\"fa-align-justify\",\"fa-ioxhost\":\"fa-ioxhost\",\"fa-credit-card\":\"fa-credit-card\",\"social-card\":\"social-card\",\"fa-youtube-square\":\"fa-youtube-square\",\"fa-battery-three-quarters\":\"fa-battery-three-quarters\",\"fa-bullhorn\":\"fa-bullhorn\",\"fa-tasks\":\"fa-tasks\",\"fa-filter\":\"fa-filter\",\"fa-pinterest-p\":\"fa-pinterest-p\",\"fa-bathtub\":\"fa-bathtub\",\"fa-2x\":\"fa-2x\",\"fa-share-square-o\":\"fa-share-square-o\",\"fa-flag-o\":\"fa-flag-o\",\"fa-thumbs-up\":\"fa-thumbs-up\",\"fa-underline\":\"fa-underline\",\"fa-star-half-full\":\"fa-star-half-full\",\"fa-delicious\":\"fa-delicious\",\"fa-gg-circle\":\"fa-gg-circle\",\"fa-vcard\":\"fa-vcard\",\"fa-hand-o-left\":\"fa-hand-o-left\",\"fa-i-cursor\":\"fa-i-cursor\",\"fa-arrow-left\":\"fa-arrow-left\",\"fa-won\":\"fa-won\",\"fa-odnoklassniki\":\"fa-odnoklassniki\",\"fa-caret-square-o-left\":\"fa-caret-square-o-left\",\"fa-search-plus\":\"fa-search-plus\",\"fa-pied-piper-alt\":\"fa-pied-piper-alt\",\"fa-chrome\":\"fa-chrome\",\"fa-youtube-play\":\"fa-youtube-play\",\"fa-bitcoin\":\"fa-bitcoin\",\"fa-crop\":\"fa-crop\",\"form-control\":\"form-control\",\"fa-object-ungroup\":\"fa-object-ungroup\",\"fa-neuter\":\"fa-neuter\",\"fa-dropbox\":\"fa-dropbox\",\"fa-assistive-listening-systems\":\"fa-assistive-listening-systems\",\"fa-linkedin-square\":\"fa-linkedin-square\",\"fa-ellipsis-v\":\"fa-ellipsis-v\",\"fa-caret-square-o-up\":\"fa-caret-square-o-up\",\"fa-glide\":\"fa-glide\",\"btn-close\":\"btn-close\",\"fa-eye\":\"fa-eye\",\"fa-list-ul\":\"fa-list-ul\",\"facebook-comment-wrapper\":\"facebook-comment-wrapper\",\"rt\":\"rt\",\"fa-cogs\":\"fa-cogs\",\"fa-bar-chart-o\":\"fa-bar-chart-o\",\"fa-question\":\"fa-question\",\"fa-pause-circle-o\":\"fa-pause-circle-o\",\"btn-social\":\"btn-social\",\"fa-volume-down\":\"fa-volume-down\",\"fa-map-pin\":\"fa-map-pin\",\"expander\":\"expander\",\"fa-file\":\"fa-file\",\"fa-check\":\"fa-check\",\"fa-reply\":\"fa-reply\",\"fa-hand-spock-o\":\"fa-hand-spock-o\",\"fa-unlock-alt\":\"fa-unlock-alt\",\"fa-drivers-license-o\":\"fa-drivers-license-o\",\"card-content\":\"card-content\",\"fa-compress\":\"fa-compress\",\"gp\":\"gp\",\"affix\":\"affix\",\"fa-inbox\":\"fa-inbox\",\"fa-cart-arrow-down\":\"fa-cart-arrow-down\",\"fa-reddit-alien\":\"fa-reddit-alien\",\"fa-behance\":\"fa-behance\",\"fa-calendar\":\"fa-calendar\",\"recent-firm-news-title\":\"recent-firm-news-title\",\"fa-google-plus-square\":\"fa-google-plus-square\",\"fa-wheelchair-alt\":\"fa-wheelchair-alt\",\"follow-row\":\"follow-row\",\"fa-folder-open\":\"fa-folder-open\",\"fa-yen\":\"fa-yen\",\"fa-spoon\":\"fa-spoon\",\"fa-ils\":\"fa-ils\",\"fa-trello\":\"fa-trello\",\"fa-envelope-open\":\"fa-envelope-open\",\"fa-cc-discover\":\"fa-cc-discover\",\"fa-mobile-phone\":\"fa-mobile-phone\",\"fa-comment\":\"fa-comment\",\"fa-eercast\":\"fa-eercast\",\"nav\":\"nav\",\"fa-cc-amex\":\"fa-cc-amex\",\"fa-archive\":\"fa-archive\",\"fa-sun-o\":\"fa-sun-o\",\"fa-thermometer-1\":\"fa-thermometer-1\",\"results-loader-container\":\"results-loader-container\",\"fa-arrows\":\"fa-arrows\",\"fa-quote-right\":\"fa-quote-right\",\"fa-universal-access\":\"fa-universal-access\",\"fa-train\":\"fa-train\",\"hidden-lg\":\"hidden-lg\",\"network\":\"network\",\"fa-pie-chart\":\"fa-pie-chart\",\"fa-buysellads\":\"fa-buysellads\",\"fa-taxi\":\"fa-taxi\",\"footer-subnav-links\":\"footer-subnav-links\",\"fa-sellsy\":\"fa-sellsy\",\"fa-glide-g\":\"fa-glide-g\",\"fa-retweet\":\"fa-retweet\",\"fa-text-width\":\"fa-text-width\",\"fa-rupee\":\"fa-rupee\",\"fa-ellipsis-h\":\"fa-ellipsis-h\",\"fa-folder-open-o\":\"fa-folder-open-o\",\"fa-photo\":\"fa-photo\",\"fa-object-group\":\"fa-object-group\",\"fa-unlink\":\"fa-unlink\",\"pin\":\"pin\",\"fa-slack\":\"fa-slack\",\"fa-twitter\":\"fa-twitter\",\"hs_yes_sign_me_up_for_the_newsletter_\":\"hs_yes_sign_me_up_for_the_newsletter_\",\"fa-caret-left\":\"fa-caret-left\",\"fa-exclamation\":\"fa-exclamation\",\"fa-file-powerpoint-o\":\"fa-file-powerpoint-o\",\"fa-eyedropper\":\"fa-eyedropper\",\"fa-contao\":\"fa-contao\",\"fa-search\":\"fa-search\",\"fa-exclamation-triangle\":\"fa-exclamation-triangle\",\"hero-unit\":\"hero-unit\",\"fa-twitter-square\":\"fa-twitter-square\",\"fa-plug\":\"fa-plug\",\"fa-dashboard\":\"fa-dashboard\",\"dropdown-toggle\":\"dropdown-toggle\",\"fa-file-word-o\":\"fa-file-word-o\",\"fa-eye-slash\":\"fa-eye-slash\",\"fa-xing\":\"fa-xing\",\"fa-thermometer-half\":\"fa-thermometer-half\",\"fa-handshake-o\":\"fa-handshake-o\",\"fa-chevron-circle-left\":\"fa-chevron-circle-left\",\"fa-glass\":\"fa-glass\",\"desktop\":\"desktop\",\"fa-eur\":\"fa-eur\",\"fa-braille\":\"fa-braille\",\"fa-floppy-o\":\"fa-floppy-o\",\"card-top\":\"card-top\",\"fa-skype\":\"fa-skype\",\"fa-volume-up\":\"fa-volume-up\",\"fa-cc-stripe\":\"fa-cc-stripe\",\"fa-hourglass-end\":\"fa-hourglass-end\",\"stats-header\":\"stats-header\",\"fa-microphone\":\"fa-microphone\",\"fa-5x\":\"fa-5x\",\"close\":\"close\",\"fa-font\":\"fa-font\",\"fa-meetup\":\"fa-meetup\",\"fa-arrows-alt\":\"fa-arrows-alt\",\"fa-pencil-square-o\":\"fa-pencil-square-o\",\"fa-hdd-o\":\"fa-hdd-o\",\"fa-home\":\"fa-home\",\"fa-road\":\"fa-road\",\"fa-crosshairs\":\"fa-crosshairs\",\"nav-logo\":\"nav-logo\",\"fa-building\":\"fa-building\",\"recent-firm-news-details\":\"recent-firm-news-details\",\"featured-result\":\"featured-result\",\"fa-level-up\":\"fa-level-up\",\"fa-stop-circle\":\"fa-stop-circle\",\"expandable\":\"expandable\",\"fa-id-card-o\":\"fa-id-card-o\",\"fa-thermometer-empty\":\"fa-thermometer-empty\",\"fa-chevron-right\":\"fa-chevron-right\",\"fa-file-excel-o\":\"fa-file-excel-o\",\"fa-plane\":\"fa-plane\",\"fa-venus-double\":\"fa-venus-double\",\"address\":\"address\",\"fa-check-circle\":\"fa-check-circle\",\"fa-envelope-o\":\"fa-envelope-o\",\"fa-toggle-up\":\"fa-toggle-up\",\"fa-snapchat-ghost\":\"fa-snapchat-ghost\",\"fa-try\":\"fa-try\",\"fa-file-photo-o\":\"fa-file-photo-o\",\"result-mobile\":\"result-mobile\",\"image-column\":\"image-column\",\"fa-long-arrow-down\":\"fa-long-arrow-down\",\"fa-plus\":\"fa-plus\",\"fa-battery-quarter\":\"fa-battery-quarter\",\"fa-hourglass-start\":\"fa-hourglass-start\",\"fa-line-chart\":\"fa-line-chart\",\"open\":\"open\",\"double-wide\":\"double-wide\",\"fa-history\":\"fa-history\",\"fa-folder\":\"fa-folder\",\"btn-dark\":\"btn-dark\",\"fa-microchip\":\"fa-microchip\",\"fa-bomb\":\"fa-bomb\",\"pointer-wrapper\":\"pointer-wrapper\",\"fa-tint\":\"fa-tint\",\"fa-low-vision\":\"fa-low-vision\",\"fa-snapchat-square\":\"fa-snapchat-square\",\"caret\":\"caret\",\"fa-bolt\":\"fa-bolt\",\"fa-undo\":\"fa-undo\",\"settlements-stats\":\"settlements-stats\",\"fa-arrow-up\":\"fa-arrow-up\",\"search-expand-md\":\"search-expand-md\",\"fa-pagelines\":\"fa-pagelines\",\"fa-heart-o\":\"fa-heart-o\",\"fa-send-o\":\"fa-send-o\",\"fa-television\":\"fa-television\",\"fa-support\":\"fa-support\",\"fa-opencart\":\"fa-opencart\",\"fa-diamond\":\"fa-diamond\",\"modal-title\":\"modal-title\",\"fa-battery\":\"fa-battery\",\"fa-500px\":\"fa-500px\",\"fa-film\":\"fa-film\",\"fa-book\":\"fa-book\",\"fa-window-close\":\"fa-window-close\",\"fa-comments\":\"fa-comments\",\"fa-themeisle\":\"fa-themeisle\",\"more-related-articles\":\"more-related-articles\",\"fa-suitcase\":\"fa-suitcase\",\"fa-clipboard\":\"fa-clipboard\",\"fa-check-square-o\":\"fa-check-square-o\",\"links-row\":\"links-row\",\"fa-tree\":\"fa-tree\",\"search-expand-sm\":\"search-expand-sm\",\"fa-medium\":\"fa-medium\",\"fa-location-arrow\":\"fa-location-arrow\",\"fa-user-plus\":\"fa-user-plus\",\"fa-stack\":\"fa-stack\",\"fa-krw\":\"fa-krw\",\"result-header-white\":\"result-header-white\",\"fa-hand-scissors-o\":\"fa-hand-scissors-o\",\"fa-houzz\":\"fa-houzz\",\"fa-volume-control-phone\":\"fa-volume-control-phone\",\"fa-clock-o\":\"fa-clock-o\",\"fa-fire\":\"fa-fire\",\"fa-file-text-o\":\"fa-file-text-o\",\"fa-arrow-circle-o-left\":\"fa-arrow-circle-o-left\",\"fa-hand-o-up\":\"fa-hand-o-up\",\"fa-lg\":\"fa-lg\",\"fa-life-buoy\":\"fa-life-buoy\",\"fa-align-right\":\"fa-align-right\",\"fa-arrows-v\":\"fa-arrows-v\",\"fa-viadeo\":\"fa-viadeo\",\"fa-vcard-o\":\"fa-vcard-o\",\"testimonials-items\":\"testimonials-items\",\"fa-hand-peace-o\":\"fa-hand-peace-o\",\"sidebar-form\":\"sidebar-form\",\"fa-safari\":\"fa-safari\",\"fa-reddit-square\":\"fa-reddit-square\",\"fa-vimeo\":\"fa-vimeo\",\"fa-files-o\":\"fa-files-o\",\"fa-file-text\":\"fa-file-text\",\"fa-copyright\":\"fa-copyright\",\"fa-id-card\":\"fa-id-card\",\"fa-chain\":\"fa-chain\",\"fa-dashcube\":\"fa-dashcube\",\"fa-facebook-official\":\"fa-facebook-official\",\"fa-pull-left\":\"fa-pull-left\",\"fa-pied-piper-pp\":\"fa-pied-piper-pp\",\"fa-audio-description\":\"fa-audio-description\",\"has-results\":\"has-results\",\"fa-cog\":\"fa-cog\",\"fa-venus\":\"fa-venus\",\"fa-odnoklassniki-square\":\"fa-odnoklassniki-square\",\"fa-angle-down\":\"fa-angle-down\",\"fa-minus-circle\":\"fa-minus-circle\",\"fa-drupal\":\"fa-drupal\",\"fa-dribbble\":\"fa-dribbble\",\"btn-red-centered\":\"btn-red-centered\",\"fa-file-video-o\":\"fa-file-video-o\",\"fa-industry\":\"fa-industry\",\"fa-user-md\":\"fa-user-md\",\"fa-pull-right\":\"fa-pull-right\",\"fa-folder-o\":\"fa-folder-o\",\"fa-fire-extinguisher\":\"fa-fire-extinguisher\",\"fa-shopping-basket\":\"fa-shopping-basket\",\"fa-yc-square\":\"fa-yc-square\",\"show\":\"show\",\"fa-life-saver\":\"fa-life-saver\",\"fa-square-o\":\"fa-square-o\",\"fa-etsy\":\"fa-etsy\",\"pull-left\":\"pull-left\",\"fa-resistance\":\"fa-resistance\",\"fa-bell-o\":\"fa-bell-o\",\"fa-skyatlas\":\"fa-skyatlas\",\"fa-battery-3\":\"fa-battery-3\",\"fa-quote-left\":\"fa-quote-left\",\"mm-header-container\":\"mm-header-container\",\"nav-desktop\":\"nav-desktop\",\"fa-toggle-down\":\"fa-toggle-down\",\"fa-shield\":\"fa-shield\",\"fa-step-forward\":\"fa-step-forward\",\"fa-commenting-o\":\"fa-commenting-o\",\"fa-camera-retro\":\"fa-camera-retro\",\"fa-paper-plane\":\"fa-paper-plane\",\"fa-briefcase\":\"fa-briefcase\",\"fa-digg\":\"fa-digg\",\"centered-button\":\"centered-button\",\"fa-thumbs-o-up\":\"fa-thumbs-o-up\",\"fa-behance-square\":\"fa-behance-square\",\"fa-italic\":\"fa-italic\",\"stats-clients\":\"stats-clients\",\"col-md-4\":\"col-md-4\",\"fa-sort-alpha-asc\":\"fa-sort-alpha-asc\",\"fa-step-backward\":\"fa-step-backward\",\"fb\":\"fb\",\"fa-flip-vertical\":\"fa-flip-vertical\",\"fa-stack-1x\":\"fa-stack-1x\",\"fa-sitemap\":\"fa-sitemap\",\"clicktocall\":\"clicktocall\",\"header-bar\":\"header-bar\",\"fa-border\":\"fa-border\",\"fa-file-image-o\":\"fa-file-image-o\",\"fa-asl-interpreting\":\"fa-asl-interpreting\",\"fa-pencil-square\":\"fa-pencil-square\",\"tw\":\"tw\",\"fa-linux\":\"fa-linux\",\"fa-wordpress\":\"fa-wordpress\",\"fa-comments-o\":\"fa-comments-o\",\"fa-toggle-on\":\"fa-toggle-on\",\"fa-cloud\":\"fa-cloud\",\"result-right\":\"result-right\",\"inputs-list\":\"inputs-list\",\"fa-user-secret\":\"fa-user-secret\",\"btn-fb\":\"btn-fb\",\"fa-deviantart\":\"fa-deviantart\",\"fa-signal\":\"fa-signal\",\"fa-rotate-right\":\"fa-rotate-right\",\"testimonials-header\":\"testimonials-header\",\"fa-star-o\":\"fa-star-o\",\"fa-angellist\":\"fa-angellist\",\"fa-tumblr-square\":\"fa-tumblr-square\",\"fa-cny\":\"fa-cny\",\"fa-battery-0\":\"fa-battery-0\",\"visible-lg\":\"visible-lg\",\"fa-list\":\"fa-list\",\"fa-lemon-o\":\"fa-lemon-o\",\"fa-fort-awesome\":\"fa-fort-awesome\",\"fa-chevron-circle-up\":\"fa-chevron-circle-up\",\"fa-fighter-jet\":\"fa-fighter-jet\",\"item-container\":\"item-container\",\"stats-resolved\":\"stats-resolved\",\"btn-yt\":\"btn-yt\",\"fa-cc-jcb\":\"fa-cc-jcb\",\"fa-deaf\":\"fa-deaf\",\"fa-bookmark-o\":\"fa-bookmark-o\",\"fa-arrow-circle-down\":\"fa-arrow-circle-down\",\"fa-warning\":\"fa-warning\",\"fa-empire\":\"fa-empire\",\"fa-turkish-lira\":\"fa-turkish-lira\",\"fa-long-arrow-up\":\"fa-long-arrow-up\",\"mm-search-input\":\"mm-search-input\",\"fa-steam-square\":\"fa-steam-square\",\"fa-chevron-left\":\"fa-chevron-left\",\"fa-facebook-f\":\"fa-facebook-f\",\"fa-transgender-alt\":\"fa-transgender-alt\",\"btn-ghost\":\"btn-ghost\",\"form-blurb\":\"form-blurb\",\"fa-tag\":\"fa-tag\",\"fa-bath\":\"fa-bath\",\"fa-cutlery\":\"fa-cutlery\",\"footer-subnav\":\"footer-subnav\",\"fa-shekel\":\"fa-shekel\",\"fa-flag\":\"fa-flag\",\"fa-fax\":\"fa-fax\",\"fa-envira\":\"fa-envira\",\"go-to-top-container\":\"go-to-top-container\",\"recent-firm-news-header\":\"recent-firm-news-header\",\"fa-shopping-cart\":\"fa-shopping-cart\",\"fa-file-o\":\"fa-file-o\",\"fa-thermometer-4\":\"fa-thermometer-4\",\"fa-angle-right\":\"fa-angle-right\",\"fa-mars-stroke-h\":\"fa-mars-stroke-h\",\"fa-user-circle-o\":\"fa-user-circle-o\",\"fa-arrow-down\":\"fa-arrow-down\",\"popup-contact-form\":\"popup-contact-form\",\"fa-life-ring\":\"fa-life-ring\",\"fa-ge\":\"fa-ge\",\"hs-button\":\"hs-button\",\"fa-battery-2\":\"fa-battery-2\",\"fa-address-book\":\"fa-address-book\",\"fa-caret-square-o-down\":\"fa-caret-square-o-down\",\"fa-google-wallet\":\"fa-google-wallet\",\"fa-hand-grab-o\":\"fa-hand-grab-o\",\"fa-barcode\":\"fa-barcode\",\"fa-thermometer-0\":\"fa-thermometer-0\",\"fa-header\":\"fa-header\",\"fa-beer\":\"fa-beer\",\"fa-inr\":\"fa-inr\",\"fa-hourglass-1\":\"fa-hourglass-1\",\"fa-minus-square\":\"fa-minus-square\",\"fa-reddit\":\"fa-reddit\",\"num\":\"num\",\"fa-renren\":\"fa-renren\",\"fa-backward\":\"fa-backward\",\"contact-card\":\"contact-card\",\"fa-calendar-check-o\":\"fa-calendar-check-o\",\"fa-gamepad\":\"fa-gamepad\",\"fa-calendar-plus-o\":\"fa-calendar-plus-o\",\"hs-richtext\":\"hs-richtext\",\"fa-caret-up\":\"fa-caret-up\",\"fa-file-code-o\":\"fa-file-code-o\",\"fa-star-half-empty\":\"fa-star-half-empty\",\"fa-youtube\":\"fa-youtube\",\"go-top\":\"go-top\",\"fa-bell\":\"fa-bell\",\"fa-telegram\":\"fa-telegram\",\"fa-viadeo-square\":\"fa-viadeo-square\",\"fa-external-link\":\"fa-external-link\",\"call-us\":\"call-us\",\"fa-cube\":\"fa-cube\",\"fa-forumbee\":\"fa-forumbee\",\"fa-snapchat\":\"fa-snapchat\",\"fa-graduation-cap\":\"fa-graduation-cap\",\"fa-arrow-right\":\"fa-arrow-right\",\"stats-attorneys\":\"stats-attorneys\",\"fa-flash\":\"fa-flash\",\"fa-smile-o\":\"fa-smile-o\",\"fa-headphones\":\"fa-headphones\",\"fa-instagram\":\"fa-instagram\",\"most-popular\":\"most-popular\",\"mm-sortable-table\":\"mm-sortable-table\",\"fa-yelp\":\"fa-yelp\",\"fa-y-combinator-square\":\"fa-y-combinator-square\",\"fa-hand-stop-o\":\"fa-hand-stop-o\",\"fa-edge\":\"fa-edge\",\"hs-form-field\":\"hs-form-field\",\"hs_submit\":\"hs_submit\",\"fa-cubes\":\"fa-cubes\",\"fa-pause\":\"fa-pause\",\"fa-ban\":\"fa-ban\",\"fa-rouble\":\"fa-rouble\",\"featured-link\":\"featured-link\",\"dropdown\":\"dropdown\",\"fa-tumblr\":\"fa-tumblr\",\"fa-unsorted\":\"fa-unsorted\",\"navbar-header\":\"navbar-header\",\"fa-rmb\":\"fa-rmb\",\"expanded\":\"expanded\",\"fa-window-close-o\":\"fa-window-close-o\",\"fa-circle-o-notch\":\"fa-circle-o-notch\",\"fa-coffee\":\"fa-coffee\",\"fa-hand-o-down\":\"fa-hand-o-down\",\"fa-paragraph\":\"fa-paragraph\",\"fa-gitlab\":\"fa-gitlab\",\"phone\":\"phone\",\"fa-mars-stroke-v\":\"fa-mars-stroke-v\",\"fa-stethoscope\":\"fa-stethoscope\",\"fa-quora\":\"fa-quora\",\"fa-institution\":\"fa-institution\",\"fa-stack-exchange\":\"fa-stack-exchange\",\"fa-shirtsinbulk\":\"fa-shirtsinbulk\",\"fa-thermometer-quarter\":\"fa-thermometer-quarter\",\"fa-cc\":\"fa-cc\",\"fa-h-square\":\"fa-h-square\",\"fa-leaf\":\"fa-leaf\",\"fa-compass\":\"fa-compass\",\"related-article-box\":\"related-article-box\",\"fa-window-restore\":\"fa-window-restore\",\"fa-github\":\"fa-github\",\"fa-times-rectangle\":\"fa-times-rectangle\",\"mm-news-articles-basic\":\"mm-news-articles-basic\",\"fa-print\":\"fa-print\",\"fa-wikipedia-w\":\"fa-wikipedia-w\",\"fa-css3\":\"fa-css3\",\"row-testimonials\":\"row-testimonials\",\"fa-intersex\":\"fa-intersex\",\"fa-bell-slash-o\":\"fa-bell-slash-o\",\"fa-firefox\":\"fa-firefox\",\"fa-hard-of-hearing\":\"fa-hard-of-hearing\",\"fa-wheelchair\":\"fa-wheelchair\",\"fa-picture-o\":\"fa-picture-o\",\"social\":\"social\",\"testimonials-see-more\":\"testimonials-see-more\",\"fa-bars\":\"fa-bars\",\"fa-get-pocket\":\"fa-get-pocket\",\"fa-pause-circle\":\"fa-pause-circle\",\"fa-exclamation-circle\":\"fa-exclamation-circle\",\"fa-question-circle-o\":\"fa-question-circle-o\",\"fa-modx\":\"fa-modx\",\"fa-hacker-news\":\"fa-hacker-news\",\"fa-trash-o\":\"fa-trash-o\",\"fa-forward\":\"fa-forward\",\"fa-fast-forward\":\"fa-fast-forward\",\"fa-google-plus-official\":\"fa-google-plus-official\",\"fa-rss-square\":\"fa-rss-square\",\"ca-logo\":\"ca-logo\",\"fa-child\":\"fa-child\",\"fa-spinner\":\"fa-spinner\",\"fa-rotate-left\":\"fa-rotate-left\",\"fa-balance-scale\":\"fa-balance-scale\",\"btn-play\":\"btn-play\",\"fa-music\":\"fa-music\",\"fa-rub\":\"fa-rub\",\"fa-internet-explorer\":\"fa-internet-explorer\",\"fa-sliders\":\"fa-sliders\",\"more-related-articles-container\":\"more-related-articles-container\",\"row\":\"row\",\"fa-times-circle-o\":\"fa-times-circle-o\",\"fa-car\":\"fa-car\",\"fa-paint-brush\":\"fa-paint-brush\",\"fa-tty\":\"fa-tty\",\"in\":\"in\",\"fa-bitbucket-square\":\"fa-bitbucket-square\",\"fa-rotate-90\":\"fa-rotate-90\",\"fa-envelope-square\":\"fa-envelope-square\",\"fa-lightbulb-o\":\"fa-lightbulb-o\",\"fa-file-zip-o\":\"fa-file-zip-o\",\"footer-form-wrapper\":\"footer-form-wrapper\",\"fa-tencent-weibo\":\"fa-tencent-weibo\",\"fa-dot-circle-o\":\"fa-dot-circle-o\",\"fa-truck\":\"fa-truck\",\"fa-male\":\"fa-male\",\"fa-microphone-slash\":\"fa-microphone-slash\",\"fa-umbrella\":\"fa-umbrella\",\"fa-hourglass-2\":\"fa-hourglass-2\",\"fa-genderless\":\"fa-genderless\",\"basic-see-more\":\"basic-see-more\",\"fa-lastfm-square\":\"fa-lastfm-square\",\"fa-phone\":\"fa-phone\",\"fa-whatsapp\":\"fa-whatsapp\",\"fa-signing\":\"fa-signing\",\"fa-university\":\"fa-university\",\"fa-battery-full\":\"fa-battery-full\",\"fa-magic\":\"fa-magic\",\"fa-html5\":\"fa-html5\",\"fa-trademark\":\"fa-trademark\",\"star-black\":\"star-black\",\"fa-sort\":\"fa-sort\",\"fa-envelope-open-o\":\"fa-envelope-open-o\",\"fa-gears\":\"fa-gears\",\"star-orange\":\"star-orange\",\"fa-bluetooth-b\":\"fa-bluetooth-b\",\"icon-bar\":\"icon-bar\",\"fa-file-pdf-o\":\"fa-file-pdf-o\",\"fa-list-alt\":\"fa-list-alt\",\"fa-yoast\":\"fa-yoast\",\"grouped\":\"grouped\",\"recent-firm-news-description\":\"recent-firm-news-description\",\"fa-language\":\"fa-language\",\"fa-long-arrow-right\":\"fa-long-arrow-right\",\"fa-send\":\"fa-send\",\"fa-refresh\":\"fa-refresh\",\"fa-search-minus\":\"fa-search-minus\",\"fa-hospital-o\":\"fa-hospital-o\",\"fa-jsfiddle\":\"fa-jsfiddle\",\"items-2\":\"items-2\",\"fa-spotify\":\"fa-spotify\",\"fa-shower\":\"fa-shower\",\"fa-flag-checkered\":\"fa-flag-checkered\",\"fa-podcast\":\"fa-podcast\",\"see-all\":\"see-all\",\"fa-imdb\":\"fa-imdb\",\"fa-bookmark\":\"fa-bookmark\",\"fa-level-down\":\"fa-level-down\",\"fa-wrench\":\"fa-wrench\",\"fa-mixcloud\":\"fa-mixcloud\",\"fa-outdent\":\"fa-outdent\",\"fa-share-alt-square\":\"fa-share-alt-square\",\"fa-lock\":\"fa-lock\",\"fa-gratipay\":\"fa-gratipay\",\"fa-table\":\"fa-table\",\"fa-flip-horizontal\":\"fa-flip-horizontal\",\"fa-plus-square\":\"fa-plus-square\",\"fa-transgender\":\"fa-transgender\",\"actions\":\"actions\",\"fa-bullseye\":\"fa-bullseye\",\"fa-star-half-o\":\"fa-star-half-o\",\"fa\":\"fa\",\"fa-female\":\"fa-female\",\"fa-angle-double-right\":\"fa-angle-double-right\",\"fa-free-code-camp\":\"fa-free-code-camp\",\"fa-cart-plus\":\"fa-cart-plus\",\"fa-rotate-180\":\"fa-rotate-180\",\"fa-calendar-o\":\"fa-calendar-o\",\"fa-flask\":\"fa-flask\",\"fa-bandcamp\":\"fa-bandcamp\",\"fa-caret-down\":\"fa-caret-down\",\"fa-hourglass\":\"fa-hourglass\",\"social-share-flat-wrapper\":\"social-share-flat-wrapper\",\"fa-pinterest-square\":\"fa-pinterest-square\",\"verdicts-and-settlements\":\"verdicts-and-settlements\",\"fa-paper-plane-o\":\"fa-paper-plane-o\",\"fa-fa\":\"fa-fa\",\"fa-mars-stroke\":\"fa-mars-stroke\",\"fa-save\":\"fa-save\",\"fa-upload\":\"fa-upload\",\"fa-cc-mastercard\":\"fa-cc-mastercard\",\"fa-wpexplorer\":\"fa-wpexplorer\",\"fa-cloud-upload\":\"fa-cloud-upload\",\"fa-minus\":\"fa-minus\",\"recent-firm-news-image\":\"recent-firm-news-image\",\"fa-tripadvisor\":\"fa-tripadvisor\",\"fa-deafness\":\"fa-deafness\",\"btn-close-expander\":\"btn-close-expander\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sass/pages/verdict-index.scss\n// module id = 79\n// module chunks = 5","'use strict';\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\nPromise.prototype.done = function (onFulfilled, onRejected) {\n var self = arguments.length ? this.then.apply(this, arguments) : this;\n self.then(null, function (err) {\n setTimeout(function () {\n throw err;\n }, 0);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/done.js\n// module id = 8\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19","'use strict';\n\n//This file contains the ES6 extensions to the core Promises/A+ API\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nvar TRUE = valuePromise(true);\nvar FALSE = valuePromise(false);\nvar NULL = valuePromise(null);\nvar UNDEFINED = valuePromise(undefined);\nvar ZERO = valuePromise(0);\nvar EMPTYSTRING = valuePromise('');\n\nfunction valuePromise(value) {\n var p = new Promise(Promise._61);\n p._65 = 1;\n p._55 = value;\n return p;\n}\nPromise.resolve = function (value) {\n if (value instanceof Promise) return value;\n\n if (value === null) return NULL;\n if (value === undefined) return UNDEFINED;\n if (value === true) return TRUE;\n if (value === false) return FALSE;\n if (value === 0) return ZERO;\n if (value === '') return EMPTYSTRING;\n\n if (typeof value === 'object' || typeof value === 'function') {\n try {\n var then = value.then;\n if (typeof then === 'function') {\n return new Promise(then.bind(value));\n }\n } catch (ex) {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n }\n }\n return valuePromise(value);\n};\n\nPromise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n if (val instanceof Promise && val.then === Promise.prototype.then) {\n while (val._65 === 3) {\n val = val._55;\n }\n if (val._65 === 1) return res(i, val._55);\n if (val._65 === 2) reject(val._55);\n val.then(function (val) {\n res(i, val);\n }, reject);\n return;\n } else {\n var then = val.then;\n if (typeof then === 'function') {\n var p = new Promise(then.bind(val));\n p.then(function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n values.forEach(function(value){\n Promise.resolve(value).then(resolve, reject);\n });\n });\n};\n\n/* Prototype Methods */\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/promise/lib/es6-extensions.js\n// module id = 9\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19"],"sourceRoot":""}