From 1c586b93908ec0735d086dd77805b9c4ece9d036 Mon Sep 17 00:00:00 2001
From: Ella Iseulde Van Dorpe <*@iseulde.com>
Date: Thu, 18 Jun 2015 11:10:25 +0000
Subject: [PATCH] TinyMCE: show inline toolbar after scroll/resize
Also:
* Reduce the amount of callbacks.
* Move everything under `preinit` (but prepend to the callback). The API shouldn't be availbale earlier, and some UI is not available yet, neither is `editor.dom`.
* Hide the toolbar if the target is out of view.
See #32604.
Built from https://develop.svn.wordpress.org/trunk@32831
git-svn-id: http://core.svn.wordpress.org/trunk@32802 1a063a9b-81f0-0310-95a4-ce76da25c4cd
---
.../js/tinymce/plugins/wordpress/plugin.js | 58 +++++++++---------
.../tinymce/plugins/wordpress/plugin.min.js | 2 +-
wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 138804 -> 138829 bytes
wp-includes/version.php | 2 +-
4 files changed, 32 insertions(+), 30 deletions(-)
diff --git a/wp-includes/js/tinymce/plugins/wordpress/plugin.js b/wp-includes/js/tinymce/plugins/wordpress/plugin.js
index df0c68a4ff..0006d66969 100644
--- a/wp-includes/js/tinymce/plugins/wordpress/plugin.js
+++ b/wp-includes/js/tinymce/plugins/wordpress/plugin.js
@@ -443,23 +443,21 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
* Experimental: create a floating toolbar.
* This functionality will change in the next releases. Not recommended for use by plugins.
*/
- ( function() {
+ editor.on( 'preinit', function() {
var Factory = tinymce.ui.Factory,
settings = editor.settings,
activeToolbar,
currentSelection,
+ timeout,
wpAdminbar = document.getElementById( 'wpadminbar' ),
- mceIframe, mceToolbar, mceStatusbar, wpStatusbar;
-
- editor.on( 'init', function() {
- mceIframe = document.getElementById( editor.id + '_ifr' );
- mceToolbar = tinymce.$( '.mce-toolbar-grp', editor.getContainer() )[0];
- mceStatusbar = tinymce.$( '.mce-statusbar', editor.getContainer() )[0];
+ mceIframe = document.getElementById( editor.id + '_ifr' ),
+ mceToolbar = tinymce.$( '.mce-toolbar-grp', editor.getContainer() )[0],
+ mceStatusbar = tinymce.$( '.mce-statusbar', editor.getContainer() )[0],
+ wpStatusbar;
if ( editor.id === 'content' ) {
wpStatusbar = document.getElementById( 'post-status-info' );
}
- } );
function create( buttons, bottom ) {
var toolbar,
@@ -587,10 +585,6 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
toolbar.bottom = bottom;
- function hide() {
- toolbar.hide();
- }
-
function reposition() {
var scrollX = window.pageXOffset || document.documentElement.scrollLeft,
scrollY = window.pageYOffset || document.documentElement.scrollTop,
@@ -617,6 +611,10 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
className = '',
top, left;
+ if ( spaceTop >= editorHeight || spaceBottom >= editorHeight ) {
+ return this.hide();
+ }
+
if ( this.bottom ) {
if ( spaceBottom >= spaceNeeded ) {
className = ' mce-arrow-up';
@@ -677,18 +675,6 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
}
} );
- toolbar.on( 'remove', function() {
- DOM.unbind( window, 'resize scroll', hide );
- editor.dom.unbind( editor.getWin(), 'resize scroll', hide );
- editor.off( 'blur hide', hide );
- } );
-
- editor.once( 'init', function() {
- DOM.bind( window, 'resize scroll', hide );
- editor.dom.bind( editor.getWin(), 'resize scroll', hide );
- editor.on( 'blur hide', hide );
- } );
-
toolbar.reposition = reposition;
toolbar.hide().renderTo( document.body );
@@ -735,13 +721,29 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
}
} );
- editor.on( 'hide', function() {
- activeToolbar = false;
- } );
+ function hide( event ) {
+ if ( activeToolbar ) {
+ activeToolbar.hide();
+
+ if ( event.type === 'hide' ) {
+ activeToolbar = false;
+ } else if ( event.type === 'resize' || event.type === 'scroll' ) {
+ clearTimeout( timeout );
+
+ timeout = setTimeout( function() {
+ activeToolbar.show();
+ }, 250 );
+ }
+ }
+ }
+
+ DOM.bind( window, 'resize scroll', hide );
+ editor.dom.bind( editor.getWin(), 'resize scroll', hide );
+ editor.on( 'blur hide', hide );
editor.wp = editor.wp || {};
editor.wp._createToolbar = create;
- }());
+ }, true );
function noop() {}
diff --git a/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js b/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js
index 4fc7e72322..90fd404423 100644
--- a/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js
+++ b/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js
@@ -1 +1 @@
-tinymce.ui.FloatPanel.zIndex=100100,tinymce.PluginManager.add("wordpress",function(a){function b(b){var c,e,h,i=0;e="hide"===b,a.theme.panel&&(h=a.theme.panel.find(".toolbar:not(.menubar)")),!h||h.length<2||"hide"===b&&!h[1].visible()||(!b&&h[1].visible()&&(b="hide"),g(h,function(a,c){c>0&&("hide"===b?(a.hide(),i+=30):(a.show(),i-=30))}),i&&!e&&(tinymce.Env.iOS||(c=a.getContentAreaContainer().firstChild,f.setStyle(c,"height",c.clientHeight+i)),"hide"===b?(setUserSetting("hidetb","0"),d&&d.active(!1)):(setUserSetting("hidetb","1"),d&&d.active(!0))),a.fire("wp-toolbar-toggle"))}function c(){}var d,e,f=tinymce.DOM,g=tinymce.each,h=a.editorManager.i18n.translate,i=0;return"undefined"!=typeof window.jQuery&&window.jQuery(document).triggerHandler("tinymce-editor-setup",[a]),a.addButton("wp_adv",{tooltip:"Toolbar Toggle",cmd:"WP_Adv",onPostRender:function(){d=this,d.active("1"===getUserSetting("hidetb")?!0:!1)}}),a.on("PostRender",function(){a.getParam("wordpress_adv_hidden",!0)&&"0"===getUserSetting("hidetb","0")&&b("hide")}),a.addCommand("WP_Adv",function(){b()}),a.on("focus",function(){window.wpActiveEditor=a.id}),a.on("BeforeSetContent",function(a){var b;a.content&&(-1!==a.content.indexOf("/g,function(a,c){return''})),-1!==a.content.indexOf("")&&(b=h("Page break"),a.content=a.content.replace(//g,'
')))}),a.on("PostProcess",function(a){a.get&&(a.content=a.content.replace(/
]+>/g,function(a){var b,c="";return-1!==a.indexOf('data-wp-more="more"')?((b=a.match(/data-wp-more-text="([^"]+)"/))&&(c=b[1]),a=""):-1!==a.indexOf('data-wp-more="nextpage"')&&(a=""),a}))}),a.on("ResolveName",function(b){var c;"IMG"===b.target.nodeName&&(c=a.dom.getAttrib(b.target,"data-wp-more"))&&(b.name=c)}),a.addCommand("WP_More",function(b){var c,d,e,f="wp-more-tag",g=a.dom,i=a.selection.getNode();return b=b||"more",f+=" mce-wp-"+b,e="more"===b?"Read more...":"Next page",e=h(e),d='
',"BODY"===i.nodeName||"P"===i.nodeName&&"BODY"===i.parentNode.nodeName?void a.insertContent(d):(c=g.getParent(i,function(a){return a.parentNode&&"BODY"===a.parentNode.nodeName?!0:!1},a.getBody()),void(c&&("P"===c.nodeName?c.appendChild(g.create("p",null,d).firstChild):g.insertAfter(g.create("p",null,d),c),a.nodeChanged())))}),a.addCommand("WP_Code",function(){a.formatter.toggle("code")}),a.addCommand("WP_Page",function(){a.execCommand("WP_More","nextpage")}),a.addCommand("WP_Help",function(){a.windowManager.open({url:tinymce.baseURL+"/wp-mce-help.php",title:"Keyboard Shortcuts",width:450,height:420,classes:"wp-help",buttons:{text:"Close",onclick:"close"}})}),a.addCommand("WP_Medialib",function(){"undefined"!=typeof wp&&wp.media&&wp.media.editor&&wp.media.editor.open(a.id)}),a.addButton("wp_more",{tooltip:"Insert Read More tag",onclick:function(){a.execCommand("WP_More","more")}}),a.addButton("wp_page",{tooltip:"Page break",onclick:function(){a.execCommand("WP_More","nextpage")}}),a.addButton("wp_help",{tooltip:"Keyboard Shortcuts",cmd:"WP_Help"}),a.addButton("wp_code",{tooltip:"Code",cmd:"WP_Code",stateSelector:"code"}),"undefined"!=typeof wp&&wp.media&&wp.media.editor&&a.addMenuItem("add_media",{text:"Add Media",icon:"wp-media-library",context:"insert",cmd:"WP_Medialib"}),a.addMenuItem("wp_more",{text:"Insert Read More tag",icon:"wp_more",context:"insert",onclick:function(){a.execCommand("WP_More","more")}}),a.addMenuItem("wp_page",{text:"Page break",icon:"wp_page",context:"insert",onclick:function(){a.execCommand("WP_More","nextpage")}}),a.on("BeforeExecCommand",function(b){!tinymce.Env.webkit||"InsertUnorderedList"!==b.command&&"InsertOrderedList"!==b.command||(e||(e=a.dom.create("style",{type:"text/css"},"#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}")),a.getDoc().head.appendChild(e))}),a.on("ExecCommand",function(b){tinymce.Env.webkit&&e&&("InsertUnorderedList"===b.command||"InsertOrderedList"===b.command)&&a.dom.remove(e)}),a.on("init",function(){var b=tinymce.Env,c=["mceContentBody"],d=a.getDoc(),e=a.dom;tinymce.Env.iOS&&e.addClass(d.documentElement,"ios"),"rtl"===a.getParam("directionality")&&(c.push("rtl"),e.setAttrib(d.documentElement,"dir","rtl")),b.ie?9===parseInt(b.ie,10)?c.push("ie9"):8===parseInt(b.ie,10)?c.push("ie8"):b.ie<8&&c.push("ie7"):b.webkit&&c.push("webkit"),c.push("wp-editor"),g(c,function(a){a&&e.addClass(d.body,a)}),a.on("BeforeSetContent",function(a){a.content&&(a.content=a.content.replace(/
\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi,"<$1$2>"),a.content=a.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi,"$1>"))}),"undefined"!=typeof window.jQuery&&window.jQuery(document).triggerHandler("tinymce-editor-init",[a]),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&e.bind(d,"dragstart dragend dragover drop",function(a){"undefined"!=typeof window.jQuery&&window.jQuery(document).trigger(new window.jQuery.Event(a))}),a.getParam("wp_paste_filters",!0)&&(tinymce.Env.webkit||a.on("PastePreProcess",function(a){a.content=a.content.replace(/(<[^>]+) style="[^"]*"([^>]*>)/gi,"$1$2"),a.content=a.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi,"$1 style=$2")}),a.on("PastePostProcess",function(a){g(e.select("p",a.node),function(a){e.isEmpty(a)&&e.remove(a)})}))}),"undefined"!=typeof window.jQuery&&a.on("keyup",function(b){var c=b.keyCode||b.charCode;c!==i&&((13===c||8===i||46===i)&&window.jQuery(document).triggerHandler("wpcountwords",[a.getContent({format:"raw"})]),i=c)}),a.on("SaveContent",function(b){return!a.inline&&a.isHidden()?void(b.content=b.element.value):(b.content=b.content.replace(/
(?:
|\u00a0|\uFEFF| )*<\/p>/g,"
"),void(a.getParam("wpautop",!0)&&"undefined"!=typeof window.switchEditors&&(b.content=window.switchEditors.pre_wpautop(b.content))))}),a.on("BeforeSetContent",function(a){var b=tinymce.Env.webkit?"
(?: |\u00a0|\uFEFF|\s)+<\/p>/gi,b))}),a.on("preInit",function(){a.schema.addValidElements("@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b"),tinymce.Env.iOS&&(a.settings.height=300),g({c:"JustifyCenter",r:"JustifyRight",l:"JustifyLeft",j:"JustifyFull",q:"mceBlockQuote",u:"InsertUnorderedList",o:"InsertOrderedList",s:"unlink",m:"WP_Medialib",z:"WP_Adv",t:"WP_More",d:"Strikethrough",h:"WP_Help",p:"WP_Page",x:"WP_Code"},function(b,c){a.shortcuts.add("access+"+c,"",b)}),a.addShortcut("meta+s","",function(){"undefined"!=typeof wp&&wp.autosave&&wp.autosave.server.triggerSave()})}),function(){function b(b,c){function n(){p.hide()}function o(){var a,b,c=window.pageXOffset||document.documentElement.scrollLeft,g=window.pageYOffset||document.documentElement.scrollTop,k=window.innerWidth,l=window.innerHeight,n=e.getBoundingClientRect(),o=this.getEl(),p=o.offsetWidth,q=o.offsetHeight,r=d.getBoundingClientRect(),s=(r.left+r.right)/2,t=5,u=8,v=q+u+t,w=m?m.getBoundingClientRect().bottom:0,x=h?h.getBoundingClientRect().bottom:0,y=i?l-i.getBoundingClientRect().top:0,z=j?l-j.getBoundingClientRect().top:0,A=Math.max(0,w,x,n.top),B=Math.max(0,y,z,l-n.bottom),C=r.top+n.top-A,D=l-n.top-r.bottom-B,E=l-A-B,F="";return this.bottom?D>=v?(F=" mce-arrow-up",a=r.bottom+n.top+g):C>=v&&(F=" mce-arrow-down",a=r.top+n.top+g-q-u):C>=v?(F=" mce-arrow-down",a=r.top+n.top+g-q-u):D>=v&&E/2>r.bottom+n.top-A&&(F=" mce-arrow-up",a=r.bottom+n.top+g),"undefined"==typeof a&&(a=g+A+t),b=s-p/2+n.left+c,r.left<0||r.right>n.width?b=n.left+c+(n.width-p)/2:p>=k?(F+=" mce-arrow-full",b=0):0>b&&r.left+p>k||b+p>k&&r.right-p<0?b=(k-p)/2:b \s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi,"<$1$2>"),a.content=a.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi,"$1>"))}),"undefined"!=typeof window.jQuery&&window.jQuery(document).triggerHandler("tinymce-editor-init",[a]),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&e.bind(d,"dragstart dragend dragover drop",function(a){"undefined"!=typeof window.jQuery&&window.jQuery(document).trigger(new window.jQuery.Event(a))}),a.getParam("wp_paste_filters",!0)&&(tinymce.Env.webkit||a.on("PastePreProcess",function(a){a.content=a.content.replace(/(<[^>]+) style="[^"]*"([^>]*>)/gi,"$1$2"),a.content=a.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi,"$1 style=$2")}),a.on("PastePostProcess",function(a){g(e.select("p",a.node),function(a){e.isEmpty(a)&&e.remove(a)})}))}),"undefined"!=typeof window.jQuery&&a.on("keyup",function(b){var c=b.keyCode||b.charCode;c!==i&&((13===c||8===i||46===i)&&window.jQuery(document).triggerHandler("wpcountwords",[a.getContent({format:"raw"})]),i=c)}),a.on("SaveContent",function(b){return!a.inline&&a.isHidden()?void(b.content=b.element.value):(b.content=b.content.replace(/ (?: (?: |\u00a0|\uFEFF|\s)+<\/p>/gi,b))}),a.on("preInit",function(){a.schema.addValidElements("@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b"),tinymce.Env.iOS&&(a.settings.height=300),g({c:"JustifyCenter",r:"JustifyRight",l:"JustifyLeft",j:"JustifyFull",q:"mceBlockQuote",u:"InsertUnorderedList",o:"InsertOrderedList",s:"unlink",m:"WP_Medialib",z:"WP_Adv",t:"WP_More",d:"Strikethrough",h:"WP_Help",p:"WP_Page",x:"WP_Code"},function(b,c){a.shortcuts.add("access+"+c,"",b)}),a.addShortcut("meta+s","",function(){"undefined"!=typeof wp&&wp.autosave&&wp.autosave.server.triggerSave()})}),a.on("preinit",function(){function b(b,c){function d(){var a,b,c=window.pageXOffset||document.documentElement.scrollLeft,d=window.pageYOffset||document.documentElement.scrollTop,g=window.innerWidth,h=window.innerHeight,j=m.getBoundingClientRect(),k=this.getEl(),p=k.offsetWidth,q=k.offsetHeight,r=e.getBoundingClientRect(),s=(r.left+r.right)/2,t=5,u=8,v=q+u+t,w=l?l.getBoundingClientRect().bottom:0,x=n?n.getBoundingClientRect().bottom:0,y=o?h-o.getBoundingClientRect().top:0,z=i?h-i.getBoundingClientRect().top:0,A=Math.max(0,w,x,j.top),B=Math.max(0,y,z,h-j.bottom),C=r.top+j.top-A,D=h-j.top-r.bottom-B,E=h-A-B,F="";return C>=E||D>=E?this.hide():(this.bottom?D>=v?(F=" mce-arrow-up",a=r.bottom+j.top+d):C>=v&&(F=" mce-arrow-down",a=r.top+j.top+d-q-u):C>=v?(F=" mce-arrow-down",a=r.top+j.top+d-q-u):D>=v&&E/2>r.bottom+j.top-A&&(F=" mce-arrow-up",a=r.bottom+j.top+d),"undefined"==typeof a&&(a=d+A+t),b=s-p/2+j.left+c,r.left<0||r.right>j.width?b=j.left+c+(j.width-p)/2:p>=g?(F+=" mce-arrow-full",b=0):0>b&&r.left+p>g||b+p>g&&r.right-p<0?b=(g-p)/2:b'})),-1!==a.content.indexOf("")&&(b=h("Page break"),a.content=a.content.replace(//g,'
')))}),a.on("PostProcess",function(a){a.get&&(a.content=a.content.replace(/
]+>/g,function(a){var b,c="";return-1!==a.indexOf('data-wp-more="more"')?((b=a.match(/data-wp-more-text="([^"]+)"/))&&(c=b[1]),a=""):-1!==a.indexOf('data-wp-more="nextpage"')&&(a=""),a}))}),a.on("ResolveName",function(b){var c;"IMG"===b.target.nodeName&&(c=a.dom.getAttrib(b.target,"data-wp-more"))&&(b.name=c)}),a.addCommand("WP_More",function(b){var c,d,e,f="wp-more-tag",g=a.dom,i=a.selection.getNode();return b=b||"more",f+=" mce-wp-"+b,e="more"===b?"Read more...":"Next page",e=h(e),d='
',"BODY"===i.nodeName||"P"===i.nodeName&&"BODY"===i.parentNode.nodeName?void a.insertContent(d):(c=g.getParent(i,function(a){return a.parentNode&&"BODY"===a.parentNode.nodeName?!0:!1},a.getBody()),void(c&&("P"===c.nodeName?c.appendChild(g.create("p",null,d).firstChild):g.insertAfter(g.create("p",null,d),c),a.nodeChanged())))}),a.addCommand("WP_Code",function(){a.formatter.toggle("code")}),a.addCommand("WP_Page",function(){a.execCommand("WP_More","nextpage")}),a.addCommand("WP_Help",function(){a.windowManager.open({url:tinymce.baseURL+"/wp-mce-help.php",title:"Keyboard Shortcuts",width:450,height:420,classes:"wp-help",buttons:{text:"Close",onclick:"close"}})}),a.addCommand("WP_Medialib",function(){"undefined"!=typeof wp&&wp.media&&wp.media.editor&&wp.media.editor.open(a.id)}),a.addButton("wp_more",{tooltip:"Insert Read More tag",onclick:function(){a.execCommand("WP_More","more")}}),a.addButton("wp_page",{tooltip:"Page break",onclick:function(){a.execCommand("WP_More","nextpage")}}),a.addButton("wp_help",{tooltip:"Keyboard Shortcuts",cmd:"WP_Help"}),a.addButton("wp_code",{tooltip:"Code",cmd:"WP_Code",stateSelector:"code"}),"undefined"!=typeof wp&&wp.media&&wp.media.editor&&a.addMenuItem("add_media",{text:"Add Media",icon:"wp-media-library",context:"insert",cmd:"WP_Medialib"}),a.addMenuItem("wp_more",{text:"Insert Read More tag",icon:"wp_more",context:"insert",onclick:function(){a.execCommand("WP_More","more")}}),a.addMenuItem("wp_page",{text:"Page break",icon:"wp_page",context:"insert",onclick:function(){a.execCommand("WP_More","nextpage")}}),a.on("BeforeExecCommand",function(b){!tinymce.Env.webkit||"InsertUnorderedList"!==b.command&&"InsertOrderedList"!==b.command||(e||(e=a.dom.create("style",{type:"text/css"},"#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}")),a.getDoc().head.appendChild(e))}),a.on("ExecCommand",function(b){tinymce.Env.webkit&&e&&("InsertUnorderedList"===b.command||"InsertOrderedList"===b.command)&&a.dom.remove(e)}),a.on("init",function(){var b=tinymce.Env,c=["mceContentBody"],d=a.getDoc(),e=a.dom;tinymce.Env.iOS&&e.addClass(d.documentElement,"ios"),"rtl"===a.getParam("directionality")&&(c.push("rtl"),e.setAttrib(d.documentElement,"dir","rtl")),b.ie?9===parseInt(b.ie,10)?c.push("ie9"):8===parseInt(b.ie,10)?c.push("ie8"):b.ie<8&&c.push("ie7"):b.webkit&&c.push("webkit"),c.push("wp-editor"),g(c,function(a){a&&e.addClass(d.body,a)}),a.on("BeforeSetContent",function(a){a.content&&(a.content=a.content.replace(/
|\u00a0|\uFEFF| )*<\/p>/g,"_(|C#7nB}wyq)~S;Ws!=MajNqD{U7R!AAH-GJ8i%e22Q46
zEC+Y6t9GpH#mA4{z^re$YX`aa-!d5f24Rm~+MhWvHMeaXpER3p$pZfaYd^3%j0neV
ziSf2m6d|gE>Rgx6)Lh*RG=cwz@xySD@u9Pa-Gd1oNmw$16M(~vfShK|vsWS&XYGFlwrPyh5$%juR*#QpSG=-%d_<(+
z)pn1MTF2sr-Mb@NPj5;UpNKTG;zuHFtK!GvMY&@9x>uim5l{G4zgYuzL}$f2yJ=dV
z@9d^&m%poMnl}2oQl$??TB$q4#$dWW0*;TZ33$g7aD0NzeZ=M>dE7F4^SRX3Q;}wN
z^@)E-D|eL`pU>OfB1-&EtCC|PkpHa6iyiy)%exQ1iD&%O$nF%a_{i=QamZ0sryh$J
z#`qnbinMa$PegiY6*IT31~HPU_+3eP6%z-L**zwzlG#0`Qz)zG@$rdxQR*GhpS)D@
zW07W7d@9nmDt;nflqx0(C0h!f;US%y_JDtpL{ZpH(`ixIP18|PR5VRTLs6>qkw`0d
z=akaTHT=XJ{z5FF6OuseHB5rX%I+x16)U@=Cx;@f+)>&XtL;uvW4EPB9@3dq%thlT
zCnAqs_6cp_XXDu@63eQ2b|MtW?d!#t=r)Ru^fp{E3A#C(Gnd-9G7
zEmQPYw*tDe`Z<4^!2p!eog^AXKv!gs#izSKXmDuThk
9ljZtmY)wEIR+E;2byM6MX`KjRP
$jJAA(u#*PpyhCyJ_V=}?q=p~yZI7wU^q3m4^-|KydU?O^cf6_!VD?5~
z=A}Urz-LleFG}hqeLol}kFLRb9ih7o+Wp>o!}Wg}6X3H#w)ITzz|K?VP>JV0Wdn$_
z2K1qp)?7Nn8V%nS#*k@{qX~7s3FJ6_Dn1pn(Drkb@9>GkiwKM~w6U{n)3hPhU;ve)
zl@qxRQ2sOr+78q{+(vU17NIG*aQX~Pqo>yHo7uKqZ)_cVw%ZAv$r1Z=#>PxrXL!~_
z46}b))Tfg=^|An+r8ky03(-;8@m>rI;7c|RlD=sc9&JN17=`u{?a{KozXyxiNI>!m
zYe70*Zj5DI+JX|V!DEwxG(=49(1mew1dD}#KS~!s2Pnljnk_Pi&CDr-0LDeAj~N`;
zbfh~R9>O6a>cHw@#1Th^lyM|(wUaNNkvD%f{CFWMPvQ4VVe1P&KM3R<`1w)5y|H V>^i%Gc`pf{)}_RHx3yQIdJh+1H<%
zuy{~_FfZ9{_+XH9C%{!wjFn=4zfd+?K#|bZ_49|fo^8wo<4k|?=*&}RSW@jNy5`nm
zWd=qdzj8|t)t2^94|aEJLPchs8v@oBp?N^ML*?v;Z20Qy%ya+ry6s+6|EphX``u;}
zZMt1DOxYU<3=SU|61F#k8a+I)1%AmM$8}G`td@#fSxHR;1je`n{>L&|E3vC$V@GNe
z<365*;suah`6hoTpDm)siE&oQ^F_Rx`lRbL3?3qaoPpy!ngb)Jf!p}m(4ut~H~Eqb
zJ0yHd0^j8vwxgcQnd{49=JvzVGaNE>xT#duXPNm#%2rNhm8`5XX)7-&v&@{F!1+3a
z{?MTgAN^-LeE2`m;X|v#$N%4T_~>8i@WcQAclfx!5eR?sa-}PLE4?``w@{kY`NLb_
zthK-2{Il1pKk3&bW>17SvQaJMuu##4Hdl!pMd_Diq)^5*PXO%RoY_!T4JLe;B7$!2
z(Ut8NvQ
ik#ia+;|i%XpC^g;A^|yK!;u$!23kK)KSoa
zxQnr6aY>5M1*w&@Hvob4i^%Z|!?RUn@Y`AWDm4p1^axuh=YD^1!pz84H8|lwV9$P2
zw-vF7#~^*fQVcPO*P^yF+s@0gNJkQl!yRigNWxYpX87
3O4ckv&kilqtOZ><{d+?Tjd*3tN$0=Wx6oh
z@qZ1Oci0M!U|y}Xli)Br=37D8i?T=tYh=sj?Pm52n*Sh(OM2JqcT?h7@5nG1xWUl>
zQHP)zUP=_hT@FEiy#K?rCR7L38(PKoy9(1!k|S?sq=yv>SYT0s{V}{L!;-}!zsrQ*
zK%ntTmKc4394U;_!b=WK{6hOCM5>yo#D5?ZjT4AX3_o7dcl%~XMZgKHOL*B*Szu#`
z2rPV#nwK-wYL(KJ?_<~NJ#i0@thoN&kfUvJX5v}_*6gAfXX
7?ZWWkc;z>5%YK>CjV&gRVrJwF7^AfP(QR8*zhy<`KL)m