--- a/readme.html
+++ b/readme.html
@@ -9,7 +9,7 @@
 <body>
 <h1 id="logo">
 	<a href="https://wordpress.org/"><img alt="WordPress" src="wp-admin/images/wordpress-logo.png" /></a>
-	<br /> Version 4.1.1
+	<br /> Version 4.1.2
 </h1>
 <p style="text-align: center">Semantic Personal Publishing Platform</p>
 
--- a/wp-admin/about.php
+++ b/wp-admin/about.php
@@ -42,7 +42,11 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
 </h2>
 
 <div class="changelog point-releases">
-	<h3><?php echo _n( 'Maintenance Release', 'Maintenance Releases', 1 ); ?></h3>
+	<h3><?php echo _n( 'Maintenance and Security Release', 'Maintenance and Security Releases', 2 ); ?></h3>
+	<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
+         '<strong>Version %1$s</strong> addressed some security issues.', 8 ), '4.1.2' ); ?>
+		<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'http://codex.wordpress.org/Version_4.1.2' ); ?>
+ 	</p>
 	<p><?php printf( _n( '<strong>Version %1$s</strong> addressed %2$s bug.',
          '<strong>Version %1$s</strong> addressed %2$s bugs.', 21 ), '4.1.1', number_format_i18n( 21 ) ); ?>
 		<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'http://codex.wordpress.org/Version_4.1.1' ); ?>
--- a/wp-admin/includes/class-wp-comments-list-table.php
+++ b/wp-admin/includes/class-wp-comments-list-table.php
@@ -554,9 +554,9 @@ class WP_Comments_List_Table extends WP_List_Table {
 
 		if ( current_user_can( 'edit_post', $post->ID ) ) {
 			$post_link = "<a href='" . get_edit_post_link( $post->ID ) . "'>";
-			$post_link .= get_the_title( $post->ID ) . '</a>';
+			$post_link .= esc_html( get_the_title( $post->ID ) ) . '</a>';
 		} else {
-			$post_link = get_the_title( $post->ID );
+			$post_link = esc_html( get_the_title( $post->ID ) );
 		}
 
 		echo '<div class="response-links"><span class="post-com-count-wrapper">';
--- a/wp-admin/includes/dashboard.php
+++ b/wp-admin/includes/dashboard.php
@@ -518,7 +518,7 @@ function wp_dashboard_recent_drafts( $drafts = false ) {
 function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) {
 	$GLOBALS['comment'] =& $comment;
 
-	$comment_post_title = strip_tags(get_the_title( $comment->comment_post_ID ));
+	$comment_post_title = _draft_or_post_title( $comment->comment_post_ID );
 
 	if ( current_user_can( 'edit_post', $comment->comment_post_ID ) ) {
 		$comment_post_url = get_edit_post_link( $comment->comment_post_ID );
--- a/wp-admin/includes/template.php
+++ b/wp-admin/includes/template.php
@@ -1505,7 +1505,7 @@ function _draft_or_post_title( $post = 0 ) {
 	$title = get_the_title( $post );
 	if ( empty( $title ) )
 		$title = __( '(no title)' );
-	return $title;
+	return esc_html( $title );
 }
 
 /**
--- a/wp-admin/js/nav-menu.js
+++ b/wp-admin/js/nav-menu.js
@@ -453,14 +453,14 @@ var wpNavMenu;
 				if ( ! isPrimaryMenuItem ) {
 					thisLink = menuItem.find( '.menus-move-left' ),
 					thisLinkText = menus.outFrom.replace( '%s', prevItemNameLeft );
-					thisLink.prop( 'title', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).html( thisLinkText ).css( 'display', 'inline' );
+					thisLink.prop( 'title', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).text( thisLinkText ).css( 'display', 'inline' );
 				}
 
 				if ( 0 !== position ) {
 					if ( menuItem.find( '.menu-item-data-parent-id' ).val() !== menuItem.prev().find( '.menu-item-data-db-id' ).val() ) {
 						thisLink = menuItem.find( '.menus-move-right' ),
 						thisLinkText = menus.under.replace( '%s', prevItemNameRight );
-						thisLink.prop( 'title', menus.moveUnder.replace( '%s', prevItemNameRight ) ).html( thisLinkText ).css( 'display', 'inline' );
+						thisLink.prop( 'title', menus.moveUnder.replace( '%s', prevItemNameRight ) ).text( thisLinkText ).css( 'display', 'inline' );
 					}
 				}
 
@@ -482,7 +482,7 @@ var wpNavMenu;
 					title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$s', parentItemName );
 				}
 
-				$this.prop('title', title).html( title );
+				$this.prop('title', title).text( title );
 			});
 		},
 
--- a/wp-admin/js/nav-menu.min.js
+++ b/wp-admin/js/nav-menu.min.js
@@ -1 +1 @@
-var wpNavMenu;!function(a){var b;b=wpNavMenu={options:{menuItemDepthPerLevel:30,globalMaxDepth:11},menuList:void 0,targetList:void 0,menusChanged:!1,isRTL:!("undefined"==typeof isRtl||!isRtl),negateIfRTL:"undefined"!=typeof isRtl&&isRtl?-1:1,init:function(){b.menuList=a("#menu-to-edit"),b.targetList=b.menuList,this.jQueryExtensions(),this.attachMenuEditListeners(),this.setupInputWithDefaultTitle(),this.attachQuickSearchListeners(),this.attachThemeLocationsListeners(),this.attachTabsPanelListeners(),this.attachUnsavedChangesListener(),b.menuList.length&&this.initSortables(),menus.oneThemeLocationNoMenus&&a("#posttype-page").addSelectedToMenu(b.addMenuItemToBottom),this.initManageLocations(),this.initAccessibility(),this.initToggles(),this.initPreviewing()},jQueryExtensions:function(){a.fn.extend({menuItemDepth:function(){var a=this.eq(0).css(b.isRTL?"margin-right":"margin-left");return b.pxToDepth(a&&-1!=a.indexOf("px")?a.slice(0,-2):0)},updateDepthClass:function(b,c){return this.each(function(){var d=a(this);c=c||d.menuItemDepth(),a(this).removeClass("menu-item-depth-"+c).addClass("menu-item-depth-"+b)})},shiftDepthClass:function(b){return this.each(function(){var c=a(this),d=c.menuItemDepth();a(this).removeClass("menu-item-depth-"+d).addClass("menu-item-depth-"+(d+b))})},childMenuItems:function(){var b=a();return this.each(function(){for(var c=a(this),d=c.menuItemDepth(),e=c.next();e.length&&e.menuItemDepth()>d;)b=b.add(e),e=e.next()}),b},shiftHorizontally:function(b){return this.each(function(){var c=a(this),d=c.menuItemDepth(),e=d+b;c.moveHorizontally(e,d)})},moveHorizontally:function(b,c){return this.each(function(){var d=a(this),e=d.childMenuItems(),f=b-c,g=d.find(".is-submenu");d.updateDepthClass(b,c).updateParentMenuItemDBId(),e&&e.each(function(){var b=a(this),c=b.menuItemDepth(),d=c+f;b.updateDepthClass(d,c).updateParentMenuItemDBId()}),0===b?g.hide():g.show()})},updateParentMenuItemDBId:function(){return this.each(function(){var b=a(this),c=b.find(".menu-item-data-parent-id"),d=parseInt(b.menuItemDepth(),10),e=d-1,f=b.prevAll(".menu-item-depth-"+e).first();c.val(0===d?0:f.find(".menu-item-data-db-id").val())})},hideAdvancedMenuItemFields:function(){return this.each(function(){var b=a(this);a(".hide-column-tog").not(":checked").each(function(){b.find(".field-"+a(this).val()).addClass("hidden-field")})})},addSelectedToMenu:function(c){return 0===a("#menu-to-edit").length?!1:this.each(function(){var d=a(this),e={},f=d.find(menus.oneThemeLocationNoMenus&&0===d.find(".tabs-panel-active .categorychecklist li input:checked").length?'#page-all li input[type="checkbox"]':".tabs-panel-active .categorychecklist li input:checked"),g=/menu-item\[([^\]]*)/;return c=c||b.addMenuItemToBottom,f.length?(d.find(".spinner").show(),a(f).each(function(){var d=a(this),f=g.exec(d.attr("name")),h="undefined"==typeof f[1]?0:parseInt(f[1],10);this.className&&-1!=this.className.indexOf("add-to-top")&&(c=b.addMenuItemToTop),e[h]=d.closest("li").getItemData("add-menu-item",h)}),void b.addItemToMenu(e,c,function(){f.removeAttr("checked"),d.find(".spinner").hide()})):!1})},getItemData:function(a,b){a=a||"menu-item";var c,d={},e=["menu-item-db-id","menu-item-object-id","menu-item-object","menu-item-parent-id","menu-item-position","menu-item-type","menu-item-title","menu-item-url","menu-item-description","menu-item-attr-title","menu-item-target","menu-item-classes","menu-item-xfn"];return b||"menu-item"!=a||(b=this.find(".menu-item-data-db-id").val()),b?(this.find("input").each(function(){var f;for(c=e.length;c--;)"menu-item"==a?f=e[c]+"["+b+"]":"add-menu-item"==a&&(f="menu-item["+b+"]["+e[c]+"]"),this.name&&f==this.name&&(d[e[c]]=this.value)}),d):d},setItemData:function(b,c,d){return c=c||"menu-item",d||"menu-item"!=c||(d=a(".menu-item-data-db-id",this).val()),d?(this.find("input").each(function(){var e,f=a(this);a.each(b,function(a,b){"menu-item"==c?e=a+"["+d+"]":"add-menu-item"==c&&(e="menu-item["+d+"]["+a+"]"),e==f.attr("name")&&f.val(b)})}),this):this}})},countMenuItems:function(b){return a(".menu-item-depth-"+b).length},moveMenuItem:function(c,d){var e,f,g,h=a("#menu-to-edit li"),i=h.length,j=c.parents("li.menu-item"),k=j.childMenuItems(),l=j.getItemData(),m=parseInt(j.menuItemDepth(),10),n=parseInt(j.index(),10),o=j.next(),p=o.childMenuItems(),q=parseInt(o.menuItemDepth(),10)+1,r=j.prev(),s=parseInt(r.menuItemDepth(),10),t=r.getItemData()["menu-item-db-id"];switch(d){case"up":if(f=n-1,0===n)break;0===f&&0!==m&&j.moveHorizontally(0,m),0!==s&&j.moveHorizontally(s,m),k?(e=j.add(k),e.detach().insertBefore(h.eq(f)).updateParentMenuItemDBId()):j.detach().insertBefore(h.eq(f)).updateParentMenuItemDBId();break;case"down":if(k){if(e=j.add(k),o=h.eq(e.length+n),p=0!==o.childMenuItems().length,p&&(g=parseInt(o.menuItemDepth(),10)+1,j.moveHorizontally(g,m)),i===n+e.length)break;e.detach().insertAfter(h.eq(n+e.length)).updateParentMenuItemDBId()}else{if(0!==p.length&&j.moveHorizontally(q,m),i===n+1)break;j.detach().insertAfter(h.eq(n+1)).updateParentMenuItemDBId()}break;case"top":if(0===n)break;k?(e=j.add(k),e.detach().insertBefore(h.eq(0)).updateParentMenuItemDBId()):j.detach().insertBefore(h.eq(0)).updateParentMenuItemDBId();break;case"left":if(0===m)break;j.shiftHorizontally(-1);break;case"right":if(0===n)break;if(l["menu-item-parent-id"]===t)break;j.shiftHorizontally(1)}c.focus(),b.registerChange(),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},initAccessibility:function(){var c=a("#menu-to-edit");b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility(),c.on("click",".menus-move-up",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"up"),c.preventDefault()}),c.on("click",".menus-move-down",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"down"),c.preventDefault()}),c.on("click",".menus-move-top",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"top"),c.preventDefault()}),c.on("click",".menus-move-left",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"left"),c.preventDefault()}),c.on("click",".menus-move-right",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"right"),c.preventDefault()})},refreshAdvancedAccessibility:function(){a(".menu-item-settings .field-move a").css("display","none"),a(".item-edit").each(function(){var b,c,d,e,f,g,h,i,j,k=a(this),l=k.closest("li.menu-item").first(),m=l.menuItemDepth(),n=0===m,o=k.closest(".menu-item-handle").find(".menu-item-title").text(),p=parseInt(l.index(),10),q=n?m:parseInt(m-1,10),r=l.prevAll(".menu-item-depth-"+q).first().find(".menu-item-title").text(),s=l.prevAll(".menu-item-depth-"+m).first().find(".menu-item-title").text(),t=a("#menu-to-edit li").length,u=l.nextAll(".menu-item-depth-"+m).length;0!==p&&(b=l.find(".menus-move-up"),b.prop("title",menus.moveUp).css("display","inline")),0!==p&&n&&(b=l.find(".menus-move-top"),b.prop("title",menus.moveToTop).css("display","inline")),p+1!==t&&0!==p&&(b=l.find(".menus-move-down"),b.prop("title",menus.moveDown).css("display","inline")),0===p&&0!==u&&(b=l.find(".menus-move-down"),b.prop("title",menus.moveDown).css("display","inline")),n||(b=l.find(".menus-move-left"),c=menus.outFrom.replace("%s",r),b.prop("title",menus.moveOutFrom.replace("%s",r)).html(c).css("display","inline")),0!==p&&l.find(".menu-item-data-parent-id").val()!==l.prev().find(".menu-item-data-db-id").val()&&(b=l.find(".menus-move-right"),c=menus.under.replace("%s",s),b.prop("title",menus.moveUnder.replace("%s",s)).html(c).css("display","inline")),n?(d=a(".menu-item-depth-0"),e=d.index(l)+1,t=d.length,f=menus.menuFocus.replace("%1$s",o).replace("%2$d",e).replace("%3$d",t)):(g=l.prevAll(".menu-item-depth-"+parseInt(m-1,10)).first(),h=g.find(".menu-item-data-db-id").val(),i=g.find(".menu-item-title").text(),j=a('.menu-item .menu-item-data-parent-id[value="'+h+'"]'),e=a(j.parents(".menu-item").get().reverse()).index(l)+1,f=menus.subMenuFocus.replace("%1$s",o).replace("%2$d",e).replace("%3$s",i)),k.prop("title",f).html(f)})},refreshKeyboardAccessibility:function(){a(".item-edit").off("focus").on("focus",function(){a(this).off("keydown").on("keydown",function(c){var d,e=a(this),f=e.parents("li.menu-item"),g=f.getItemData();if((37==c.which||38==c.which||39==c.which||40==c.which)&&(e.off("keydown"),1!==a("#menu-to-edit li").length)){switch(d={38:"up",40:"down",37:"left",39:"right"},a("body").hasClass("rtl")&&(d={38:"up",40:"down",39:"left",37:"right"}),d[c.which]){case"up":b.moveMenuItem(e,"up");break;case"down":b.moveMenuItem(e,"down");break;case"left":b.moveMenuItem(e,"left");break;case"right":b.moveMenuItem(e,"right")}return a("#edit-"+g["menu-item-db-id"]).focus(),!1}})})},initPreviewing:function(){a("#menu-to-edit").on("change input",".edit-menu-item-title",function(b){var c,d,e=a(b.currentTarget);c=e.val(),d=e.closest(".menu-item").find(".menu-item-title"),c?d.text(c).removeClass("no-title"):d.text(navMenuL10n.untitled).addClass("no-title")})},initToggles:function(){postboxes.add_postbox_toggles("nav-menus"),columns.useCheckboxesForHidden(),columns.checked=function(b){a(".field-"+b).removeClass("hidden-field")},columns.unchecked=function(b){a(".field-"+b).addClass("hidden-field")},b.menuList.hideAdvancedMenuItemFields(),a(".hide-postbox-tog").click(function(){var b=a(".accordion-container li.accordion-section").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"closed-postboxes",hidden:b,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:"nav-menus"})})},initSortables:function(){function c(a){var c;j=a.placeholder.prev(),k=a.placeholder.next(),j[0]==a.item[0]&&(j=j.prev()),k[0]==a.item[0]&&(k=k.next()),l=j.length?j.offset().top+j.height():0,m=k.length?k.offset().top+k.height()/3:0,h=k.length?k.menuItemDepth():0,i=j.length?(c=j.menuItemDepth()+1)>b.options.globalMaxDepth?b.options.globalMaxDepth:c:0}function d(a,b){a.placeholder.updateDepthClass(b,q),q=b}function e(){if(!s[0].className)return 0;var a=s[0].className.match(/menu-max-depth-(\d+)/);return a&&a[1]?parseInt(a[1],10):0}function f(c){var d,e=t;if(0!==c){if(c>0)d=p+c,d>t&&(e=d);else if(0>c&&p==t)for(;!a(".menu-item-depth-"+e,b.menuList).length&&e>0;)e--;s.removeClass("menu-max-depth-"+t).addClass("menu-max-depth-"+e),t=e}}var g,h,i,j,k,l,m,n,o,p,q=0,r=b.menuList.offset().left,s=a("body"),t=e();0!==a("#menu-to-edit li").length&&a(".drag-instructions").show(),r+=b.isRTL?b.menuList.width():0,b.menuList.sortable({handle:".menu-item-handle",placeholder:"sortable-placeholder",start:function(e,f){var h,i,j,k,l;b.isRTL&&(f.item[0].style.right="auto"),o=f.item.children(".menu-item-transport"),g=f.item.menuItemDepth(),d(f,g),j=f.item.next()[0]==f.placeholder[0]?f.item.next():f.item,k=j.childMenuItems(),o.append(k),h=o.outerHeight(),h+=h>0?1*f.placeholder.css("margin-top").slice(0,-2):0,h+=f.helper.outerHeight(),n=h,h-=2,f.placeholder.height(h),p=g,k.each(function(){var b=a(this).menuItemDepth();p=b>p?b:p}),i=f.helper.find(".menu-item-handle").outerWidth(),i+=b.depthToPx(p-g),i-=2,f.placeholder.width(i),l=f.placeholder.next(),l.css("margin-top",n+"px"),f.placeholder.detach(),a(this).sortable("refresh"),f.item.after(f.placeholder),l.css("margin-top",0),c(f)},stop:function(a,c){var d,e,h=q-g;d=o.children().insertAfter(c.item),e=c.item.find(".item-title .is-submenu"),q>0?e.show():e.hide(),0!==h&&(c.item.updateDepthClass(q),d.shiftDepthClass(h),f(h)),b.registerChange(),c.item.updateParentMenuItemDBId(),c.item[0].style.top=0,b.isRTL&&(c.item[0].style.left="auto",c.item[0].style.right=0),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},change:function(a,d){d.placeholder.parent().hasClass("menu")||(j.length?j.after(d.placeholder):b.menuList.prepend(d.placeholder)),c(d)},sort:function(e,f){var g=f.helper.offset(),j=b.isRTL?g.left+f.helper.width():g.left,o=b.negateIfRTL*b.pxToDepth(j-r);o>i||g.top<l?o=i:h>o&&(o=h),o!=q&&d(f,o),m&&g.top+n>m&&(k.after(f.placeholder),c(f),a(this).sortable("refreshPositions"))}})},initManageLocations:function(){a("#menu-locations-wrap form").submit(function(){window.onbeforeunload=null}),a(".menu-location-menus select").on("change",function(){var b=a(this).closest("tr").find(".locations-edit-menu-link");a(this).find("option:selected").data("orig")?b.show():b.hide()})},attachMenuEditListeners:function(){var b=this;a("#update-nav-menu").bind("click",function(a){if(a.target&&a.target.className){if(-1!=a.target.className.indexOf("item-edit"))return b.eventOnClickEditLink(a.target);if(-1!=a.target.className.indexOf("menu-save"))return b.eventOnClickMenuSave(a.target);if(-1!=a.target.className.indexOf("menu-delete"))return b.eventOnClickMenuDelete(a.target);if(-1!=a.target.className.indexOf("item-delete"))return b.eventOnClickMenuItemDelete(a.target);if(-1!=a.target.className.indexOf("item-cancel"))return b.eventOnClickCancelLink(a.target)}}),a('#add-custom-links input[type="text"]').keypress(function(b){13===b.keyCode&&(b.preventDefault(),a("#submit-customlinkdiv").click())})},setupInputWithDefaultTitle:function(){var b="input-with-default-title";a("."+b).each(function(){var c=a(this),d=c.attr("title"),e=c.val();if(c.data(b,d),""===e)c.val(d);else{if(d==e)return;c.removeClass(b)}}).focus(function(){var c=a(this);c.val()==c.data(b)&&c.val("").removeClass(b)}).blur(function(){var c=a(this);""===c.val()&&c.addClass(b).val(c.data(b))}),a(".blank-slate .input-with-default-title").focus()},attachThemeLocationsListeners:function(){var b=a("#nav-menu-theme-locations"),c={};c.action="menu-locations-save",c["menu-settings-column-nonce"]=a("#menu-settings-column-nonce").val(),b.find('input[type="submit"]').click(function(){return b.find("select").each(function(){c[this.name]=a(this).val()}),b.find(".spinner").show(),a.post(ajaxurl,c,function(){b.find(".spinner").hide()}),!1})},attachQuickSearchListeners:function(){var c;a(".quick-search").keypress(function(d){var e=a(this);return 13==d.which?(b.updateQuickSearchResults(e),!1):(c&&clearTimeout(c),void(c=setTimeout(function(){b.updateQuickSearchResults(e)},400)))}).attr("autocomplete","off")},updateQuickSearchResults:function(c){var d,e,f=2,g=c.val();g.length<f||(d=c.parents(".tabs-panel"),e={action:"menu-quick-search","response-format":"markup",menu:a("#menu").val(),"menu-settings-column-nonce":a("#menu-settings-column-nonce").val(),q:g,type:c.attr("name")},a(".spinner",d).show(),a.post(ajaxurl,e,function(a){b.processQuickSearchQueryResponse(a,e,d)}))},addCustomLink:function(c){var d=a("#custom-menu-item-url").val(),e=a("#custom-menu-item-name").val();return c=c||b.addMenuItemToBottom,""===d||"http://"==d?!1:(a(".customlinkdiv .spinner").show(),void this.addLinkToMenu(d,e,c,function(){a(".customlinkdiv .spinner").hide(),a("#custom-menu-item-name").val("").blur(),a("#custom-menu-item-url").val("http://")}))},addLinkToMenu:function(a,c,d,e){d=d||b.addMenuItemToBottom,e=e||function(){},b.addItemToMenu({"-1":{"menu-item-type":"custom","menu-item-url":a,"menu-item-title":c}},d,e)},addItemToMenu:function(b,c,d){var e,f=a("#menu").val(),g=a("#menu-settings-column-nonce").val();c=c||function(){},d=d||function(){},e={action:"add-menu-item",menu:f,"menu-settings-column-nonce":g,"menu-item":b},a.post(ajaxurl,e,function(b){var f=a("#menu-instructions");b=a.trim(b),c(b,e),a("li.pending").hide().fadeIn("slow"),a(".drag-instructions").show(),!f.hasClass("menu-instructions-inactive")&&f.siblings().length&&f.addClass("menu-instructions-inactive"),d()})},addMenuItemToBottom:function(c){a(c).hideAdvancedMenuItemFields().appendTo(b.targetList),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},addMenuItemToTop:function(c){a(c).hideAdvancedMenuItemFields().prependTo(b.targetList),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},attachUnsavedChangesListener:function(){a("#menu-management input, #menu-management select, #menu-management, #menu-management textarea, .menu-location-menus select").change(function(){b.registerChange()}),0!==a("#menu-to-edit").length||0!==a(".menu-location-menus select").length?window.onbeforeunload=function(){return b.menusChanged?navMenuL10n.saveAlert:void 0}:a("#menu-settings-column").find("input,select").end().find("a").attr("href","#").unbind("click")},registerChange:function(){b.menusChanged=!0},attachTabsPanelListeners:function(){a("#menu-settings-column").bind("click",function(c){var d,e,f,g,h=a(c.target);if(h.hasClass("nav-tab-link"))e=h.data("type"),f=h.parents(".accordion-section-content").first(),a("input",f).removeAttr("checked"),a(".tabs-panel-active",f).removeClass("tabs-panel-active").addClass("tabs-panel-inactive"),a("#"+e,f).removeClass("tabs-panel-inactive").addClass("tabs-panel-active"),a(".tabs",f).removeClass("tabs"),h.parent().addClass("tabs"),a(".quick-search",f).focus(),c.preventDefault();else if(h.hasClass("select-all")){if(d=/#(.*)$/.exec(c.target.href),d&&d[1])return g=a("#"+d[1]+" .tabs-panel-active .menu-item-title input"),g.length===g.filter(":checked").length?g.removeAttr("checked"):g.prop("checked",!0),!1}else{if(h.hasClass("submit-add-to-menu"))return b.registerChange(),c.target.id&&"submit-customlinkdiv"==c.target.id?b.addCustomLink(b.addMenuItemToBottom):c.target.id&&-1!=c.target.id.indexOf("submit-")&&a("#"+c.target.id.replace(/submit-/,"")).addSelectedToMenu(b.addMenuItemToBottom),!1;if(h.hasClass("page-numbers"))return a.post(ajaxurl,c.target.href.replace(/.*\?/,"").replace(/action=([^&]*)/,"")+"&action=menu-get-metabox",function(b){if(-1!=b.indexOf("replace-id")){var c=a.parseJSON(b),d=document.getElementById(c["replace-id"]),e=document.createElement("div"),f=document.createElement("div");c.markup&&d&&(f.innerHTML=c.markup?c.markup:"",d.parentNode.insertBefore(e,d),e.parentNode.removeChild(d),e.parentNode.insertBefore(f,e),e.parentNode.removeChild(e))}}),!1}})},eventOnClickEditLink:function(b){var c,d,e=/#(.*)$/.exec(b.href);return e&&e[1]&&(c=a("#"+e[1]),d=c.parent(),0!==d.length)?(d.hasClass("menu-item-edit-inactive")?(c.data("menu-item-data")||c.data("menu-item-data",c.getItemData()),c.slideDown("fast"),d.removeClass("menu-item-edit-inactive").addClass("menu-item-edit-active")):(c.slideUp("fast"),d.removeClass("menu-item-edit-active").addClass("menu-item-edit-inactive")),!1):void 0},eventOnClickCancelLink:function(b){var c=a(b).closest(".menu-item-settings"),d=a(b).closest(".menu-item");return d.removeClass("menu-item-edit-active").addClass("menu-item-edit-inactive"),c.setItemData(c.data("menu-item-data")).hide(),!1},eventOnClickMenuSave:function(){var c="",d=a("#menu-name"),e=d.val();return e&&e!=d.attr("title")&&e.replace(/\s+/,"")?(a("#nav-menu-theme-locations select").each(function(){c+='<input type="hidden" name="'+this.name+'" value="'+a(this).val()+'" />'}),a("#update-nav-menu").append(c),b.menuList.find(".menu-item-data-position").val(function(a){return a+1}),window.onbeforeunload=null,!0):(d.parent().addClass("form-invalid"),!1)},eventOnClickMenuDelete:function(){return window.confirm(navMenuL10n.warnDeleteMenu)?(window.onbeforeunload=null,!0):!1},eventOnClickMenuItemDelete:function(c){var d=parseInt(c.id.replace("delete-",""),10);return b.removeMenuItem(a("#menu-item-"+d)),b.registerChange(),!1},processQuickSearchQueryResponse:function(b,c,d){var e,f,g,h={},i=document.getElementById("nav-menu-meta"),j=/menu-item[(\[^]\]*/,k=a("<div>").html(b).find("li");return k.length?(k.each(function(){if(g=a(this),e=j.exec(g.html()),e&&e[1]){for(f=e[1];i.elements["menu-item["+f+"][menu-item-type]"]||h[f];)f--;h[f]=!0,f!=e[1]&&g.html(g.html().replace(new RegExp("menu-item\\["+e[1]+"\\]","g"),"menu-item["+f+"]"))}}),a(".categorychecklist",d).html(k),void a(".spinner",d).hide()):(a(".categorychecklist",d).html("<li><p>"+navMenuL10n.noResultsFound+"</p></li>"),void a(".spinner",d).hide())},removeMenuItem:function(b){var c=b.childMenuItems();b.addClass("deleting").animate({opacity:0,height:0},350,function(){var d=a("#menu-instructions");b.remove(),c.shiftDepthClass(-1).updateParentMenuItemDBId(),0===a("#menu-to-edit li").length&&(a(".drag-instructions").hide(),d.removeClass("menu-instructions-inactive"))})},depthToPx:function(a){return a*b.options.menuItemDepthPerLevel},pxToDepth:function(a){return Math.floor(a/b.options.menuItemDepthPerLevel)}},a(document).ready(function(){wpNavMenu.init()})}(jQuery);
\ No newline at end of file
+var wpNavMenu;!function(a){var b;b=wpNavMenu={options:{menuItemDepthPerLevel:30,globalMaxDepth:11},menuList:void 0,targetList:void 0,menusChanged:!1,isRTL:!("undefined"==typeof isRtl||!isRtl),negateIfRTL:"undefined"!=typeof isRtl&&isRtl?-1:1,init:function(){b.menuList=a("#menu-to-edit"),b.targetList=b.menuList,this.jQueryExtensions(),this.attachMenuEditListeners(),this.setupInputWithDefaultTitle(),this.attachQuickSearchListeners(),this.attachThemeLocationsListeners(),this.attachTabsPanelListeners(),this.attachUnsavedChangesListener(),b.menuList.length&&this.initSortables(),menus.oneThemeLocationNoMenus&&a("#posttype-page").addSelectedToMenu(b.addMenuItemToBottom),this.initManageLocations(),this.initAccessibility(),this.initToggles(),this.initPreviewing()},jQueryExtensions:function(){a.fn.extend({menuItemDepth:function(){var a=this.eq(0).css(b.isRTL?"margin-right":"margin-left");return b.pxToDepth(a&&-1!=a.indexOf("px")?a.slice(0,-2):0)},updateDepthClass:function(b,c){return this.each(function(){var d=a(this);c=c||d.menuItemDepth(),a(this).removeClass("menu-item-depth-"+c).addClass("menu-item-depth-"+b)})},shiftDepthClass:function(b){return this.each(function(){var c=a(this),d=c.menuItemDepth();a(this).removeClass("menu-item-depth-"+d).addClass("menu-item-depth-"+(d+b))})},childMenuItems:function(){var b=a();return this.each(function(){for(var c=a(this),d=c.menuItemDepth(),e=c.next();e.length&&e.menuItemDepth()>d;)b=b.add(e),e=e.next()}),b},shiftHorizontally:function(b){return this.each(function(){var c=a(this),d=c.menuItemDepth(),e=d+b;c.moveHorizontally(e,d)})},moveHorizontally:function(b,c){return this.each(function(){var d=a(this),e=d.childMenuItems(),f=b-c,g=d.find(".is-submenu");d.updateDepthClass(b,c).updateParentMenuItemDBId(),e&&e.each(function(){var b=a(this),c=b.menuItemDepth(),d=c+f;b.updateDepthClass(d,c).updateParentMenuItemDBId()}),0===b?g.hide():g.show()})},updateParentMenuItemDBId:function(){return this.each(function(){var b=a(this),c=b.find(".menu-item-data-parent-id"),d=parseInt(b.menuItemDepth(),10),e=d-1,f=b.prevAll(".menu-item-depth-"+e).first();c.val(0===d?0:f.find(".menu-item-data-db-id").val())})},hideAdvancedMenuItemFields:function(){return this.each(function(){var b=a(this);a(".hide-column-tog").not(":checked").each(function(){b.find(".field-"+a(this).val()).addClass("hidden-field")})})},addSelectedToMenu:function(c){return 0===a("#menu-to-edit").length?!1:this.each(function(){var d=a(this),e={},f=d.find(menus.oneThemeLocationNoMenus&&0===d.find(".tabs-panel-active .categorychecklist li input:checked").length?'#page-all li input[type="checkbox"]':".tabs-panel-active .categorychecklist li input:checked"),g=/menu-item\[([^\]]*)/;return c=c||b.addMenuItemToBottom,f.length?(d.find(".spinner").show(),a(f).each(function(){var d=a(this),f=g.exec(d.attr("name")),h="undefined"==typeof f[1]?0:parseInt(f[1],10);this.className&&-1!=this.className.indexOf("add-to-top")&&(c=b.addMenuItemToTop),e[h]=d.closest("li").getItemData("add-menu-item",h)}),void b.addItemToMenu(e,c,function(){f.removeAttr("checked"),d.find(".spinner").hide()})):!1})},getItemData:function(a,b){a=a||"menu-item";var c,d={},e=["menu-item-db-id","menu-item-object-id","menu-item-object","menu-item-parent-id","menu-item-position","menu-item-type","menu-item-title","menu-item-url","menu-item-description","menu-item-attr-title","menu-item-target","menu-item-classes","menu-item-xfn"];return b||"menu-item"!=a||(b=this.find(".menu-item-data-db-id").val()),b?(this.find("input").each(function(){var f;for(c=e.length;c--;)"menu-item"==a?f=e[c]+"["+b+"]":"add-menu-item"==a&&(f="menu-item["+b+"]["+e[c]+"]"),this.name&&f==this.name&&(d[e[c]]=this.value)}),d):d},setItemData:function(b,c,d){return c=c||"menu-item",d||"menu-item"!=c||(d=a(".menu-item-data-db-id",this).val()),d?(this.find("input").each(function(){var e,f=a(this);a.each(b,function(a,b){"menu-item"==c?e=a+"["+d+"]":"add-menu-item"==c&&(e="menu-item["+d+"]["+a+"]"),e==f.attr("name")&&f.val(b)})}),this):this}})},countMenuItems:function(b){return a(".menu-item-depth-"+b).length},moveMenuItem:function(c,d){var e,f,g,h=a("#menu-to-edit li"),i=h.length,j=c.parents("li.menu-item"),k=j.childMenuItems(),l=j.getItemData(),m=parseInt(j.menuItemDepth(),10),n=parseInt(j.index(),10),o=j.next(),p=o.childMenuItems(),q=parseInt(o.menuItemDepth(),10)+1,r=j.prev(),s=parseInt(r.menuItemDepth(),10),t=r.getItemData()["menu-item-db-id"];switch(d){case"up":if(f=n-1,0===n)break;0===f&&0!==m&&j.moveHorizontally(0,m),0!==s&&j.moveHorizontally(s,m),k?(e=j.add(k),e.detach().insertBefore(h.eq(f)).updateParentMenuItemDBId()):j.detach().insertBefore(h.eq(f)).updateParentMenuItemDBId();break;case"down":if(k){if(e=j.add(k),o=h.eq(e.length+n),p=0!==o.childMenuItems().length,p&&(g=parseInt(o.menuItemDepth(),10)+1,j.moveHorizontally(g,m)),i===n+e.length)break;e.detach().insertAfter(h.eq(n+e.length)).updateParentMenuItemDBId()}else{if(0!==p.length&&j.moveHorizontally(q,m),i===n+1)break;j.detach().insertAfter(h.eq(n+1)).updateParentMenuItemDBId()}break;case"top":if(0===n)break;k?(e=j.add(k),e.detach().insertBefore(h.eq(0)).updateParentMenuItemDBId()):j.detach().insertBefore(h.eq(0)).updateParentMenuItemDBId();break;case"left":if(0===m)break;j.shiftHorizontally(-1);break;case"right":if(0===n)break;if(l["menu-item-parent-id"]===t)break;j.shiftHorizontally(1)}c.focus(),b.registerChange(),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},initAccessibility:function(){var c=a("#menu-to-edit");b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility(),c.on("click",".menus-move-up",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"up"),c.preventDefault()}),c.on("click",".menus-move-down",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"down"),c.preventDefault()}),c.on("click",".menus-move-top",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"top"),c.preventDefault()}),c.on("click",".menus-move-left",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"left"),c.preventDefault()}),c.on("click",".menus-move-right",function(c){b.moveMenuItem(a(this).parents("li.menu-item").find("a.item-edit"),"right"),c.preventDefault()})},refreshAdvancedAccessibility:function(){a(".menu-item-settings .field-move a").css("display","none"),a(".item-edit").each(function(){var b,c,d,e,f,g,h,i,j,k=a(this),l=k.closest("li.menu-item").first(),m=l.menuItemDepth(),n=0===m,o=k.closest(".menu-item-handle").find(".menu-item-title").text(),p=parseInt(l.index(),10),q=n?m:parseInt(m-1,10),r=l.prevAll(".menu-item-depth-"+q).first().find(".menu-item-title").text(),s=l.prevAll(".menu-item-depth-"+m).first().find(".menu-item-title").text(),t=a("#menu-to-edit li").length,u=l.nextAll(".menu-item-depth-"+m).length;0!==p&&(b=l.find(".menus-move-up"),b.prop("title",menus.moveUp).css("display","inline")),0!==p&&n&&(b=l.find(".menus-move-top"),b.prop("title",menus.moveToTop).css("display","inline")),p+1!==t&&0!==p&&(b=l.find(".menus-move-down"),b.prop("title",menus.moveDown).css("display","inline")),0===p&&0!==u&&(b=l.find(".menus-move-down"),b.prop("title",menus.moveDown).css("display","inline")),n||(b=l.find(".menus-move-left"),c=menus.outFrom.replace("%s",r),b.prop("title",menus.moveOutFrom.replace("%s",r)).text(c).css("display","inline")),0!==p&&l.find(".menu-item-data-parent-id").val()!==l.prev().find(".menu-item-data-db-id").val()&&(b=l.find(".menus-move-right"),c=menus.under.replace("%s",s),b.prop("title",menus.moveUnder.replace("%s",s)).text(c).css("display","inline")),n?(d=a(".menu-item-depth-0"),e=d.index(l)+1,t=d.length,f=menus.menuFocus.replace("%1$s",o).replace("%2$d",e).replace("%3$d",t)):(g=l.prevAll(".menu-item-depth-"+parseInt(m-1,10)).first(),h=g.find(".menu-item-data-db-id").val(),i=g.find(".menu-item-title").text(),j=a('.menu-item .menu-item-data-parent-id[value="'+h+'"]'),e=a(j.parents(".menu-item").get().reverse()).index(l)+1,f=menus.subMenuFocus.replace("%1$s",o).replace("%2$d",e).replace("%3$s",i)),k.prop("title",f).text(f)})},refreshKeyboardAccessibility:function(){a(".item-edit").off("focus").on("focus",function(){a(this).off("keydown").on("keydown",function(c){var d,e=a(this),f=e.parents("li.menu-item"),g=f.getItemData();if((37==c.which||38==c.which||39==c.which||40==c.which)&&(e.off("keydown"),1!==a("#menu-to-edit li").length)){switch(d={38:"up",40:"down",37:"left",39:"right"},a("body").hasClass("rtl")&&(d={38:"up",40:"down",39:"left",37:"right"}),d[c.which]){case"up":b.moveMenuItem(e,"up");break;case"down":b.moveMenuItem(e,"down");break;case"left":b.moveMenuItem(e,"left");break;case"right":b.moveMenuItem(e,"right")}return a("#edit-"+g["menu-item-db-id"]).focus(),!1}})})},initPreviewing:function(){a("#menu-to-edit").on("change input",".edit-menu-item-title",function(b){var c,d,e=a(b.currentTarget);c=e.val(),d=e.closest(".menu-item").find(".menu-item-title"),c?d.text(c).removeClass("no-title"):d.text(navMenuL10n.untitled).addClass("no-title")})},initToggles:function(){postboxes.add_postbox_toggles("nav-menus"),columns.useCheckboxesForHidden(),columns.checked=function(b){a(".field-"+b).removeClass("hidden-field")},columns.unchecked=function(b){a(".field-"+b).addClass("hidden-field")},b.menuList.hideAdvancedMenuItemFields(),a(".hide-postbox-tog").click(function(){var b=a(".accordion-container li.accordion-section").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"closed-postboxes",hidden:b,closedpostboxesnonce:jQuery("#closedpostboxesnonce").val(),page:"nav-menus"})})},initSortables:function(){function c(a){var c;j=a.placeholder.prev(),k=a.placeholder.next(),j[0]==a.item[0]&&(j=j.prev()),k[0]==a.item[0]&&(k=k.next()),l=j.length?j.offset().top+j.height():0,m=k.length?k.offset().top+k.height()/3:0,h=k.length?k.menuItemDepth():0,i=j.length?(c=j.menuItemDepth()+1)>b.options.globalMaxDepth?b.options.globalMaxDepth:c:0}function d(a,b){a.placeholder.updateDepthClass(b,q),q=b}function e(){if(!s[0].className)return 0;var a=s[0].className.match(/menu-max-depth-(\d+)/);return a&&a[1]?parseInt(a[1],10):0}function f(c){var d,e=t;if(0!==c){if(c>0)d=p+c,d>t&&(e=d);else if(0>c&&p==t)for(;!a(".menu-item-depth-"+e,b.menuList).length&&e>0;)e--;s.removeClass("menu-max-depth-"+t).addClass("menu-max-depth-"+e),t=e}}var g,h,i,j,k,l,m,n,o,p,q=0,r=b.menuList.offset().left,s=a("body"),t=e();0!==a("#menu-to-edit li").length&&a(".drag-instructions").show(),r+=b.isRTL?b.menuList.width():0,b.menuList.sortable({handle:".menu-item-handle",placeholder:"sortable-placeholder",start:function(e,f){var h,i,j,k,l;b.isRTL&&(f.item[0].style.right="auto"),o=f.item.children(".menu-item-transport"),g=f.item.menuItemDepth(),d(f,g),j=f.item.next()[0]==f.placeholder[0]?f.item.next():f.item,k=j.childMenuItems(),o.append(k),h=o.outerHeight(),h+=h>0?1*f.placeholder.css("margin-top").slice(0,-2):0,h+=f.helper.outerHeight(),n=h,h-=2,f.placeholder.height(h),p=g,k.each(function(){var b=a(this).menuItemDepth();p=b>p?b:p}),i=f.helper.find(".menu-item-handle").outerWidth(),i+=b.depthToPx(p-g),i-=2,f.placeholder.width(i),l=f.placeholder.next(),l.css("margin-top",n+"px"),f.placeholder.detach(),a(this).sortable("refresh"),f.item.after(f.placeholder),l.css("margin-top",0),c(f)},stop:function(a,c){var d,e,h=q-g;d=o.children().insertAfter(c.item),e=c.item.find(".item-title .is-submenu"),q>0?e.show():e.hide(),0!==h&&(c.item.updateDepthClass(q),d.shiftDepthClass(h),f(h)),b.registerChange(),c.item.updateParentMenuItemDBId(),c.item[0].style.top=0,b.isRTL&&(c.item[0].style.left="auto",c.item[0].style.right=0),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},change:function(a,d){d.placeholder.parent().hasClass("menu")||(j.length?j.after(d.placeholder):b.menuList.prepend(d.placeholder)),c(d)},sort:function(e,f){var g=f.helper.offset(),j=b.isRTL?g.left+f.helper.width():g.left,o=b.negateIfRTL*b.pxToDepth(j-r);o>i||g.top<l?o=i:h>o&&(o=h),o!=q&&d(f,o),m&&g.top+n>m&&(k.after(f.placeholder),c(f),a(this).sortable("refreshPositions"))}})},initManageLocations:function(){a("#menu-locations-wrap form").submit(function(){window.onbeforeunload=null}),a(".menu-location-menus select").on("change",function(){var b=a(this).closest("tr").find(".locations-edit-menu-link");a(this).find("option:selected").data("orig")?b.show():b.hide()})},attachMenuEditListeners:function(){var b=this;a("#update-nav-menu").bind("click",function(a){if(a.target&&a.target.className){if(-1!=a.target.className.indexOf("item-edit"))return b.eventOnClickEditLink(a.target);if(-1!=a.target.className.indexOf("menu-save"))return b.eventOnClickMenuSave(a.target);if(-1!=a.target.className.indexOf("menu-delete"))return b.eventOnClickMenuDelete(a.target);if(-1!=a.target.className.indexOf("item-delete"))return b.eventOnClickMenuItemDelete(a.target);if(-1!=a.target.className.indexOf("item-cancel"))return b.eventOnClickCancelLink(a.target)}}),a('#add-custom-links input[type="text"]').keypress(function(b){13===b.keyCode&&(b.preventDefault(),a("#submit-customlinkdiv").click())})},setupInputWithDefaultTitle:function(){var b="input-with-default-title";a("."+b).each(function(){var c=a(this),d=c.attr("title"),e=c.val();if(c.data(b,d),""===e)c.val(d);else{if(d==e)return;c.removeClass(b)}}).focus(function(){var c=a(this);c.val()==c.data(b)&&c.val("").removeClass(b)}).blur(function(){var c=a(this);""===c.val()&&c.addClass(b).val(c.data(b))}),a(".blank-slate .input-with-default-title").focus()},attachThemeLocationsListeners:function(){var b=a("#nav-menu-theme-locations"),c={};c.action="menu-locations-save",c["menu-settings-column-nonce"]=a("#menu-settings-column-nonce").val(),b.find('input[type="submit"]').click(function(){return b.find("select").each(function(){c[this.name]=a(this).val()}),b.find(".spinner").show(),a.post(ajaxurl,c,function(){b.find(".spinner").hide()}),!1})},attachQuickSearchListeners:function(){var c;a(".quick-search").keypress(function(d){var e=a(this);return 13==d.which?(b.updateQuickSearchResults(e),!1):(c&&clearTimeout(c),void(c=setTimeout(function(){b.updateQuickSearchResults(e)},400)))}).attr("autocomplete","off")},updateQuickSearchResults:function(c){var d,e,f=2,g=c.val();g.length<f||(d=c.parents(".tabs-panel"),e={action:"menu-quick-search","response-format":"markup",menu:a("#menu").val(),"menu-settings-column-nonce":a("#menu-settings-column-nonce").val(),q:g,type:c.attr("name")},a(".spinner",d).show(),a.post(ajaxurl,e,function(a){b.processQuickSearchQueryResponse(a,e,d)}))},addCustomLink:function(c){var d=a("#custom-menu-item-url").val(),e=a("#custom-menu-item-name").val();return c=c||b.addMenuItemToBottom,""===d||"http://"==d?!1:(a(".customlinkdiv .spinner").show(),void this.addLinkToMenu(d,e,c,function(){a(".customlinkdiv .spinner").hide(),a("#custom-menu-item-name").val("").blur(),a("#custom-menu-item-url").val("http://")}))},addLinkToMenu:function(a,c,d,e){d=d||b.addMenuItemToBottom,e=e||function(){},b.addItemToMenu({"-1":{"menu-item-type":"custom","menu-item-url":a,"menu-item-title":c}},d,e)},addItemToMenu:function(b,c,d){var e,f=a("#menu").val(),g=a("#menu-settings-column-nonce").val();c=c||function(){},d=d||function(){},e={action:"add-menu-item",menu:f,"menu-settings-column-nonce":g,"menu-item":b},a.post(ajaxurl,e,function(b){var f=a("#menu-instructions");b=a.trim(b),c(b,e),a("li.pending").hide().fadeIn("slow"),a(".drag-instructions").show(),!f.hasClass("menu-instructions-inactive")&&f.siblings().length&&f.addClass("menu-instructions-inactive"),d()})},addMenuItemToBottom:function(c){a(c).hideAdvancedMenuItemFields().appendTo(b.targetList),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},addMenuItemToTop:function(c){a(c).hideAdvancedMenuItemFields().prependTo(b.targetList),b.refreshKeyboardAccessibility(),b.refreshAdvancedAccessibility()},attachUnsavedChangesListener:function(){a("#menu-management input, #menu-management select, #menu-management, #menu-management textarea, .menu-location-menus select").change(function(){b.registerChange()}),0!==a("#menu-to-edit").length||0!==a(".menu-location-menus select").length?window.onbeforeunload=function(){return b.menusChanged?navMenuL10n.saveAlert:void 0}:a("#menu-settings-column").find("input,select").end().find("a").attr("href","#").unbind("click")},registerChange:function(){b.menusChanged=!0},attachTabsPanelListeners:function(){a("#menu-settings-column").bind("click",function(c){var d,e,f,g,h=a(c.target);if(h.hasClass("nav-tab-link"))e=h.data("type"),f=h.parents(".accordion-section-content").first(),a("input",f).removeAttr("checked"),a(".tabs-panel-active",f).removeClass("tabs-panel-active").addClass("tabs-panel-inactive"),a("#"+e,f).removeClass("tabs-panel-inactive").addClass("tabs-panel-active"),a(".tabs",f).removeClass("tabs"),h.parent().addClass("tabs"),a(".quick-search",f).focus(),c.preventDefault();else if(h.hasClass("select-all")){if(d=/#(.*)$/.exec(c.target.href),d&&d[1])return g=a("#"+d[1]+" .tabs-panel-active .menu-item-title input"),g.length===g.filter(":checked").length?g.removeAttr("checked"):g.prop("checked",!0),!1}else{if(h.hasClass("submit-add-to-menu"))return b.registerChange(),c.target.id&&"submit-customlinkdiv"==c.target.id?b.addCustomLink(b.addMenuItemToBottom):c.target.id&&-1!=c.target.id.indexOf("submit-")&&a("#"+c.target.id.replace(/submit-/,"")).addSelectedToMenu(b.addMenuItemToBottom),!1;if(h.hasClass("page-numbers"))return a.post(ajaxurl,c.target.href.replace(/.*\?/,"").replace(/action=([^&]*)/,"")+"&action=menu-get-metabox",function(b){if(-1!=b.indexOf("replace-id")){var c=a.parseJSON(b),d=document.getElementById(c["replace-id"]),e=document.createElement("div"),f=document.createElement("div");c.markup&&d&&(f.innerHTML=c.markup?c.markup:"",d.parentNode.insertBefore(e,d),e.parentNode.removeChild(d),e.parentNode.insertBefore(f,e),e.parentNode.removeChild(e))}}),!1}})},eventOnClickEditLink:function(b){var c,d,e=/#(.*)$/.exec(b.href);return e&&e[1]&&(c=a("#"+e[1]),d=c.parent(),0!==d.length)?(d.hasClass("menu-item-edit-inactive")?(c.data("menu-item-data")||c.data("menu-item-data",c.getItemData()),c.slideDown("fast"),d.removeClass("menu-item-edit-inactive").addClass("menu-item-edit-active")):(c.slideUp("fast"),d.removeClass("menu-item-edit-active").addClass("menu-item-edit-inactive")),!1):void 0},eventOnClickCancelLink:function(b){var c=a(b).closest(".menu-item-settings"),d=a(b).closest(".menu-item");return d.removeClass("menu-item-edit-active").addClass("menu-item-edit-inactive"),c.setItemData(c.data("menu-item-data")).hide(),!1},eventOnClickMenuSave:function(){var c="",d=a("#menu-name"),e=d.val();return e&&e!=d.attr("title")&&e.replace(/\s+/,"")?(a("#nav-menu-theme-locations select").each(function(){c+='<input type="hidden" name="'+this.name+'" value="'+a(this).val()+'" />'}),a("#update-nav-menu").append(c),b.menuList.find(".menu-item-data-position").val(function(a){return a+1}),window.onbeforeunload=null,!0):(d.parent().addClass("form-invalid"),!1)},eventOnClickMenuDelete:function(){return window.confirm(navMenuL10n.warnDeleteMenu)?(window.onbeforeunload=null,!0):!1},eventOnClickMenuItemDelete:function(c){var d=parseInt(c.id.replace("delete-",""),10);return b.removeMenuItem(a("#menu-item-"+d)),b.registerChange(),!1},processQuickSearchQueryResponse:function(b,c,d){var e,f,g,h={},i=document.getElementById("nav-menu-meta"),j=/menu-item[(\[^]\]*/,k=a("<div>").html(b).find("li");return k.length?(k.each(function(){if(g=a(this),e=j.exec(g.html()),e&&e[1]){for(f=e[1];i.elements["menu-item["+f+"][menu-item-type]"]||h[f];)f--;h[f]=!0,f!=e[1]&&g.html(g.html().replace(new RegExp("menu-item\\["+e[1]+"\\]","g"),"menu-item["+f+"]"))}}),a(".categorychecklist",d).html(k),void a(".spinner",d).hide()):(a(".categorychecklist",d).html("<li><p>"+navMenuL10n.noResultsFound+"</p></li>"),void a(".spinner",d).hide())},removeMenuItem:function(b){var c=b.childMenuItems();b.addClass("deleting").animate({opacity:0,height:0},350,function(){var d=a("#menu-instructions");b.remove(),c.shiftDepthClass(-1).updateParentMenuItemDBId(),0===a("#menu-to-edit li").length&&(a(".drag-instructions").hide(),d.removeClass("menu-instructions-inactive"))})},depthToPx:function(a){return a*b.options.menuItemDepthPerLevel},pxToDepth:function(a){return Math.floor(a/b.options.menuItemDepthPerLevel)}},a(document).ready(function(){wpNavMenu.init()})}(jQuery);
\ No newline at end of file
--- a/wp-admin/update-core.php
+++ b/wp-admin/update-core.php
@@ -393,14 +393,14 @@ function do_core_upgrade( $reinstall = false ) {
 	<h2><?php _e('Update WordPress'); ?></h2>
 <?php
 
-	if ( false === ( $credentials = request_filesystem_credentials( $url, '', false, ABSPATH, array(), $allow_relaxed_file_ownership ) ) ) {
+	if ( false === ( $credentials = request_filesystem_credentials( $url, '', false, ABSPATH, array( 'version', 'locale' ), $allow_relaxed_file_ownership ) ) ) {
 		echo '</div>';
 		return;
 	}
 
 	if ( ! WP_Filesystem( $credentials, ABSPATH, $allow_relaxed_file_ownership ) ) {
 		// Failed to connect, Error and request again
-		request_filesystem_credentials( $url, '', true, ABSPATH, array(), $allow_relaxed_file_ownership );
+		request_filesystem_credentials( $url, '', true, ABSPATH, array( 'version', 'locale' ), $allow_relaxed_file_ownership );
 		echo '</div>';
 		return;
 	}
--- a/wp-content/plugins/akismet/_inc/akismet.css
+++ b/wp-content/plugins/akismet/_inc/akismet.css
@@ -340,11 +340,16 @@ h2.ak-header {
 	text-align: center;
 }
 
-.akismet-settings th.strictness {
+.akismet-settings th:first-child {
 	vertical-align: top;
 	padding-top: 15px;
 }
 
+.akismet-settings th.akismet-api-key {
+	vertical-align: middle;
+	padding-top: 0;
+}
+
 .akismet-settings input[type=text] {
 	width: 75%;
 }
--- a/wp-content/plugins/akismet/_inc/akismet.js
+++ b/wp-content/plugins/akismet/_inc/akismet.js
@@ -18,9 +18,11 @@ jQuery( function ( $ ) {
 		var thisId = $(this).attr('commentid');
 		$(this).insertAfter('#comment-' + thisId + ' .author strong:first').show();
 	});
-	$('#the-comment-list').find('tr.comment, tr[id ^= "comment-"]').find('.column-author a[title ^= "http://"], .column-author a[title ^= "https://"]').each(function () {
+	$('#the-comment-list').find('tr.comment, tr[id ^= "comment-"]').find('.column-author a[title]').each(function () {
+		// Comment author URLs are the only URL with a title attribute in the author column.
 		var thisTitle = $(this).attr('title');
-			thisCommentId = $(this).parents('tr:first').attr('id').split("-");
+
+		var thisCommentId = $(this).parents('tr:first').attr('id').split("-");
 
 		$(this).attr("id", "author_comment_url_"+ thisCommentId[1]);
 
--- a/wp-content/plugins/akismet/akismet.php
+++ b/wp-content/plugins/akismet/akismet.php
@@ -6,7 +6,7 @@
 Plugin Name: Akismet
 Plugin URI: http://akismet.com/
 Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/">Sign up for an Akismet API key</a>, and 3) Go to your Akismet configuration page, and save your API key.
-Version: 3.0.4
+Version: 3.1.1
 Author: Automattic
 Author URI: http://automattic.com/wordpress-plugins/
 License: GPLv2 or later
@@ -35,8 +35,8 @@ if ( !function_exists( 'add_action' ) ) {
 	exit;
 }
 
-define( 'AKISMET_VERSION', '3.0.4' );
-define( 'AKISMET__MINIMUM_WP_VERSION', '3.1' );
+define( 'AKISMET_VERSION', '3.1.1' );
+define( 'AKISMET__MINIMUM_WP_VERSION', '3.2' );
 define( 'AKISMET__PLUGIN_URL', plugin_dir_url( __FILE__ ) );
 define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
 define( 'AKISMET_DELETE_LIMIT', 100000 );
--- a/wp-content/plugins/akismet/class.akismet.php
+++ b/wp-content/plugins/akismet/class.akismet.php
@@ -23,7 +23,7 @@ class Akismet {
 		self::$initiated = true;
 
 		add_action( 'wp_insert_comment', array( 'Akismet', 'auto_check_update_meta' ), 10, 2 );
-		add_action( 'preprocess_comment', array( 'Akismet', 'auto_check_comment' ), 1 );
+		add_filter( 'preprocess_comment', array( 'Akismet', 'auto_check_comment' ), 1 );
 		add_action( 'akismet_scheduled_delete', array( 'Akismet', 'delete_old_comments' ) );
 		add_action( 'akismet_scheduled_delete', array( 'Akismet', 'delete_old_comments_meta' ) );
 		add_action( 'akismet_schedule_cron_recheck', array( 'Akismet', 'cron_recheck' ) );
@@ -42,6 +42,9 @@ class Akismet {
 		
 		add_action( 'transition_comment_status', array( 'Akismet', 'transition_comment_status' ), 10, 3 );
 
+		// Run this early in the pingback call, before doing a remote fetch of the source uri
+		add_action( 'xmlrpc_call', array( 'Akismet', 'pre_check_pingback' ) );
+
 		if ( '3.0.5' == $GLOBALS['wp_version'] ) {
 			remove_filter( 'comment_text', 'wp_kses_data' );
 			if ( is_admin() )
@@ -161,6 +164,7 @@ class Akismet {
 			if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_single_event') ) {
 				if ( !wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) {
 					wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' );
+					do_action( 'akismet_scheduled_recheck', 'invalid-response-' . $response[1] );
 				}
 			}
 
@@ -180,7 +184,7 @@ class Akismet {
 		self::set_last_comment( $commentdata );
 		self::fix_scheduled_recheck();
 
-		return self::$last_comment;
+		return $commentdata;
 	}
 	
 	public static function get_last_comment() {
@@ -547,6 +551,7 @@ class Akismet {
 		if ( get_option( 'akismet_alert_code' ) || $status == 'invalid' ) {
 			// since there is currently a problem with the key, reschedule a check for 6 hours hence
 			wp_schedule_single_event( time() + 21600, 'akismet_schedule_cron_recheck' );
+			do_action( 'akismet_scheduled_recheck', 'key-problem-' . get_option( 'akismet_alert_code' ) . '-' . $status );
 			return false;
 		}
 
@@ -608,6 +613,7 @@ class Akismet {
 
 				delete_comment_meta( $comment_id, 'akismet_rechecking' );
 				wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' );
+				do_action( 'akismet_scheduled_recheck', 'check-db-comment-' . $status );
 				return;
 			}
 			delete_comment_meta( $comment_id, 'akismet_rechecking' );
@@ -616,6 +622,7 @@ class Akismet {
 		$remaining = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error'" );
 		if ( $remaining && !wp_next_scheduled('akismet_schedule_cron_recheck') ) {
 			wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' );
+			do_action( 'akismet_scheduled_recheck', 'remaining' );
 		}
 	}
 
@@ -633,6 +640,7 @@ class Akismet {
 		if ( $future_check > $check_range ) {
 			wp_clear_scheduled_hook( 'akismet_schedule_cron_recheck' );
 			wp_schedule_single_event( time() + 300, 'akismet_schedule_cron_recheck' );
+			do_action( 'akismet_scheduled_recheck', 'fix-scheduled-recheck' );
 		}
 	}
 
@@ -809,11 +817,71 @@ class Akismet {
 			'timeout' => 15
 		);
 
-		$akismet_url = "http://{$http_host}/1.1/{$path}";
+		$akismet_url = $http_akismet_url = "http://{$http_host}/1.1/{$path}";
+
+		/**
+		 * Try SSL first; if that fails, try without it and don't try it again for a while.
+		 */
+
+		$ssl = $ssl_failed = false;
+
+		// Check if SSL requests were disabled fewer than X hours ago.
+		$ssl_disabled = get_option( 'akismet_ssl_disabled' );
+
+		if ( $ssl_disabled && $ssl_disabled < ( time() - 60 * 60 * 24 ) ) { // 24 hours
+			$ssl_disabled = false;
+			delete_option( 'akismet_ssl_disabled' );
+		}
+		else if ( $ssl_disabled ) {
+			do_action( 'akismet_ssl_disabled' );
+		}
+
+		if ( ! $ssl_disabled && function_exists( 'wp_http_supports') && ( $ssl = wp_http_supports( array( 'ssl' ) ) ) ) {
+			$akismet_url = set_url_scheme( $akismet_url, 'https' );
+
+			do_action( 'akismet_https_request_pre' );
+		}
+
 		$response = wp_remote_post( $akismet_url, $http_args );
+
 		Akismet::log( compact( 'akismet_url', 'http_args', 'response' ) );
-		if ( is_wp_error( $response ) )
+
+		if ( $ssl && is_wp_error( $response ) ) {
+			do_action( 'akismet_https_request_failure', $response );
+
+			// Intermittent connection problems may cause the first HTTPS
+			// request to fail and subsequent HTTP requests to succeed randomly.
+			// Retry the HTTPS request once before disabling SSL for a time.
+			$response = wp_remote_post( $akismet_url, $http_args );
+			
+			Akismet::log( compact( 'akismet_url', 'http_args', 'response' ) );
+
+			if ( is_wp_error( $response ) ) {
+				$ssl_failed = true;
+
+				do_action( 'akismet_https_request_failure', $response );
+
+				do_action( 'akismet_http_request_pre' );
+
+				// Try the request again without SSL.
+				$response = wp_remote_post( $http_akismet_url, $http_args );
+
+				Akismet::log( compact( 'http_akismet_url', 'http_args', 'response' ) );
+			}
+		}
+
+		if ( is_wp_error( $response ) ) {
+			do_action( 'akismet_request_failure', $response );
+
 			return array( '', '' );
+		}
+
+		if ( $ssl_failed ) {
+			// The request failed when using SSL but succeeded without it. Disable SSL for future requests.
+			update_option( 'akismet_ssl_disabled', time() );
+			
+			do_action( 'akismet_https_disabled' );
+		}
 
 		return array( $response['headers'], $response['body'] );
 	}
@@ -956,4 +1024,65 @@ p {
 			error_log( print_r( compact( 'akismet_debug' ), true ) );
 		}
 	}
+
+	public static function pre_check_pingback( $method ) {
+		if ( $method !== 'pingback.ping' )
+			return;
+
+		global $wp_xmlrpc_server;
+	
+		if ( !is_object( $wp_xmlrpc_server ) )
+			return false;
+	
+		// Lame: tightly coupled with the IXR class.
+		$args = $wp_xmlrpc_server->message->params;
+	
+		if ( !empty( $args[1] ) ) {
+			$post_id = url_to_postid( $args[1] );
+
+			// If this gets through the pre-check, make sure we properly identify the outbound request as a pingback verification
+			Akismet::pingback_forwarded_for( null, $args[0] );
+			add_filter( 'http_request_args', array( 'Akismet', 'pingback_forwarded_for' ), 10, 2 );
+
+			$comment = array(
+				'comment_author_url' => $args[0],
+				'comment_post_ID' => $post_id,
+				'comment_author' => '',
+				'comment_author_email' => '',
+				'comment_content' => '',
+				'comment_type' => 'pingback',
+				'akismet_pre_check' => '1',
+				'comment_pingback_target' => $args[1],
+			);
+
+			$comment = Akismet::auto_check_comment( $comment );
+
+			if ( isset( $comment['akismet_result'] ) && 'true' == $comment['akismet_result'] ) {
+				// Lame: tightly coupled with the IXR classes. Unfortunately the action provides no context and no way to return anything.
+				$wp_xmlrpc_server->error( new IXR_Error( 0, 'Invalid discovery target' ) );
+			}
+		}
+	}
+	
+	public static function pingback_forwarded_for( $r, $url ) {
+		static $urls = array();
+	
+		// Call this with $r == null to prime the callback to add headers on a specific URL
+		if ( is_null( $r ) && !in_array( $url, $urls ) ) {
+			$urls[] = $url;
+		}
+
+		// Add X-Pingback-Forwarded-For header, but only for requests to a specific URL (the apparent pingback source)
+		if ( is_array( $r ) && is_array( $r['headers'] ) && !isset( $r['headers']['X-Pingback-Forwarded-For'] ) && in_array( $url, $urls ) ) {
+			$remote_ip = preg_replace( '/[^a-fx0-9:.,]/i', '', $_SERVER['REMOTE_ADDR'] );
+		
+			// Note: this assumes REMOTE_ADDR is correct, and it may not be if a reverse proxy or CDN is in use
+			$r['headers']['X-Pingback-Forwarded-For'] = $remote_ip;
+
+			// Also identify the request as a pingback verification in the UA string so it appears in logs
+			$r['user-agent'] .= '; verifying pingback from ' . $remote_ip;
+		}
+
+		return $r;
+	}
 }
\ No newline at end of file
--- a/wp-content/plugins/akismet/readme.txt
+++ b/wp-content/plugins/akismet/readme.txt
@@ -1,9 +1,9 @@
 === Akismet ===
 Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, cfinke, automattic, jgs
 Tags: akismet, comments, spam
-Requires at least: 3.1
-Tested up to: 4.1
-Stable tag: 3.0.4
+Requires at least: 3.2
+Tested up to: 4.1.1
+Stable tag: 3.1.1
 License: GPLv2 or later
 
 Akismet checks your comments against the Akismet Web service to see if they look like spam or not.
@@ -30,6 +30,18 @@ Upload the Akismet plugin to your blog, Activate it, then enter your [Akismet.co
 
 == Changelog ==
 
+= 3.1.1 =
+*Release Date - 17th March, 2015*
+
+* Improvements to the "Remove comment author URL" JavaScript
+* Include the pingback pre-check from the 2.6 branch.
+
+= 3.1 =
+*Release Date - 11th March, 2015*
+
+* Use HTTPS by default for all requests to Akismet.
+* Fix for a situation where Akismet might strip HTML from a comment.
+
 = 3.0.4 =
 *Release Date - 11th December, 2014*
 
--- a/wp-content/plugins/akismet/views/config.php
+++ b/wp-content/plugins/akismet/views/config.php
@@ -64,13 +64,43 @@
 										<tbody>
 											<?php if ( !defined( 'WPCOM_API_KEY' ) ):?>
 											<tr>
-												<th width="10%" align="left" scope="row"><?php esc_html_e('API Key', 'akismet');?></th>
+												<th class="akismet-api-key" width="10%" align="left" scope="row"><?php esc_html_e('API Key', 'akismet');?></th>
 												<td width="5%"/>
 												<td align="left">
 													<span class="api-key"><input id="key" name="key" type="text" size="15" maxlength="12" value="<?php echo esc_attr( get_option('wordpress_api_key') ); ?>" class="regular-text code <?php echo $akismet_user->status;?>"></span>
 												</td>
 											</tr>
 											<?php endif; ?>
+											<?php if ( isset( $_GET['ssl_status'] ) ) { ?>
+												<tr>
+													<th align="left" scope="row"><?php esc_html_e( 'SSL Status', 'akismet' ); ?></th>
+													<td></td>
+													<td align="left">
+														<p>
+															<?php
+
+															if ( ! function_exists( 'wp_http_supports' ) ) {
+																?><b><?php esc_html_e( 'Disabled.', 'akismet' ); ?></b> <?php printf( esc_html( 'Your WordPress installation does not include the function %s; upgrade to the latest version of WordPress.', 'akismet' ), '<code>wp_http_supports</code>' ); ?><?php
+															}
+															else if ( ! wp_http_supports( array( 'ssl' ) ) ) {
+																?><b><?php esc_html_e( 'Disabled.', 'akismet' ); ?></b> <?php esc_html_e( 'Your Web server cannot make SSL requests; contact your Web host and ask them to add support for SSL requests.', 'akismet' ); ?><?php
+															}
+															else {
+																$ssl_disabled = get_option( 'akismet_ssl_disabled' );
+
+																if ( $ssl_disabled ) {
+																	?><b><?php esc_html_e( 'Temporarily disabled.', 'akismet' ); ?></b> <?php esc_html_e( 'Akismet encountered a problem with a previous SSL request and disabled it temporarily. It will begin using SSL for requests again shortly.', 'akismet' ); ?><?php
+																}
+																else {
+																	?><b><?php esc_html_e( 'Enabled.', 'akismet' ); ?></b> <?php esc_html_e( 'All systems functional.', 'akismet' ); ?><?php
+																}
+															}
+
+															?>
+														</p>
+													</td>
+												</tr>
+											<?php } ?>
 											<tr>
 												<th align="left" scope="row"><?php esc_html_e('Comments', 'akismet');?></th>
 												<td></td>
@@ -95,7 +125,7 @@
 													
 													printf(
 														_n(
-															'Spam in the <a href="%s">spam folder</a> older than 1 day is deleted automatically.',
+															'Spam in the <a href="%1$s">spam folder</a> older than 1 day is deleted automatically.',
 															'Spam in the <a href="%1$s">spam folder</a> older than %2$d days is deleted automatically.',
 															$delete_interval,
 															'akismet'
--- a/wp-content/plugins/akismet/views/notice.php
+++ b/wp-content/plugins/akismet/views/notice.php
@@ -93,7 +93,7 @@
 <div class="wrap alert critical">
 	<?php if ( $level == 'yellow' ): ?>
 	<h3 class="key-status failed"><?php esc_html_e("You're using your Akismet key on more sites than your Pro subscription allows.", 'akismet'); ?></h3>
-	<p class="description"><?php printf( __('If you would like to use Akismet on more than 10 sites, you will need to <a href="%s" target="_blank">upgrade to an Enterprise subscription</a>. If you have any questions, please <a href="%s" target="_blank">get in touch with our support team</a>', 'akismet'), 'https://akismet.com/account/upgrade/', 'https://akismet.com/contact/'); ?></p>
+	<p class="description"><?php printf( __('Your Pro subscription allows the use of Akismet on only one site. Please <a href="http://docs.akismet.com/billing/add-more-sites/">purchase additional Pro subscriptions</a> or upgrade to an Enterprise subscription that allows the use of Akismet on unlimited sites.<br /><br />If you have any questions, please get in touch with our support team.', 'akismet'), 'https://akismet.com/account/upgrade/', 'https://akismet.com/contact/'); ?></p>
 	<?php elseif ( $level == 'red' ): ?>
 	<h3 class="key-status failed"><?php esc_html_e("You're using Akismet on far too many sites for your Pro subscription.", 'akismet'); ?></h3>
 	<p class="description"><?php printf( __('To continue your service, <a href="%s" target="_blank">upgrade to an Enterprise subscription</a>, which covers an unlimited number of sites. Please <a href="%s" target="_blank">contact our support team</a> with any questions.', 'akismet'), 'https://akismet.com/account/upgrade/', 'https://akismet.com/contact/'); ?></p>
--- a/wp-content/plugins/akismet/wrapper.php
+++ b/wp-content/plugins/akismet/wrapper.php
@@ -7,46 +7,32 @@ $akismet_api_host = Akismet::get_api_key() . '.rest.akismet.com';
 $akismet_api_port = 80;
 
 function akismet_test_mode() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::is_test_mode()' );
-
 	return Akismet::is_test_mode();
 }
 
 function akismet_http_post( $request, $host, $path, $port = 80, $ip = null ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::http_post()' );
-
 	$path = str_replace( '/1.1/', '', $path );
 
 	return Akismet::http_post( $request, $path, $ip ); 
 }
 
 function akismet_microtime() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::_get_microtime()' );
-
 	return Akismet::_get_microtime();
 }
 
 function akismet_delete_old() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::delete_old_comments()' );
-
 	return Akismet::delete_old_comments();
 }
 
 function akismet_delete_old_metadata() { 
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::delete_old_comments_meta()' );
-
 	return Akismet::delete_old_comments_meta();
 }
 
 function akismet_check_db_comment( $id, $recheck_reason = 'recheck_queue' ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::check_db_comment()' );
-   
    	return Akismet::check_db_comment( $id, $recheck_reason );
 }
 
 function akismet_rightnow() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::rightnow_stats()' );
-
 	if ( !class_exists( 'Akismet_Admin' ) )
 		return false;
    
@@ -63,13 +49,9 @@ function akismet_load_js_and_css() {
 	_deprecated_function( __FUNCTION__, '3.0' );
 }
 function akismet_nonce_field( $action = -1 ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'wp_nonce_field' );
-
 	return wp_nonce_field( $action );
 }
 function akismet_plugin_action_links( $links, $file ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::plugin_action_links()' );
-
 	return Akismet_Admin::plugin_action_links( $links, $file );
 }
 function akismet_conf() {
@@ -79,21 +61,15 @@ function akismet_stats_display() {
 	_deprecated_function( __FUNCTION__, '3.0' );
 }
 function akismet_stats() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::dashboard_stats()' );
-
 	return Akismet_Admin::dashboard_stats();
 }
 function akismet_admin_warnings() {
 	_deprecated_function( __FUNCTION__, '3.0' );
 }
 function akismet_comment_row_action( $a, $comment ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::comment_row_action()' );
-
 	return Akismet_Admin::comment_row_actions( $a, $comment );
 }
 function akismet_comment_status_meta_box( $comment ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::comment_status_meta_box()' );
-
 	return Akismet_Admin::comment_status_meta_box( $comment );
 }
 function akismet_comments_columns( $columns ) {
@@ -105,63 +81,39 @@ function akismet_comment_column_row( $column, $comment_id ) {
 	_deprecated_function( __FUNCTION__, '3.0' );
 }
 function akismet_text_add_link_callback( $m ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::text_add_link_callback()' );
-
 	return Akismet_Admin::text_add_link_callback( $m );
 }
 function akismet_text_add_link_class( $comment_text ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::text_add_link_class()' );
-
 	return Akismet_Admin::text_add_link_class( $comment_text );
 }
 function akismet_check_for_spam_button( $comment_status ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::check_for_spam_button()' );
-
 	return Akismet_Admin::check_for_spam_button( $comment_status );
 }
 function akismet_submit_nonspam_comment( $comment_id ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::submit_nonspam_comment()' );
-
 	return Akismet::submit_nonspam_comment( $comment_id );
 }
 function akismet_submit_spam_comment( $comment_id ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::submit_spam_comment()' );
-
 	return Akismet::submit_spam_comment( $comment_id );
 }
 function akismet_transition_comment_status( $new_status, $old_status, $comment ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::transition_comment_status()' );
-
 	return Akismet::transition_comment_status( $new_status, $old_status, $comment );
 }
 function akismet_spam_count( $type = false ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::get_spam_count()' );
-
 	return Akismet_Admin::get_spam_count( $type );
 }
 function akismet_recheck_queue() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::recheck_queue()' );
-
 	return Akismet_Admin::recheck_queue();
 }
 function akismet_remove_comment_author_url() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::remove_comment_author_url()' );
-
 	return Akismet_Admin::remove_comment_author_url();
 }
 function akismet_add_comment_author_url() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::add_comment_author_url()' );
-
 	return Akismet_Admin::add_comment_author_url();
 }
 function akismet_check_server_connectivity() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::check_server_connectivity()' );
-
 	return Akismet_Admin::check_server_connectivity();
 }
 function akismet_get_server_connectivity( $cache_timeout = 86400 ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::()' );
-
 	return Akismet_Admin::get_server_connectivity( $cache_timeout );
 }
 function akismet_server_connectivity_ok() {
@@ -170,101 +122,63 @@ function akismet_server_connectivity_ok() {
 	return true;
 }
 function akismet_admin_menu() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::admin_menu()' );
-
 	return Akismet_Admin::admin_menu();
 }
 function akismet_load_menu() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet_Admin::load_menu()' );
-
 	return Akismet_Admin::load_menu();
 }
 function akismet_init() {
 	_deprecated_function( __FUNCTION__, '3.0' );
 }
 function akismet_get_key() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::get_api_key()' );
-
 	return Akismet::get_api_key();
 }
 function akismet_check_key_status( $key, $ip = null ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::check_key_status()' );
-
 	return Akismet::check_key_status( $key, $ip );
 }
 function akismet_update_alert( $response ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::update_alert()' );
-
 	return Akismet::update_alert( $response );
 }
 function akismet_verify_key( $key, $ip = null ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::verify_key()' );
-
 	return Akismet::verify_key( $key, $ip );
 }
 function akismet_get_user_roles( $user_id ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::get_user_roles()' );
-
 	return Akismet::get_user_roles( $user_id );
 }
 function akismet_result_spam( $approved ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::comment_is_spam()' );
-
 	return Akismet::comment_is_spam( $approved );
 }
 function akismet_result_hold( $approved ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::comment_needs_moderation()' );
-
 	return Akismet::comment_needs_moderation( $approved );
 }
 function akismet_get_user_comments_approved( $user_id, $comment_author_email, $comment_author, $comment_author_url ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::get_user_comments_approved()' );
-
 	return Akismet::get_user_comments_approved( $user_id, $comment_author_email, $comment_author, $comment_author_url );
 }
 function akismet_update_comment_history( $comment_id, $message, $event = null ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::update_comment_history()' );
-
 	return Akismet::update_comment_history( $comment_id, $message, $event );
 }
 function akismet_get_comment_history( $comment_id ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::get_comment_history()' );
-
 	return Akismet::get_comment_history( $comment_id );
 }
 function akismet_cmp_time( $a, $b ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::_cmp_time()' );
-
 	return Akismet::_cmp_time( $a, $b );
 }
 function akismet_auto_check_update_meta( $id, $comment ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::auto_check_update_meta()' );
-
 	return Akismet::auto_check_update_meta( $id, $comment );
 }
 function akismet_auto_check_comment( $commentdata ) {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::auto_check_comment()' );
-
 	return Akismet::auto_check_comment( $commentdata );
 }
 function akismet_get_ip_address() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::get_ip_address()' );
-
 	return Akismet::get_ip_address();
 }
 function akismet_cron_recheck() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::cron_recheck()' );
-
 	return Akismet::cron_recheck();
 }
 function akismet_add_comment_nonce() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::add_comment_nonce()' );
-
 	return Akismet::add_comment_nonce( $post_id );
 }
 function akismet_fix_scheduled_recheck() {
-	_deprecated_function( __FUNCTION__, '3.0', 'Akismet::fix_scheduled_recheck()' );
-
 	return Akismet::fix_scheduled_recheck();
 }
 function akismet_spam_comments() {
@@ -290,4 +204,10 @@ function akismet_kill_proxy_check( $option ) {
 	_deprecated_function( __FUNCTION__, '3.0' );
 
 	return 0;
+}
+function akismet_pingback_forwarded_for( $r, $url ) {
+	return Akismet::pingback_forwarded_for( $r, $url );
+}
+function akismet_pre_check_pingback( $method ) {
+	return Akismet::pre_check_pingback( $method );
 }
\ No newline at end of file
--- a/wp-includes/capabilities.php
+++ b/wp-includes/capabilities.php
@@ -1374,21 +1374,25 @@ function current_user_can( $capability ) {
  * @return bool
  */
 function current_user_can_for_blog( $blog_id, $capability ) {
-	if ( is_multisite() )
-		switch_to_blog( $blog_id );
+	$switched = is_multisite() ? switch_to_blog( $blog_id ) : false;
 
 	$current_user = wp_get_current_user();
 
-	if ( empty( $current_user ) )
+	if ( empty( $current_user ) ) {
+		if ( $switched ) {
+			restore_current_blog();
+		}
 		return false;
+	}
 
 	$args = array_slice( func_get_args(), 2 );
 	$args = array_merge( array( $capability ), $args );
 
 	$can = call_user_func_array( array( $current_user, 'has_cap' ), $args );
 
-	if ( is_multisite() )
+	if ( $switched ) {
 		restore_current_blog();
+	}
 
 	return $can;
 }
--- a/wp-includes/class-wp-editor.php
+++ b/wp-includes/class-wp-editor.php
@@ -117,12 +117,6 @@ final class _WP_Editors {
 			// A cookie (set when a user resizes the editor) overrides the height.
 			$cookie = (int) get_user_setting( 'ed_size' );
 
-			// Upgrade an old TinyMCE cookie if it is still around, and the new one isn't.
-			if ( ! $cookie && isset( $_COOKIE['TinyMCE_content_size'] ) ) {
-				parse_str( $_COOKIE['TinyMCE_content_size'], $cookie );
- 				$cookie = $cookie['ch'];
-			}
-
 			if ( $cookie )
 				$set['editor_height'] = $cookie;
 		}
--- a/wp-includes/formatting.php
+++ b/wp-includes/formatting.php
@@ -1309,21 +1309,23 @@ function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'displa
 }
 
 /**
- * Ensures a string is a valid SQL order by clause.
+ * Ensures a string is a valid SQL 'order by' clause.
  *
- * Accepts one or more columns, with or without ASC/DESC, and also accepts
- * RAND().
+ * Accepts one or more columns, with or without a sort order (ASC / DESC).
+ * e.g. 'column_1', 'column_1, column_2', 'column_1 ASC, column_2 DESC' etc.
+ *
+ * Also accepts 'RAND()'.
  *
  * @since 2.5.1
  *
- * @param string $orderby Order by string to be checked.
- * @return false|string Returns the order by clause if it is a match, false otherwise.
+ * @param string $orderby Order by clause to be validated.
+ * @return string|bool Returns $orderby if valid, false otherwise.
  */
-function sanitize_sql_orderby( $orderby ){
-	preg_match('/^\s*([a-z0-9_]+(\s+(ASC|DESC))?(\s*,\s*|\s*$))+|^\s*RAND\(\s*\)\s*$/i', $orderby, $obmatches);
-	if ( !$obmatches )
-		return false;
-	return $orderby;
+function sanitize_sql_orderby( $orderby ) {
+	if ( preg_match( '/^\s*(([a-z0-9_]+|`[a-z0-9_]+`)(\s+(ASC|DESC))?\s*(,\s*(?=[a-z0-9_`])|$))+$/i', $orderby ) || preg_match( '/^\s*RAND\(\s*\)\s*$/i', $orderby ) ) {
+		return $orderby;
+	}
+	return false;
 }
 
 /**
--- a/wp-includes/functions.php
+++ b/wp-includes/functions.php
@@ -2049,7 +2049,7 @@ function wp_check_filetype( $filename, $mimes = null ) {
 	$ext = false;
 
 	foreach ( $mimes as $ext_preg => $mime_match ) {
-		$ext_preg = '!\.(' . $ext_preg . ')(\?.*)?$!i';
+		$ext_preg = '!\.(' . $ext_preg . ')$!i';
 		if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
 			$type = $mime_match;
 			$ext = $ext_matches[1];
--- a/wp-includes/js/plupload/plupload.flash.swf
+++ b/wp-includes/js/plupload/plupload.flash.swf
@@ -1,108 +1,99 @@
 CWS
-  xԼy|SE?~gܤKZZ4`m-ZISM,>y Eqܵloڴ>s4E|>񭜹3gf̜9̽q"UAk)EgkM_.]iOC1Dcĉ˖-l	XISNX6yb||E{·||{|1Kx ڑhRv&3&E9!H́H-؞O4a56_p_GG5#rǇ"xЉ
O5	^KݑJfj?óѶhsg s
-݅Htt#p0vxgqeXj}iG|-U.Ss%KJ'M:!SJcP-`@W䟧{
-lAw>(@(-8Iq(Ôœ_g+.ԑ7fծ=WvקPζ>>O٧ڧҧӧ~էܧݧ֧>֧v5+/ѳv3]v3⓳s.j_]55s|f~fv3?u3?
ŧO'=>O}Wu;'?\x~Uo-&8u[?~uN?䡫:?~_8w7^{/
-pԉWϗZ{~©?>xe,}Ϊ+oN3u,~_1rT6;|gTwn?nyd+|{˥IOѳT,Aw~,[V=NmpRO)zg:{奏ms!Қ[4ڜ#eBp)iVEK]"ޢόF#A_?6HhRDg+v1ٵ33W$屘o&S
-"fF~lL[#P0lE%lpjk[ޚGg^,rB&xGķ65@_	uim6L0<Hjh&&gϫKf9SEc`k?g~`<M%T^Sӄe89ڔa;Z&S\KK0fCyH4Vi|G/TXm@9z_%G@PJ5!˃[ktvh[G-̥6Zch[Z
-lۢK*H;ֿqn)ih5HQAnوmAbw<g~g{-(th<S|X݊@!M3}AhMTR+Gڬx	AA֔XX8R-)kmG;c`cZ>#hi5^֑XaSnoRYk"RxEWg5ì
-J
- tı+¨&[\K2%=M*S5Ptw)dN۵d[.@ sa_</6#$krFf΢Em7kZaK8N`hcKs#Q_;m=s%L!T(ؑPK[$$e,WL<UhE&)nEaGQO!_0ʩrY 4*A}m.7 jV"!ⱀM
-|MTdSmv>4KSb	(`7W$ۢi=5)g3mB$7
05QSΝ3QRJ}6aSf(PT"q[SV
-2l!_%ȓ9wk0LE+q,dJ5d0UՓ
7A03-6AY&)h!IpzMXm AǴFz]2xn4'){E	iAMQ 8-&ӕ9hPDnZdhE lŶE`zSGk8ng"mPE0.G4]"oYS,mlE-Bf|^֥A))~sc"5l}g)idwdA.8"m9!^)52W5+/SFE(R,g&$<R0FLYD>1erqt6::;(@r᥃L˚yLk1βeŲ^OjN#MaA>⑝>P,h]iYT*ggmz8hnj4E:DM1?>/K}v(I
-avN]<EtkzXq )Tgu?&|ßXFQ}:;*k6B&|޼23WqYeTfv*S
N+
"@`Ae>ɋXr&vnMM;]M-!uVk"HDƢ9M	o3DlYь6ϤytFؤÖ<$Kv3܊H3?eIlPn:SMьAu[75ĢzSQa!%X
-JVڛlN`P`32kT_S()Ǎ}1Kwm|VsH1uڱm88|E?sнƊhhN#=f;ΫoP7U;ۏ+Oس3E-HsԴ;Gldiu6o\]A٥~<J3G=46.nc
B,! E
-m{)g=,k-kYNrxlZgZߩ~o
h(	_K܊nn⢾Uyu:P7EL'eiʥ]1IS^,@#W_z]լUb*ng~㩝Qj_];/9ت`
-c;twv$zɌPD:gS[moB`th=n]ZPӃ9g`{DVVd%˳bpk.Z0=3qf)#P~fZ0v;x?!]do8/
fz6~mhQYvR\JK0}U"Λ5.W=N`6-ښ9M-8VWD;,(o	w!N:'}xGٳl39P0oD0:zz<Us=T.(S]TW_^_EEe
-yMZz[-Zy9JȷVYjϼڪJʪuM*TU3DrL\ijf
-3W
FTebeU.i+ʩh_]
-rj4(9G.)C3,/7P,VϭIxlGE$袪r~QMsV51-/H}j=uٳEm|$,7=z~?!Ջ쒚	X@j#0cfSw` 
tF#jNUE}>dspjN?:@^$j<Dճ4V*/(+W5rHqLa633>Z,UsgzU*znv|McfUSiҿRK]BbO
-RjR/AF`aq`U-JC>VGHkK3iN^Q1OQP%hT-,U4f|tPMVdTF+'N.+;h}i慤s |\E_+¼0h6ȾŔ%!;¾g]ct ZalZa,9eLhi57W~_8˴i{AyA>#n}ÒL8mT KTKjeɛk!YEٖ$(ӦcjpiBph<PUAMN0!u_O
-^mUF17#*tA`Ei
-Zl6uHM:#	GW|椖O KYZ"583p_as
t4&6	3hODDt8_b+eelb!MsY+[LwcQK\M
-_d|q◖DXttΪI	RĐse5E·OM9Tϣ(lhR۸bי
-خPy!k %xiۂִ$Ro<3E+V@H(h1f=UglV{7[M
-{hK7G("V72^#-/A٣ן"֞ujbm6	
-h.F:)%V'vrv_Ŧ՗ݷNFTA+̧8lE'|)9rGy#ݾ[{J]CG)wc5Ի%<O]z--ME
-Lo1%3,X'wN22іA(V.eStc4/2̍ydKvzm%º 5P]x;c͕,4#4ɼa*fϼ0X5i<QgUo|҆^d
-O~|xk˩HF{d.'1b<m!N&yZiVKھb{uHi(핗=Ĵ،[f'neA]7]6{i,o"}KVPoH\%6PmUKdCD5̳ $eL/	`Lg.q6_@[[K[Z1b[ zeúfZ|6,kEg,i(-XtrgiLH)}[Kk͌UYk33u
ZhhZ­ikv':.[ℲI?2u 
-<;ti3Y`W' NjKG\
C'#Ҳ,\ErNu;Nͥt-sc-D|%)C <6摶)'d\5:In-g+4GZQlKftLG9;VO!ǣP8Wz:fF:ceHc΄LibrhQ=rZ1aZ90=،g-͚f}ִ"lhRm|\|KJBvW6cVDE*R,쯵`c!gּMPgueyU&y4#؏DoPq}և1@j/k]4XE$:9(5/sgFpԄq~uG^]{K.5$n]ISn3"pqsHBWsΑJf<jsT/BaY8G%0sq4&_Zӧ[Ǩ+J:OsKt6Ig)moIdE|9
bpz^lKpHE~ԓ`s
-+:	C>G,j3Fw;'Z[7FHk Sas܈K}4"l^.jXXsptP3ݿt.++_z𤲲#ReˁjK8x SFvJjH>j7MflƁH|Ys9]3wETV8p` Y)csk4b )/0`Q5c(<a- HSfH #FEv,bR(oTڤR&wؿo]KemрdГvK?n]PMM1m
-̐$b)Nw}׿ݨQl?cT3;*k	;JU+;*1s}8g9;p\0Q(idp 5m9x∋~"5a"D>GxF۬2CD48.0QWUIvTQl!oR%ճj+ksT,
NqZY[lb xZfULcEH-9
-VTZW>VM)8hZE(R`W܌q3$wP%OX3fEIVˊB4^|b^|)=!^0/z?ƋOċwP}^9/
-٢>^J->Q-^j
-Wԫ];j]=}CDהIEM:Py%XB	P4+2J,QB(yQIVҋнJbCOJ.EokxK[B3}^ϯӑp"9Sc:vB;f1sYݒBbVELuC0Y

.rZ*k#쥬dߋݨ㑷9Y/Z7@NQ˖ema pB,fr&ήeZllqJ@Ul1rIl1CmQOf3؈)lZFSdumi;4Ul6u-:::t3t5Gg׵l"]/֭%::k{|O5붽uݩG1}_]s]:	:l?Yg t6EgSCAl.uVUnҋgZ/::Շzt6O/>RguVz5lΎBdΎKY.̫<YHg-:UMg:C/=^g1uYΖlΖlN?t_z?u/d:[VNX8p
-`-Tihw:(W{ـs  tqӝ.\!.\ l3`*Հk ע: s^170s+&̀[ n<ng>>w
p/h <CxnC(?3}Гx>t׳-/2}B'bm_bzvw v^xuLIox> >|
-9 _|= ?~
-
;>JOZX
8p`
d)\gr}\?Lgy6p.<9pr}E\p  \	hc`#lll\p
pz
[7npv;wr}}\ -6(ms}ē\q4g<x"hrzAk;+;x
-U4{
:
]{} c'O |_|  .m~'π_ ~'׫WzjU?$Ug'N
-8p=ϳ g8p>z .\
+  xڬ`63;e[6`	IZR!	`\ƒeR"[$Sn{O+tReH={ά$˄}3gڙffR(ʀRȔ!kLQ6&ϫ*^nMFؑx}+Vqh	&M_:qĉc16-]9-v)
+
Cb{"cGLKw
.}a-?atD[)pƯF|'.
1M<5GUaÊKl&:%c^j=i4w0 3PMP,Nh;-p|Q7鏑*R9G֥r޸Jx$W	[ӠcEd	6pRH=F)罽*vXEuّ!k^P(?Aq*chnLd75|@oÎcjWW}W}W}WW}W}W}W}WݴN޸bYψ/=3|޹e3xU|U|U&dwv;ڝ|N~Ni'WJ6oܩʾDEޙ͝g"Ϻo^G?mG?Ԇo_:BL4a;xie\8iw>+?8ձ*/z+./i8tָoM-i)I<+vߵo4Ǽ]f)w(3u'Z[gToiޫ?2o]}G21a'bn2y`B7=wL}9sOyqݴtE,RRxihŘ6M2U>M},yG<WeѨwGLɬ
+qÑ&nǳBa<,ko]J#=7ic19lYs(O[h-&V8KÑX>p57[:wf]ڸ7ah4{Y'vcqHBG/Kjmlhnurw)[nGZ^PseNy$Em19 aI*P16@mbڹrAX7JF[q%UVjP\W}PuH[y=kPZ3]Sŭ2P,]z5ܯbH]**TW[V]2_ٯNdshZ&}3ks,6|@ܿȁ7Ŧ{c#)gRgt+_F7h	zɪY `_YVKpXc6=h5 1_P5WFc&߬[
k
+bb͔5"Q?fkl@Q-edbUf(Q;:#k-~/TmKXkl5B#͡ ܹwYMl??_MsFR5YbDcEmljVA=:zrLǱp\ʖT蘟ΤD^(-54sQ I7$mĹf9V*kZY&z@"h[.]{g[;1*RX~b#oB:ļٿĖBԅhE}v#ϜƶH<jcD-MAjhrF*c쑶x[$o{Mh6o㚍%o9gϚ	*`x/5bSf0jD01{c+VQؔfˑ?LYQ$J5"mmbp1HKL>7-/l"HgOb5CM^Z][N[oY=Fk(vhԘHI܇Έ4vVItcQ{[SmdYlv&nkgxLFHYf-3CP'kMxM
+Li14]"rlIˎUHe=
lAҸy> }rnqOZ
+lI?UO}d6Z#\QH"$
Ը&QPt`_tM|$2XL$fn匜tv2e!rQtBt% !)/39(nR}9 dp*K'WQxpT}8H}R%#
+3Bra8rGWjJwbKf8J|;SK^3w[Cv&C--:ɇ8o
+7.Yq\:0>/(oY|ʒYa@&V.ś}Vl ƶ(0N6Y%;a7F?oWEl
$o˗OɌM0P2n}\AN*x%BZ6:ItlR+U*Tqud]+M*EzzcތrҴK
JdsaaDPT|BVF$i7[c?&Q*ՊZmokP<@4GP֖;dBta瓥'_Oz0$);{yu!j(yEmܲ6H$iV%ES#ꤛU呶p
*[G(LH:wΌ>%\V#4Qy턲~ gIbJOž./mRthC],"dh$&I5Ԝee@ `v
Zmyyi)g=$c-k&NFݻ^2B#{_F$
%fC@<1QW]U%*VW3@fXGeS[UᶺJ: ^FWW3fWΩUj3,Z-zmݼ93ˊ:U7-_="Ca¹iK2=;LMhr줛Bқ̒²uH)\-u顆=򕓀D+
Ng'dJw<v[[Z*m+jߦB5K:Uy&*6j߈88Cn3iD/H~"㘼ȆS*<y*kkMEJyL2LZh;w4T[iE;\Z
8ΜY]][kOTq l`99u,2sY++D(]_j]9=oQ^e+k*^hN]BZ==jVuy=se|QSϩs*+3+**6Ϋ,_YaMq4Z<hl3ΩE*82[ʦUU9j+U-)Gaeg%9*画iϙ.B6@TՕr{SgW%3?"t
V1lAu ɼeuA.l{V}]{մF4UYW\ܾ"{G'Ջ+dc|QZg*Qnf͖JSX)ȿ#T-鵕*rNzyٜY}>r¹s*>&⬨Q]W6qN匲:l9c^٢YЂsgVH+'Ǥѕ3=me^9{6bFechS^g,ɁLlL-[_^9ZHFH^e2QMRX$m )-kUT`MunbZ*,Zlu*4/esdM-Kf²r0\uKh$[':!~8pQ;a6uxﱤKKj3u;:p	zcte~{ВVl]G!#I@O0i!/y>y+==.oYyʕ%KW,pHITnN'O&Yդ'5VtM'8,/1JL^P,[lɓq,|~C
+1ݦ7fe,܄f{O,Ti:>B@}SSkuC@׭jkr4qGتXߚViEl_Gw2Վ
 )rWeKӊGet'nMj!P-YtEk;r`-,c,`:|H+H$#llP?+Y(}VKKdxO1ڽ͋шrCX1uxǬ{2ÖSaLg"nyi1/;bA:Fg8Eٚq`;T[%Nh`MMseLwiRySnÀWݎ-etCzEMT@h-Z*
+tZ4:싷7ymF򦊨+m>a,.IP''WlJϐ&]JM<qxYw W[+s"V[8'
czkM>V+Od׳}פ6o@l̦%AVKRi9)eB(+\n=SfKCW_W%&k,jAiE2uQƒj=jqcJ^2L0ӎIW"y7tF
S#Y~&=Z??_鞸9fE[PҏNu	h]GA;9KXFV:ΑdbkE+^yc'&b&(ر<(ObtKztq#RTO.;@v`Gy9CL..f!ɝObz(_z|$msϚ_9*.۬:SU@*"9,oYEsm*dZ@׆*yT|8?u1zqf'b3-64覀4
8*[l>j#DrKzS4=QbhҔ+Lyy;$Ȼ|KIʹU3fVe9ͫ`&_?B-~b4Xb媿NxaqQo.ǊFSG]!-'i	Sjܹ0#-J,״V~Q:nA1\,eіje=rJ@'F:A7:2Nɍk<JJ>^2/k&i[ھyzx{J
:GmC>[|O)Qic2*ɉ,D̊yjr@63/+cԼc$_N&i
+kRzz 9f1
0h*d>VDFZ˓l,Y_A!cu̘[,`1ҜJj8i&T8CƇ:TNk$:a[m$_%k$:R*4Z<_[K,6Ge|.#Wd1w`ҸYo7?v=*3;K:8ձ H:&Apm)gS;8iԹwf2kFNF9,;I;deds)ikI92"6otG}j#`Qo}Ne-T'/oNHܔb2zDmtpmUaymUEx>ƺQ?xK9HGTVţ*?xlJK2W-)>B;0YI'8%ΡGN
bkve{L߻\8pKɊ*Cx $7CEP?aQyp!^hKvM@rK
F\&òXbcQ\>uT\t0l_ڂ~3HOwYQvޜHr)PWѾw'u6_8|Mtce-?5!Ss2jOڋ6yˌښ,s20߯ЖRJ,n/
ųYs",Ȃ8:3gsr",'-́,̩*[Y
yJ٧WhSQ]6'{Vu]]ܠo&'Oy|Z,;dP>I޳Y+P΂AT0Д	#.8pjJM)Yh#\\B}<EyVo$^dYKeV*+~DQ^?Np'/|>Gݼ%^
+%?_RZ-8I-\nPOV5fO+2PTRVQP8)-Y5Y5a
E-CQ+ (u:hE22+z
 #hEW/44g(	T}ċ~K1NuXg%skyBiXtsm.al9&_mA&E_҂6Y
!؟(fVQ{@{pA]q;b'"}`iV|%qFt|tf%t4WN[Ŀ/aء#?Uk7#V%,˜10-1akP^g3B-*clɌPj7̩=U3Lv&;3B75Oa0L
e1X!mza"5~fh >
{a?ذ0Fh#{2X3x#`܉;`pa6'#1`
Qa*c5F,6
6ojVo7`llCد`y
d0
7D?h;a"b?5X`qu×lVljil53fd8	u8h`#d&)SN3gF~q98pBEbf|)2+ ̀-+W\!u7 nu 0n`̃o` l	p7^fFx  !sf|ҏ#~md?͌g19/0cl n@3b^aDokuo x]{q8cp'?E3|8_Bk7G~#'π_ ~Ƒk  k  '6N
+8
p: g8p> .\
+p97b+7&_p
` jLuzFM nƤ  l	p7  <x0`(7&<ƍ<qOq#in>ˍ2BP_@߀. tz=enTeT57&-ۀw = c'O7f~
[ v}w3H	3 zF5XjԬWq8p*4 gƜs8p> .\
 p9
-.FU،U \pFM[T[
p;N݀T AC(o<x(q O<x<n@R罄N˪~$4]W:o x[D0Kj|2W}"ϾYGO3PC50?ѢO5УBWV1~I!FkN&tta\z&gـs1	r3fj	zpb1\5r\!M̀- Wqn̷VZa5Xո7 
،j1f(lzVaچیX ˆ663Y3fe3ve7"j7v4C~x;{Og	 0Vk<8"xmE\ßg7F{77:uXa}c>)F#xy,Fx/ ^,	؁a4n@H_BxEDuaF7S 買ml;xq, x~8aqsFc>G{aL:oF__`]0J_B;
-1"&) Od +5BصZӵ ? NҌPq
-B/?Lf|
-S5azfM펆L͸+ll֌B]Z^h\QQ ۊV7npvB=|
-;Ѽиۙa<̌
-C1c`Axp,iƋL>Cu_	mÊ5C/P(xC9M /Kz  ; ;/k<_<#>k|kL-^b?%P%"4\A]
(y4nn1nǋ0JF"e'Oi`3B#:
-5_#+MS<!4x~Z:f<$ik/5JR
|*OQO:'xu PM3EU2"g 2|&'O-v.q8RX
8I61fXYNPTUUP
-%q?wLN5EHUb(VPc*dURpBrn7GSb(8hSIGXk꩛"	hZ6ۅHnvGj5)X hLXj1Je@N9c
I2T110H23V`;30fPSIV*6EpȨga*󈦾YFfR]?5M"JVlgڃ)2gphL"oHQ496ɞSTB;-	MF=4S~ )K 1 R4_I$5H8[jZ̖ᱜ/)!gͤ9 CJlٌ/Iw,?k4fjPY(ZqF<?_G]6|Hu\Iss$_&X-.̑1k6
-[/7A&h̢h9mvLc}6DM80wKL+ucWӥh)E^IW`ǡ̢2пECs3i^5nK^?U@ޱ$A]T6keY*1=
RFr/ܽV'S,֌<š!~X1%g?1p((J2LҌ!ʾ|2SFϔ1v@ W;\qM!Tƕ	pe⡤3etL˙rLX*rpS00,6+T{ʡ壔+F)ӏT9L[kT<yYGRfgJuSj{*E
e1u$|/TYD4cR{Sld%LYĔLYc~`Jc3S`MACL	5F)azҘRr,GdF#	w'Q.Δ6`Jk'S]ʔ1%)m+~S`J12%Zcol׿JZ*f[-'J9>ܷ;N"k2TF4&gt8|	[zeg#Y~된p.`u2<ɿ.@HVb!].Fz"IRkeHOf
-ƼJg.r1 '\&oNf9-HTKe =ag"{zv=
H/b72m˽	-
-&_ɰ]fcASr+0)736ŕ0[&v'ISgPJꃙb2Zt&*1=r")3>D {ClmaG>E(
{ʔl2}ROi>Oge9>/d"jb2iL{eLtLwez"5`aKI]}5ϲ>A<{=/v&هH{GH{ǒ'ȿ>dL ~;N5WbQ
S;|O;@£Hv`^c?o_Þf˔ߑ9HOZU3U<M=rrNcrGdS~"3vi`#%;WL_~洌s~qZ˹H`!'vҟz.B.A2}rSvψIDn
-N)scr82{:/!
-f|#32}҇+qe3kLW.-4*Ws.mȵ:u%iF~#M|+薣toə
-k
-.Ŝm2]wȔ
N߅t+M7{~Dz-N~3*n%JPs߆~0#H"}?tüD3?<i>ROQJrϑ(ϛ_~Qws<œ A,E	|;/HHpF	Gk
oorEH!&/@xQ.b-{@>/|눏xǼ^'
-)pP?Usܢ9bsկ'/ue2M)g_\Ho@	5;PW;u{?0#
OM5AM-'Ʈ=].Mg62Ϙ0+P7_7,r
-C\ӟ4XG9ԕ*TfWo0Ue0~"eoVIjz/1~5;L9w=VsK)RP\W%+pWM97L@\/Y@zh_ʷpz?s*TrW
-$[֦\f6ejQmʅlȚzlvlvl:g =*tS
-&EuBc$hS](-C6uX`-B;K(9p~E@ '.<8̇wO݊g.W(3Yzp>_9.7<Vr;Ca/B)s,nPJ``78t#6sϑWs=`nsOX,MF=YP~WP|W-^sۜ`l|
>juyP]դJi۫Zv=G4ջQ̣8ݡQ#9:y7ͪoJժʇUCש+^wBkVzg{\Tt\EQu}d68\uR^TN	ݡe8f{w{-]]}*_bGheAlcAƃM
2hAdFSZCՠ:qluVP(np~j{R+馲k;}g;JRr:ܵ{'>
ܳwQ[+qe}[7ު9tʈM_M.M BUIf2!CT%oqYU~Nν*M52mVH%",RpAYc\_S}y@=:p62zH
hA_+(SqT9wpJ־>C/wսMen"i8p,]auQ]h);*Mo
DZu?{%;dH{c#Q0FɱrƬc Ϗ^[[}\->x'-TFʿ0
ƠeTUh41IB;e"6+^3=mXpcl}Z;ϡ#Hq=&֍YF~'SMzU=NBGH(rT"lF9Rog$]7pL,]CZP%KZݦE]\'.Ią;>Ic"`/T$UgTqu[!S=0T|dVjjg%/,%g?0"ffFFfQ\K菪 iQ!t;A	ž@Te)WB62<B4KL[u~zEhVk֘ET+ULU! 5IyBNr@"9Ō˝]eUowY *bu"mKtn!A{9O3yr21&Wq*R*[8*R6V٢k͎G^6䵾q0Fc]=]rHe]9n]@[5Hu%ªeekZ οAY"eY2Z߲;2ǯQy*%bإ<Y\ӭ$1DîK2'琢}o3G5jmNH?l=P#bdiDKb]r+,tA=1v@I%-ܗp_kH~2T$yN$`3bMNڏNf!lMJ_UrSC꒬RjVKvm]]q7ZrKmb dU>"YHVc(U*B=eV=R\
?dH?ԻcfOj RȰ=*q4N ^@>N/;|g)%s/;//3'%_w
E5\,YM'1r2[(zQOנIl{3q>Fj0ێFPV;%V2HR=~\|ؤ~:e_<[܂Q"fUsNl
=T꒖*V{BߨoT	wND}5w ǦyC$}tޤK4>S	`	hrGwPAc
{OjWbID^wV`8T9KKtWIw`@Pu/PbdkdkF3zg7u]+oe52z
-^b
WaT
-vknv3uVDs
Fc\*EwPoPЉ,d_Rϟg0sr :8
-''LL7R]%b	Sz<^Pn3TZ-SNnMg V(ړDgziWwHm	ٗ+d.O^(Kҩ-q:Τ?x1(+mk_P7(~gSA<<Q$6G GoԺUKҕGw^=j7/'	nRHh~ې<yiHHohV˩9KOCWb\ r4zQ&qu" Zn`N1LnwzQYs<EٟtFC Ow aDw9G\)̗$~K 5[<Uwv@Qp 5'I+dLVygJz
-K{.&DAyR1Tb%*ib|֤iCx)sj)ہF7M!Gb~l^ũ"t.BgJ.L~ kgRTU]IGM:Cgu'{:-rV;w-h9
-utwh;Tsix\nS2kMxyTԅv2;JW=Gx5#z`+6Q<=_l\ xcAFbGDgO---Y^4P{kD4r9<ڼ
-UC+Ѕ,9u)̅fy-}o^1{Vg̣=kTV)@T<`dR\p]9QWEP(	_&}ON[>^.jMX@swqΘ@HO{*H{_!ՓΣCl^3(҇aQĘ?}s6PQIjtRt#I*"&%fn׏flO!`69~1;˝GF>TaF!=#'im$ۓ=Cz=/t9iߒfB7!B\5CkUc»NSe hN	.
-,$tjMR{
-'a*AadӸ׳9Qѡ HVgq"Dx*7"a=Zu dJػUj<CRIgn\9l!a%
o&//Ҏv,䵒ˀnԴ(8.kG*m43JRoX7v+ErNN-^@̽
LZ[DVntc@ގxSxR6bhK(/wO'1s5,z-IϛFhP*ya1EP7P:ZT
-1$tQB{s#0kh#,V>grස-X@[wCKa,`b2޻>Oy{olAYpCwsP
^89(fr
YDAx>;tTwhOI[ay6X`M9*YȨ]Qt;C,03uj_ڱ}bâ*mL}\fn྇aǛR	:OtMkMP1RqGWv'(i#s.8`ؼLR~or?%9N~ў:Lj=&<ec"{\
c4g0#?(U5Y:.&k8aE6vKlErh^ 
߬.Cy%oCa1ǂB/YM|T23}w`EY$cicNIf,rt}nܦf^)Pѭt<	mͫn~3U2=^1D4^W'&"p&--*c_&:-6c8uuu%c"cOHèx}S
$kmN]4 弓a^66Ii,4w'S#FH)
-Sf}9_+,ŎXXB~!lis;~D(<1ʳB)=B"tKU:&c8n[e$G"CYef
ٞ$A"yA<t`h;"0-g*;=u:n^t]J@؞L!.;]@-K|ݘo2|ݽdxS+~?/)M|D|iǎto`]A]
-)</ƇyH0@C󌉧OӍEYWtjEk|hV"2/$5:֪3|RZZF{ڋlqPW - 7.7qv8AWޮg
ge:ePo0+_*P#bTT,zYҭ3}ZN'MߩE*w,Hbc4R,htwZ͂%O/t:>v_}}}}G׷=yf{=JfKEf0Lx5Lſ6:ԣ>DuPOk";h&Wpz7ܩKo︓0"p?g)IQn8([K"̓N]ݶ"<8M<oH-,u#X/UyJR;Z=o!/EZ~k.quX;BYZkd^gԪJvϬfXαwMn3GbC8-	k"uOǎ{܎qG(!D[gIBĂ[!o\]G2|km`Sͧ|IZ=E:!];"U|(4iS
h7( dMW-4-cAT2
-ECćAr1czLRf]pPDBG2	ʮRͲwQcԕ.-?~&6t lsAvTz<_
-
-Gm]n(a|,-vvh;L+3Ӝ4Q@*1<O
->^^dv{Iǀ2e47tTulR'S=Nl}}|K_}}N(f&OFO vg+ ?8ysc9Y^	P"Ozn%vٛ_BͬdW8֋uO*Fr~-w	H8DJ@֩]ׇƐoD~3ֶ΄ؽB}~O6{?%?Q`5el5OKΒ>w^Œ/`Ӷ̒=8:2UhPQwq]k'i'bǑug݉~K|NgwODF[NS!}/[j;&ADVhm< ANᕩΞ}SL7{*TEWJ=b;zVr!(o+v}+/p}Od曌UluVJ#Xcsc]<3>+ٹaײtHHyDGaiO߅(Ro7T$Ĥ%hщɧR_tVG_x4)x/3SGP0GVjd1ShTAnvI0L"8Ts./V2z	|tQ(Y1ZSL>O,{kk2tM1As_˒m6ݸW^={Nd$M
lش;ѪH`V>߫IM
NիYjAvwĕۑ*M>Y/$汲n&vVpSy=:׻C1)O.HLpaV*`NCTtJk3Py,bkk"n[@ЫE5E
-0=3Yl'%s4l}TFo,~mo۸VשusѺLKaTїIO_&Nl{Y$~BոD5p&Ȭ?Ȱ a<1F6=*-)te4&n0&Cu2886n!?!.ugJztfҗt#Ji%g1UaLQ[J~B2s7wVZ崋I;_ahI;{湞+S\j{Ś"-t=
sTx!Kz.Zr&nןEfN+]kT\H(JdM#溠T3?{HRTk>P2MzRי OI./y9;d:`KHW2sQ8Fu>#<.SL_Ck5
-8pXw9%>l3wMYj{R&u.#mӥvi\
-Ʉ:ijKV~
-Q,"sr.^\)f)"WHS\
-+<i6rdFBLwe>;]봀pTX|:_J3jZ81,᷒auץr2u%/5ٰ<Q2d1A{r]HX"*Nw:E]F9YFJMM"%kVHڢ!Lw9&SޥAMՌ^̠֝~]A˼A/Tcjfjޭ<tLf֩5Fu%=7i
ܬ6s`1ߝˬa{+Wv]\[189o|o`!`7av8j'$XZAO-tv :Q
zwnj4FmȦn6:sdhm繉']~Y-U3'8q;2י"Q6i][*]<8#V _mMǠ9
r=da:Pdo)IUvKܡQxVsbcNM:Cn&>y"&Iĺ,ҙ\TͰUƺwPر]=k$}6ӯf>3g1öZ_9p:: ga2[)5[Ͱq7*hB;Rk.: WūN4h^C79޺fɼ.__dDڦ=O~X_߂'qb߅fTKHBc]G2iݚyG3Ojcjje<jEӘ1V"t9[N//o^H̒_y1ʀ=z}$ݴx3WW;̼|]L}4c'͇7s;+<bߍ4FFgwƕ|/wP	]Hӎ''CEw9bSCY)f9hcqvМ-u˵g8-f)jk^ךKcMcd{σkCΦ8!kbK0<}Y*|D%3eI03] /ͿɷMG^,	*֨0i +15г6$`8Iy=Am_8B˸mf@lߘUq]_J_F)kgVTTkuW]13:IRL]D_=)GAfR^F{bK]@]N:eSԵad!-~MCd
-U==yLe4<^#43C>#[I@t_s ΃;8:9q
-ɝS ;
iw8sy|Y,trvq9:/qwptY˹99ƹsss?999Yܿy>Fq5	5dUHj懧#7Ƕ_s_G$ڙU]Rhɒ
dQ=;xv4F,ٵa4R5.{֟}766`dO_\>9n$/>svnYξ[ygFdFD	<=OIޞ#,o]_I#q-eCM\qo`汞5N1A
-'6Þ
T]wA&#:یdFrZH<;5 dx*$4UCJR<nJj7ݜޜS)][#n;g=UP4LlG`6i4ct5.Ř-2+qma}gƯقl3,$&XYfr`p#Y4mu	`7gY7evfd`,Z젖oPڐېK`-;X v;s[WyȣLq#%Lb^Q3OOwtSq6} m.
BOJ{z?_ADBuaڗul m݌=@xloYT7iAXJy?٨ݪT\@Cӈ>ɘT16<\؎PKQM1#csF(}x
-*r]7fCS.5eNo2+v >?2jӑǪj+L>36TGewi_wiNk߯g=D|)lN,نS	ݘG\Ѷ7c+ό/=g44ע@['IѸ8p`oğ63FC\s3X
<OpJ@(dhk%Z0s+UQ}8<&k=M|&
d,tsF`4tt'۠9(4.W14R5=&WPocYzD@!hgM,3'j{H	V7~f ?Cpf|ܛ cqHc 	dۡv2QkS̀fpȦ(b6bxsmh4b)z:kPKIA7ݞ$M{;N*HFIH	_;v1f'wN0>=^6fN\|#NتYa`!sY.<{V\XpY+O7S^#A^gCIg2!E=YO ʫdB:2)Xl$ x*E9Hn-R6?2A܀3T*.V{`_0U3e4pYGkj1B{	U	P<%7Ԓfh6%SMI
aǅAuk?
-腧OiR
-y );پxfƿ$Җ 5aXBEr2F ;U-|],m}f:@u,{
	Wu+QH5n?a\3 Teу'ax 
-, (s I4-JXJ/ @@K1+exbLZѡ6E.bi@忀jzQ[v= Kd+WzTYk04Mٿ,2dQQ(CP*~!tM(.w1w1(;ΣP*V3oxeR2&
-L$
-[=KlFI:|cWDͅ  #߀'Ƙ`cl4JcXYc1VlcU؈XMcoNg^@[Atw
-銕ABBpSk⋖8
-# 2x2|{*rʺ;s	gbS\Tp*7B:&D)g9)iAͦuF 4dU)#UNS52ժ:N8Fo=vj\\ި I{Z촾:V9vpv~a9~+-6[14o#sІ~+g-\o{FYo֗뱿k
-שCF0Kȓm,IրȘWpGZLqi[@=XRrbKW[BR*VD(^PSK,"cu]a 
P]qsդڷAR
-<TFڐF()HIkXL
`LE$!TF%SHauoU#0UC|a
-
xQʆ 6ุx=ςNցW
-1D3FǄcX2	ūEE<pxKM+4D jiRk)#!l{5uCqhq
- yq,k%Nh'7!̸0'X2%` G`dp/4Ph*3)RyNmzNk	W6![ŒD}A܊wٶJVViHTћG+ZQ,6uS
-T!gFH72LD+]*]<, 8wG360q8QFB 3(AȂe\v7W8C[aXyc0bFx1v#mvgfOh =}(l	=i<s ɇA"l4e]y,e = f2"' k@v<Si<6kY K6ˉ ](I=P^<uRb7KI-,'ܛ$k"3V%R,uWSJAkjhz"@'?%jm@]τH 2ph]ˬ[)/Mɠ?\y.Ŀf2*@vctE
_cD}l-FNSAҾR;qi;2vBRJNe7 7k]ƚͬ9̚ˬu1k!1k1ncf-e̺Y˘ˬ̺Y+uV1k50k-dff=Ĭ0k+1k;v1k70k/1k?fVYf=Ϭ~f
0kϋ-0G_a֫zYczYo2-fͬwf}ĬuY0Sf}ƬϙdS{Y"O{>sc绞ck4
{H"",z]NB {eR~.-?#࿲g߇77w ʯoŃ+:*t#B.X;f[uxwn0hX𼻷@X zӴ2ajOg6sqē=8RO,FkHuV7W+[x
25 A&-qxj?Xmft
pL*,(`
-#;P$]FZ;y,K%0t1ctaswx[s/Td4=~_55k-_/fkVl{:|O1a&"tڪrR'>OqJ^Le2VI@rqgdj}>fd1G!! Fs#`8M g\~c `xeE#!#uVQOǐFr8 %	̆g*ЎnGf4\01:Bp;vk^nm.6F;4818F1b<c #OYi1/\	1!<]
BV /NHƴ҆5@,D<Cy)4ȩ@Η
bt\' 1[Grb:%a]WsT\]߄u*B*cH?aUtC|;W
T^[^38:[!(X4rU^E
!,u ěiMjiDt:E
=᩶P4ѥ:*B58ΰxPj6gd RM:iF	O5yC8-/aῼ  	s@c9dхʼDkV^i>{D~nѻ`sK$"jkD'D~Wp:%"ru-6ȶόc,wj q#Y]l4&3+mQ*񓴲>jZz
-fymvMdLy6(}N7X*%b7r@"/	`MUZr\̋҉XֹPAe瀛̹T,x1whrFQ\T>
-XSAO,MOq DDlk;-g@6QSEvސo~`p<zO-.N_ЛMЕµ\VgGgcUxx(c2ÓE`PEdEZ{Kc$|}NG#ЎC<~ֺ}R^iw""fpUD C;PIty8_ґZX?G,#bxN 'V~s?܀oMZ?2+K|l	t>6tI&87ܖhdQ{9׌~BQ~5$
-RɈ_~0u]1c(E#uxFQ*8M'[TqtR-6.	A{5&-zKih>=i>&̟I	 GɟʟlVRhY7C>C%φUŹwUt7nS]7~wHfQ_Pn>:APM2F:sބ:Kqc4osԍ_*5E#PLD11zt7ݔ*fiwtM\k7͕v~G|urxN^h#qs =7v#G hvsTr!4&r͔Ķߠ۴
J:n:C纗MuJǮ϶섾g3F;!"4Q-1I-_zR륪,r"G/ٰаouܤ		-}Hܾ2}sMI#g# i@Y
mnґ37kZN\%ƳFE?HJ1ttDD_-͕' 4l6|OJEIA<jht$*s^+Tb	a,2i^ۘvܤUA&mb@ŇK6c@kPPNZ2ٶ@ 8BrTe7jx9S|Z38:UH:|CPi!L Tp}YB[C cY"
Q' >SP̂b҂Z/Xv]a΋X;|P
-8#}EkɉqLq	h1?<^g,H
V":[0H5DEJb;k8ڗFVbs\gm-#
ax`l_;?z֝P/kxY9cQPKφD)l[ x8C{#M%:D'}Hha_MZ֟҆xSH?nRmjU%>1Wį'K5 B@9T 乛s"}\
S~5Ԣ	e<O`ϭE<7	J}>ĵ⤎o\q38C&7ƙmLɞo9!NIF-xC04
-#[!@}+dM	t4] Mr	]a;|b^ffs=qB@yAn)G垌TZn{,.m֭[o{j.-q־Ph8<3W;*Y(gP܀WB0S)^+"oe[x,xzvhhid),>H&/a<}}}@zr)jJQ.~Q⃸n&B
-F#]/r2R}{axHb?B>9$O\<&
bH/QJ415Zlɘ\l|.{6[_ιw0HElZ'%c9\6a!rS'iyu}>Lu?{_RTZK;4wҾ+eePY7` {~rg vٰMԳ ֢;a)ʹ%,y[MbYuOpcd00?m^lChPD`;RZzr	j3OAD!mx3ͼf{7C3gB2W^z
X3Yd-QLK	4";
u
}0cP9R'xmpj' UDN^*8*xT-<.qCMN_ڬ=
-o;£a.hתT[0fH$%Sbbd!Tx*
į!T }3aKkRR:-:4 8XdNg>{cx{uRtTwfp"K7J:{&݊f]٬W'ىlD̓_<vdЋS&0kf{3ao
Es1't5-EWB!@"'p'q˿:<̵rCM.ɼeDCx3d?HY1Sm93a*֫	1!=D֙x3,D-gn^SLoo⎲R(QtX\Jhq@4ɡ31PTqUyLSm	jWG[ <B-VX1SX1KXqKyJHcvwliJ9'	[UNsD$w"Ҝo	I{YҾQD&&Dܤ}|/i""OEI{oB i/b(i&"#i/SjJ
-	]H-i!)-o@;RdRC))eFR$dǤ}bBQ%G!Kj!K!CI{eI{I{I~!+!BV'BHڛI
-Y7Y0I?ʼʰJM`N\2'
-O9*i?)d})ؤ'dC~J%]B8i򒤽GK:Q֤_ȿMOٖIY1 5A1ECp.6B	!:#(r"_@"_$!/{
-fy_~Eد`JYa>Co߈<|;ǻ.@+E}"J$V{e@A{!̢At(brrߡ )!kf¡(hǏzRx1*u}=-<k(H2+ȗ&I!ϏnZau)wSաipd /hPdsG)swhwL٬61<lvQ	U%m:ƬѵG<F5u"0NiUqunPJa!J;9J'*]>i+τ!swe=<ѣ
,xV}b4Z}3(8ѹA>Sĳ?|yZ]{&߁AI@5?g RgxJ
-mW8ޮ]L7x* &kd`M*'OUp}EzX C;c3`a>ࠟi~Y3x6@GR17]>)~
i.N3se`~uz2KJHc 7uR)-q<.L=mi?}җ{/.<r*#"/c߼H!C;>1dhy7C/eES
-R	*z5ZmZs]i#zjS)E۴%Zͧ#c00T/0uTb	<k*4}>k]1'뢽
-3] AzUlHuh%~li.6KYŹdCBVPT5A
&4NqʋjѼF)qeJv|voO`hg&bppM0.ZI8n`}qzBzo&OˑdZԒ2NMeg bT?s_XCX#-rNk(=sc/^P͗tspm,r)z0\~˫  !]
\ No newline at end of file
+fV Wl\N5n@FM np`;.=T? x0Q՘8	?	x9 	@7"``7`%8Uį  [H
xG5wxCGU3 C!!Ts?PAo;ҬVc@'$a̵  0s3jO&)4a*4bj֢3Pw0g# {(eН8_ܪz X,danlEɕ W	sf-[nhu7{y)Yff/lQ63mH>xPaPÈv Tg1a@è}DKCfC':У\0faf94d(eO!mL4&0|}"{ y1|	65sP5\##9o0sE\0|E *ߪkHȿ	x0b曀7wzfh: x >|ǀO}JGQ9ʡ|_ Ro}˾B\P0#z~ ;A!3_ g#qNs\4::
+&oU'ѝQ(~ H.<374Ϝg:5Z٩$\g3סċ̏:mP{
+S5<HC4jk?񙀳>9x-`
<<}˾4WtP3|
+pqp.FK4rARͼ<pͼS7Zy/75| ="X <xfnk|	7i>̡p+޳nh>` 'k&aAfhQ۩A+ W4^xeo
x.=4! 	'!<T5j!lf~ˆ0椢EgZ)_h
+;{4$̭:\0j>̢̧3P#'
f>͇4#^w"
?-
?$8j\,2wa&b3'FZ4*6^7pt7TwnASQlV7p>t8&π_tu=
6G
1תap"co'9BQUUQH*BQT*rBe?LU5
+UFNu]Ql荩$+YO_Z&ظݞe
+U*hVt#)SUTʣRLqnW^ͨ/''Nr(l@
+!`&-7H"fEe
+؏kTϘT@,2GEVY(vIa .-;
+q/+O*fQ^giJ5al@f}?#X<H4&83I$22R0YvJR}*XՉ,@WfЮ%NŭŬ6@x8$	vɴ%i%nKL)tƗIp$iu0sfwX}dnZ0FRU
OIhd{5cE#s/OU1DjQA2mP̞BX݈1[fEc9@ƾbʙu鏔gh,]̀o+
+l.^"rV8jED妁z*ۓlD@Lk|d4"
+{?{ω;lI&( ֋CpT|S18DQP,c8)S]qS$ `eDs2J940r8S\GiQӎ'
WJ'W&͔0#̡ʔALʑS8MQeT2+A2BU&WpJSŕcgϤU2)YL>)sRfJ\TmS#b\#UϕYÕYs+`cr#b`-t14,^*鲤ִ3jdJ)LYĔFS<L`) SZ0`)'ϔ	G*-`j+FADex"B55&a:SjSAW2%)2%7t)d1ej_ [';,Q.bĨ2\$t+'SM(~912a393L+:l9װsCp|׳.D]dv1MK.Cx
+gd[03v%U sr%˾ZkIhǵr!<@^4݈2M݄f-[ne#QN]n+1l;Ncۘr'hlg](q)1nŕ=߽$0p>"wg`h&7+;l=@Ty	 <ͲKyT<E,{sqϳ'Do.afOS^agɳHAlh|fAfh |e:B-'G/e"W:{M_2|So
L#weߗ2Pcz}"ӟ3#9bE%jf_!|}]
طg!}C؏?f?^FL*d;?eVs<J,$[v`''6u-Yǉy߰
Hs86"%ng;T?NG;ϴ3gZ	wv^v.<N9a' IBkE /E_d~9M
+O[q4Vڕ<rgsbsU8cJ|n`0Ej)ʥ<ͿkTe+W#i5v-'\K5r݄~7#߂F~+mwvtYHBy;[SS|=2$ߋ!ߏ^ !|?AC"wnV)q85O>GN$§S;>˟Px(YN|<.&2 +&{v]_{/!_F4W9U+z
6W^GbW Eg+}+b
+=߄;BymށG.TY=T}>ky6#13ي?y恟<AyY%#*sT亪կ.,kkC뺞~uCQ(#`;c*u8"{M=?
'?0
K$TcJd0BVSQ~G'C ayM뽙V[5ONU$kUTש̮.cީHɻUhh~2%U&5OI/OSO:&[-Z	9Sv"~=+ogLPRqVȰzJ|\B=^
SgUvUW]hM'f}XIb9Krr)x_䗃PowzD,ѶH8JQ6c#pĜBC8#XPh6A(8vPpgl4bֲBd ^E'NW18	BɁކ8v-睌݉8!B}v?l L{ |`2d5J!TCe".VP(ѫJήA<*lo6l砢P9@<yv!#>5J;u#>
#?tP3]#ot63szMMRCfvvU+|g4L5gDq~*-^m.^O(>z:0Y
+wOsN^R5pIܬnQ%Mu}VݮV;^Q<&C6WݡpFCaL[wt]d6Mɨz*8NuDӖflS
ܩV`)ݮoU^>&ܥW3*&|˺b"خ{TNq]dZkQ3Bɻ<Z`Gu`	ݰ~ƺJ`e~he~U&*̃0)j&%cXgW(Ɋ.Cd-@J?<L
+cC}*PkfWU:3!MZbeOSzH+k8~1UFTTrT:a6};f+=!oPy_U	1Ug?j8kPɦ!Ъ^!v%Svwq	TӜhEw	JTNBqwiP\H-Q}g@ޤ]8ǁ}9
+ӡ(NJ4fjӇnUk{{iܵQTAyQD`
sߓ@qj {3(#	.$<phǟw%aFv6zRϑ.@p /TɿB*EҮB#LHȂ\Ok&0*08ڐ><,}LQG8aXFWތRzV]Q!I(DWlZ{7!G2.,Ќ-\J ב~I%GN᝭u |jQ*&FkVk
HN+x]͟FlӒN<DM|ZNsSTGOԵ4M#!PLg
oPQ͒<`T'Ey;C5́-jlLLDRA5MyXRm b6$%IN]U nPN΄W#/y+	zG򕹐
@y>gp`;;]]#{jL7g]q
+0 t}=/ԉ4#]:S
KgcxPeagzW`|8RCлR*zE.(*WŨD(.63A[tH1]Ρjb:OW*N*-Q4*UJIqG*[eIy>VU;`kէ*06S
z79&pٽ~|;ƜH`6&
1¦0|Z"nPҹ̪N7)FXBC4Uݤ>S=YwP8UDV!pν
=za $"J&\׊<QrF8B]:Sgr>Ca\R9r]/df: (0Vs7(QR#?m,R$S%\!$r3+Դ8Ye3DYuIM(;*uT\7N׍b3	fk!./c{h3M"jSڔ!6zVTf)qMcJw1\	)m]GΜ(Լ/R%c8c ù;5Qe'NAnWu^ehA%QW0VܧQ>U7w+~$\bJ g9[2Ò0Lv:kҚAwvcCL5]:)SRaA2T#I
|~}KDK+^˾%Yox#
_-/$|5@.)
k"/Ԡ!&nL<LAu%g=YwU/cKӅY.oƮIOA]K,A^ڮc1Nx@Ҡd/<?N湓:&`>*ݔ)Ճ}w7Ĕ@]-T)ԉȻ,%уGq)Z$,ZÂ|<aYk/5ڻ{V!3G$\!zUZҜI'I/kqȢd'M"NJJ0zYO`#'9IOcoc?`6	0I:B5Gw6%'Mbf '
+{{ITav%G7.tJN2qV|W{POoo|%x|H2}xNI7ȅS[4?b&ŤJ"7)+CnuD+P7thyg
jOt8:ݮ펁 GJqI
+ u2R']݉i"pMKKͫBjlAw283}N1qJmcqr3@92_	2_#eɹ#<93\XO]йE
<|Ia<~Δnfw7ׇΦUoPulsY>9L﹂Δl wfΒ]?j9U/	>=zbwKMJ0ٞBN~ӽPPtFVwi=,LǼ۵@FGE"XFvyJ]9[TUՍujU	:{l݁)QjM3t'`1dEF(=	YIAӕp\	5+W6JVͥ%2dNf`F.$=(s@nzѳS&Qu-e;̀
}y8!R@AiV˩9K*=urd3e5y[T.OQH1DrS*%eVΑڪYJ~R%bf1P*l+0W]i]WrƦD}7g.}wJݗ
+(h	Y]RuXWqp8gLҍdSeY}>ki]lu&]6#ul<F6:6d~&QR՜CD\l *̛I!vL!\!E`lPh╄U5lwfJT>*`1zV;Оmu`!r
+uj]'tyG}}xu)Oa8l&\eqNzf2אoūvvsp4 Z
lkŕNxWo!/Y#KG#U~xn
7@IfQol8U;}'Md?P(7FxBU:,<Fu\$9 eNƭkuz^OF(brPrnA̴ݦmn[ۖ@3a]^yz19Ctyj6^+p'TZųNUq&CK0zM9;;_;EpD"="ѽ"8}"$^ĎP4[xQPpn&L$c!yPf@+I	Hh֗_}OhXAa&i*Mߡf<,gE+M?/w.F`^4T`zX&bO9A-LcT&1mQ2'v-}\{ܿ[L3Y\U@[j6[QxR݁]/d|''E))Pa`w
+ji^E|͖ce=Z6VW?˰4YV,SEad3bZC~Mמ{䭧GhlV6kOyʣha^YD`RAUT6<XpQW`yYTP
I<"ZXp9@mSGTKW`IW`eN4ӂ>xZK+[V+Px
f;Y=j(X-YTv+=eb镳zR컻=IKDv쑨2	}&'c[JU{;Dq$x@9;%
+0d6B	t֝f]P	.kjYeL~6>J+jx)Y5G;/v\k4&DD{C%#eaGX80? RT,ˣ=
+.+<),=_|Y'	dP]b%zҶ_-e]suڊ5	n54t݂nz|pM"CO,;xdm嵚Va֟<uYKl7	
z"Uc&iSC
OE+*.\	R];7UxSثh%zQb/u74yDImiHdťSNc5pR[s&	-D^1uӊK>w!unVJ9TҌb<*5SI^ Z=y qrNV!>%[,YV%i(͙V}xW+鄲J\&]8$o;HDV|m
Ħ
+DWzbRv	S^=KyW(YLo>9鞰xP~:t)Y^b&
buN	WkAϡ.]@ qsh`<kR}()\lkxD8lW4]ptB
+&\z3ḞnH;8aIˎ8hLy:
ihe8FW1G1AC_6t	'"`^)0_
Pf2ڧ^4yҪךO1d|8>K!P%"W`E,
+:S-87iqVờܽ32s;?x;C;?VB*Y,qMIf/52{=n)=dړ|ZP$U]M2V[а2KlVFO?)ְC5z{G[ۻ5vݍ.vi[A_
ߖ:g~EBGȱn9ߓotIҭ_=/Qe?
|ُ$w!nxWWbt.rQ%v7Xw'BgIE~b?"9ew2B9'.r]ÏF1W[LF+8
B+]&iHۊ&q
k,BYߩFjQE@:)lR
+W]VĖ`N<?ɃgWV;cOw7BD.߈
:tl=Xd\}ە "{"mrz?r-8[uY=w9k^?Ɋ]Cetʒ{G2oM5^A Xn1z"r$AKEg훻Qع1@9rdEZRiXx3;S:O׭pe
dnRԐni $;!
+"(UlMit@Dv
+޽9EEɫԱk6Jk$"iݫ*:5Wk\SݑARNP^ba`s	ekeW˧	14.u" DRt{{Uw"뒿 =dɫwxƍy)TFˑVR݈{;ФuoFvC{.ZgbspyIsZ`gn"ڤŝq%$5N5t[>;iRurrKT.xϙAT3	iߚW}[jq"_3iܟ_H"5xٯv+mTU#u,Z
&zH*4=Y7&\@WB7ndR#NHjn҈{Ctt縌[N
eWwp;[hRR@1
Zzbd*3lgSYsg>QӓO}m40MoDCڨ)
<J# %i973O?!Y?ԺP1uVS5Ƭ$Lg<aXlj@맓5 :[!xbW$]k7n`MZ0+w)ҷ2@rw&k7X{X:s:MS:cy$>tT0{3cT+0t/-k*VAI_ؕL=lSYʅ4ؐ
tڨU4g2)		˫] 8\t<x:y
+#-,?:,R%Yrs5	<ABW6|5A?ѰJK+ISkjdƹ|͸Ui^ϰ>r:_|ѲJOcIqjjY,rOeӤ" ջ/D׉E\G"mlIG@k#N)r.Ƥ/f&.SS`h>NeE֖vJkK/B{$Il9Zfflg:іu.`&R~9^].˳#wi2g˒+fT^.L~|,-?B=
5
+J=[V{֝ mF*+W5I;4\oKjUWiuldfgv=A}JTVɒ?E#Rh
+YзTI44Ri
+@%!а?bOf#WkuY`	]9YR;>{$x<\.P)6ty:ێOY W3mAZt2b!Tvv:+sϡlUiTV;kA(]IFj4I>=s澙+,>{Ɓ_sQ\Cy*o%ܗH9inJ]X۸esܾFA@dA$g02US!GgWnnkP䷠k5G'/X@.}ӊ;L|3^#{KS3.
{]RIa3e&zHueoIO0 i8G9G'osY&M6XMngI24ϓܖi:t%7q6q[!JE76:MQqM*jLk)R}:)4uqm|µEiIƧw'iUs]lNQ~`9#OHPx􉂶uɐ
+ojd	)<J0<b!wfkR4]Pb#KFy۩L:SMFmO*ت}>D1
T#~;hfA0j\{Mr/f- whow^²<r!8_uAk)SsJ]vuRfSM>ڽ1}rmeHםZq=G_hCa۰Os&XýZ;p_sӯݧYUޯU=ICZͽQޝ*|Xteoo|^c80q?BeD\5$Gx׬	O"q%.22wkݩ|Û* eH=O>;^#8rli7ɟ]!q+5LnAi_BPK)<ZN8tLnȩQ:bkI/neH~Yg9Tʹ܏]Rk_/'k)A5k/$j;pwN{Oٽtmb,y*hBk΃C z;F:F`h]4{sq@
zΊzú=;ot-QNWO}BNI$&G.,do/?w~o,|jfВHm kDN#hftA?YguZ%א oFyGe
+n~щ׈Z{ng^n=cz%@#S ѽxB;\O}xtK?άۙ8+=%ad艌!	8fp/Ql"$fw66~et |bcl06}3HӀp%سdQWzUz׫ M
+խAJMN#pIw5C oEiAv^E/CH;Ƅ5
%eH-{+xX d=sbFWvi6ep«b Z1[
+yJk 
+ӶhI,c5ўJ3af v`VJ.ws?Ã)ɫX*BQխX)y[|i:QK܋:^4|Սr
~AdBH9`^Bn1V{2)N)q`D㶘 `7'=,<Q15+ʸRV6f4ZPxɜFhw/4'#uD[LA ؍T阑.	A1C,	Bm~}lM=Svv`ބAqq@3ZFfF;,wyhr^Ցٿȿ3Y$my<E*O3w`HEZrIݻEXRY&eJY%jY#krP<R%$9Yˣ1X))ȩA'Ғ-$tyb.ҿ?$p|
+L*ZuP6}Jghr<]d.m>ZŰ&.@W&hm5i$}lo2|J	6`F*o*@r'DXR6*{F\6QC*=?@R2̘FfJܤdh)
+7Ob:xh`#r3O ŲJuIP!>I	%6wXotVVRl*~^­r!ְ[Uu3ڠ%.t]udxhsq6[@kn3ptfDG|fm"GZ5VUrw{*Q:tbhh5yqR
<<NH~;52s7́
kaTԀ-=?x/}8#ghL$pgي\^uka=̜5tnȌd4	;?zH>ܡtnwԮkGsQ
2`"ԇ#u^_f{H.EԍIf=D^+@[ᔕ22撪*z޼0>+
+
> ƘaށÉ>;x
+6l02Q?VAEAH#G#|_GV@HALXtdZIh1p:ruULY#
2sFnᎵIXDwp>
S\DxB7.s-iԺ
g6-;X 
Ƴa@kê"F*CxJZ#-;fѴ-4xj:2*d7J|h,VZ=4DtҐfR,O4]*4=P>ȗD!2.e"Jv.s94.Ř=4Q)wOKBǷ"n""Dc]"+\,~Hɺ5#hn+Ϫ3p	0߇8XF ] VF-3^2A/S6̐;\	0wZ[L)j+6'+!	t4L"ܴK)jT@Z
zS&Hj+M{&<J{ybj[p|	.ɉqp
+
^ίuj{݃PROX9rAЁu!b^pBOZ@m&vtڞaϲQO<ڞbw)t3x~gXM.@:Wu#FoM/)yBӆY8HD
+~+_)+Gm
+Lv+ףN0</AMH 3ў}F.?ѷv*z1N<sb!vX |ΜXn^SA`Xk%
+PZ\
`7K^Hhc,<E/,Iit"vg`}}ء%vda_U@wãOus-F"|hƕkjU} @g*vEe#]X
R]xLMܖnWn
4lI!"X+ɢH 4$ qi~ V ohWnNdo@gʯyNӏ:M68<lN5E"5-.B6σHSB!v'@*3ty`_ss s@ɿc"}P/4yZ|Q4w^,<Q`/QNg
4 ( ei#Ȍ@&<$S \F&2h9Ȓ +(ϓ?)
+Ly.<r͐?	/|gBʙ eR^ z(WN(}Z	A#2	0t\ό}}6K2xXc2hxY?_sϭԜ5MFg)T4;%	:=%7Pv\ai SzTyx# ܘcZH7NyVkisi`)֐AUO&}fNj ;5W0
slڭx"{[pm?na<f @s^eїO o(^`[
+N&VdXAɇzx3C C~,[/״[Ck
+ %K 饙nYR{0$B/
 SQ]W:@Ӊ99{l+LThSy!(!tU}2 i_~0p`\W	ϖK >5	!U`A'UU*I= t[ 28WAיl?5ČhbXQC!V+m5b
pC!VncC) ;G{:c<PIch(%܃nZc4҆E󠺛VB`Yx+ǞR|{]bvwxgb]TP fK&荒[1.YhzJ ]kh	Ъ`]J+bޫ	uQMkWFo=붫*/.HoT#d#jZXP[G۩c۩[؃6[!>
+~?\m_
+m|A
+T{ZhuZKkq	d1y~.5 2c\>Ѭz-?{`9y_ai5*Az(]^
+Wnm4|9ri3L&ՃCua 8 ҁlŔhDP[LrnA^mDAW 'ap
+yZIx׾	XVVA\4	cUr7	[cTwFy8&&(b5 ymqV{+tc#C, j4oRL؆!S Z}8[H\ėC,T-9l]t6cM`Pƥ<CA$ϊXdlDrװK H/Q23
+{1g\
+B+r"'S*_ i+nDQ"rX l5 9e5/4 
+	g5!x%a>w^va5u8hFBPP 
O֛@rm.6b
+
Sl%RAĘ* ۍv}<9
Fm(ƐK]I>adH5ANe(Mђ1sLNy<YVx") mc@lA6;DQF<S5{FbZKRw{rq5RHlxٕWXpKhPMRoT( PTAkNT@ ǀ\-1jk
+p<ۼ4'`bC3O7f
+xw`
+$˨<$fSr
ɟɿ c'/9Wv)vs32f^E̼0s)3eu\y3odrf23w0s3W2s3W3^fg} 3d 3w0f>ǘ83`|iff39a20yfW3_g~f730G01sf~/G6%^Wݧ=}_o亞ck4
{P`߃Bcw5t:
 `!yQKy4]BFfwׇw[Dv.Nne2S.U.x5(fБ1yA'rR1[S>`*ޟ۴Z@]nyJW6s+qX? M܉)㩖@ӆ[oA)v14&Q*"9]2^)3@^*8Tf9  vj<9.LYƼI^9.oK;^L[K?&G%6z(ڮD-+BU|$rKC%F?Lz!WyWixW+<ֳ.ĥ<:^x?eN
t<w>ǶX]zzi#aKobz;s81
*R	YSH\	B)]/Pc+8wKyź^uԡqlrX81b)Jc@2E#c*ynaT<HOH͵9t	3'q
L2 xQxh'8kAñ$!R?_"y^`k\Ht	K'wSCgVaazd@tjUr͆VqkkNG+<ޣFo/r
+7y=%ઊ :yVi.(U'z0f?2Ҕ6zk5[
ALԅx:_8NyZ.-r^,Bw\'i^(Jnz^%^"ؼA
!?yQFEtr𶑆_~06u3f2F	: Q  Fpsǌ\!\bb<j=
+Z+񬪹OEKyKqyKh!ɽR	u0f1|j>-Tg#$S]e1ޱTZ$g,%9wԟ~}S]7~s]A'~>5O@!jc8<w(x^{/WMoPP7~Ԭ(@u0?CA[ԣOp` HN!arkX^ސ/븯Ǖv2#p;bb];zZ&j#ҬmZ*
owGjuftF]~RkҠ|5ݎKTt(k-QMwҦ'r*\GAdBc
+?s6jD
X%5)tM-KGƇ!#?1
co=Zґc3-h.!ȉ/gЧ'Aۈ^-8[%h+eVUQXV ?ݩdՎ6Y +pwW̼K {DkDj,1UưYAtÍMإM\ Pq
+Pm6;бDMJnt8K$`#EhJA=Bɾ.2T%m_XR95q8㉎rk;h?4uN8"c&*
+2rBNZX*x_*f"Aiy"Xhn;vA>]5w *2KHURZMNGj?0,,_c9Gj42 '/$}u@8Z"bWr++8~6N~@KAm
oPR;^:eJQPMk"[q	7*h[тn #O@^m
+>UfZd6CXg(պ+5,
+x
"~#z tѵ\j!^yL[EH PZkn&=o7	4vEP}\yOǉD%
+UVԳ'bYDÂX;bPvnqoQU̥Xx$G Jlqv7	4ͽyb5_ff~8!p	@Z TxF)I]uܳXk]L˴5Y-q=ήy53MU_}rdBr[57{X_2+C}]^2O9ј --,s?Y_tO13p,\ۈJiHoD5PZ<OE恙t|#7ƺ	,J"h.1~-[]TX`~o;Dt瘟<;MsPk4gօȨܚ/\o%JWUhln1<츐knTe+qǯ2-ȼ06.dNkK|YͺW l&;OFWtFෘ
+ӝ0E"eD/"|PQ(Rh
+!0a˭τ{Ҩ5 kXܸYvΑ_LC `AY4
*`B^r?+q|e`$i	\)\#CK<'%6pUDqaQc	 _'/*H!~Om
+Ctr*ϊS_JSwe>=p{<Ә.'8j/Fǐ$ 
+ R	Oė0y3񘎚Evm$xlWt7al-UpW\0iD$%j<2lp4uhaW1@G>f-A-]Ǭ44 ^XdvkhO}cvwx'}MГFxEpY}lBGvf9fSGPvסl/%[RYE^Jb5%bͲ	'-TdE*.A,Dܯvszjt!-GD }dUd.XdRR;	Ch5KKoAiXWnl^cLR(RtX\hqQ"ʗ F~!@V3-q6 sXsIzG7I]ݼ
+s1<
+s	<=ND$aLM<+P!	L@两LDaEOV"IZ7ȷ֍"ҔȴunI91i*"'%DI[DNNZ="rJSVnӓV$bV*&aו,ijJH-iROZk,c[FI
+L~'SP4.y7弇r+)}(d&
bV)&JEIgzPȒYҤeIkIkIa!+6!v!%!!k#B&G<"i=&_z5u~$)!Ii**Y*eᤵ0!VZI+#d}zN%A!'9qB iܤGȖ?KZ/ٚ^IkUGy񲘥A!D#kx'!fЙ&EEy	Wz{z_X`> Jb|~
zdw1p=L}? E=
+ߌʾk	t5ȦO>Dg,AP%[¼ PǸZy2UZX*wޚ2Вy1O
Qa
+r.$9\giIT@MS<g2|	 y+2ezBjGnf?e8d*l6Z<ȘD!yΩ~,U)Zj:yj$"0=Q8Fu,/yB*wmXN}f)}[ēҧx*x7\wTKi})p4c?gݔ%_AYW=Y1.I޲L
+@BsU2*\M>bWi`㟦[]U&*qiAx3DZ0'])K
rR]A:_2
+=JLHluC
" R'GQb}"򳸏1)en3\nWPx䫄{ñugX)oPx\";9fuIh'B+[nEc#%P#U7jm˵ڦ#ttU¤˵	MG55M󒺁7i>^]鋡ZMCMGt7֍9=^1a6~J%b;A8LV{%^R7!]m΁:7jj6]V4ʩ#Kzf8Mt1!Z(_\%XjC:M|R +;3/~/m<DJSimݚ*
+~_ tkm=gcz^/~5R؋5xÿլ=Zsu׉w6g)4󀿐>;
+>\~ya`*lw&
\ No newline at end of file
--- a/wp-includes/version.php
+++ b/wp-includes/version.php
@@ -4,7 +4,7 @@
  *
  * @global string $wp_version
  */
-$wp_version = '4.1.1';
+$wp_version = '4.1.2';
 
 /**
  * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
--- a/wp-includes/wp-db.php
+++ b/wp-includes/wp-db.php
@@ -144,6 +144,43 @@ class wpdb {
 	protected $result;
 
 	/**
+	 * Cached column info, for sanity checking data before inserting
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 * @var array
+	 */
+	protected $col_meta = array();
+
+	/**
+	 * Calculated character sets on tables
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 * @var array
+	 */
+	protected $table_charset = array();
+
+	/**
+	 * Whether text fields in the current query need to be sanity checked.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 * @var bool
+	 */
+	protected $check_current_query = true;
+
+	/**
+	 * Flag to ensure we don't run into recursion problems when checking the collation.
+	 *
+	 * @since 4.2.0
+	 * @access private
+	 * @see wpdb::check_safe_collation()
+	 * @var boolean
+	 */
+	private $checking_collation = false;
+
+	/**
 	 * Saved info on the table column
 	 *
 	 * @since 0.71
@@ -647,6 +684,14 @@ class wpdb {
 	 * @param mixed  $value The value to set
 	 */
 	public function __set( $name, $value ) {
+		$protected_members = array(
+			'col_meta',
+			'table_charset',
+			'check_current_query',
+		);
+		if (  in_array( $name, $protected_members, true ) ) {
+			return;
+		}
 		$this->$name = $value;
 	}
 
@@ -716,7 +761,7 @@ class wpdb {
 					$query = $this->prepare( 'SET NAMES %s', $charset );
 					if ( ! empty( $collate ) )
 						$query .= $this->prepare( ' COLLATE %s', $collate );
-					mysqli_query( $query, $dbh );
+					mysqli_query( $dbh, $query );
 				}
 			} else {
 				if ( function_exists( 'mysql_set_charset' ) && $this->has_cap( 'set_charset' ) ) {
@@ -1541,6 +1586,7 @@ class wpdb {
 	 */
 	public function query( $query ) {
 		if ( ! $this->ready ) {
+			$this->check_current_query = true;
 			return false;
 		}
 
@@ -1561,6 +1607,19 @@ class wpdb {
 		// Log how the function was called
 		$this->func_call = "\$db->query(\"$query\")";
 
+		// If we're writing to the database, make sure the query will write safely.
+		if ( $this->check_current_query && ! $this->check_ascii( $query ) ) {
+			$stripped_query = $this->strip_invalid_text_from_query( $query );
+			// strip_invalid_text_from_query() can perform queries, so we need
+			// to flush again, just to make sure everything is clear.
+			$this->flush();
+			if ( $stripped_query !== $query ) {
+				$this->insert_id = 0;
+				return false;
+			}
+		}
+
+		$this->check_current_query = true;
 		// Keep track of the last query for debug..
 		$this->last_query = $query;
 
@@ -1730,23 +1789,29 @@ class wpdb {
 	 * @return int|false The number of rows affected, or false on error.
 	 */
 	function _insert_replace_helper( $table, $data, $format = null, $type = 'INSERT' ) {
-		if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ) ) )
+		if ( ! in_array( strtoupper( $type ), array( 'REPLACE', 'INSERT' ) ) ) {
+			return false;
+		}
+
+		$data = $this->process_fields( $table, $data, $format );
+		if ( false === $data ) {
 			return false;
-		$this->insert_id = 0;
-		$formats = $format = (array) $format;
-		$fields = array_keys( $data );
-		$formatted_fields = array();
-		foreach ( $fields as $field ) {
-			if ( !empty( $format ) )
-				$form = ( $form = array_shift( $formats ) ) ? $form : $format[0];
-			elseif ( isset( $this->field_types[$field] ) )
-				$form = $this->field_types[$field];
-			else
-				$form = '%s';
-			$formatted_fields[] = $form;
 		}
-		$sql = "{$type} INTO `$table` (`" . implode( '`,`', $fields ) . "`) VALUES (" . implode( ",", $formatted_fields ) . ")";
-		return $this->query( $this->prepare( $sql, $data ) );
+
+		$formats = $values = array();
+		foreach ( $data as $value ) {
+			$formats[] = $value['format'];
+			$values[]  = $value['value'];
+		}
+
+		$fields  = '`' . implode( '`, `', array_keys( $data ) ) . '`';
+		$formats = implode( ', ', $formats );
+
+		$sql = "$type INTO `$table` ($fields) VALUES ($formats)";
+
+		$this->insert_id = 0;
+		$this->check_current_query = false;
+		return $this->query( $this->prepare( $sql, $values ) );
 	}
 
 	/**
@@ -1769,34 +1834,36 @@ class wpdb {
 	 * @return int|false The number of rows updated, or false on error.
 	 */
 	public function update( $table, $data, $where, $format = null, $where_format = null ) {
-		if ( ! is_array( $data ) || ! is_array( $where ) )
+		if ( ! is_array( $data ) || ! is_array( $where ) ) {
 			return false;
+		}
 
-		$formats = $format = (array) $format;
-		$bits = $wheres = array();
-		foreach ( (array) array_keys( $data ) as $field ) {
-			if ( !empty( $format ) )
-				$form = ( $form = array_shift( $formats ) ) ? $form : $format[0];
-			elseif ( isset($this->field_types[$field]) )
-				$form = $this->field_types[$field];
-			else
-				$form = '%s';
-			$bits[] = "`$field` = {$form}";
+		$data = $this->process_fields( $table, $data, $format );
+		if ( false === $data ) {
+			return false;
+		}
+		$where = $this->process_fields( $table, $where, $where_format );
+		if ( false === $where ) {
+			return false;
 		}
 
-		$where_formats = $where_format = (array) $where_format;
-		foreach ( (array) array_keys( $where ) as $field ) {
-			if ( !empty( $where_format ) )
-				$form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0];
-			elseif ( isset( $this->field_types[$field] ) )
-				$form = $this->field_types[$field];
-			else
-				$form = '%s';
-			$wheres[] = "`$field` = {$form}";
+		$fields = $conditions = $values = array();
+		foreach ( $data as $field => $value ) {
+			$fields[] = "`$field` = " . $value['format'];
+			$values[] = $value['value'];
 		}
+		foreach ( $where as $field => $value ) {
+			$conditions[] = "`$field` = " . $value['format'];
+			$values[] = $value['value'];
+		}
+
+		$fields = implode( ', ', $fields );
+		$conditions = implode( ' AND ', $conditions );
 
-		$sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres );
-		return $this->query( $this->prepare( $sql, array_merge( array_values( $data ), array_values( $where ) ) ) );
+		$sql = "UPDATE `$table` SET $fields WHERE $conditions";
+
+		$this->check_current_query = false;
+		return $this->query( $this->prepare( $sql, $values ) );
 	}
 
 	/**
@@ -1816,27 +1883,132 @@ class wpdb {
 	 * @return int|false The number of rows updated, or false on error.
 	 */
 	public function delete( $table, $where, $where_format = null ) {
-		if ( ! is_array( $where ) )
+		if ( ! is_array( $where ) ) {
+			return false;
+		}
+
+		$where = $this->process_fields( $table, $where, $where_format );
+		if ( false === $where ) {
+			return false;
+		}
+
+		$conditions = $values = array();
+		foreach ( $where as $field => $value ) {
+			$conditions[] = "`$field` = " . $value['format'];
+			$values[] = $value['value'];
+		}
+
+		$conditions = implode( ' AND ', $conditions );
+
+		$sql = "DELETE FROM `$table` WHERE $conditions";
+
+		$this->check_current_query = false;
+		return $this->query( $this->prepare( $sql, $values ) );
+	}
+
+	/**
+	 * Processes arrays of field/value pairs and field formats.
+	 *
+	 * This is a helper method for wpdb's CRUD methods, which take field/value
+	 * pairs for inserts, updates, and where clauses. This method first pairs
+	 * each value with a format. Then it determines the charset of that field,
+	 * using that to determine if any invalid text would be stripped. If text is
+	 * stripped, then field processing is rejected and the query fails.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param string $table  Table name.
+	 * @param array  $data   Field/value pair.
+	 * @param mixed  $format Format for each field.
+	 * @return array|bool Returns an array of fields that contain paired values
+	 *                    and formats. Returns false for invalid values.
+	 */
+	protected function process_fields( $table, $data, $format ) {
+		$data = $this->process_field_formats( $data, $format );
+		$data = $this->process_field_charsets( $data, $table );
+		if ( false === $data ) {
 			return false;
+		}
 
-		$wheres = array();
+		$converted_data = $this->strip_invalid_text( $data );
 
-		$where_formats = $where_format = (array) $where_format;
+		if ( $data !== $converted_data ) {
+			return false;
+		}
 
-		foreach ( array_keys( $where ) as $field ) {
-			if ( !empty( $where_format ) ) {
-				$form = ( $form = array_shift( $where_formats ) ) ? $form : $where_format[0];
+		return $data;
+	}
+
+	/**
+	 * Prepares arrays of value/format pairs as passed to wpdb CRUD methods.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param array $data   Array of fields to values.
+	 * @param mixed $format Formats to be mapped to the values in $data.
+	 * @return array Array, keyed by field names with values being an array
+	 *               of 'value' and 'format' keys.
+	 */
+	protected function process_field_formats( $data, $format ) {
+		$formats = $original_formats = (array) $format;
+
+		foreach ( $data as $field => $value ) {
+			$value = array(
+				'value'  => $value,
+				'format' => '%s',
+			);
+
+			if ( ! empty( $format ) ) {
+				$value['format'] = array_shift( $formats );
+				if ( ! $value['format'] ) {
+					$value['format'] = reset( $original_formats );
+				}
 			} elseif ( isset( $this->field_types[ $field ] ) ) {
-				$form = $this->field_types[ $field ];
+				$value['format'] = $this->field_types[ $field ];
+			}
+
+			$data[ $field ] = $value;
+		}
+
+		return $data;
+	}
+
+	/**
+	 * Adds field charsets to field/value/format arrays generated by
+	 * the {@see wpdb::process_field_formats()} method.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param array  $data  As it comes from the {@see wpdb::process_field_formats()} method.
+	 * @param string $table Table name.
+	 * @return The same array as $data with additional 'charset' keys.
+	 */
+	protected function process_field_charsets( $data, $table ) {
+		foreach ( $data as $field => $value ) {
+			if ( '%d' === $value['format'] || '%f' === $value['format'] ) {
+				// We can skip this field if we know it isn't a string.
+				// This checks %d/%f versus ! %s because it's sprintf() could take more.
+				$value['charset'] = false;
+			} elseif ( $this->check_ascii( $value['value'] ) ) {
+				// If it's ASCII, then we don't need the charset. We can skip this field.
+				$value['charset'] = false;
 			} else {
-				$form = '%s';
+				$value['charset'] = $this->get_col_charset( $table, $field );
+				if ( is_wp_error( $value['charset'] ) ) {
+					return false;
+				}
+
+				// This isn't ASCII. Don't have strip_invalid_text() re-check.
+				$value['ascii'] = false;
 			}
 
-			$wheres[] = "$field = $form";
+			$data[ $field ] = $value;
 		}
 
-		$sql = "DELETE FROM $table WHERE " . implode( ' AND ', $wheres );
-		return $this->query( $this->prepare( $sql, $where ) );
+		return $data;
 	}
 
 	/**
@@ -1856,6 +2028,10 @@ class wpdb {
 	public function get_var( $query = null, $x = 0, $y = 0 ) {
 		$this->func_call = "\$db->get_var(\"$query\", $x, $y)";
 
+		if ( $this->check_safe_collation( $query ) ) {
+			$this->check_current_query = false;
+		}
+
 		if ( $query ) {
 			$this->query( $query );
 		}
@@ -1884,6 +2060,11 @@ class wpdb {
 	 */
 	public function get_row( $query = null, $output = OBJECT, $y = 0 ) {
 		$this->func_call = "\$db->get_row(\"$query\",$output,$y)";
+
+		if ( $this->check_safe_collation( $query ) ) {
+			$this->check_current_query = false;
+		}
+
 		if ( $query ) {
 			$this->query( $query );
 		} else {
@@ -1921,6 +2102,10 @@ class wpdb {
 	 * @return array Database query result. Array indexed from 0 by SQL result row number.
 	 */
 	public function get_col( $query = null , $x = 0 ) {
+		if ( $this->check_safe_collation( $query ) ) {
+			$this->check_current_query = false;
+		}
+
 		if ( $query ) {
 			$this->query( $query );
 		}
@@ -1949,6 +2134,10 @@ class wpdb {
 	public function get_results( $query = null, $output = OBJECT ) {
 		$this->func_call = "\$db->get_results(\"$query\", $output)";
 
+		if ( $this->check_safe_collation( $query ) ) {
+			$this->check_current_query = false;
+		}
+
 		if ( $query ) {
 			$this->query( $query );
 		} else {
@@ -1991,6 +2180,526 @@ class wpdb {
 	}
 
 	/**
+	 * Retrieves the character set for the given table.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param string $table Table name.
+	 * @return string|WP_Error Table character set, {@see WP_Error} object if it couldn't be found.
+	 */
+	protected function get_table_charset( $table ) {
+		$tablekey = strtolower( $table );
+
+		/**
+		 * Filter the table charset value before the DB is checked.
+		 *
+		 * Passing a non-null value to the filter will effectively short-circuit
+		 * checking the DB for the charset, returning that value instead.
+		 *
+		 * @since 4.2.0
+		 *
+		 * @param string $charset The character set to use. Default null.
+		 * @param string $table   The name of the table being checked.
+		 */
+		$charset = apply_filters( 'pre_get_table_charset', null, $table );
+		if ( null !== $charset ) {
+			return $charset;
+		}
+
+		if ( isset( $this->table_charset[ $tablekey ] ) ) {
+			return $this->table_charset[ $tablekey ];
+		}
+
+		$charsets = $columns = array();
+		$results = $this->get_results( "SHOW FULL COLUMNS FROM `$table`" );
+		if ( ! $results ) {
+			return new WP_Error( 'wpdb_get_table_charset_failure' );
+		}
+
+		foreach ( $results as $column ) {
+			$columns[ strtolower( $column->Field ) ] = $column;
+		}
+
+		$this->col_meta[ $tablekey ] = $columns;
+
+		foreach ( $columns as $column ) {
+			if ( ! empty( $column->Collation ) ) {
+				list( $charset ) = explode( '_', $column->Collation );
+				$charsets[ strtolower( $charset ) ] = true;
+			}
+
+			list( $type ) = explode( '(', $column->Type );
+
+			// A binary/blob means the whole query gets treated like this.
+			if ( in_array( strtoupper( $type ), array( 'BINARY', 'VARBINARY', 'TINYBLOB', 'MEDIUMBLOB', 'BLOB', 'LONGBLOB' ) ) ) {
+				$this->table_charset[ $tablekey ] = 'binary';
+				return 'binary';
+			}
+		}
+
+		// utf8mb3 is an alias for utf8.
+		if ( isset( $charsets['utf8mb3'] ) ) {
+			$charsets['utf8'] = true;
+			unset( $charsets['utf8mb3'] );
+		}
+
+		// Check if we have more than one charset in play.
+		$count = count( $charsets );
+		if ( 1 === $count ) {
+			$charset = key( $charsets );
+		} elseif ( 0 === $count ) {
+			// No charsets, assume this table can store whatever.
+			$charset = false;
+		} else {
+			// More than one charset. Remove latin1 if present and recalculate.
+			unset( $charsets['latin1'] );
+			$count = count( $charsets );
+			if ( 1 === $count ) {
+				// Only one charset (besides latin1).
+				$charset = key( $charsets );
+			} elseif ( 2 === $count && isset( $charsets['utf8'], $charsets['utf8mb4'] ) ) {
+				// Two charsets, but they're utf8 and utf8mb4, use utf8.
+				$charset = 'utf8';
+			} else {
+				// Two mixed character sets. ascii.
+				$charset = 'ascii';
+			}
+		}
+
+		$this->table_charset[ $tablekey ] = $charset;
+		return $charset;
+	}
+
+	/**
+	 * Retrieves the character set for the given column.
+	 *
+	 * @since 4.2.0
+	 * @access public
+	 *
+	 * @param string $table  Table name.
+	 * @param string $column Column name.
+	 * @return mixed Column character set as a string. False if the column has no
+	 *               character set. {@see WP_Error} object if there was an error.
+	 */
+	public function get_col_charset( $table, $column ) {
+		$tablekey = strtolower( $table );
+		$columnkey = strtolower( $column );
+
+		/**
+		 * Filter the column charset value before the DB is checked.
+		 *
+		 * Passing a non-null value to the filter will short-circuit
+		 * checking the DB for the charset, returning that value instead.
+		 *
+		 * @since 4.2.0
+		 *
+		 * @param string $charset The character set to use. Default null.
+		 * @param string $table   The name of the table being checked.
+		 * @param string $column  The name of the column being checked.
+		 */
+		$charset = apply_filters( 'pre_get_col_charset', null, $table, $column );
+		if ( null !== $charset ) {
+			return $charset;
+		}
+
+		// Skip this entirely if this isn't a MySQL database.
+		if ( false === $this->is_mysql ) {
+			return false;
+		}
+
+		if ( empty( $this->table_charset[ $tablekey ] ) ) {
+			// This primes column information for us.
+			$table_charset = $this->get_table_charset( $table );
+			if ( is_wp_error( $table_charset ) ) {
+				return $table_charset;
+			}
+		}
+
+		// If still no column information, return the table charset.
+		if ( empty( $this->col_meta[ $tablekey ] ) ) {
+			return $this->table_charset[ $tablekey ];
+		}
+
+		// If this column doesn't exist, return the table charset.
+		if ( empty( $this->col_meta[ $tablekey ][ $columnkey ] ) ) {
+			return $this->table_charset[ $tablekey ];
+		}
+
+		// Return false when it's not a string column.
+		if ( empty( $this->col_meta[ $tablekey ][ $columnkey ]->Collation ) ) {
+			return false;
+		}
+
+		list( $charset ) = explode( '_', $this->col_meta[ $tablekey ][ $columnkey ]->Collation );
+		return $charset;
+	}
+
+	/**
+	 * Check if a string is ASCII.
+	 *
+	 * The negative regex is faster for non-ASCII strings, as it allows
+	 * the search to finish as soon as it encounters a non-ASCII character.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param string $string String to check.
+	 * @return bool True if ASCII, false if not.
+	 */
+	protected function check_ascii( $string ) {
+		if ( function_exists( 'mb_check_encoding' ) ) {
+			if ( mb_check_encoding( $string, 'ASCII' ) ) {
+				return true;
+			}
+		} elseif ( ! preg_match( '/[^\x00-\x7F]/', $string ) ) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Check if the query is accessing a collation considered safe on the current version of MySQL.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param string $query The query to check.
+	 * @return bool True if the collation is safe, false if it isn't.
+	 */
+	protected function check_safe_collation( $query ) {
+		if ( $this->checking_collation ) {
+			return true;
+		}
+
+		// We don't need to check the collation for queries that don't read data.
+		$query = ltrim( $query, "\r\n\t (" );
+		if ( preg_match( '/^(?:SHOW|DESCRIBE|DESC|EXPLAIN)\s/i', $query ) ) {
+			return true;
+		}
+
+		// All-ASCII queries don't need extra checking.
+		if ( $this->check_ascii( $query ) ) {
+			return true;
+		}
+
+		$table = $this->get_table_from_query( $query );
+		if ( ! $table ) {
+			return false;
+		}
+
+		$this->checking_collation = true;
+		$collation = $this->get_table_charset( $table );
+		$this->checking_collation = false;
+
+		// Tables with no collation, or latin1 only, don't need extra checking.
+		if ( false === $collation || 'latin1' === $collation ) {
+			return true;
+		}
+
+		$table = strtolower( $table );
+		if ( empty( $this->col_meta[ $table ] ) ) {
+			return false;
+		}
+
+		// If any of the columns don't have one of these collations, it needs more sanity checking.
+		foreach( $this->col_meta[ $table ] as $col ) {
+			if ( empty( $col->Collation ) ) {
+				continue;
+			}
+
+			if ( ! in_array( $col->Collation, array( 'utf8_general_ci', 'utf8_bin', 'utf8mb4_general_ci', 'utf8mb4_bin' ), true ) ) {
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Strips any invalid characters based on value/charset pairs.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param array $data Array of value arrays. Each value array has the keys
+	 *                    'value' and 'charset'. An optional 'ascii' key can be
+	 *                    set to false to avoid redundant ASCII checks.
+	 * @return array|WP_Error The $data parameter, with invalid characters removed from
+	 *                        each value. This works as a passthrough: any additional keys
+	 *                        such as 'field' are retained in each value array. If we cannot
+	 *                        remove invalid characters, a {@see WP_Error} object is returned.
+	 */
+		// If any of the columns don't have one of these collations, it needs more sanity checking.
+	protected function strip_invalid_text( $data ) {
+		// Some multibyte character sets that we can check in PHP.
+		$mb_charsets = array(
+			'ascii'   => 'ASCII',
+			'big5'    => 'BIG-5',
+			'eucjpms' => 'eucJP-win',
+			'gb2312'  => 'EUC-CN',
+			'ujis'    => 'EUC-JP',
+			'utf32'   => 'UTF-32',
+		);
+
+		$supported_charsets = array();
+		if ( function_exists( 'mb_list_encodings' ) ) {
+			$supported_charsets = mb_list_encodings();
+		}
+
+		$db_check_string = false;
+
+		foreach ( $data as &$value ) {
+			$charset = $value['charset'];
+
+			// Column isn't a string, or is latin1, which will will happily store anything.
+			if ( false === $charset || 'latin1' === $charset ) {
+				continue;
+			}
+
+			if ( ! is_string( $value['value'] ) ) {
+				continue;
+			}
+
+			// ASCII is always OK.
+			if ( ! isset( $value['ascii'] ) && $this->check_ascii( $value['value'] ) ) {
+				continue;
+			}
+
+			// Convert the text locally.
+			if ( $supported_charsets ) {
+				if ( isset( $mb_charsets[ $charset ] ) && in_array( $mb_charsets[ $charset ], $supported_charsets ) ) {
+					$value['value'] = mb_convert_encoding( $value['value'], $mb_charsets[ $charset ], $mb_charsets[ $charset ] );
+					continue;
+				}
+			}
+
+			// utf8 can be handled by regex, which is a bunch faster than a DB lookup.
+			if ( 'utf8' === $charset || 'utf8mb3' === $charset || 'utf8mb4' === $charset ) {
+				$regex = '/
+					(
+						(?: [\x00-\x7F]                  # single-byte sequences   0xxxxxxx
+						|   [\xC2-\xDF][\x80-\xBF]       # double-byte sequences   110xxxxx 10xxxxxx
+						|   \xE0[\xA0-\xBF][\x80-\xBF]   # triple-byte sequences   1110xxxx 10xxxxxx * 2
+						|   [\xE1-\xEC][\x80-\xBF]{2}
+						|   \xED[\x80-\x9F][\x80-\xBF]
+						|   [\xEE-\xEF][\x80-\xBF]{2}';
+
+				if ( 'utf8mb4' === $charset) {
+					$regex .= '
+						|    \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences   11110xxx 10xxxxxx * 3
+						|    [\xF1-\xF3][\x80-\xBF]{3}
+						|    \xF4[\x80-\x8F][\x80-\xBF]{2}
+					';
+				}
+
+				$regex .= '){1,50}                          # ...one or more times
+					)
+					| .                                  # anything else
+					/x';
+				$value['value'] = preg_replace( $regex, '$1', $value['value'] );
+				continue;
+			}
+
+			// We couldn't use any local conversions, send it to the DB.
+			$value['db'] = $db_check_string = true;
+		}
+		unset( $value ); // Remove by reference.
+
+		if ( $db_check_string ) {
+			$queries = array();
+			foreach ( $data as $col => $value ) {
+				if ( ! empty( $value['db'] ) ) {
+					if ( ! isset( $queries[ $value['charset'] ] ) ) {
+						$queries[ $value['charset'] ] = array();
+					}
+
+					// Split the CONVERT() calls by charset, so we can make sure the connection is right
+					$queries[ $value['charset'] ][ $col ] = $this->prepare( "CONVERT( %s USING {$value['charset']} )", $value['value'] );
+				}
+			}
+
+			$connection_charset = $this->charset;
+			foreach ( $queries as $charset => $query ) {
+				if ( ! $query ) {
+					continue;
+				}
+
+				// Change the charset to match the string(s) we're converting
+				if ( $charset !== $connection_charset ) {
+					$connection_charset = $charset;
+					$this->set_charset( $this->dbh, $charset );
+				}
+
+				$this->check_current_query = false;
+
+				$row = $this->get_row( "SELECT " . implode( ', ', $query ), ARRAY_N );
+				if ( ! $row ) {
+					$this->set_charset( $this->dbh, $connection_charset );
+					return new WP_Error( 'wpdb_strip_invalid_text_failure' );
+				}
+
+				$cols = array_keys( $query );
+				$col_count = count( $cols );
+				for ( $ii = 0; $ii < $col_count; $ii++ ) {
+					$data[ $cols[ $ii ] ]['value'] = $row[ $ii ];
+				}
+			}
+
+			// Don't forget to change the charset back!
+			if ( $connection_charset !== $this->charset ) {
+				$this->set_charset( $this->dbh );
+			}
+		}
+
+		return $data;
+	}
+
+	/**
+	 * Strips any invalid characters from the query.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param string $query Query to convert.
+	 * @return string|WP_Error The converted query, or a {@see WP_Error} object if the conversion fails.
+	 */
+	protected function strip_invalid_text_from_query( $query ) {
+		$table = $this->get_table_from_query( $query );
+		if ( $table ) {
+			$charset = $this->get_table_charset( $table );
+			if ( is_wp_error( $charset ) ) {
+				return $charset;
+			}
+
+			// We can't reliably strip text from tables containing binary/blob columns
+			if ( 'binary' === $charset ) {
+				return $query;
+			}
+		} else {
+			$charset = $this->charset;
+		}
+
+		$data = array(
+			'value'   => $query,
+			'charset' => $charset,
+			'ascii'   => false,
+		);
+
+		$data = $this->strip_invalid_text( array( $data ) );
+		if ( is_wp_error( $data ) ) {
+			return $data;
+		}
+
+		return $data[0]['value'];
+	}
+
+	/**
+	 * Strips any invalid characters from the string for a given table and column.
+	 *
+	 * @since 4.2.0
+	 * @access public
+	 *
+	 * @param string $table  Table name.
+	 * @param string $column Column name.
+	 * @param string $value  The text to check.
+	 * @return string|WP_Error The converted string, or a `WP_Error` object if the conversion fails.
+	 */
+	public function strip_invalid_text_for_column( $table, $column, $value ) {
+		if ( ! is_string( $value ) || $this->check_ascii( $value ) ) {
+			return $value;
+		}
+
+		$charset = $this->get_col_charset( $table, $column );
+		if ( ! $charset ) {
+			// Not a string column.
+			return $value;
+		} elseif ( is_wp_error( $charset ) ) {
+			// Bail on real errors.
+			return $charset;
+		}
+
+		$data = array(
+			$column => array(
+				'value'   => $value,
+				'charset' => $charset,
+				'ascii'   => false,
+			)
+		);
+
+		$data = $this->strip_invalid_text( $data );
+		if ( is_wp_error( $data ) ) {
+			return $data;
+		}
+
+		return $data[ $column ]['value'];
+	}
+
+	/**
+	 * Find the first table name referenced in a query.
+	 *
+	 * @since 4.2.0
+	 * @access protected
+	 *
+	 * @param string $query The query to search.
+	 * @return string|false $table The table name found, or false if a table couldn't be found.
+	 */
+	protected function get_table_from_query( $query ) {
+		// Remove characters that can legally trail the table name.
+		$query = rtrim( $query, ';/-#' );
+
+		// Allow (select...) union [...] style queries. Use the first query's table name.
+		$query = ltrim( $query, "\r\n\t (" );
+
+		/*
+		 * Strip everything between parentheses except nested selects and use only 1,000
+		 * chars of the query.
+		 */
+		$query = preg_replace( '/\((?!\s*select)[^(]*?\)/is', '()', substr( $query, 0, 1000 ) );
+
+		// Quickly match most common queries.
+		if ( preg_match( '/^\s*(?:'
+				. 'SELECT.*?\s+FROM'
+				. '|INSERT(?:\s+LOW_PRIORITY|\s+DELAYED|\s+HIGH_PRIORITY)?(?:\s+IGNORE)?(?:\s+INTO)?'
+				. '|REPLACE(?:\s+LOW_PRIORITY|\s+DELAYED)?(?:\s+INTO)?'
+				. '|UPDATE(?:\s+LOW_PRIORITY)?(?:\s+IGNORE)?'
+				. '|DELETE(?:\s+LOW_PRIORITY|\s+QUICK|\s+IGNORE)*(?:\s+FROM)?'
+				. ')\s+`?([\w-]+)`?/is', $query, $maybe ) ) {
+			return $maybe[1];
+		}
+
+		// SHOW TABLE STATUS and SHOW TABLES
+		if ( preg_match( '/^\s*(?:'
+				. 'SHOW\s+TABLE\s+STATUS.+(?:LIKE\s+|WHERE\s+Name\s*=\s*)'
+				. '|SHOW\s+(?:FULL\s+)?TABLES.+(?:LIKE\s+|WHERE\s+Name\s*=\s*)'
+				. ')\W([\w-]+)\W/is', $query, $maybe ) ) {
+			return $maybe[1];
+		}
+
+		// Big pattern for the rest of the table-related queries.
+		if ( preg_match( '/^\s*(?:'
+				. '(?:EXPLAIN\s+(?:EXTENDED\s+)?)?SELECT.*?\s+FROM'
+				. '|DESCRIBE|DESC|EXPLAIN|HANDLER'
+				. '|(?:LOCK|UNLOCK)\s+TABLE(?:S)?'
+				. '|(?:RENAME|OPTIMIZE|BACKUP|RESTORE|CHECK|CHECKSUM|ANALYZE|REPAIR).*\s+TABLE'
+				. '|TRUNCATE(?:\s+TABLE)?'
+				. '|CREATE(?:\s+TEMPORARY)?\s+TABLE(?:\s+IF\s+NOT\s+EXISTS)?'
+				. '|ALTER(?:\s+IGNORE)?\s+TABLE'
+				. '|DROP\s+TABLE(?:\s+IF\s+EXISTS)?'
+				. '|CREATE(?:\s+\w+)?\s+INDEX.*\s+ON'
+				. '|DROP\s+INDEX.*\s+ON'
+				. '|LOAD\s+DATA.*INFILE.*INTO\s+TABLE'
+				. '|(?:GRANT|REVOKE).*ON\s+TABLE'
+				. '|SHOW\s+(?:.*FROM|.*TABLE)'
+				. ')\s+\(*\s*`?([\w-]+)`?\s*\)*/is', $query, $maybe ) ) {
+			return $maybe[1];
+		}
+
+		return false;
+	}
+
+	/**
 	 * Load the column metadata from the last query.
 	 *
 	 * @since 3.5.0
