From a7b09a2a01efcb40a0df4150b7bbe9a6fb2395a5 Mon Sep 17 00:00:00 2001 From: Pan Date: Sun, 23 Apr 2017 19:50:32 +0800 Subject: [PATCH] add && remove --- src/api/article.js | 8 + src/api/remoteSearch.js | 9 + src/components/Tinymce/index.vue | 2 +- src/mock/article.js | 49 + src/mock/index.js | 21 +- src/mock/remoteSearch.js | 29 + src/router/index.js | 6 +- src/styles/element-ui.scss | 22 + src/views/example/form1.vue | 291 + src/views/example/form2.vue | 0 .../tinymce1.3/plugins/powerpaste/License.txt | 15 - .../plugins/powerpaste/agpl-3.0.txt | 661 - .../plugins/powerpaste/css/editorcss.css | 4 - .../plugins/powerpaste/flash/textboxpaste.swf | Bin 204658 -> 0 bytes .../plugins/powerpaste/img/spinner_96.gif | Bin 13707 -> 0 bytes .../plugins/powerpaste/js/wordimport.js | 381 - .../tinymce1.3/plugins/powerpaste/plugin.js | 19069 ---------------- .../plugins/powerpaste/plugin.min.js | 23 - 18 files changed, 421 insertions(+), 20169 deletions(-) create mode 100644 src/api/remoteSearch.js create mode 100644 src/mock/article.js create mode 100644 src/mock/remoteSearch.js create mode 100644 src/views/example/form1.vue create mode 100644 src/views/example/form2.vue delete mode 100644 static/tinymce1.3/plugins/powerpaste/License.txt delete mode 100644 static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt delete mode 100644 static/tinymce1.3/plugins/powerpaste/css/editorcss.css delete mode 100644 static/tinymce1.3/plugins/powerpaste/flash/textboxpaste.swf delete mode 100644 static/tinymce1.3/plugins/powerpaste/img/spinner_96.gif delete mode 100644 static/tinymce1.3/plugins/powerpaste/js/wordimport.js delete mode 100644 static/tinymce1.3/plugins/powerpaste/plugin.js delete mode 100644 static/tinymce1.3/plugins/powerpaste/plugin.min.js diff --git a/src/api/article.js b/src/api/article.js index 682cc3ab..1519cb9c 100644 --- a/src/api/article.js +++ b/src/api/article.js @@ -6,3 +6,11 @@ export function getList() { method: 'get' }); } + +export function getArticle() { + return fetch({ + url: '/article/detail', + method: 'get' + }); +} + diff --git a/src/api/remoteSearch.js b/src/api/remoteSearch.js new file mode 100644 index 00000000..0e3c341d --- /dev/null +++ b/src/api/remoteSearch.js @@ -0,0 +1,9 @@ +import { fetch } from 'utils/fetch'; + +export function userSearch(name) { + return fetch({ + url: '/search/user', + method: 'get', + params: { name } + }); +} diff --git a/src/components/Tinymce/index.vue b/src/components/Tinymce/index.vue index 3be1ea7d..7bacbde1 100644 --- a/src/components/Tinymce/index.vue +++ b/src/components/Tinymce/index.vue @@ -75,7 +75,7 @@ // language_url: '/static/tinymce/langs/zh_CN.js', toolbar: this.toolbar, menubar: this.menubar, - plugins: 'advlist,autolink,code,powerpaste,textcolor, colorpicker,fullscreen,link,lists,media,wordcount, imagetools,watermark', + plugins: 'advlist,autolink,code,paste,textcolor, colorpicker,fullscreen,link,lists,media,wordcount, imagetools,watermark', end_container_on_empty_block: true, powerpaste_word_import: 'clean', code_dialog_height: 450, diff --git a/src/mock/article.js b/src/mock/article.js new file mode 100644 index 00000000..029b1555 --- /dev/null +++ b/src/mock/article.js @@ -0,0 +1,49 @@ +import Mock from 'mockjs'; + + +const List = []; +const count = 20; + + +for (let i = 0; i < count; i++) { + List.push(Mock.mock({ + id: '@id', + title: '@ctitle(10, 20)', + 'status|1': ['published', 'draft'], + author: '@cname', + display_time: '@datetime', + pageviews: '@integer(300, 5000)' + })); +} + +export default { + getList: () => new Promise(resolve => { + setTimeout(() => { + resolve([200, { + data: List + }]); + }, 100); + }), + getArticle: () => new Promise(resolve => { + setTimeout(() => { + resolve([200, { + data: { + id: 120000000001, + author: { key: 'mockPan' }, + source_name: '原创作者', + category_item: [{ key: 'global', name: '全球' }], + comment_disabled: false, + content: '

我是测试数据我是测试数据

"', + content_short: '我是测试数据', + display_time: +new Date(), + image_uri: 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3', + platforms: ['a-platform'], + source_uri: 'https://github.com/PanJiaChen/vue-element-admin', + status: 'published', + tags: [], + title: '' + } + }]); + }, 100); + }) +}; diff --git a/src/mock/index.js b/src/mock/index.js index f1312f7b..b82820c3 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -1,26 +1,19 @@ import axios from 'axios'; -import Mock from 'mockjs'; import MockAdapter from 'axios-mock-adapter'; -import article_tableAPI from './article_table' +import articleAPI from './article'; +import article_tableAPI from './article_table'; +import remoteSearchAPI from './remoteSearch'; const mock = new MockAdapter(axios); -const articleList = { - 'data|20': [{ - id: '@id', - title: '@ctitle(10, 20)', - 'status|1': ['published', 'draft'], - author: '@cname', - display_time: '@datetime', - pageviews: '@integer(300, 5000)' - }] -} -const data = JSON.stringify(Mock.mock(articleList)) -mock.onGet('/article/list').reply(200, data); +mock.onGet('/article/list').reply(articleAPI.getList); +mock.onGet('/article/detail').reply(articleAPI.getArticle); mock.onGet('/article_table/list').reply(article_tableAPI.getList); mock.onGet('/article_table/pv').reply(article_tableAPI.getPv); +mock.onGet('/search/user').reply(remoteSearchAPI.searchUser); + export default mock; diff --git a/src/mock/remoteSearch.js b/src/mock/remoteSearch.js new file mode 100644 index 00000000..b5429562 --- /dev/null +++ b/src/mock/remoteSearch.js @@ -0,0 +1,29 @@ +import Mock from 'mockjs'; + +const NameList = []; +const count = 100; + +for (let i = 0; i < count; i++) { + NameList.push(Mock.mock({ + name: '@first' + })); +} +NameList.push({ name: 'mockPan' }) + +export default { + searchUser: config => { + const { name } = config.params; + const mockNameList = NameList.filter(item => { + const lowerCaseName = item.name.toLowerCase() + if (name && lowerCaseName.indexOf(name.toLowerCase()) < 0) return false; + return true; + }); + return new Promise(resolve => { + setTimeout(() => { + resolve([200, { + items: mockNameList + }]); + }, 100); + }) + } +}; diff --git a/src/router/index.js b/src/router/index.js index 1f7d593e..0550c5b9 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -51,6 +51,8 @@ const Theme = resolve => require(['../views/theme/index'], resolve); /* example*/ const DynamicTable = resolve => require(['../views/example/dynamictable'], resolve); const Table = resolve => require(['../views/example/table'], resolve); +const Form1 = resolve => require(['../views/example/form1'], resolve); +const Form2 = resolve => require(['../views/example/form2'], resolve); /* admin*/ @@ -170,7 +172,9 @@ export default new Router({ icon: 'zonghe', children: [ { path: 'dynamictable', component: DynamicTable, name: '动态table' }, - { path: 'table', component: Table, name: '综合table' } + { path: 'table', component: Table, name: '综合table' }, + { path: 'form1', component: Form1, name: '综合form1' } + // { path: 'form2', component: Form2, name: '综合form2' } ] }, // { diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index a6670d59..382aff13 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -59,3 +59,25 @@ margin: 0 auto; } + +//文章页textarea修改样式 +.article-textarea { + textarea { + padding-right: 40px; + resize: none; + border: none; + border-radius: 0px; + border-bottom: 1px solid #bfcbd9; + } +} + +//element ui upload +.upload-container { + .el-upload { + width: 100%; + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} diff --git a/src/views/example/form1.vue b/src/views/example/form1.vue new file mode 100644 index 00000000..d41cf9f2 --- /dev/null +++ b/src/views/example/form1.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/src/views/example/form2.vue b/src/views/example/form2.vue new file mode 100644 index 00000000..e69de29b diff --git a/static/tinymce1.3/plugins/powerpaste/License.txt b/static/tinymce1.3/plugins/powerpaste/License.txt deleted file mode 100644 index b639f891..00000000 --- a/static/tinymce1.3/plugins/powerpaste/License.txt +++ /dev/null @@ -1,15 +0,0 @@ -TinyMCE PowerPaste -Copyright (C) 2015 Ephox Corporation - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . \ No newline at end of file diff --git a/static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt b/static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt deleted file mode 100644 index 2def0e88..00000000 --- a/static/tinymce1.3/plugins/powerpaste/agpl-3.0.txt +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. \ No newline at end of file diff --git a/static/tinymce1.3/plugins/powerpaste/css/editorcss.css b/static/tinymce1.3/plugins/powerpaste/css/editorcss.css deleted file mode 100644 index 73a95afa..00000000 --- a/static/tinymce1.3/plugins/powerpaste/css/editorcss.css +++ /dev/null @@ -1,4 +0,0 @@ -.ephox-salmon-upload-image-container img -{ - opacity: 0.5 -} diff --git a/static/tinymce1.3/plugins/powerpaste/flash/textboxpaste.swf b/static/tinymce1.3/plugins/powerpaste/flash/textboxpaste.swf deleted file mode 100644 index 6a2a35a0387683578c30890c77ca72f6958ac87f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204658 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 z z@4<#+OxqX_je};^{EF`(2+gG^q8B9F%hZZj!;4x)b}%J34gH$vXOAHD88C9=gzY}j z>t3e*Ud)Ex8HIi-0!0@3eE2w-DD?Xh|AcBs7To6)e6*_I9Ztayalt20Fxuv7&=yTL zXw({6#+|K0gY+RY&-GPWy1qf9w6baG^pPywz0K%rX{YJP{`XCGL{`~1WK?kE30q%z zk0kRzqe7VVx%7r4$}^N;t2=x%qP)Qkr~-O(%V^p$>9i{= z`d!t9W#L_RQC)bz-pC$r@bD}2b96PR`A)Og$(rU`uqh+nc_E)&c8-G%*+vXEO@ji5 z%hRCKnZfr}Y!K@$%SYl+f*c>aZYJE@VP8{Puk_$G`O@JyVQvg7rhb|k2=JNl{k8(2 z876Mf8>2n>MA0ua5-_c%PymPKD2Df%MHgzhaeU~>o#o@sE62Zi z%@`vShQtLwyu7Q`&Jxv+r8F>{T_>!}odg%zPn(O>AM|Fy#MP(^Cm;N!v} z$KQw}v*fd~U>xmWuCw(9ZAkTA98^oAjh*$iUjn)(XjS17G^N(!6WXR? zD059JK$(!;ME)c3+=5gkyC9{cJAW{gctLjegvBgnKT*mb*3!Vf{DVDaeE0m9_(`ow?cn0lkfhPg*pXCf&2Ns$UNO;Dl}gY&>rC> z70Vn=+$|bU<`Y3%_-6?r`)J&2;ky!d3A>4(@?E=1c6P`sl$wtPi!1`e9)d_nh@VG- zuzOhI6~?uF-7x%-`cHXE+S?@v)`?pY>*?xgCdnE~c=zCE_W69cE1rK%u$?|%=Gw91 z_&g};wm7=ocHYo+NgHnKEN`c;>)gFQRE9I@?{DqnZXq{^WkzU1 zXUcPai37Yu{4p($N%bG2nh(X+iS6{cC{L_DJ3MMHYq>IZKw1Hc^N9)!Wmtbh6El15 zd2$f9v7QtgB*MTeaUZr^3wX%4^4c~I)+rgis=nPBs!9piq`77F*F%%1&9CSK}(cw3-VoDSTs)p8z0X zpc|%d*D0Cj6fe(&jX}P5dzBun)qDp-Sfs@H_c*9?H0y%X4|&C!*dCkM9>-Z}0#V6} z+G!2N>5{EnxyW7yHmbT+6Tpa6dn@KAflU`af$-RvAg9viV*l>!t3oG zMLc_WPShI|Rr4*6$cA$AZ)o&=vyypFQ^XsZtQiom4vXy=KTnM9SjC{-*s3O_mzwr4 z8Y{Z8xW4WuP*gnEV9;dEEFG)xXE%TL^f>sYm0cM65zX`;F)1cy&Ids;F}&eNDlQx_me7NhujA6hvv zOm)vx;pi(OKX2+r;K+r#9!dWe?h>na--)F$dmJSk!}b4=7-J0c=*C>t(@ zGhtfYhA={sYg*_eYO{xIqBUg6(S|HpOjZq9(iyU(95P3y#aa#%g2lXVt{A*>6*$3D{w@|oTj1=$9Qa=ojmZVHz2n#HUMEY`?&*d(8n5|$5s zN*<1@Y=ngft?1(jLeSNED6aWV_{6C?{SC2U4^Goz;^8($72>$7{2%d+rznmFaUb(5 zioB1BBSc?mS%?ZG-n$|+qdh{u-SitKL9e$M={2Q%NztE5cn%A}&2Ph#{MZP2=u{}5 zn8$WRKqsUah{*gu!7dL8sRn1IV#2huC{v^f_J9!i9the;%Is%A2%HtS!1;5K+BK=7 z53PnwR$+ygC0pariv(pBuJL2CxYhzp9SrKw#uoLCgTx6?tQ5v{)E|>+4+L>HbpKht z8=CmR|366W|NW5K&q(e6B%~e|NIm>}BelN@sr?pG`vp>|b{2UVaffWA9y$l9hi#-D zb|aPO{2Coj1^$eEVA!)$9E)uX%8lfT*o=-XL1qFSn}ZD4u?a_C3w6gk!L_<$*}jN% zR9jedJ?_|r*4cts={etwp>u@KQFOpT$=`^V5h^P%pkzdrW~82gZg=n%6aTPH7MFp+e765eiic5Ji$aX-N)~+=AZ- z3lJoe$vFH*^4I#=ZvGexd9Ay5H!0)_XjlJ%S4-ODkUuTY}~;}uXp;O+3cz9 zS3E{$dDMdwm=#ezfys2^*Jor_;@7RN+l&cwH;r?wQG8YOusCSGJIGcE949Ob?*SMd z2Bfc|X2IPPOb84hvX_E{8>2Kk%_Xd%yPjJ4AzTOy)!3<%c zD9f{Q(dYIcu_%~4Zv2B_%S*wXAl&@kbp#{lmsY}ermMTgP`vi$hV9ZRR64CJosM(BuhTv=7e`bD4rnrQ_Ce!ws)msY zDkmz3$u%tDtxwn~t26=X@8cuDrMjkw2V1Q@x$ukhtwfzi8X^m$R;4F%(x-HO3x@J+ z8vlWhogC{pwHG}0i6DDSi_5JEH%of&>5LB=>?$U1oRfl=XuHLsv^cXPxvG&L2pnLu zYQ9?J7)uCy45}hsi*p~-$jlFUYyKLoJ;;Ni3#*KSK_;pPc(7tYIWIwhG>I{067Eot zX$m}by9IYRNTY35YJY}DJp63+bQN`*uTqGCXjWnqDG_hzibKCgf>N78UzP0DAum6t zYVs#Rx zzMqXS&;~e=3dXmxcn4onP~Bgz@L4Ilj)N&UHrv?BW54~rrcg(V5$r;5YOI6T4BB3s z#c(CFIOIeBiyE!9=Rs&Au@2kT%=JwQ?~~>CW_R)`SF-rtj01zBhBIop@1@NZf2|4? zR)zRzMhAiuUxq&wfyrnwSd2z}c;N?IAx)lk!;Qj5KGD}`Vy+7D&&rU6Tpo&|Pg?s3 z`{!Cl{)n@&jme*#6~_!KSc1C%425ReM@naMzyMD&I+NI@iA$!PNrGIdYaz||Pvwhq zKWzJ?N*G^gK_AJsO_f2?8VSMVVc0+y2Nb`_L3~#L+yv{ z2S=~6qkGXi9C@wM;SY{v)r$rVX%!9KTJ@0(1~p+o_MI^Zc4=nc@WH*+^?z9AH#zeS zy7jWPb*ZxaUG})HJGXIf(yRQ*EDgbDmMi@hR_^*aoq|0&-l)>c7f-t~Rld~IaV2it z_Ey8JW;uFX`C_6O_=+$qnH!qCQ{Xs`ehFZWj%&hSrGdCnUK9SO#*Q_?+)Xm{&y5{F z$lWXh|I*lTeJFQ}4E?XhjvrD9Yjw;2*E*Etr3U5ZCDK#>cgIcWzyP?v zVhaGzjPRsK3nxDTUq7#0xI^cyMfTnh{nsA?E!-BG_K_Fag?K^jVK0ATA+GPBwCu(Z z`v=#(exH9j%P9l&H<<2h8bV{mK0`Q<%zxya2_q3&tul9oXh9z|OM6rTtbj;z3saTs z!W29CK~8x2sS~#ww9infMs`V*@Si2T!IRJP!jlixeV?uceEtE&s=R5CZ?!ZDBQQ~v zbZp3PhQ|j;rXYa={o&I5zT`8)N6n}${#Tk?vsG;PuJg)Et8g*0rfFu)7wpb(N3g*@ zk9$(o(3PS_3{@f^8J_YvjX&IsVnTPPI$6gJ+QLd^=_-ouE&VT@t*-x%2r>TS(WSdySj z-d-_Q1L7JGZtYBO0cz_Sp@k&GlvP-v@8_56E42Ucv1tNG6XGgCknEWMz*~B(eq#3N zI7V!@?o)k!JP5{gMlGd%i)`$s2Gt^}JtQgm{Qr}?HDojo*GVg_+d~G;0FY0TV+g;} zi=;_yq!2Z!4~jMtt+C4+jmk_WBrdBNm3k*kfpeF=I^6HIxF(^Qxg(?`asA9`D`&7; zxldPVnqA0QMuHmEp!;=I4y6UqY>g(s2;zR8vk@`a=q0u3fbJD-YW57`I&z2`L1~8Y zVZ7gKT4Y0H+&m1w9lA>6ioT_G z{Yb9GF;)}{?mirf&`65n-0g|6qsl2opSTUi1}EqpHY-gM6^C?U?*2)FIppT5*|{ps znn7j@Lm=5u#T4v?rrRXdn|zH}fyy_&9^jb=S1XwvAxyNxOpxCaEL)t;VFKKvch<=1 zlRZh}+B|Gz?+nJ8ni3qksy^2->N#og?)jqm}Tw>d8ZFmh{V};a8qb0 zhic_)uMlRkw>Gh3ejP3o)gzP&(Ik{K)(Ji+R|DmlbbiH1O;tQH)a=30MO0ixJOI8z|!=JTUMd@;8}1JTi~+ zya^-5$nFhc-7o7wT9OvSuf$pJ$b#x3?$%E!qnOUW83I3}(Rd-K5*1OlqJ}NsG<3ZmB69N-5jSxng_=pyZJVd~vqvi@Eq6dxxz030sJJc2y$G=?NiPox+~aY8s;2+nf4}-a8b_e z4tZ*Rp`a-J?7-_Fua6Td(4}*E(8$| z-tE-JpvLl^(@|K-jOYP154BEFrXEy}sNb8@6uQ01ql8p-U6aR4KkM1+;D#oTR^#bw z^7!JO{w9w<z{v`JaxQ=1FIom$vF+3SzFG5_263Uxh{0 zagwzWpPI-gT$%er9&u&n7%y|<-2iO2)jUivUI8;OIt=kc2WHS>s=2>y`&&%iA;{<2 zSc=%f68;%4{-*wGV`Il!$jOh{lKi{6<>2UtOo@V*9MX9{nY7(_g z%-_+JSN=x%MgFw6G{64G$~TEtKfCz*nPX%89g9-a76Y)N<_|ZNcGr&rEE4elKK_3X z|G%a_V~h!QEKW^Zg8awS^e9;~kB-qgmZYX#m!g*B7o||m;uHbrm!y8A7Ouly>3!Z? z(OxNk9b6xM!22oce|~9-Ul^FS6#J^e(iBBd`Wa%ws@4uqN4OoDUzY0p(SYfE4;rQr zjHo)J)Tf&CmpP$GPbE~lQR=72es|;&irh$%8(op$$R83%R<+MiTb5H>i2SE5=e8`T z9#d;6Hv7yNFa6;5jcz+4D{Y0Ga#qKkX@1hcENsOtX;`;!RX>9rNoQ0OPPod{R>T=_ zw%YLwhIv-hhJ6;WT@LKx6ygNzvw)rLz&;1qIS%ZS6ygNzbAX*2wcfyhyFPK3;w3-G z=}JzSSdG{+P*^auGO$*7K2!#x3NN6fd0fk6tM!Hk(9DyH7vS8;=R?TFQIwP0@KGHxf|$)-4!H1wu0oxR*n*}5&Y0+>C^ z+$qbQLSI6m-A?#rgjaASf6DIhRCZ}p;#EE0sm$x_RA9xGreFF8r_Q)mQ_jwggKk&; z0XgSz&Q($84cnJOWwYaD^zQno>*<0UY$V<(k@%~|jy7nFqK?Morl>{|%oyQO{ky7g zQ(Yz*=^fS`MIkrVbLzLZtAY&DlqR-Vw?u6<#XCSmPZXk?z&7XabpYN4z-kx3y8u`d z^(kC^?lMSUJJkGrYPs}YsO>Un1J|Ml@C=u`i+k`@`Zx98Xf?Tvvfk?I#cfdt;FmEe zOxvp(9edSj525Stv%*^jqGw;`taMN)>%|E2(KUccD zDStpMozb(MI)vuiqZ)O-4>tbdsfzNH+@dgL1M~s4ZBbb5Toi@}uessEY?Xdzhs&h} z;q2KEws8m5!a+nX3lx?G=yyq=umrzL1BIpdy)IC=4!>)(!WxZ!*J_2e_+70PR^xYh zps*b2-GM?ke&>e^^TYHzD_ocrrrxEgchuK3`g(wV4yf$AnlX+Q=>VRNULS=l5auAs zQA;Um14BgF^{Q=9PJK2WaTHgNy45 zN9u4TdkgogUKGIQ>#~2RxPNzWvSb%qIS`heJqY}6;|cO5Y|j66kZ8@wT%ZuKabf4l z!WP$25`7p%5BN2+OX@I%?~Gbo9~ztMa3S!nsI~PupyB~Is21HoO8|6F70?m@-RlNg z2B7U#K+6EM!ws~QeVJAPEd|g{XTr|KO`lyZgwF-Sce_iO4Uj$Vm<5R0%Sh2hxhAFq zbSrMKeL8{dcgO5U%>C||gNQlcjyZssgYKA}7=uIZm^I)V4^(w*4fIrp-9T#rbfgMs zEr1?$1FZ(o(JG+T0D8y`v>bSRxC&@F@c4)us2f0!RsnSbsO$!s56l@=K=Xlc(+xBW zK$R+>SpYi5)BMYlia#p}Z+0Nxe}3ta24TB-PZNC#+fDksw`uMa5d~pC3Ss|GWcFr} z-4I}W8;y$Dc)qxe#wB(YW}^dxQNJSg<(O3Y1xl%R9L=!O{fz|k zW2&OBQc7z%e)T!=w{rZ^>SA~sj`)x4_-ejw#Zt?LqR>bD+qn(P&eFXj8f8bh8sv_% z8e_+~8iKeHi^nWpJRXZ$TcPc|bnRC0H}(I};&lcK->;)M&7nb@wjwp5umYQj$DfSbFthmS2&o`45uhyHmOIa_8m$t8{%TbDjcE%k)#|PUY#}k4wkL7gh$v z=gIMf>*eRE@r6~vX)8y~xiXbs>EvAL)nEj2S01vID7aO?Or8%AqGNjCBS)>-v{9Hhi;@`L4(a^g4yi2{A z-AzjKFy4zO8@?lIq8$n=8g<;X$198nRepkT5JzqZ&sO2Q%zBw|uxw_Rh83{n7weL; zHAeRCq+%oB$4Gp$&d3ao_acFIOb4M&e~#PvIZ0&f`b&F6oq`(EwNz3rh|khOB@nWk#Oy6epO z3YQClqK)A9_p4~#DMn7M7{u&@N#svwKVs?irK+?CRCn6Toc0+>T6ZLAy;(56&+>~% zQCko-Z#>>vdWFgGtMa7pqa_ISz1B}FS{-#Ib6&WU+*jJPYz5rypy_~;De@1yb>`U*QZ{HmX*2oHUf&iXTo zg4Zy_drH0v4%SM0nhLuZa9*IWmp^6&^7|V~_frY`IQ+g}JR#E8skJ2IqJ9x~b_~T8 z-uF|)+kWv*nQY(N{?BgtV0bvbk=vJsnb7}ai?Mgd&w!^+0>Il%@X1pQwhpJ*k;*Xq zV&%fcU?vQMoWy7O&i5Ps8SNp&5`7M*E>&6;JTF5a#n9^JU#ua(+=t_f0k+2F`!fNm z4eg#ED7@ms$6NlwLGHUE`~PI!l!B! zSBwyrI)8;{qn-~5Z7^Ro@fY=yp|Jzd2wvnG^9bBf<|Cye4cP}96x>f<96)u$e(_#M zU*Tv2PXA6v{X|jQ_?kw9eUyYiNMRMFi1Gb;Qn*5JX?7pvZ+4t_dW#k0OPFM(JU0ka#q%^okD+ zsuA!HHz1;?Fh2m-I1E`EwUQ8vXKauK{2H;Z_$byW?QO7Q_BIseQOv4P8s|k+FW+`5 zyr&^?RjBYb{hW3RIPEJeAn?WFoj3W&82tS&4%h>LQA9*nyUx!S;hnF~5Uz8-YWtN3 z;~5r%S$IBF4Cg|{P$r}l46P_#<4w{d{Ctrf#Oq)|8cUGI**DvnJ`6JZ^CPQS7F%i;#csi>xa&~Tnvcy z?>DSD`;L^wnf+e;$*b8=h2K~%SFoG~n2f)FNX5SAb!Povu+~!+Q10_Vy&+k8x(;_e zy;iWa9df}Nyr%x0Trdu**5k_@7;P~XErmkV^0Y+4IN(j2|I4bS9_7u^+qL9l+jTG6 z_1ix}yOw-hyI6Je*68h8_Ob1{5AAyUkI=4VAJ;C{7QHiiyOw@zyLO;m@BR_mwe;iK z#R{tTSVo^%C9fS8@*101qbd88Dfzd&rS0|9qW8~{){;WVJgg=@|LMfG!>T1Le!#Ly z08>D$zoC4wkra;Us99nsDL#1N)i!Xe&SEASbTED;*%>DpH{^ma>ZYf_#KHF z`vr7+>uNx(vV=1nC31dU3S-%Ol90L1I*L=G1lAf3S4FYfurmg=p)JSF4huSf{@^~J z@PL{m+y_!LcKTV)~?lXWX0QYJ8s^d2e536g3hs8e%SRKE9l#V}m zZpZh!I=+`W&ZhV{#O98#SFHT3`0zcbe&)-D6JwBlP&j7*0jj zOAX-Yry>+T+NlUdk9sO1;?F%5q4-fwML2%GQd-UNi^q&SE#YZabzE{&496u4M`^M+ z^r&jC9d*umNp&;rxDn?iBb(sc{%TMVkef5!cu^9(5x5-ds@n+?r`?;D6Iv{L~ywsEZw2!pH*>cP@d4S0!X~w zVf)?T((5=;UB~T9h$y4*x@y6$cVL%G*bNTs@+#Oq2X>i+?RQ|8Rl#noYQqu0ZgQ3$ zwBZP5*5(-Tf++6Lil?yIj5c3UGjG*Au(o>50ndz#XoR;LZB6FUag zGSt2uy+kc5;1L$SUh`+Xk~&HsDVbl_D-@AmsN$crVK5kNX9d3i=Ug9}m6lF5CgmxqN ze?d6=lIqVrr`l=R=TtR!LM{5UCsYMfMqJ^!Bc?@s{>9p- z-18WY($yMAmQ^G3ys9QAdp$H36KE{hAp_Gqm6basfwQNm&Nqne;?F3aGBpU%3$*O& zuy@)U^^`(92G>7&3mhW2I~0#q?LI~9e*45VVEbAdq15b}i9KAUYbKutFtJnq(t)OY z?L0i(5h$I)3rUYP@IxsJapog)N2~#vVU10{ZwCA8o1@kIHzwH^xXJd%voR zHz^#N9(6Q@uW=1BMA1*3)WlVo+zUiJnHN-LIw*pQrwY<2v=|0%ZyO$_jtkCG)TD<3 zCIp(9{8VA9LSJr%#HIKIE8OZVDZN-yw#9In@ zx~D=0NN&t-JYWRpveNEuNb(t;Z0A> zcGY=5dF@c`wc`NRj>Z-unZ~bQ>hY*z?KnhhM?F>$^^2bEu|VAC-$tF9I5ZK@cwK^H zg>iUku(mxy1E8lnFT`E=y7pN0$}(iyYe()yHS;2|+KXF=?K0Oc`sDI&5+&WCo7ok0 z9=R<15f>U0bIP2MT~J3A%EiFC@?lLOljaXm3r(QznnjAk4}+s{!Ee&kgNW04NlSZ3 zOi$2osCBhgxG#W+t2A~e7!uzkT9~ve0J*saW4;I6a(9B{O<{y~~TA$KYJO7-RRj?NQN^Bs+Pc$k$bB6r9qq&;|gr7|lKr zRf-|J6~>LHk76kMB*jJPm(r|3B5Vpgj)FbGeuCJs;H@EMKS{xU^a;d&h;izPzl0OX zb>TF7b}a_E@m<)-q`R`~!b&lSv!f~kmaDbjS*-(AtF^zvt99Vq)f&E{0$8p6yjmlG zb(&Xe1gchRM7URL6H9d?FV&_|^pCzym+h47ZDC%e1J$eaj+hqo`5)o!@^`U5H?;@& zT$>hk6tgWV-<3%8(AZK8u_JzVvfZC+YHRY~{x6&uY}5)H@qpVVjnC2orPB=@Ds0lY z$4+oHhA_P8a!2|#c7m`@;}Q1T&sNsOS;C=l4j_fS>4}0&S0NP?VEm#O_@?qX zJSN+qo5LRY zCZ36AZgf(%xKlQUH(M#NVmiWD{2KHZP637}fZYpHhutL@q6AK&zQe%bK^w~tI#~WM z!m@!y`KSxa4>@?-2E0A&qL*zz^dlTGMs_|Z1`>S0z;HgwseJ7xvn>o7C|9qnhTW2* zPD}nDwPY)ss=8WI;i6hlk&g}hj44Lz?D6uM5~KC*27XAEZ*dhU>s4_ZwJwths^p%@uOnG18kW(5UMW?1XBE^MeY zD;0>bi0vVW%*~A+g7Pxd!Ul-Gx&4im%>G6qG|r_jHemyAk0&qPpCZcDau_ z<#wUmdr~rf_>Hr??CuDXG-5UVoKlVO#J6R0ZL5# z7q}(=V8x1iYnD`+h6B=#e=RzhWOdoR3-wK*LDg&sX;r5WgJmf_iS7irRvw^F7 zfq_#lT)h;-Vf+P>L(}f!y8GjpVGS7XuYpGxKjjc zJ_Ea&N>k=olc)8O^LmWZ0Dt$0z@P|BG4O+u&?dYm9KyR2gtrf5^AQu?&A9r!8kDvNl(srG zZ4Cl@5m=L&wibbX2&_#_yA^@`2;7>Qb{hisBXC=4+U*D&kfeKiYT7!456bYm)U*u< zACln>scC%(KY+}Asc9P#IE=u?)U?eA9FdTlLHB24xbpfbuzKpL!Xq)i{sn@O#NY6r8VDWRMG|syum7IgHuwgGRWS3Ov74m zX{9#!3-$DgG44(t7q19*#{UR~ZX8kQthm+Z&9czVR-v1Jzdm=xUCd#294DavP6SMq zw;p8<09C9}da^0a%DUEv8*u8>`bY!fdRiZCpt;{#7LZ@11fyZlD4l3Z*EZw1T(bdz zp4Li35Bft{AWE3TJ2*Q;927x@L*3a#_tgGEaBANbGe&lspihN}&pVeTPqxaKy ze+udrk>2_Q?Ua$z>c>P^KZbIf=xftRaIQ?1J-ISowP?+YTfE~Lhj+{a?>GqFF+XlC zT6bW+9>e6lBQE0V8?JVf=rwU{7@M(vJ=9Qo zwy9YWbor2=%fSX2-!m815?uP1#A+ngm;4<90X8W;)R1}ZTvGCQu8l+P`5Vsb944qMkpIo*w}mC!QOme?+_5MIBvP5 z=mwydHo>{hM0)B1rQ-P>OW zKLSM?>?LS)^WslRIa#efEVHq>BJ-zPslwIvv?X;&{-JUgZ z`v$!MvRliL;x@YxwxDi};|R48Yy4LR%9+z451%(>j)grGVPrR}fV!<3YA`IJel4Lk zG1TpGc(j}SlOSR=>rDZ5i77ifBx>3Y3xU5ke_)FNHW<8*y#B$sLKDSlV6a7 zDIJ5Y1EHxkgs)TbUj9`|W5>gMzUrd34RIf>W-&;zVZ*FU$ZStRE#7BG|JEJdPux${ zXb|%6h1sSY39x0`XeWGFov_JHm>sD~*c|sqRqccq82twH{F9(To75gicYY0u=sGB( zCqWT?39d{$6>irn@Flkt(v)G8jz*W_zy-i&F$h;pQA~KaDH>wH_;>MarBs@RGRFcQ z6eskeRE^a1wny;fLQ64%bDCnH7#1qjVx$-nU!ugKR&xb0gKrpZ-%!xpVgTe?^yThM z8N~oMCv#^?%U%^xa!&yRZBK<&ZZt`hI->JkK6tf!Zmf!)7JU>h`X^@I9qZ*x_fR={ z>7{Vdm%S&YLaL@J;QY1*St`RQ-J^pb@oQGh-o@FcLSFVAwI%KksM`Mn znkNCx7m_fX|Ec7i^ffPYbDd`<%&R17gqLSV4{EIBpTtq7+3c}8$j&7%fM`?H_{{6V zd7T%Mj1BEF_rqU7AK29-HGIqfD;4jEYeZ3CeDgsFZSx~If8QFfas#@}MVWWTs~m5f z1m)fpclK&`$F-Qxzfk3KB0s1mfVY+L!RMpsYNTv@S25&U%_NS43WVa^2k#8`ypLoWg3Zf5BOBa1LZ-N+vV_<)ouvPT;W{jxP@obnv z6$&lo;B&;?o})?1j>oA8B4Uce3qH?=1vR&{2ShRagw=C)EIT7BhJ?f0Fx)qv3L_U_ zSW_Ofw>V+i;=q8ZSs|FjpL3cH=8DTGr^0*NqeZg{+2d(#&%MEAtuTyrk(nZAZ&=a<5r7Y^VtomCY(PR&b*|7u!%%>xM=Ra zxG%_3db)Eev5=`m$5XxZ>C5d%;jnQ>%8Lmm93K;Q{EQvImMIy^`b)Jb?BRE39FIFb zz-YphG-QRH7Y>=FQ(A>RQo8=2hp!7%dNs6WtaR?-` zYz&Bk+x?aNq-`}>6k1lBmFW5GeiMQ0(*bV=ofQl8>P($V0X7jjLju zX~d|Ga_N;YMh&M7u5sQU*Jzx-MNrNVi>qH^poN#>qQ5gD1e6Gsp%R8k#%602fcP&} zr|<*Z_cJ4#47u~C+c2hv>?k$ta*x9FB1^X`!pb`i!Wwz5}09E>7^#HJ%p#X2NFY=UIEG3H2mM& zJH0)We;KU57~u}f;hh8>m z)90I@&o@AjhdAXgfZ4APluK`fv-dX&kDqUZT`n)bPEy`;n%m{21xsZ-z-*?*A*(mT zY0v~tf?RZUB<>GszHIqo9IP&#PJCmkX|V`@ZfeD57ffb;TJxz4TIDO5cg8B{Z&4HX z`S__EV$YZQroai)gK@m^ei4=HCWMMB;LGhy0YTZFDM*J$id|+?}mY>a_Oz=SzIo?T@^7% z9Q&QH&7Ov+g%uO+!)v(Ke0_uw+vp&cYNv957p~}e4d{Q=h2wJEM>uXHT+muUv{}Qq z*|1=Aer?dfaSI+Zx0=$@&hKAlk4L@Y9l^3;5`s12)Ws*4b$)Gt88!aU9AKbaniZ)Uep>Ro zA_iJTr92k*tJ1g3M$djkx%j8 z)Mb>=*fBqnJM9L)7T_<3bH8y%E<)t%;oR%)$i;~KZ8-OaJ8}sk-wWs7bVpu?$PdH0 z-?}50B62n`@U&~g@Cgcs!+%Zu{Y2T7VGuE#>DrY2t$o|LUDP|Uu-1^>CL z;Eyfn`Ev?F0Wb2F9)H|&rfdsb%WW{`glXnrOFfzAvyCl4uM3Z$MZ7h*zE)_q2Nj<_)Q9~ za)NmZ-rxj(PQmM);NMYju@n3$1($G;I(wSMhKtyY;o6AOIeEwwZs7Pve7;o47%8Pw zV@p`R>Gd04A+s3&$wP#plZ2tp$%9yTn>~14TMB|S6s=D+)Q;zYdYXZTNPc~7s ziy~fm7aE^n*{`$Y{RO$El}2fxhMxq) zN8xM}oH_6VsrV=iH}TV>t*h`G$LC^JBSIR(^ZJ%eZpL&7-GVbI{<;p_v6mf7FxT;7{nf3rRKAMiXpBvGnSf8Q7}3yjh`2}uj@Bnn+=1IDwj zkMHjmuSjz64ehuzp`*4uPGLuTRyA*jE#Ux#>TAYM)_oFizsP zTm)qNha4Yf`6RnC0-5h4o^>f)bQgT)9q#!62{2e=h_#)K!;Q`sIB}bcCux~i)bT9{ z+X0Hnls1(38TM)RJLi0blV3CyS3~J@SN&WnB=PT~!tHY4b_%#3GTbH{p(QfVnQT(p zBS_y}UyR5LedmiDd#o76zQE_@3w+*SWc<$IVec=8hnEcx(-*M z%Yh0zPLYmqcGvSu9iL%S>QM~(qZtqMRa!e65zO2I{0%u!*Adip4%Dnh z1kZt5NKgv_^_MtjSg157sQWxUph|D;YAj;pG-1l(AM?uaaO*VRd5y5kyZXl=|05y@J<~AZIyx6eE0jiqMd0Ve+?2?&b64#Yb{p==$`9|)oMkDi9 zqcV4hM7c`l8o$!{9X!9JLzWPk>SPGyY!P92**j$Jch@nIr zT5Tb9Rf$`tSlpVEzya|%yg8PJ>^|Fvzp35W$y|e-%-jSH*lS6IzaJv}yhd@Rem|u6 zD-+d6^$DDqkCP@@*t-gg(adcTh4mHl6Sj(VEw(fZ5{`lHT2yvbLZfy3O~vA?d@^(i z)QZGhjr{#7;qPk@_dwT1+Uk|gdZ^=rW>s~_?>&1YYn@Z&U%uQfrh z*HZNJArjQs_#@O&a8f9k+(DB&6b$CC#>q#1ZGe7NR+f#N^*SesQ<5erZ z2Cvy$2YUg+V(HA-*4g8;&-uN?x3+3kF_r2Nj1TOQSl}Ls6&Q&%K+ZKh5?`W`IDnD3 zN{+;V)U<;LUoFE2Q_~J1e2okr!bmMlz-N67LvtwAy1W5y$6$Jpz!Rpt3rc71j38=J z0x#Zu1yPy1NKl+a0yxz7haz4!(81ceGvcM$gzW+Q4%5V;+!L%#TAaYfYCQ7GgG!UA zwm{3ai9OnVaLKSFp+z;{dxA62=+4FI>LoZM`#BcRd^?U{?xxBwA)Y}J%T?*j)oB); zeVJ<@!{AObT9u_%eTVtF4}3kPSbQCvE3+`o+lC^4m99n>yCwyj#a zZmf7oJhLe6DI8I)VsXx3oy7)o52lJF31%Nmd2#gQfCd?~7pJ1FhkSKk$K5V}<{oPL z&q*F+!y3vO5?KvMhJdeyuKj&)>uu*113y+W<$7=SDxZ@0DHpS_(JE#K6_ck0$|@#o z7Zd(n#f%<}h3l!ayl~M7T*sq4hDVuOD@K{|>G3S()blu1HbOjq=zuI^kP8^(UIO_$ z7nuYdG9k$2E`r)lkU#x21cm7<3937RHzHd3xdncb@a@PH{3p$1Or!0$RH`;qL1cDu zTES#mk*G3Jy**MkJJzG)D-&L!5HEj!fe*e{*G1^R14vp$lffVPzpm@mvi5+}oJM)iE3PAwf6)7f~13j5IhNa4U3`63U%0D=oH)^OPP1GABKUv02HZqfy%x1}}Z%*L0`Q7$ybDF7mrAb^m zpPbp)NSlr;y!pu!3!578|K`TamE2_XzHPDs*gyOh`eeSCcz2_?EJ*9MK&ytf5n9#! zd8Mut>>ToUHMR`3t{G1Zq5^<#DxV87KBsuk|0+oX=U?{M9*+iODxPJ8OwF^LkXi5P zPJ6V;o?93#aDQY79PjRSE(YL9fCfjjm{#+B5ih#>C!(t~3DzbQm2LYlcDE*ACocoHxdXQ|QQ)0fBc0tA z@#cQs_H$T^u5$yecLz3%%#m-)BS&AtwXqbeus`7=@n(~)UUEjuzygO6_$T)W_%f>q z)vx-YDWXk=-81u%`Jg!_LUZbGQ>}vdh2)}c|+!P94u^__d(h>Gjy~&N$%?ZuVCi!JEvo)ef zFLCQ5M&>FZ)%ueB`f^&{v%ux&tI~XtAt;=IX7@%^=y{4hJRd&C5B1QN1e8Z(1!JQr zvEe+!nGP`EN#G66advwDd8YAWuM1!+vr6{Wi?#?PqDj=`Z3)}Kb#+?jcf_1GOI`j> zU7V)l0fsvhIH$*GlSICx@lpjs62;#|tDHY_(@T%$3lO_-uw z@qhl)GpEUWJ#oYfJvR_X{F>)(UJ&_J)&mjwj5}3-IHFkV;yq05;wY-xwIA`^BlH`+is#tWJ|M8!(==Km+CVP4bE4*5$n&&>2WkW2wJj}zq zGoeK^-)T96g<%&fd?rKTb3`TC(pRx=S@>&q5>MO6CPJmvX||ne_7sC`6HnqH+n2^J z@o>+I`ZJb!1h(QLFNka6CK=4r>Sq8opf#AI-uExH^;~WSA*$=jB7WN~*%yOr!Kj z#3(%)fz}e@*X{(Yh<+ec|3Z!K&d8Q}pLHzt00c9oW3;|QKQ4?X{HWWu)-%N0(0g1% zQsyDq>xwZrW}hp@IJ#vJ6-i?NmSL4>4*>7nYA7&wPE zQs*4S9AX*b`%GOVKRg(LqmtZYe6du8v+1Le?5%0Vq%sLzKv4qX!sOf&5Kf**c{3vb zsn`b+(B%%cR7vEn+&-DvI^3eoTf}Qql zE@%P1Vdptsm%j1#KPPOBBguiC1(3;54(j7WMo4ENx)O0+Oc}Ky`Q?r5> zEILk5juR2#ChtTf`<@P;OD9D!Zzg#gU(P)oZhJWF>3D*p%cUnG+267c)&X9Z_>CW~ zAH|nTPeyt+3pei^y^Ev8#q{ipEcpy3f_}~S6Pa(einqgs)$UM5*u!el=N^2Fe4v$9 zk7a=!N*!d$ovfwJt`FIYTCYJ>&`;aRT3_~6e%p5_5hO;rNnG18({=DeL8Yu4J9jAY zEl3|5e91I^*ZYz(?KY$Z#rIl#H&mzJ?n=LvzRzhnBztbU&u+ROz-z`<+|4esw{mK? zPqf?TZueseA8qQ_3XhD;&kdoiA56?=cY|DB=6Sy&j(YGO!RJhYAUl@tlwSZfQ5zf> z68q&`lqNJ}3@t-u1zt@g%Gvar7lyLhGckK*jRwy<+_^z?-OQZgwwTH3tmOQ40_XpW z6giAz@Z#uS$% z9!=xV?30@P`Gn>X?>30wpynyd(z4HzWYz5HcoGZ6;|X6(^Q}{X#&K9EFN3c0<)n}- zU`OdZ&TuJw-dxrm6)lc2kvTn=YzJqpy(cZZU}G2y|!W7ejsB;-=5z5s^*i$-WlhDUp4L-;H^K zHay}<&Fm@W5XYIenrSKQPq%&$MsFJj>~Hxtsqu?%dOkG4b`hm3rWzKcWHTP zX(#$BeV{*G!EeDcTu4}^-v^7|XRD%iAnLhv>jjOJm>rw4z5tr)PAU%FWY zOc4-oUYUjt8!uW3jOl|#ZTbLZXV>4JfeH!p{Q(?gyqK^qnr%x9tF-Ht#*W7@XHL09 zm6v#HU~7tBhY_fF&ZhM`!_-{rKV=zqVPA~{Fb6471xHBzYl|7xXjOp%{&Ax$}U8MSc<7)NmiK_ca zZ@Aj_9@_S%)3*1}w%_tNH;J%lPVPV2{=-Aih%wBs{LIQ`L?V2 zcM?^1pgutQyRJ5zLBxAb8_u8&?=zF`cs8<^xJIBDES!x5gTX+V zVwx3}7fZttc<%44$EMQ{ZCUoCT8_@Y=Pezm$5%6lal_o)E9`91e>TMr!gS%gu(a(WSbqRJxceZ@&#n&6N#gDH@#TxBolNCUq%tQ`p2Er0 zw5L=2%v<4UsBq>caZ`@QFaKNvZhD%TGY#Gf?s!rGS0=qQy4Yg=W7|J^I{$INm{8c6 zCc!a1p>Shd{J!89zq@7p9{GDH26KUVT*9AG2|_9zFoX+gyw@PV*4kgI?XT_tGS5$1 zPtl*m{&WGC73S_3)DavlCv9rH35vX{o$##)Uz3DFASOxLtYkOo&^|6q28drR<7bdN zuF{FNH|h}I7SR909rN{a?w9Fwnz(n{FMS;g^)jW=2zT6|<2<9|dOKpdh*-v%yY+JE zDt$s>Z@OI0DR3Y-Z)|Bm$tZBP*s)50uGDFNbE^&;;6DEUHXTaQvmtMpI@$3$T6ZmX z0xok(^K{|feV#7;AF|mHyD!BB^+icl^@aZh>bHT5FQ<*=6(mV))YG6A%^2o2bH&}4>wZIJbA(>CgPO56t=HR2k|MtzDh>9W86-kc_7 zf7+vjJd3%#pr}i(@v$sPUUx*TxIVE0&@Ny@7EyCSScoD)YobY0VS32P(2(LPW{arGvS7 z2;Z25H<68sh%jn<*#KS_GQ!n*_Mql5*t37S<7z!IPQ)f*gp=zcI^3hC+qx7lrIq38 zu$+Bd$MQ1|)AGvdX_+0;c`^u`>kp;$_2iGJ3xic*TE21JJl~h z^=r7c|FRV_vc?582qm1oFy;hj;#T|st&p{U+p3+!+37?4mYi8>**oMk09p7P@I1DF z9xlw+VSrlb)+=T4FzJ{Fc_+R$i3?#MfQducjj$U^zSBmCUEr}Pmt@!>n>Ub{*X+SV zK;pqZZVGkyw6e6X1tk5sO1CAGuF{1&R_yNJZ?$4et1Imk_$dXoPjBa!mEp*^=>dBl@pa;A?X?dMU zcU+_MJfbY?l0Jn^E6P~+57(Em=r7Q*;xin9tWO4lHh;5(hCmHok_#9ns;Tsd1wOl| z&QBROB!fxK*UzWHiS{_Qe+jTIv2R?a&k&wLuGMGE7y=6u@yo6FMHCNzF~Ykk>ocy` zE4?!HdZZGfZqVTl^)(HLjANDQ?E!rI#dnatE17HY8A7xszQbj?*NULgyxqbE%0|>u z5k*`5>FqICzu>$#CN@kh)DPm9e0&kdUW~>K1U53(GDqV` zY!kNwQk2c$+IFqK(cA)b291%GTHu7ag(UGvaQH{DPzw`q)sgC$!pR(x&Q*Dho1sP2tzMagyX zs!!P`{SuL92RHUja$kxDgoKblAQ})Fx)~%vGf7C61R5ALp|Q>>(XDwFnh|Ioski>M z_c=AFP~;@{yWa<0XYak%o`<#8UVANUli!eP>=r{o0 z8AP3hi0P(km#sjT-CPZ?M0j@$7dVpy#Y1Nzh!{E{O*nNAj%*khH_Gb?Y!9DtUll|T zwaL0nvB^*2J%iTkOgJM5W)1}T7X5S4cH3x|Fxn*++O51@;N@!>jFbkhih7LNXVNxR z%HGCH_qLeVErnNC1*I7(Nl1*B%c28cQ4~SbB1t&>$=sP>gJy`y?Fos<-d@9;wI`%z z53-T0+nI*@OKevq{aIJThX0%u!QSQ^1BaqLbp#D7SLn3+(ROB?uIB{?2G}~@Ud|eN zCHg&Zb{`lP@%uRb>tDD?Y&rV;fI!|~&GgZASWzX6aQ_tFp18VBizT5uozgt#Fu zDVjI*6E;>wr|2(-H7}&J$Ernnv#(P-|F}XeVN2$Lpu3oYG5o($9GV(m#wPL0omya< zBxb@e2Oq#G6ve?LQ-hcr{LQ-{osj}C81{>V-KvOtxKnEh%D9I+>1Z)b_A5dZj()S+ z}rbM%|-84Wpj4aHa3Xd zqjK}JdV}4Z+YRnhD*Wiq_rFNY-a?Hv-5=CbBaehBKRY>}nD%+nEvNYs2& zGKV7y%GG?j5fQhOC|~o)^R!EdWI)9m*6nLJpTpCe^yp9lZ-~}Ro+~O#-3i-WenSh4 zup5zS1tN??@WE$N)Z9YU;GY=o_d(~yBveET262560eKyvk&=PX{+JfiqEMYFX+b8L zJz7iV!JvvxgF&T4JL}qMq1wdEi|n{WjsBKSvzqgRwp`l6>HJ`9t49iP7^INj3DNL9 zt;tEqSc?;t2|ov_mH@q((C>|4f-;+kR3b&=90!L+lsxK&&jg(5cg8$kx4K#pBkVDH zDq+|fGAyquwl{_!A}dytNtw1s0@LH-gcR|6N>*y`_Ja^`?zL zjW^{mJ%Y*cV#hUtU~_mMpf;L8%X2&(HRWm&mGm&E&a<#lzrx4zj%JpYX_ynFGk1Sh56KgC$od z2^kf{Mrlh#Q7=R4+wcC5$e!+H8N&jm<%yZ8ayf$I@yl;QofrQfOut^n(&hM>q6q0& z@RMM+2#f< zhzA-Y9<(E<*Y4+DyY_^=Hovjg<~R1*{Kj6J-`H#O8+&bjW3SC`>@`Gy@2&5(`Srav z|MPooeq*oAZ|t@CjlDL%vDfA|_8M30O`dQM@a+GEnEdgdh#JJd(>S%OZIe@*BQ6iJ zMo0EhEZC>%&lH~Qz5SQtYK4{wT2F;M$n3~>#MRK}udp^=VV8>)hF3w^r;zz0oX+@?J(RHRx0Gt3<4vK_ie3S2a2+G!4x^NLCg|wf1JfoZ z$G3?1w1_Lm+rDi6Ra|+SKCj zpbjKrUhq^K7I23~x_a}<* z_E?NauXmqe2@}`V@wuP@>LGy2b~J(wqEene{OqJbX39LKrV>Ri`ztMj|@*K~dMod1&ejH_$#i);$%Gu{x z$UheIxZLW6PPUzF5M2mna-_!*?qKoE`~c7YwE_Jy=P)rvJ<1qV+Xdjg01UQ%1`ym+ zPla+Db%R5#=5}6PZs!3=ioSsQ~2&$F5Z zWV=n~MKrN-5!uPvqd~C(A5A-;_&m-V&zG?Aj6yih>yJKr9QuK@{#e@9c_P?HVzyOn z0Xsp!%HYb+Vmumihu!J{w{W%yL%LI;zLv1m*OE|QI|UrQtv0NGMBACr0-9OMybyF0 zqvPe66@C$6zDNq+jQQiXZzMdh{VdqHKvi-DYtC8#j6wi3zZi2Tb5@>x1rNlM7!XPw z6(A#Z$tU5COn-^8Z!z)v<(Iv~5G&wYYmv3oJjO7py>f?Cu%kpN0BAs$zgXB7yRA}z zv;@h369NjA>L2_$ZvU#)uc>ni=0LW(i517x3lfvM-xF;`rk4A7Yyt6a$Ey1>E-Wq-4ptNFb4TlzDgPkE91>9;Y zXYedl_MqU43+qzbKzEA!2`|{e0hr>o!ql}a6B!to2I#-3S*%dKI^cz6DgLz6D z@nRcsej_3aX@CelQLg_f&FbG_)qjmk!AIsHze7;{LTB%3-T{9G7WCAyl72-n_UCe& zps*SLD$Pee_)7YF_I_c?9pp&E4l zl$C^V+Q?qTmi1rwg3wnp^ozDYHk~~}q-Z+(ET1ulV^w$QFY!(Ng)I4qj?peB)a&(y z!F*yDEaBu52xJn9{<1$GT}(h`ycK+|5h36*WKEa@P>h)}6VfBboy-&%zr5;VJJ({R zx^X_!F$)-hv7de6aw^X6lv$}jLGNW|V!q#O{!B*^pLR-Z@RE^vC#Vbwd$9UNF+*P# z6Xz`ka4nD0D>2LCffzdx`|1~%qU)MZ(bxDi>J(%!=)ADQBKh#scO6*i*JF5txS{4r z`;1y5I3nM-M>Xo7Un%19+5(7vjUzz^f&dg$4G_+8Q}2O9h4vAGGm*acSIWtPR0Ia} zANJxIJJY$>xr?U?vN$$Wso+&k9id0GTY9E4`9kGlg=jVR<3yvK>Ue@^v>A>knMQkx zXtapq4Zfkly2+i&^Wjt_^I?!GHAcO@CoR6m%Vv_NpV$MA#GrwBy7U5ZV-R{JqFb*J z-D*o8@DPO~p786>K~QgIFJfy9Z}K$wCu@fU%Q97erBkphE2=E;RQ**Mxw4+67m=56 zq!5PKf{}&o^Wq697}?V$09OlaF-@-EX>ydO$ydcR5xyzVgezSTxKWj#M3qt9sJQEs zH9y8R9}rWdzS8rXReFB2O3(kIm7Z@``bw_!TU_a+thBwK4Rhk#%@apB@trSl@T_3S zcfSDSN``!|d4ZR3;`?79n^g??LGx@@bK-~16NfnQqZo{O@B`7mr#g`g2>F{@ji~cZKQCWf5o#^Bh0>b8COGOR3Fys>m6N zs-{#_HKn4eDHT;ssi+DS32L@2+>CvB}l=vP#7AuA27(TGJP@i zXO<7QDo|;+9|Y%oXp}G;aj(Wz8E#w0ADQF@i@6Bf6Km*jd2$Y0aGwYq9TH+U&MbTSQo;rEdz$OsKP&y(*-b zhBVEzi1!gFGxk<%$X+T!D$`KA7DI1MKUeaD;N2$z-p#=0*8$&rBH)`Dcu5`bo)ZD@Vc-kw z)@APV@=dQe!WIV+9^_5eF^K0{ORJFgH$dKB4|!n~@_`1(2kId&szN^40Qq1&E#0D zL&d6oEB?f28;+Os>nu_AI@Subbz+8UIb=3$0+3#4d$C3p>(o_sYKCe#aS47Yf!|Kx zm*UOdI{PBh6bf(i#>=A8Rq=tiAKAQa-X*2o& zw=x&iLd4c(qS$@q=0!*=GapE$*vyL&htTgG4QkQMI}@?%(NPr%!>b8=`Ovwd!s;Xn zr4yv!i~cp+aHoUv0KdA7F|Ln7N!pwDtNT6seL}K8(J`52yr+Uwx}?Q4b=uy7nq41q z?)OAl2gIkvv%?{$7KcR>54R+F8Mb7f6zFj(RVqA1=ITZ72#McS!ORP3rC)qQilS&JPbWV9ku^MAP%sf&@yXEI8t9|cdKUI9sJbN!02W~oO9 zh3Qb5O4MxrLNm-E#}A(J3yOb&RWp*C*GwF=5!6Cnk)hLPegYP4xd}8=qU; z!j3qUvGCyBt@(D^n=pm^+vXAMso2?|J{85YY|WjyBIKD@3)Zqt*n#H|8nlzpw02x! zNq`6x?k{pW_Q#?{Czu#?RF5O*WsZhjLDkgee!`oOPb|ikJTZP7g(g}8y=jF`X`Mji z+$kKX1-m)R9yVDqIuB z{Agd?-=%fQ%{(Q4U=Dw3x8Zz zirl}UL{8HyPT7ve|B}0OyBq7z)Q@y>pl`dI&D7KJFbb=%eOukQ#@Xfuh02;+ZfI^H zkrlk$Q1Bw4{jvS==utszh#{fltwW3N5aLR0g3xj~Swh6=v_mb5r%o$O0;w)cq7i+M zPhQ4&m6 zg6f;dUK4Wh=A=!ao#!`mTrX4N_Zcq%$!`~cDPb8CFKU-dGS;DwzRXl zl!Qw>w~&q-NHg@Uo!M=j&N3v(NR z$6Pbmr(j|i*9kqGWTkz|snn!9= zYh_a@+**Im!vKELut{=;P!W15&F{*i{{s@K75pw_7<|)8ejYL`9$E>J_MJf}daekT zhX;f;eWp&v%dF;kvCyvKXD}*1Ls1FL6K#>S3hgli)!S(zSTISJTO{xR7S?$IW>aaI8V83BwU)2=*NFDao4cJF) z>}#50zgdU9xdHo48+%Jr?4xzqqYc5;yLH$%G+@7LWB;Kk_Iq{MH#T6uXJg;g z6#M-;?3){~-?y=MH^u&-4tq}n_6IihElsgMbk}0v+JOC`+rqxBId)yyw>M(jW$$f@ z{ZSqEz6R`%Z0!9_u|KZEKG1;uv5kF4Q|wRbuVvGy%zR^O|j?KVL#M>J>SMIHN_sR z!!{bQ2W@P#DfWUo>~aJ40vr3`rq~PXun#q0FSN18nqn`i!ya$IUSwlG(iHpLI_yUq zu+O!zA8U%exDNaA2JFQ)_7hF9&#S|JvH|-%8~drI*yq<_Kiz(OY9x__2y?u9rhcIXNiq{q$#%Ps>Ob@0o!z0*hiaUFRN?!u?FmA zcDvtdioLuJ`|Sqo*^%}>F)cE8(r3fk>{uPOG%I_&owus7P+A2h|jxUS|OHeg?D z*ZiZV*emL=KW@NYVPk*N6nkYI_NNWlD{buKO|dVj!>%-7Ut(hy6V0$U)b-l@L_PKf zyVnMrVy~~mUeJKO-o{?o6nj-&%@;Lbud-`?Zd2@`I_$*_*h4n=jM1FRjB~*?@hijeSW|>~(e6s~WJ^5%xaD9%_nxSsnK32JFl1vez`lzPt{5Z3Fh@ zHuj}Wv9GAZUe|zqg^hh#Q|v42urF`GzS73Nq7FMGv7hk>)AwmMeSc-bt+J)<^ddGG zPRZ~;9TonkCoLK)nbH(AyidO(yiXILQRAhWp$t<$khb8Ymug5?n%3dzx;l(Bg?Y9P zW_`kz(rjhJS_uerzQ zz}Sv46oW=dlYroJ{g z)Bt5HDcej!$s1eJ-|}w-mj+B>_7ldA9I* zh@i*P#R=o|3#k`ndPZ%J95SHVW|T6kl9c_JDfBD01_`6gx-jOSCn!w}k)lTuq9ggLmk2qpC;gS*#ax{>-h}A=%YZbj z=MpS}9}15^&Yt8K5!vS=YP7o!Xf>zH7ZVK0K;MQ~+MC%CQn)$!r-v(dJa)ip( zOp!zGv{|P)kW2Lcv#u)L@;=d5y`sxISZRQoS99k9$1P7rS&JK2#NR@lP4NmyT;(9h z?}o%(4t1Vie=6DsGX(VYbhK})TBf09D+}Y$w%63uKMC(9+Y(Z@l$tqa7~;{}7~d2b zwHHN(bx%Y%+Y?gq4BZI>w~VwTcJNk`5|P%8s!*>Wl${B;*RB4NuR6pLhmus$4(4BnCNh7u23Fi@G!g&M`O{i_KDTAwNtsm=j3Oj4p@`lN~+BNd% z5SO{^i5QPluS;0ggee8v07PWG)14yXV#3C!xYCBXEzW>#rqHL!11DDYj|lbpL@?}D z|C#4Zh|y*HuLrW0PU>4bd=+Xu?6(1F{Zs5)A_6_q%^ z5uE}+5DB-249ctaXuBf;=Wl-oZ{tTNcBBN5xUeGNzk4nH6=B`<)=--DDu3>v%sI{M zdkt?@?nHmMsYi3KbANQxzq8lF^7EMx{MB^C-3i>9&ckB`4!FlVDkgvKx%RStXNaQi3}v2ccg_>qQf2+F zPrdgHbJR?a%2LweEs>!giktM`c3i)ZX5qph?9(4)yx*Z;zo!&` zJ!TrhJuLm+8G?HdLA@Zv)C)d}zrdowSLThhBmaxV#b5N@86u3k>M-uIFzyN!a{}Wo zfstEW%=O(BVi!dTX@1p!#h=pm9JIgaM_pVOLpaCg0>;aHgI~^U@uEa3&k*)|I5S)? zhgffx({qbu?)UK|@rv0Ad1rN29l)%5pk`Jbz^r<(3UCJi9;yMj0|2EezN7drIu@E%)`9jw!t50%Pw&j`eypK;)TF(A%ILswO&p~Pn!Bsn%?lY zI+#CwF@cOF;5811&X3rf-a*u0JmL1Kp8FK(S_ywV_~SKuDp1JImt1qla$CGKJGXe9 z`I8nGPr}zLE`}Hp$UBsXlU}0RL*Smy4Yd4 z3R|8d(B~`<%Ext@H{ZW&P`)nIRC60Y0&tfBzn{&O9Sm)&rpErcQekiHk0#)e>`%E7 z<0a$Fy{x;-d{fC3RU9w(5|OR&(Lv3Bk#F%I<8g-J+cSwrDKP{^KhDvoVKN@1V~@3? z)5Vr3Th^r*WmFvW_k_+;D4MCkyF;0eCpn7n1n@)xCiFKrEss}c5UJL~m>7Xl@gycj z3{WD+Y8_wYPu~^qgR#o~UHt5X0NH6OoGHRiBs={+Y0R9`cbm6_?C{^@sgOTomwc3w z|1a#@vOJ~lSlWbYJO1ZRFK13y02%#P6rk*4=R}tCaCc5AXB4IHpi6U4>D%tb-`l*6 z<<=L;wXh2iGZOE@%jrZX;k=cGv&xG*a_@AN;U!G?w4C);T5*A{^4U(go~$nXgIM@a zC7jfGOPqoxW(RxFF-Gc2e$Eq0h^{x-_;-(k>8#33I5@kPwX}zOoEtzL(~!_sel(30 zq0)3T=znqvTS!Qd zgCXb4QW?)echz0 zXWU5&?b6cE78oCu)h~n*ST;evZCb2VC=3Zz4ymUhwgk9PPEszYHN+FrP#1v?#eOSD z(&xG6mnn6VdrZvj@#sIX<#B8JTD~LYMJn2nfd z$wzpHWJI2a!$w%nN}g_G)^r;;%dJH@-Cp3`^m4A{A*$pU_3pTwdhEjZkW>>BQ;-LZ zdNEo*CotEoL4-d!40(Ab>qF7HxxG?>TZ5YIH5vVin8nB|fxHl?X4iu3I0`x9Vu@$m zaMNo3h1jX*9*UlB)pTXks+Lb&Rb$^FT3pFLrl#fQH9eew-%GrrmsS$TOpu|bVU{wc zR~gAX;#C%5ADa%T)k{oVpGx$}FH7H5;!J7cG)vm2nUQ(SD-*2q?0NZ&JpqTs()CZx z_p1r%>JUJ$C2IU0zRoPg&+WZsqS#xw%UHoz8SZhI;QLr+g=U#&Ir|AB-G5K0G;N&F z_7ZKPx%&==z+{+2Xx`|}?(#x*^#<=;UjePvy30~zq!n&|{+H_K-|QNq`W#89ZK`KM zfE|880&+SeAg5cFQQUZxFnt**B;dFv$+K*SuqMtuw1cH( z$0p)fTG>H|k&-z!QE}xAFWa@G-GNcq)GU!ZgM6y9HXkjWK~O1m>2vGS=hER}n8D}y zSxPv15k|_8q)~`X;U8$#LRtu`FeE+Tz-GI6CrKaa9!K^%uTzXc5<)5NT_!!F-;&#X zk3z%XEKMt<2y9=WRZD5D==4@!N+QO2gzl!^p~;R6(lk)!zA?j0okJTzIR0JQAKGiE zqG{6#T&eI#_77F!=&4F2_Y_FF@bW3yr@XG*GhQN6!oylP`;6BqACIQWgN4@U-zs$W zQB8<|nN|q$2KzI`k$a(C3uazuCrUBG&hq|@z;Z8Aq}GyovE7LsD-iEi@ciI9ckv`x zi@k$3qG&1k_YlYh_y{S)w5S$<`k*yRw5i36(D!Kv-*-s+j}BNAde{vG{KuyOD*tFm zfi`>YZ6<_9xc4(VeyFlE6F<40h$=_z9|=c z%$i+PD_-W<+?c9BwE|4#IxQ;qo{*?!b^Y^X+*>yp35ljld>AuYi;Kr4RMq_oH^!U# z?|2RoKU?_IpoKDR@1gqHNT@U$#X<3;H5cPzDn3n9G4r&SJ#!>@_l;;U2*$t(!jO`b zn$TLUJpq^850qcL|zIdeu$ z+&mqGw)mA)3EM}rq*i}>D7ugt4a`;H4+r$C zVT$DJv$WW1(>x{^%aP&Vj#bH3Ns(^%iYK7uvK(j79{XKfcv8C6u*!#6{06TXmfQ<% zI)|daXXg36gp(%5P28#p+!)3AdG^NYE!iODE&$wrQpw9!GLvze*D_*)hZO9m5fccT zeaSep#C-ny3HZvMZV$`2ps}hgry$kM8VhZ1gn6#oU3<}Xzi5r5Bbt&@KSiPSYp{=P2#+DYsZd0m%&dDkL#&~2s@@co#%E#X+i z&yMrQ+=hOIlKIe$ETE;5Q2lQ8W47t=+k!VYch+1-kq<8Ya;5KMkLJz=41Kwh3Baxe zO%Q#x()S*seTIIalJO~huOoCAj^PitJNrIlpfyV0`yPC(Rr)^QkIR(4k7RBuIJaXQ zy-w--kUy?a`aXf7>Tdn!35I?No`M|nWL{95eQ%5C-4wm5Ci)#lyGH3d*URZQQTobi z`trWFJi^C|JO6H4e=ptlsVCZRhu`P$*&H_XD;0!@8;NGnomVOaU;ZVh{!U8sbqKKl zbtYoovtkr*lDMzy;pyJv^!XA7rJKdNNIH-wt{DfLUp=u_{9>i;2{nIpe`FiSZ4j;F|$2?#wIj+(G zQ|z{3Sm5?aLXEoB+wpj#5H|Js-FR)F>JN7=XHP!*&FTQVxZO&>KFptif}ciw4~_Vc zqWLl01JhuuV}!Wf0XqCtO=Z*kBf_3Ka?n~}Oda!-nnM$HQ6b3O9N2QrlRebwj2^Iq znh)mlIdVHiMmJk2-sOn&N7vxpaUp`WR!M0QIZ1S}`Zi9IF-r7j)_RmN&gl0<%w<-L z3#NMzv%$i0^JJr#O;(I*Pc{!vHjghd@qbk+o|%;j{rjs*g~;*W@IQ*h!Ugu|Bw_R< z$QCXTyJ!&%g!IrThcas?D`-j0fQIq(jz-hJet?*c9-vqgM5I-$G@nRYjt92rlrVB) zL-e1rs1uiyz5UOHguB(_375i5TYkM)2s)n$l`^k|9DRe`IE#Z~D@Ann5I_5=a4u~4 zt^b+O?DgJs|9UTU*OG{5m%Pt}Xcva6S`y4>QbY-}<2$`v1SJk8Q8H_&JRicGFXcXI zDb4z%Md^P&gg9ucah~l0#x}b8e2ATqauExYpn}f8?GzJu%ob&y@H&L8x=$0#1DS#? zLr>Kt!fUBvo_UbD*F{NNHu)@yK9|F7P3o=>c0-vh2?FGLm`0=ylFBmNa47tQEVoUR zW?5dQ&&*iJF|V#q9}YPU3&23~P}SknGog8+q9~XuN+dRhI z{_?Ru{XGP+cz!DOfw<}0b02VMQohH}q&jqGzopxZ8A z@if;bXp6PU^k|%x15EhjK5q)56L+Nx8rD7 zk(7HuF2F<}(+&y64#7Zn1zs9_lbA@bUCF5-saSGd9+*4z-!O12zuV;Sv?*3DU(Jgi@(Oa%v&PeMJW|JS%7341wck zULZ<6>hDoxzHnvc$DaWHwBS#$od3wJZ)%fX139#@Z4`uZkF(&l!ZoQ^)rGEUV^;@% z@}=Lx$Gqmz7j)-Si&5tiScuF!As3wvB`r(=BlB*^Jy3|4V&uX3Xd!(^S|5ebn5t%l z=yy~dUWo%dLY2jzAReO|mQqb2R^kDS(NK-Rr~)Hy71;!=5dCiDY=T;xSvDW9h&7Y7 z_;z8L-O%Ehd%KuszQ1dfxfc}X$DbA`IhAT|tqTb*l#Nzs2`(SPf#Kv?aHAqrq>@@f zOHjj;*@qK&n7$AM&Z2H2BB)|1;>;iJlyyuJDZ*6?={vd2DcJ+nP>VD^Hmwk4V{%#) zo;ZAL*o{AN^BL8*xwGeXyF`p%3uG5}J4K*H3ue!g0k-v~MZqNFl8GpxkCUnAKLzKp zidW>I;KbQ%Dpqa9lYh&p54FP901r1Jk9ZK8Btu6%to9R;!8bhlH=OzcuvuSYg+wtC zIY-t=6+X6UhGgFgxuC*TMkNkcD)^nrN=-vaPfGQyXY)mExCcMKyWpM5D*_W=N^5h{ zjy0|La4*(Hst}!8h)pfTr(#JY3Q2oC)Hg*;0ojrvA}wRzqOr4j*^>((=}nL1abP2l zD^N3)eI?CToyvY|Di5K-)SxNZw?lPhCjT$?B8f?W=+`}Y-(ngrr{*oox$fryvw~&J ze2SxS6V;4c87w(b2EHa4_>e(#inC_P1jLdF@RFH^)nB_JTI?0kQnw=3%7*oR@rG&s zvRHqjUUsmI)mUxVl;k&0)H2Ptygmy%Z08Z3rN|yfmlI_l`=(OAT7#whDI7Xwaq$#L z0O`;mhWCPQ$D(P4@bqO9g`JVnp+cl)T?e_7*oaW_rRutlYC$bXvmlCfUDpl$C+LQT zwI9Y?#*T!=19>GJLaI+izK*i)|uGe@2Mq zNr2y>AC92n5+~@`L~Z5?J7>)!%n|ck5yrBn6_OSWp(TYqW-VDv95RSU5|8&+Cp}R* zd6`+OJF=!)2bQ%-(18(d+$4m7Z;RCPWY#1dY>=#+dDe{{r(<_$8qAk6+FKr*WewLw zfoW~0kq3oA+p4KA?KY|1qSISyQIr3RjVthInq zV)m(8vMA0F{G%utuF0t2uq?Q>TCkNLmGb3kDK&m-Ma+owR_kN!S$!yJlr*pGd>)bP zpc6V0Ym%;j>UluwM93~w>-r4#MZpWI>z5N51>tvX*C&%mruL|1V&yjo7>Z*di~!VB z(0vq73^(XDNuLVF+ryL`@uLMVO)In>P4-Hr)w=2?l1dndH8ih;Dbq0HwDbs`8cP36 z+eH5n;ts)jk4n1(9?`d>!lG8s@%1or-{UOPELlGSoNrq=o9b~kOtNsCwKzDYSs3C+ z5IHbq=N=gb5MGlcq0qIQ&(l+ggrbe0O#1-gsiNK<>(pSYC)DzhvfL*CgZrbBa18*J zD|^?%j&)%-yfwg#5Eg9oQ-L{Nz6J(4~ zqg|H_DQ@*fnhvvHZ_mBbK7Gs!(c-Gs-u$xeyz*1!m-!=3eR1nq%6FB_EA8(7*V|{m z!GPo5>5p}t2)6GC0O1b-ww9kICJ@;Ds^hdqZALwib^%`aLX8Y`; z$mp>XXLPiE_A!7w?#*xU=*Lq{;6wucu4>H~DNp~g_StW7TVF>*@^7?LP4h=km;9UU zR9OCKJMuf${&P>?Ta>wee~RY!hZFj)4^ZHNR7roQoxbthCkY3_-=OYwF{LxhwEaM-w4 zCgJ(_C*YtC<=<`xO*H#$YAHW3$-JIY`rdBuag62PY9AD$?6NtDAq|Q$^yS@s%e!H@ z@;Uu)>|B~4On z7Zl68`Aw2XjXf_^yCA9_N!F{0u4nm38Upc$l||!5?nO@-uX0TInjRc0mCZAs<0mg0 z7_f)9T~Y6%YrM=th_ab|KjdV~=Z1NvcptNo8BSvKDLa}Qlr{3ib0TJbaYaVa1`rAQ zs#@qbYM`&KLcd`{UsDVHW)1Y_D)gH+^p;xaBQ?;YRp=u&^wwJFqczams?bMm=O;`eB)`2ETK^0HSRLwn!;L61FiaDaX`DvNz z!zJXkNsm|cs3s0(W-O!}4*ZxC=#ZFw`&YC%AfRPE}EqDf7(9#I6`0M(D8Pv*iA{Ni)CnrZn#bQZ<{@C15GXBSmn5< zVp){O(~%@CC2vT){-6%|-H*@*yOVCe$Gg)l_Dv`zsp;bH*m@PVP3FW+d7T;OhjM1V zWifHtWqA9@z2Plq-ta1*V)D3*za!-|W=6*qhnZIvFM_UOT}rNHRtwC5Qt{M>pSEW< zbvgl+rye{mLKJw9cK^O7CbQ-v1&9@1(XBu+M`gvF|EV}~znk?t2dWwU0Z)PaJ)Qb( zt$i>0qu1KueH=@-M6;spu=aGnaHb3cl&jb=miCKZG3CzI!7U za{BXDqBA;;f(trj&;@r>(_gSs-S*vy%6BKK&o^z{FbOkrCnrHf56Z;PPakGPU z!AU(zW>vS6|G0hni(Q$aZYQO~Www6UpZ}ztW~Ge7Y10k;PUcUwH<_CU=LF}JtcV>L;{Y-qKI z%NidykB^(i=ZZ?j{f~T^bzY^ivQnWib`ry#S>5dzUNpv~%g&$1m7!kzu$|UAdT|l9 z(vRAwAMO$}Sv9A>)TODzgorKm-Q&EaLdD~jr1g$!4evaz8TnVe_<#1*{Eq549%|g0 ztlq)j#+woRxaFeh^sK0}zk*w?5-+I!Vpx96hwF>m`Fh7sR7WPWYyzZQdzpXv8ly>xDc0n&D2zSm z2Zw#Q5;&0b(UyOR*_TLFt0ce4r+=&#zdvr+wxbt@^M{@Kn<;Q=;<+4Ehcc#FRkaJg zAUqWRYZ~guefl1?HbWY$U7;RFxD(@+f5Impo6`5yzWg=5;ml3^A|!V{@mYIRlqQ;v zzf=N*&Drz)-kSc9Wm}zM@(qqj$hBQ_hebRZ;^OemBy^$vC$`};-}Wi_r+oQcJ_C=2 zr3p)M55%98m|f_E2HB!;-^>0IehvMR&SCT*70&NStNjB04%N%82pfb7huJH_PQc_A z`H|NmKZgD;o*y2X4F`Qxp}VWMgG?UrT*+vKM*q?s*czc&f^3)s4Le2iuWt1VJrL!)%!2#T$t}S zrx=;}eix@t#pqrr``*l67*=Hd@p{ZKVagCca$|CVFA$62V#^o}YcY(3`;(q_)$@`^ z*ivQl_qJdSl7yCYae^gWLpTD5j!}F;@(r8>)RvP_qMcf3%_sENx(3F?&p7`qAD~{` z<+D7Fs&umD@9^PhV|&ahA8>d0V75{fU*q{FeX$9gMwCbX0L5?;eT+rF?R1DMs{trZ z56D`qd(dypV>f!G|a@I<{!ZIkcvH4*ai-a42U=W{9Jwn z$*5vxO@{(8Z36Bf2_9D06MzR2TQI8Iy3r9S?m_KZ#tZ9&th(ky%@PIk(_FWkOr*1~ZZUXDS z+gEPPvz))HKF_;+<^H>Tv`;>e^wLh-g=cyB3D)9Ak>Tr&Gt0jQLe&ZA5EC1L79JT*<)@AEGS8-1hTdCfYotpF?6 zgKY)a!*yUoI0X*XMXg5ESkktsvI^mGW}l`I5wn(wm<>MsKl>UmP+!em+AZFvZ&tec zSD?y|)Q~feawR(G2&%Lfe|pHkVxL`UPxn>YjhT4m>u@}lluj6pEOizo8kC4fjh~@z zp7<;N-RhJ#qWmMc~jrPu^ zL}R^DrLlN!gsoIYF>%e!V_vf@l4 z6R9czqJ%?(g%+qG`{8iwOV~brRYM(qIvX_~NWW8B0=Fa^2^WuCVI4(2a{O z56kp%68mWE{K%G_oS|f#&HwvPU9ZC3P6RV|c_8|_m~~pf@)t9v{#1 zcJOVBb13QS!g!t|Cwv}E)|zm3smocV_Dj>oC~oh#S?*gChOC^jc_E315>v2^uOUt* z2(7~UbwxWSP3IrH;e-Cvi%D-l^{h~Bi~9-e9z>*$RgiD#HBM#|D!-V1ckDU4=t)uhCPs~32o>ns@B^mq0h=b-ADx~>+ zeyGS}L~VM7CixkktNa^o!D?hKYEw*oUu2YD z3ipoFLBwYGO}i)PSc>`-Vo`3SRn17#G};k zM*sES$*Ht3zd=313Tqs^Q+`JO&fbdd*o^bFAB&Am7#>@&-6 z)Gyb7<_GCf795Lv0J>`PJ8{-=WTxI*e3MnEpo$+qq^u`Wsql2y1cc?21x9 znYPb>D0P<>6g~sANKXaynHI+jbE0Fur8uG|E5x@!U(>Tqy8aO%%{#nPF!2BoV??Z` ztxz0eKPU|GvdEf!U&iMaB3dkWs;S@Zf@^5DBvxpr)`CZCht3YDO!~T6rABx3R0awY zwNM;yAOuW^6?{DW^)NJiy0i|hYnY!SOe7eboE=)r4t^j{AKT_lD|AYCWYAI^jYEh$ zQ9RvBu^R`*Y0)NbV;uU}K{%5vt~Rbkgm#4J7aoxKT=Y+;*cr5T^gfyv*5dov0hMFI z;^VYEP@^N19+srEiw$1zaH!UBB&@w7StkA&x<=zfRVC>(A0c|Bw~(R{ZPfxy9VGQN zlUKso)N1BDX&4ehRZ{BV@&{rf9TK`n3Ab3E&Jm#gq7IdEn@p)&I`xl2`uc8dGOJ=w zE2O8d>P((E6FTaqu(Bn^IAGPnuA0_L5m53>5*vIsOv!;e&!q(0H!I~Xrl_;pG=J=8 zyoQ7PG>xc`?}A`$1Le{N{krhiD327kx~8@>Yapl`q*fy+lb;DI9YLwB;>LcjA$cqR zp=?h%QMML@tbR3uvdIm07#fX_J2TjU2cQ#Zoj_A)!d#w*SPOIUj4|mBxZIyuW)txT zx4NU6B?2{BTA7F}tpY@r zlSG!gRaxV(Fz2Fq^$qTosSUK?Jb1I2bcbB-lF;@Jn#_FciixF{i<*}5I$k|lPKV^e z)Ks|^$K)Ps>CYED4STUy+G(T>yxhlHVQ%)0<;&bdQ~tDq&#YRa%pB};!uv6;f84s& zA}|nZiN;tb$~LBC>OQIXzeQ)8HVy{he ztmcV*MKCdL*n13NBUIUkVMu-n`y?yp&J;RxR3L0YejXqVqu3k@f!+e~iI9(T^P^%` z)G5fe@fr?D+m$Nxt#%NP8D|bx8o0D#fqPe%(&OCN<6w`FEo>!?Vju5R<_cfd{>%ei z%3S!5?y3bqqy+$A0-*ZJjWq~wweJx-;`X0in(H#U83uQ1j9ZbH?8|rj1XVaq=8x%FHgGt9Pc-a>n<6yl}Fz zsoSBP>Uck?cDdZIvz|6v6^%kh~@D+0{62KRs@~O`q|>uLZtd?VQQguY5-S2 zsK23YYGJ}ui#)-G)JtOxS68$Ka|tt(P--}I)`s*;rZxcWQ8tG(g(iXz-ixpo3M96c ziVYEZ2`-2ug8T}U&$l4NKX~dNqJ!SFhyn!4LL3`HGuWjc^nO9H98uT{Sqm<+;H3L@ zSK@Rk?^KiMgxqN;ZPsZ{Iaj^8QyGGiG_RPcV8KV-v|F>@=m62;McTDnxRymx%k!KL z?l0yc21Iv7XF6>PiK|>l$TdR=g1G4qR?M&3SQ(OnM;m-t0+rox_E%j8u z>MucYnTQ^O(mH*eQdgC=X|43FB7K5LXM?-giFVrl+3-MOyB*qEmqy^N+v5=EC(xS$ zx{VIXh)A43pV8>2;tX!bpAMOSkQLH-nA&Bw!5~Lr#5!2HQsmDRhxi;p%HK&uEfxNj z{Wj%`-cN*|HIYX@h0zum zxxge0!+j@DLSgfa=A!0-{oe?`?<~1iatv)TA5#UDmVT!&Ug5I6rRz6Cqgf)rSoS&3*g4VAK>xR3e?-D;ZglGK(g7J@& zs?)9VHK)G7W$3%<{~r4Pfj@h97~WT-h`i^k^W4Auq#?=~3*-aDio7-Uhb3w}LZyCL% zEy*ts*ZO8wa}ZINB5DmTlozJZripxkyfs|Sk>RrUg~56*;;PMHljdPz_ibyq*cqKD zJ0L24^|b+gjg#V8Skj5Nt2LQ#3pdnDX1=(Z`8JvPwi9H&wl4GYYBJv*ZfK#*{QPR> z+hyk4PmuYgb(t?o*+ahrLw`XEW))7uiPkwr|Hlm^2vZ_^DMwt??g)$T@v@nD!KuV* z>ajHC6lU3t{FdL5kGlaxg#K-91mdy6-puU?d+}DQF%C<00rSix!}$kbFAQ_+uR%0 zpLOz8U97Vq9Q(XXD++bc4{nUc9V>?r<3)aWO(Zt=LK zxA)6Z9cot(M*;%lcuealGhwyw z@)T^Yvl^w&CH&JGI!i4XLjS)EaMDapHgYl{lHo49N`pk_bT>YYcrEw zmsyfjil>a3tQ<04KgUCDus$We%OfbQJd7t$iMr_BGFo$&O@3F%wlVj?vd&fALc2`v z^J;XZBp5`DC>yWiSTn_2f^}F<(Yzy>hr-SV?4R2qtAY@c)#6ZH*m5Q{?i;MR}T6JntAM9>@)RQht*LataQ_CKD`DH^HKx8S9Na z6%uS+gmS1$+hnIr!LeI+^juY)LOa8};smiGldrbP4NAsq*lHFw%r&(zeAx9`FryaC z<`m7az*SC*6;Bs`JjcZx`LC4R5+%Px(Kk-$odS-#$B~}3MDY}tD05ifkm8(J^!UwO z9CO5;ayXc2cj`BLinAoszBI8bHkqjRtGi)zY$L28BfiEU^3~mn%P#mFCHuOct>V=& z_LQ&l90ef6;M+CZWY>)Tx=v6zt9rt4>5p+A%yr!DDgIcN>B6|<*TvhN$owkW?rNIN z+naK(a*?t^`SHTZu4}p-$}Gp`ZijP;;@HydaQ)b^g*T#qDb0Z9kzbrqxupr-DrYTC zpk+$*Z|tP(U133y!G4n;Vp~JMKRK4~)$dE2QaPE98VcV!**t;$Cg;R^Di!D2O6B@W z7&aS^f2)SgTGea}|A^jYmp1>tG5jND%D-z2|C4$ME!@E^{8qJr zB9pk4$DLlH|z)IRQQrNxl zNE`-!OJRkgq9-XFGDIjTLZ%3LM5ru69|*jMMd(!#IwV3*h|stQJt#tBBD5EK5F*0S6r7f_oiVtaR4?vno~B5susPF$HFVuyrqMgN*Rzi3n;zq=EGQw-`#XjDPeLmO3e5K+$dc1P{cqLe=bW|!+E0xnKmG4(7e_5$e znwd_V4ZBqXu zE1i<09TEnh4IF{<*pPvt@9HMH^Chajuym4rgb0_1(Z3Ig{v8wjYaK$DSp93ALJO?^ zHD&+)qt(Br?B71Ce@)rH|IO-OQ}*w7to}7+|9;i#UsLw4?C|SlgwO79KX-r z;{QJPaMOR3j5ok&lE^73o*q2Hq|Xg0#c3%@{GsOiMkbqlOtJj|J$h43;>|VRyZPHE z8EuN#Qgfgv<-6Mw(B`1fNa=5lts5;Jf$bZdG_-(e4ai5(0>&h~igXy0w= z#+b_@P##BYuY~WFP`#9vzq(7mrmJ{$*En()%(h@i?Hs1XC$kBpPu%*}w#=q3h4!)# z$K24Z|Dl^>`0j?QbbFfbZaDkf(<1IJbi=JRt-CE%vj~o$Ej!+v^_>Gmh=WDvpF2qtY%$9!K5xNKJ<)=<1s2TW@UpLRFp{l5kdn@S za=-7X%=*1j{QaSl{)Bk&18c{3uzctwumuzg%Q9>vIl+>KC&H!)i@4i6!5!b3f(xbJ zVBh~eJmEOlpdYNnp2@~3D%)`4=4nI3K@1~&NJy{Co;YJL~(n}&G3{?LG^xJ=agy7yw*$ zEdjs>Re%cs@L>(W1pxS{3UEFEKCS`aB0gb&F#LV_!Q)7{PtgW9@p-wMxuLV@-`P8$ zE_EKTj@LA%!dc>(dm1h2zX$-uR=eDbkl*~)YPk$B*lHE9yIR0b6mTJu7qnIjSl9|n zec!SRxHwYMmq+mM^2@}*z2iry$D!|`!=W4BGIb?lZtc##<7bPJt$3x+I-;Bkk50I! zwQ+Cjw%v?EC||Ara@2out7X^F0M}~>mqM_X4C8eD%Ted^T5V@ARuSSl1A`0}j+T%R zjVzB?{u0k`mHyhMutjC)RYTa7AgtUh0Ma?yotdR%XlUlmJH$4XIrG$^N(HKROE`mX zFb#CbYWdtT?9KlA9NzE~5p~Gi2Uk54o~=}{=q_OFQv^0D(DoU$HyN#_;3oy@(pGp( zS-_7RXBE^bhw?}LbH^mmTw${8YrGtnN8sVDyEqFf8AtuBo5r`rYUYSvY+%rt*N+iC z+ceu|tIgkDsg!FRBQB4W<*4S5`K1QxAynqVR;W$hDk?KZ|HqB|tFc{{iSefr_UESf zuJ{U!`!T;kl}U&z1Ik%ikCY9V$8W)BHB2Y!kK!ybNoG+QLK)M@yz8fER{!<#+wx_R zT|>}Wti?9__H;-6B8~^2CNA}uLG{24EwS6ti|j>ldv#Gv6Kq+{qFBz8EmE_E z^j`v)i>nj&5=`6`H4BdcR@!Ckt(I{e%2nTe)(mwfb5HS+8!jC=#Q8 z6>!&70fqpuwgzAb0GDz^Hvm>g*o=XAFAP(6kLel7A)OuWYR!udViS)bp{&GIv{Pjtc~+YVNCbeBhjp#%pEC5*H}AD4S`1A22kjf2N4 z24(|#WJ48TBLFrs0MD-ejgi^w0tWRTM1xhhO@Od@Tz%L2q_XBKrhQH%USH*v_bE|0kTUWRS` zEuF=GfZlji*k{s5J7LATGrO(R$w&4mj_gr4e{Xe{*#oW{>R)4>eUCxOFQ@#r%$e|Q@99Q9D?&z^Die<+#?w@qW)n+e<}$*7lXCnz?C(_*!mfa zt&G7h2e)GLar^W8yRE}_8%hUIf-8> z-Gg(IQVwm-asEmvLsF}`=eYCBI?_qJ1z6URTOXOVKH}(G)VkHGHFgQ`sb`qN9h64)#n89t>2Ttkl-_4aqEw_ zW$#Z28F`=~n{xuOTPqdW7k;}hLQTqyo+@cak3cy4!30sDn(tnmdBWo;y651nHx2DM z5p0dW;JmRpPNEsew!KfMuJ-w!DBB@CL@lECy_Mbz2e`Y-2XFWA?>>zVko#Rxh%hkni{SVRhYe zPu;EVJ@=e*&pijC3|e3#r+2Xvq}v4X6JM|{eOEv{p$Xiw#F7R_dbd-4uOQ`~yQ(R9 zTa{>dkXU7EO#Pr(6Tb-I)EmED=@+8n_r+*xF-i7wZmsO5Pn{ylG0qBOQu* zvGQn#;+U#D)}c6q%Hti1t4i73p}1R=Cpr|*Maq*Minl{~szdQrDSJ8;e}l5OL#g_S zvads_{)v+7P-?0bt3#>nQ1Ts0U58TWPy#Mxe+NPf?(9&4)yhbRLQM2%hf?35jCCl) zjIC*Md7Q3)gLTQtokk+G#Ep|e|C6?5%+kDZ-g>_BMVqcWbzVMko@ymN)l{+dy2U}{ z^sz$56_BAP^E3+-L@0!nBQEo-ZF2dYuDz^mnb(?!*J0!74#WS?>UWgvY?Y`erK&jf zOb5GdJkVi2+kuIi@fE~R#>Ky!^_-oRaSwg9+>B@FBnV$Emj!d_BiT6EVIJy89`4`> zNB1;2tDLTJ2l_?iYKLlk;4n8gH3&7HP3YwXmVpwX9~R;eY$iQ0m|PgT2DYe@h<_jI zokDA&=z-TYRHq>Vav309Xw4Hl^~Z6xxN*{D;}HZwJoECIa_w3s<`h~HoFd~ZdR4a@ z>lKZ?Vq#%L1dHonR4w~Cg$vKr48)fCI`*w zX8I0!?2QF%cNtfD*iAfSdKEiwYjU`puD@e;YzzWk7h7f^jt(#5v4WI)3NR7AEwJ9c z4Mzf>Wj6*VE?dbk*UDGu|NW76jgK0{C{Yg&R)*FRCK&eJ6ky1N;6ahtuf_ zl)(A)5O~Q=C!h}jee;RvOMt%R1oS09-`eE$3dw;40{cd@1@{C{hZ6ViawCKmjEMpy zE364XOjr>>5c!n>+^^rjf4A`8t$`fhZtdH~$&CTxd)Earp3pzCEdV^)5MT0qN8hGE zj=eeb-Nz3%*7e;FA!IYBo(UwM4yX*D#Nm%F*F_X;<=6C>d@$e;2lmW00u^e`Ca3h9 zkTW+1@;5HGR#5fOd9qC92TQ&&U@fN}Z*P*OkH%ZBoVhxHE1S?sR)E*o;2jm<`)u&e z3h*Wy{BQ;M2^+kt0=(GG+l8u-Hx)5mo5t);(e-#sW{ zPep~pcDwhM%2(_bZmbqy&mb2;^ec8z#z?dYWI3HbF_rG8i-@1^nFM_T}t1N^fRUOW~2|4()S|$ zY$?40>F3Hc2rE$G!4kqsARKD4ZB;BRSGi=4@RB*)R5WAW8xUi$9BOSI2-=%gsbwPa z^AnK|RwA!1M?O+&#TvBYg|cR@K{H=0A#4J|OHFRK%Wc4W%O_qBkeKAM^$)mcNYm`bIt%`?`Py0|Ul%2E564)Iu<(4D*96AHxI$+w zx-rNUg&Orr6D%`>G+nRIa|Ff;BX$m#hxskNym{t<06Ld5M*~Z+eqJs0XbXDuT3MI3 zpv$k95Viv0jWUF-KzOr+unh=rl_6{c!rRl)l(Vjx`Mz>9!z&-O9*^nBsU40BDINn_UC zTd!n)Ihx0P>%2MKN(k(M1v@Cm@Ux~_=3`-=uCF56vZ8##q#&!xD&THRhI%S36xeNL3SG zpz`JHfHmCF#66;W+_SM_dtkGQsC>fvhj9JCo;lerl&|gf`U+9|$g)tHPeL)D@#Sn4 zHn^sYZx~9c0vb`^(HcW!Cj`0hBwh_TMC0nmGG0`)(@n28Tt^ZD_@~dBd;ypHdEsYn zjD4@1Zinb-=&hlL+GzIT-a01xc1$Om!$#zD(HD>Tg$mlA@rVFL;3<~*%*&dy!E6vN zWi}%uOU`^e5c)AD?&g3^)>c69sWLRAjf+_fzIYG`E-F(c+(k_3_2INXb+exFC2rQG z%7`hFKXnU$x9A*x#(3S8m>pKwQ2`W5UMoJoj@GYL$b%AQ{F8s^PAqjeF-8&2Hy2E@ zig_-XR{#klj)tX#oTC>52EgQ+|bNfHi_q(nmCPPniwmEc4EiExb-BW{H|ga zZ3uhN7ftROm-{20{{JHV>2&ntD}zf|89<;>!M9U@C)|7A+Amz9BD#+>bNaFaR}`M&mZ9QNSj zaB!D*YaK&WciueaWUo0K7|0hNZcJRER)iV#W2xg6lC9Li{6(#(=Oacb0dDBKW`=8tc6n%+^4N#nv-+pm{HO>#KP7Ht1lO- zc^MB2(GOYe4k6(blK#ZzER@pzc$0@XyVK!&S!b6hL=o5@y6~NVS-y>HXLoq?LN@Gl zxZRy>G~aWi!#KjG%=BX=UgnGSL=~-UWBLdjUCau5eQxiQY!Tb*WnE<>RDjX!R90DL zr(arwpI<{4b`t$0{dHgJroSGj63@+svu)6Il?DzfLfO)YOc0D4zP7nj;;Gw^4byL-F~QS2`4by>hfe zscKVR?NF+xDz9}YHPe;XJCxdAEB#@I2q9oG?IEs0OdYnw=yiz+z_Zj%Gk%S5O-9@L zJ-C?`_R>~xi*znf!~3Az^onH8W95g%OePU_2*ru5mdh181g^P=L(QEI<1#%*#5emJ znlW&7Rwb@?-W0G9l1kn%H*XH)hp_?Eh9sR?_xkJyf5saHuao*s_ivQ!Z+g8bGUH9} z>fqA=Z}QdvhmZs4jBvJIPB#@F9lCtTdu zWol1Dhl#G#ByS0*Q|oHk#eJQxHdBRJlBwd8Eo_%_!oIJ$+;8~#<^fcvS~PneoU?on z*PjM3L&ipBRBoqkok&H*?UnHUqwPN>z%Z=9BdqzsWQ%6FSZpt z4w|oO!igL)J3qq(>L`M;*yYzU4th)cwHt2Sh7ucv`?*l)>kuU}A=+6ico?ClRrIuq zo`U8fjs6_g*fU3OeWo_Uig0Si9#!Gk=kNwboy&XGp^P7KtvGg$OL!e{2@euGuUAHCPd$y)eKI1>>O-szztI}-^W9v|n+ z$#4#`+U^M^d6>GP+k@Jo-JqQ8Q~fzZa?-By1cQ59f2K9lhBeqYrMI1=v`ljyOpe+) z{%&)oCDYDB(3WY-v|)lrnghKdUfMR#3xDgG9&QzH*DinJ!Bb>3mKw_;H#5$vOI_?RL3sx$l zEl51$g$v0^#<}L3dZ&Vjjl(irI089N;_!{3eLNYo1^B;WjHXQKjj~w<2B)_J(ZOU= zL_dt#a}8IBGcl5KGad8?YlsNN(MgIH2fUQC1hJaD!oO03Ci4odGOy4Icen&u1?*KP zD@W!mNv}Gwoc*nw2fb@9QRUA^uuj@EEGhua)uM?c0?ZsY^?O5)}g6>gn~Nh5yP z%}U7Q?C0nB(<^BAUEvyDIFq(s`_AbEqwwiA{KU$qbI5TK*Ckend3$ zWxQ}5<-=Pj!8)O96T6Pf(*-DuhS+ojPo0isiR;1;IcR_WA)Fx&hW$~OdlkFPuI|<7 z>$2Aj`d3f?m}Jwxrmo&_S8oKnZF3hk(nxR1>FfvX^xpQ-4Yoy9HtBH)|}Jwew@ zS^>4itlG+~04M@niky)N%nTi%bu+y;lrPi^8+CdAxIR-ey|)2>8u6!z-sues9YiQo zPg`0DaaA!gv;`JxYO1U$l4%l#)v!8)k8m29vluai?UiX1`ut(QC%jK({Cu|8gsPiR zbp*A7{Dle)(XaL<;`9jx zH_sF1S-4y)sg7(HdOGE^Axld}51q+4d%Q#(5VIA2t}?A4&jj5I zXd6Q}yEAP|aL5*Cd{{>GwsQ{c4DC4cBPdKHdM7b-i#s!E2~H3pt~Q&?Ns<*F>`H?G zhY)kat`ISz9*!}?v#B`oZCjn}H+!pSk+Bam*Yw_C0ryvf)5j*v|AMsjs7LQD) z6Wi;R0bU38X(X?MLItPQhi|~773Ma6s;*x6i`@(|yT5gbFxmmdoq=7g)_Bcfe#SBA zskflU2&~x7DIcHhV-KwoUYC5G&iNvaD;=qejJRP0{Zb`!q^JuI}c_b|Jc!_-Ua&snl}t8fPTm0v^P zU!is4Co!aUJHJg^OWDxZ*K-wqX1H&x<3`&cv{ZPpg7uNsSOf!;vzDMcrKqxX6{Io{ z{6}G}uE~9w4NrQ-Wea(P6R5HGY>}4!=YQCK9n3+_=LWo$=d%$NrE?za`0ODGJ;sj;lLkv#dt{A*ZoTweAY=`lhtq? z6NZsq6Ca-z-Mp}mr0d^er)q*}VPmgb%9~@BB@6&uFafkIalr1vn;c-Pq&|fZ&Td3= z(v2ueNiEQ!f8uS^oLj{|v&7GA@iVU~xj^?)N%Oj(Wfn z;S4+?U;)P|CC2LNS{(ad5%z^$?t45?j`2PYA7hR9({y6PrDk2W++(-g!!74btL)g( zCSAQA3(iqIme|03UA_LU-l}rOwAyA&Ysy9G+DwgHRD-mrNGNW`#3T8kxVnTpvMTKo zWLOL2HrPPh;12-F_{wOYl%GABh6=(6&2$4b%Gxn9x!2Er;3`lWsw)u6v=t;`d8|xP z-sfGbPD(6LIS6q@%Msh)29HZ5PBJRJL3wM2n^@#lrUaYWU8?klU70C@0tXlN2J^-Z zy7UPavPY=YJ6}cbRuCyLZnV)GS==XadXvigY#)}hlfF7Y^u8~jp;~ts;1b3!BdA;t2DSyRFS|uuzQZA(Yr908kg?2-mSVNI% zDh6Es$_=&KI9zO_2;3~%2)Ae4jLL@EZ7ib7HV(T^cq!vy6_bXW1Yu9W<+h|6PI{;R z4a6>cW0teqW6y4HaYgv@g@$wCuqbsFQw`zPjTUd0y?Ffy#sZzm8yzZiZk>*4NWCdj z>NKrTeymZI%V(;V6zCsQ2d^#FRfkrw@JI|53u1L52%J!*;pBq_u_*|!GAx`>vT1aU z@Fee(q>;EuM z5)2GQlm&Wll^(69%!%r-B4fay*Q>=v5}Rhi1j{G-P$R%{w1(N^w1-i+sv!i7{)wnp zklfY9cerfo_=$zIpI8XivfwQ=KKAekmXe!&x1yBZE;UuepW&t!%9<*>RBGz5n@4I0 zLnN9iBiF31Y}uBwrWOlnKd}&QDl74xa-@VgZ*x%lH7IAQoCPvp)_ zy(RAq-lw+pX{onmYCWZXlX^#{Hc;xeKOZomz7*-OY+?hQ~ zbVL2xY87EL(@S9be|;Et+=9Z?ZF1i%Ef-Js^&{Tn4dLRgpjn`D3&W*bL9>8xV+o-j z2sf1>a0xeu5p%1JdNI$PoaZLGezns)$lmO8R$@R?`2y1|VTa%Cc~S=M<_L;Vm3yFD z@B-vRKt;jRj%k-7jEV?i)$3w+BL#D}a{zAJW@+pe)@>}&6A!kk*nGWlHF0%2&b{*) z_t3y7_Uu;$)9hgvo*dx`<=!_wUJ$mpV+EXYBw>cR~^VxH{)T0Ud8 z+dLjd+}`-?min?+U}&%iAJ7${uD{D)WwsmtF1#OirpEC}ZVlJc;LSzY?>qEV#^_+v z?e2`D?+(4^PCfN$b$pGt`_pQ*?@qnvE>5o%>AUovyY*_ttM#5Wy0LmR)pTxZk$WdCjs4GgkITZ7zEu@S;Fn@ z#zh3(3+U5D=;C(cVuJ1i^qC^`LEY#vF4N4lx^cZ`KA_w1p>`t$_&p4Nun1q$Zu|uB zdl|m92w&Q6{21{27{09tUq-_T`27suV#AG}n76b~*`8h(dqRA)+JRlb%4b~3 zZPkv9i^IAxqwGqZ+kLJA;{aTkn^?$IR7mR2EM&>VLawGle)4A)vNViKpF{}@b}83s zYWh}4Ps>i4bsMtoIBC}H$hz}{tOb;{7+H5sZ15G-;2(dL22bstYB%_9E<`UCat#%7 zo+u>wD0@j<9(Ji7FKkCsz485__#N%ty$<7+=I5k=orj)AcBX7uVtkv<4)cDu$p&n@o1=n>8)NOA4Tw8Hh7ztND9E; zl7YWDg_|-h@)BV?HG%|pk&$szzc|>v*AqNcyydq#OoQ&-r`qwLo5rYnmfgL=G%J2* zd*ValgMUSp$FFZSKbnNFU-7%zar)CUTx~4(nAb=8hO2R9GvkWi4dn@o$gcSEb~gT! zST``%la(q)0drx*rTVlH6Jn#wl|P~fMUjFr{hO)9lBSFnWRY)#q zPzupx&dW|F)`Xo-kGG!or5|_ySjql)G?!<5_VZKB!~DxmEzi5BnAg+Yqhx!^^X@I? zrMgo}HdUUtF6^Q_Ffu>s{)v+P3G$3#owA*@*Wf!%hP=m*v|G`~z(*Vj*`O<{C1_3! zyYDGhg*BZ$x4fziVZ@;MJwDl3>b&mrlOm)=5+iP>_hZr!w`-@fC@TG?hE{AWw(z3vifzugVigHgJ===x@hHPTzM=#u?~#i4&s``iS>PQ^7`)kKT_Wo zW^-Gp)1MZ(q%{41;U?x?F9Utr8b-|L(`irIq%)6{-lX?z)>D_nSG32UZXJrRY#)jb zw-0q+qV{dZjk6W~paa3ttWE&W9YR?!1o1wsamqKZ*j#YiY55Jy7kFX`PmH8MS?COytCJ{X4Y z1bpQKc<}&#!zLxgUwc9neoOyZBBgHqRxb9n{mf)Y0G%xx3*=xKj4tg@Ww>w9qVDwl7lW( z-jht+q|rx#_N4MXzkDxJ0rgSC4y&rjLm0wuiZFz1r1wbJP5akI9)U3teu{Z78Nk3| zrmHM*YYWr&_+O6ke8mg!kzp~@1&h!473!EVQ)U&S(v9@l@n>2KL-7NxL--O1qAor{ zj#z}r(Zr3Ki^kfM8mUhGoa9khHhO%(E5K{LND~-S>apTP-Gqtyc##Usj@eYe zr2jA6%v9idP=Vdyk{gRBh@WtKE)b!>+_^&Ety;>}?NTtB*z)rgyFGANf}azEw`Ox7 zmL710jNZ+Hfn`bM2ytRSW zMtq+-k~c1i?}d2t9Y_3z*2JByj)74`l@rY>lr?Mr#Ab~!;GD8%&1vIm)>1W4XU4N4 zy@k>>NY8HL-rvo=msO00tBLeysg9oQI%Ux$T^FGu=yywmUZvkhB0q5UZP$Aq(&M8# z38AC9Erf1VDY;QC3A_*KJv($77kX=7gvNt@a}gQ``rR9${c0ym>Zg*if>fWuFy6~9Z^SDk+jKFK!ONBnJ_Z0M0M|X#kF6ce`<>P+6XN07< z5xwUXoxbGS_V_*R-*NQ4qW2s{`d*nns`tE#^g5Y-RquHX>G^H^<@;X4o;nsr%;p$N2P2|qduy~*SAYCTnLi{Ioe7h`0q#rFGAjFCGq=rBz_km8z2b(j^yAX zWFth~-;tzSguL2HLh0B|?V2OKNAG!3Pb~&yhu*!IAW!N&yY6VK`@Fj6n+BuSaCJ+K()%38D7?@AusEw@&HTUd=Dx{TQv(!iDzn6=!PvJ&=VXMU6fjh6r{kV z?IecU0=nHTD(zX?iEZ~+F*qW>TMPXgHs7Z8%=;Kq*UPX3#yRUbBq$48F&xedc`e4x zpaQ9#85a+wktbFijCCQt1N9aNKyxZ_o2I50iPRdA+Um9Ph3I5z46cnl$Bp@Iu`PFL zq0Ik*HhkIgXSCs9*g<^s-|!b5vl4?bh4_+uVs4CtjfQr%X`lrIr9)y~Ofl!j5|_sm zTHXyTghP3JDC}{wbU@?3YJxr}KrN;zkS~35T<{D#d?L;{>V$M}aU~U%D>zP$tJ7pt zgl&A0wWuw6BRYEw!vbdFO~FiXJHhMP4Q9q6IsoNBR1{N4ToF?S;FSo5!EQ!~;|lQe zVUOSKIlwLJ>GhS3YH2k4dtIf$?58RI98LGq8q;)1W9qO&xa;PAm6Gzzq7 zy&p+@7;&)Gmz3q9%P#2YV@{6#w#W;cTl!ELU;H*Xk$t>$ee|t)Knun3lwvqBoU#P3 zD8VaApg~ISc2WUesj51{>#31H*Xk1#SugOEWY+|VHIy469`i+=?HrOX>X(M$PqN7)3z6em*e(EaMyMPtQfa%?~{^EwFMzKS98E zrYe6+#dH+RV@_@X$srkbqm%IyHma#+#}My0%xjv`pU`shWAxm~LmoxrLyQs{)xgR0 zhaNfl`w1|a#@~Z1FTrVKUgEKf5fhEgpA~4v)>d;{YdY(lFo-Xo1a)Vt`EYA`)FBi0IC2ItRLahcp0BT z3)$y&c8(L2YQfDPs-cAzkMhR&_;($D`@@SBQvy=D4IPNH>UpN-70q5v{ajc+gXN_uQ5S}UFlV` zF80IZ4#oMllH0rv-ng3UIHgKRdZ{KaIq@XJT~4Gio5Y1Hnv>Hn^_LGDu0nZ0hH*(t zqQIV0v_?DzS3h<&n=zOLj! zk9|YTOO59NKZpUpRz0G=tSZX2>PPBl^jme}uwP5V-hsh)N0jSgipO15wIHT=tCZ_w ziqECo5L5hqWnoOII#+o;>>`fgRw4S1b}D0Huaow1ZtWMK*3oh@vAY~xV zDbANIp#?+e#u#7!eX3TSK9+G6l80(lINgJ}4+pSJtoEwL)WPi3kvzK!Bj`HZc|1sX zc6}K)4iodz*fT zX4niE8{5F&ENh_+lX`HTdWO#hf&P8g@)Gw~QbdpDz}?`qU$7;)y!o!jrlXxTGjIh3 zpc#EjHL6zZmR3Hwz1o?2tUCEvwUUSCI?tMG)bRoLq=_Vu{W>N#t$Y0BE|}+rzr7E` zE|<6N4_JRAXNs$VG`k3i2#JFT2?m{{Bzj7NVC2q!q*?(E<|u7An9ie^%?_H)Q3+BB zM3DZmPWIJAQ@P-C@=SL0Fx7ETSv+^&{)VDV{(EY#} zJbANmm2Ebz;%1ZQLzR35kCw0C(Jw=Q}&o*Lp2JeVM@PjO7a? z3kk;}?>o$8P5o?LN{@@0`qMXhQ!~3~D%qJdlRE3t^So%zV(*`7&L^xN|Hj1DNJaXe zdi&Fpzb(%|{?yx_o&0Ti67r|sKF&+7n%;g{x1?P0IUlBPY9){Q54L5`xEdAT5WmoLaM!iW#F$!57iXE3kmVqVcxfJLg9^}AZl zfv}kM^!R0CfBI7oUY%vX>JFX9{OA1<X5TZ_#g9@HDn#xg@@~{X1&n!AWZ8 zcs*aE&k>U_M3}@;r{DG9L}6A$rSB=!aQzXF-{YO_lrkOev-)tvdQw5cT`ov?ilPF` z4W3iW4YqK2(fU6}TueP$E!lh~UEp8GXD;GIjYv?1KJx)Df2fSlZp3%L zT2Ghq%IJ!q?w!2@5gou%G65jhRvi+dpAa(nCM zsimk@XM;~vYi`&eY%je=PjLHOGm%Oh{wfSA_Xww|+e{+taw158}6~%dN6nEW+qF}zRC+5qg zTo!SMJl?lm;w&Eucn>{zyGR-v==IY-#O?;ThMsHbUmg7mKw+a<#w$AUl~5y(7-z>1 zxAK8gp12L;s1ELU~Ij6bnKQy1b|WC6+#{sVo- z0-avKp_l`7tH_PV4Zc!t<^Z zBObTf@qq|D06C6k0DHuZ=i7&{g6JdggMdKBOJSwC=?jP&gg}LJNp`k72!#`kdA}w? zw|V;Up>PpAcV>abEEflklOul*GoGcfZ}Yjns~QW{TU2GvBoB#5>eH41z+iEamReE*Z3XCd zEw!`++6K^KEw!u!dH|pyNEq`YrGui&Bd`elOZNSJzm}uTuWyU^*(!dvi=S;;F5mYc z2?pN-w{%6MXlVK%+uKKQ{?;hc=Iae2c%*f~>ovf>igW)1J{_NG;1G1f_AOUVKNTIe z-S*SlM;m5Jw_O*^B~k6Gyz+blTM>(JHSsNt$va{kVVC>XNdn5MXaHkCoWK0DD)Y`* zwr#Zd3^p7h&(F?N&LHG#BAzO@XAf`HlSWS;JH6M{)$10VNHjaIqt|CFstpaRim}~E z2>EFJVpXw1)A$B3F!SG~(Jn zsiK^QB>d@b(z-Wk3O)$Iy3%({62EuH@N2})MUkBOfY#NiOipHN+#)mEhTl}UJFKMd zisg~$RFcotI*bi$^R@fO}+Gf0%wFS)CjEe@GKI^p+ z7=|R^Yh=ta-)=RR$5`zV=(&-e8^4^t1(1#^5^meuq=tqni^uPop5CIWNqV% z)@IMPWA>eg zgYUe&i|PSyj(VoCcJYwLhWo?zC0w_8SmRpo^ufoU|yrXmRM~>}I};zuk$|#4GBvRRx(Wq(Ek^12ThrS>>DDbXbcM@kj^-iZvOn0UWd^K)1n(A74GpgD}ThjLij<;^9ENu~2`Oo+)-yY4G zJ2WOC#>3t-a;aZMyMLwj?a&Z68Gi9ndulDgmyYI>_jr|^s%6j@ewntsbuLVM`pKb; z}##?!(`@2%vQ5mV|B*ooZUL29s9a_&)Z?tbItWR&Vn{2$!roEA(B4`I_=;8>J zP8?D7#acv{&80rC&UJrYt@gcG3mD-HMG&c>S>VjHgK@oBYkpZRy{seG8m))7RtgL%+7WBzjDY z)++tQ0Mrj_GfN-(VJ*48)?xKa7a$f;7gpl(@X%Dj@T{W=z0M_(Wyv$eb4)E312?1f)xbE9|3uSc|%>?x5F^atLpK$&n_ zgY4uHucIQ*lP8MnUNZFSQHJn+89|%PHQt4MEr(|UiChl&rY6F+mL?UvUltbFBA~aE z#ASLLrGo<`%1TXSzOtjdmGF(Y(VIu)cBsue6>2SF96niFtd|CsK0AC9%HytHUykGz z+6zeL!!|(zrKkw@);y6(J_7w-8G)MTQVxM0&DM-rp%enE?b3pOL4|$Np8BB8Lipgs zC+(_HGe{V@!g{fb}e6 zYBa15$=&Ci_2SZ9&XRA=6gg<-D!a{idv$qYO_6M_tst8_m~5Uy{aqV@dFJ>?=WV2~kmd+r!y zO_x!ehWFSWn&7*1I_`nF^TPd;n_>Cs({a9;D@E_yE!Jqpy91m^##={JFZFHuQQTi?V+ zwgsAYTx`b6Lhnwell`ujPr(iLP{wa-hj}s&B{ARzI~Nnj+~^T1qp~_NUJDY7+Z+ST zbRDT3fZ=k)MKcQia5>*XO*Gc`^Yren9BTSwJBrI=&`P8Y!v-Ua9ivpNa9dbQlX(Z~ zvJb&GadX)-`EKVA0ofdZPLi!Jv#zm}+N~-Bqlgq{_4m590Y1UWxK4v5qoJZwVs_t783Ww6afDjz@M(iE$O_Wer@@=xC@7jZzIE44}(6+_{&Zk9wRvW zwM@Mi#kaT?fxio7QNQ1ds?MoySMb;4<36{~CB`T($7o9g+TT`MLH7PKV#(p*>ts1x z|J%y6`UyD5HFtWmkx@P)%A0qTdA+3Wu~Lq=n1YP7vk(JX7#P85K_iK)4U+SBN;- zOQs7eRr>XS${}Lx^R>o|K~zS=+H<6q(&o~Rz9Y5Tk9p~Y{uj)pzXm^`wY+i>V9-$* zLeJ?R6^--|UYIli=_Dv#Mk(}xoOCMnG-*3Rl-6=dEpn*EiyJzkoT z`1EVbX2;cK6Opo3Pr;Q^%%_x!HI`7-(iA-Tq_S_OkVw4Mi(`l!44=1o!R?Q7bMdiV z_{bOVvP+EBD%oF6;qRWfH>OS(n~IfO7jw`i$JBj&Or<@pd=damJP>kdmQXJ_nmCnS z0}s5sR2H|X>D|uKhbKZyFP2Sc;(%$q@?Z*+M{Av_4OA(8FOY(K^6A<#4w2Fu>%oW$ zHb0*S&jhB2-q-#D6&`b@k2#C=myMQaMGjd}%w%Zuc0_Qt_$$8gJBG`?E;tSBRORh! z18iQmQew$D;t0$3f@H!0UFtPr;a(GWd0lXkV07e6oGZ{DoK!Gx%qeOZIBCJ3?Ie-f z;~jKxlmy~uN4v(vwPPI6^Mx_ywu{X;AV?z%69}JBzncLTGn&j#jOG`L#ufWe+U~xt zl*<(^L@%ax6T|wNc)7t=b5MyeDVRJh&({IErU^lbAB~B{&K%1lcc$=xUJx-Yr_mVk z`B-X&H=kGm-Vqjb)F#PMd++vrleedf%ALwx_)c1kj^PwKkHurs~_k5(s z`0@Fxe*;D)mht=bU~f{tw-Ucs zllR9I+*7x3>N`9fMwgTwr__$?kXk>mSwV}~UY-m)I`=a1* zA7y#;e~KIXU3~=&9=k{R@0gY&CL#HXrtl&5Z={^5>Q!> zF?SL#an?D+C`)aMb#IC(*-fz#B0v_n>*O<rMJYiDbN!4op{3pov+ z{cD2Npl?|AnY<#fBZAEHpwmFhjbm4nVD~0>5%GuRp;fBELJj${8mzBY1HLtV-&564 z;7*RxgoA00A5;4I@HGB?fqt>s8PWLcfOXiA<^R@osz|Qx5Gy zT;7o>r$$?j@sUiqw6iJou}rxUJyI+s0r0>-6aYsgz*{_U@-Z{w^QkSrB7xvX?wZ< zxrJNOz=CWpd0m5=aiz9?MsvF#;W6P=~08jlZC$`b;-RU?YN0Pw*`K+CR%W zi{BDS8R6HNj5k~ajH7mn7ZFvRGr{c03wMCP?1JO$(60H8reH(OC63XY!eL>m3Pr#~ zW5$SuSC`?HrPHVxs0j(U@TWFB$5QSbNMW2g?6zQ-(YIgAM&OM9Ej5ZA&ev30LFMt6EP)T)A*1wXTGZ8 zg4+wcF53i#RgV*TtM4^l@;1eV&336HT<%NUk@JXJe@=t^rpALz5_|s$5G?EvRLs*A z#hkpiFPBOlL&>j{(ua{gTAGnZ<&1o_e4ZVxm}f6l%(JmSG0$GK=h@5J#3{k^Y!vfs z4D;+$9W@~#=hr4m6O)(c2hTH~oM({Zd8WNnoM|V_qq1H# zoO~|QFuu;(?CVsH6Sv%D{C+U`A#o0q!CFu{d)8v@2zLR*gdf zL?J~$u?#?9e_NVyd)WS#=XM-Hv67!?2(Z3KlPnk-fAVR3EJEy5%_AbDu!}7b*g!m* zJqy+Y(QF&62BO*Di`X5Pz#u$2Ak52m#9*Qw&DJ0g#so9-U#L0k67_6W&~>R38>47T z!%~OBHV6yxi?)jzf8l}(t;@CoH*c;ompDZAzwkus>tu%KXSws#vNwdni4!~MtAC;h zzVzp6>i6BhSI}-)EP0b3XsTVuOcZ5Y5;J6Zm1F&e^b6}R=(~Gn9 z%#4eTFWkcT;zNzGK13Jz)Egfs^}I$b0$yqJxwT&kt9zqneQ1gtDHm(?@oiFPA(Y5> z6h5%M)SV-?gRA-*`O;bIMW_j$kVpX=M+Qp zp`0xr>Gj_cS4W^#CD9Y5K=8~(c?EDciXU1uy!ge+DB0v`>ffAqK8>=2##eP?938(` zKCn-o%J_V_VV?hXtukZ8c&XK5b{`f5G=3j4dDl<&f_46zwb1{6#0r~_g!hFL(S)3s zGnabJPhDcGV@qTK7#QQIs8GNp9;{aeAgwY>^n9(^-;te;+gzzPY7=kND%t5-Sf824 zJqYkT+|Fv+!T>t}1$1Bl`XSi)BLB8Fc8KlC!_P4RwXcH<;UXGvWnELZNg&D zlgBF=PkB`7jGH4$4KFejJ5o8$<*xX-2@u`y@ zR2n)Mby%RnkFTd-&gm$a107gC44B3UQX8^_mq$4cFBmsFxW{!>;ga6RUZ7R6m|)W1 zY^yT!6{^gKS(SMn&4pRbC0oS)W|!OT`5M~|6~5<$4cBq4=LKkxUvT!l;Oseq$0N?Z zBUm4^n~OGx$HD2%;dHe~C-w%hJ_Z;jXZB^BfMzC{4MGkYY=*0j|A6Rm`Y5c~M#}Bq z;LOx`p=kd$B{;z#j&I1PK5sE*SMd!2ADh;RfX8LmER19k9`Q}(YNLy;^EX$lzL#$Woo0j=zt7X2`+Wk$3a6~R(Z0$tQO%(To4WIZ zfKKk7A9Q5r2S+U9&DJ#a*?6lp{Z^|*sJHRk)#B~sH9UoHFNY)aU zVAzrh*!2usTJ}AbHCNbt+|dlqioR>=Mr!E|!R{M_;0Eq&E(%;XphI^xm-L@EU`+33 z1X1L2%JllGg{Iu#y5fA5MI+dSso5o1s_ zmqm=YITT_0S^D#8EB(0@Pe)rtlC^WjJk?whF&_1pD5#m$mc^wh)Up*wQn%rBm&j+tM=+>3Jf%FwEJy*7LI{L0`>A9+<)7f`bOV8CUovyyCTWExao8c_DHFu^lF0WsY z>#1x@G?8slsYwKd$xt%_1fPr5qmNoR&alkI4jRnFM@@>10&M7m>{MJI<+Y-B>v+yf zr1WARjsjOVBl>WJYMa#plk1*YEvY|r|3OL5Y9R>y9GqCXLd{Kx0Abn ztEOiYF>JBSLM;2E(R{Q4{Opgc?jNa?L`FVch_PEkt|3U@Yj#VNUZNVJR65LzN|bR0 zCeyv8^h%`HmD0mVuV-4b2m9y`mA+j;F|BS6<~o1YcMJbr6wKxM=qKBf$9QE=gTBnT zr8#?A-|`^TD?yCP)joxjDHY^>Fl>&f300jk)^}I1;B)rf86U7t&X|tOX!j$v1#=@zp`tujkBrgU0+8whGOo-N}c73SV7H?h8r~p^C}Q zO1b1H!IMuh>Dbf^PZCSmtfFC5oFh*Kx3(fk!z6Tgw+5%>%-e!9Z4KV-L5nt0VqxT< zQWwP4Y?x&y;Oa}9Hf!HtC)4-UvyL0*Qez-vtG@Y+n6bmvmrJOV`Tb#L>yfKC!XkVVL7@^ikQv86Os z7Grp}^0s~!lkmks>e5iq9wpgpAf_L2%IV187LA9IQK_t3P}T#@Ff+eMq!FII6%GBo z1xc_?(n6OY7ANJ^53F7kPO}l+NIZ;z2W(L=`K8~XmDTuQsm4X9aeJx8MU^!!`lB^2 z`pPvvRH|_~YTVK6rW*gcxI8)5Y9k4}^!5_^cL)7j7VK^WA5X<*10z=Apc7m5P9Etg zG!IAQ2*Z#tmzd{NW{%{Ng`gr%Dw9u$i3jU|W)IEXYuJ)zmO5$y%=XS!l-;;TllKuD zX3@OtmlGM!=G(;eukDu;1rXXkKTuU;mbyOl->_GdK?YH9-uxW8Z4pxMa}9b+Ygib; zeXd25_XkybPT*eDS6vwv{_q5P#EA(+?_;G{yzE#JZ6&U1palnRdVb4vaW|!9I@Zx- ztm0%26^ZZkpEePt6*W1TrxqpG)pCWYJN(^u_?5Jziuk!ZnEpbQsnjeLFWTQX*F8&h zCErn1CU|n)W1!?Ca~@BY&4J1lWD~$$rD<^|zSJYlE(iNk%85M%V4Lb5`u9K8_S1|oTMTw8|PBKYO)%moO)JkNNLM=0(+!YYAZXE`OgKPZZ@(sQe*jweoC$E@-?p8Wq;$1K$G6u;Y6tYZRF;*}b3 zhI@F=Yd;lMKKT@%8SE_$^W7NcefFxP>3Vl@R6}JuEl;NMam`IA!fJMV-JWY<^lbcc zF#F3Xy>7XfjB8p1hdUhl2Ha`8%>|Ph*fPppNNfo@rm=4iNu;cNe10AAQ)0sh##X{W z9ek2Qzu6#IIb)g6ysSA(Dd?*B;;M(W2MDY^O+F{-nVOnso{6MvA|1prnU4h*Pz_+# za#KbrwF6=89}D`NK8#JF85f@B^R8Zx-Tc&5kD)A-Nn6wE6FU2CyhQcUND$hThoC*k zcuVx6eg5#Hdbafuf8w<2E6fuqh+v+TcT@#Lun``W!y>gxMv? z29ELhod)}z9i?}0e9!A7EI2eFN5By~k+O$akbb(PuXuDnd5KSXsB8tx#9i*$manIyIksxK2fU8@rO{ni?+n zBb7W$mHd^gB(Wo?e5LZshvPIHgeIP&HxK&h;Q&26hlgkB;gCNMdrKnlG{y&b(5rCG zt*(1z9X9D_nH=~D^siR;zk;qj*X*!WGE5LkJ11oxLzUMW&9h^Sz5BN zQ{dMAU6Bells0JdGZ+_~ylFC)m241|bC}CH{Up>>?)Go0<>e~M^QB?hCAvYsol5$6 z0}b?%lJ1ClgG*ope1SE9-MA=IKbWnj9yvP$6_Ygg;^JD6kRkfYT0|=6&{%L zki=VXvf)C1OQOF;p%jK7FL{H!8ywYg+7D_d^l=qd^R5&KwE`ug43EgHawqG{(HqL6U^_JNV&4j_|1DF*-7y+4PS_KM`@u@Y{ z!JXsdz8YUOE(s3>sXDiLYZaPk8zpDB!RcG8@NjD|z1x{_Tglt1R0LJc8-Ezg{$UDD zi1fl>ri%G(%5!9@q6ElC#c)JvAjEK0%YBZfB2Dx>7=4;p8dr)Pek2sHw;5=Sx_NZcmwr6ZjamFTI zRh4N>JM6sL(rl)@$3d)|iyN8hQy8X8Z+ zb>qJAaVkWmxmw3gM_v+(#@zTgO7sg}e^*cz2p-_sV(~We7$N_l z3>jB3U{DS^G*$*g%h)G=!F(oQtY|gwX$8YwFjuw~@W))$nq1xLC`8k*`ibW#fZeF9 zDtt3l^(`h6B(sP;d{+>6r$WWMQ)i8EkI+tBWI8G@GGVdPH-Cji-2Dj5bVbYb5qqEc z>(YLDfDh`7t0@;=IOO+aKPkqQQmneFW%_g&Mhy%3k(E3a-Zv>{eqNKz z);JgdO=-@2l>ypb7*Ai-(y;ogU`qh}7Q9goc$F|-D+g?$GF~qN;;SkDvRY1xgOO@c zTh81QOmCgU1G{w+pX7^2<1fu^1Rks{mf2-KK!CXnz};tyMuoZE6DqX&hOwfK^0vhX zuX}1pmAINRbHqZw^Y;_N*^TQwDxBU&0VG`Uqa`DCMp0)*C+#_hFc8G|D_fHiM?srQfZ4f#U; zG+c<=5Twbr+l8T?>U0EOp*byNjMw?aZ~e&^XH~qIqq#3CeuFu#pGyBCtR_P|TA?tQ zprV30lhOE`purxM7o%MbzA|-!bw1IvnWOn2A8lV3RG_zhliS%ZWFewyzZ}D9av3QT zOiPJ^<>A{QFX_Zs6E4HmGFK}gqpiaW+2W4K1{Fr+W4N^-=?DAq%S$4XFC!wsE5{L@ z@hui@e@62!)r6h1yGbpoR-|r@WTU!?GOKiUCSob_nSR6ZqF4?SUR{)FS(Nm^!iWltvbE8 zI%mS0%$Pk(S;ufkkc}Lc(T|(=HlZ|}((5-LsiCZl-`qvNZq{jv!)KVc*<~<`yfi2R z<@(JXH8W-q_mXi9SvbT;FYy*V^852n{{E8U`#bsl>Wq6RPw#uh`}5%PMW}7u^3tb} zWZ>~@jeK-xylaFIGsaRnZHY&tG<0J@zS)~|6<979$)#H9|ile12+#*^KbTsS)Nd!k4E;xQr3TPmLhF#bkAG zD3_K7;Roe|Ak?OeZ_cT~8h|BhYJSk_o*z`RaS^5}o_w`N99Gz+m%W#Kvqmi&yEphC zW0ro(W_`#A{ijBFixFm@8sTF`n8OHXlsX2v$VwiqQBQp1ReocD-#E8aWL*(~-eO11 z=15T5FqH_+KpP0nWSksI{qkj8P)Dh1Rt$^=%jeK*T;-r{Yey&JEb@eg9cQe$r|#>Q zj4-cQOxH<^`GT?LpSqZFM!5Xc2w9#iSDYH*GcMsu9UE^iwx55eefMy*NHD)s;%feV zkTUb|G?Op9iD#XM414>;}0pS8-$h8i8`I4Jsu? z^gN*oC|k&{7U!aHb9Obq`B$ayQ!S;Z9FO>kofD^T*XSjai)+iCuRHaqyvHvt_)`ei z+g<5YM&PZ;mW3?As|ewVX5&uPlFUWp!SQjJn%tlljdg6f3f3`PUbBQIUTIT>QU`*{ zK_0vtdD#agMh*r^^4**G-3IVz>s)vZzxHc4^K0Km=8>pz^(1p|tMnCWnX6r$>M-k6 zDvH#KHH%Orx9C!xR9@~Po;OwSxKohrxK#(Q7|NZQ2Od^0bx&a5raM&C^Ivcb!NzJ| zRO8=;kHg2+|C<^qdA-^N$SgHA%Al?@jX3>(;UjF*Hb0mei`h}1@2JAR3m@g2Kct@K zjN=Xh`p-1(uEW0zA46ta-;H1wZr5QLfoQMSwsfVhg+;_-?pIJ4ID9G%9Nq!)kX~dy z-odW6L@zNPjIflu3V*s~Q<e&neMN3duCN(^1A~e%>1TFI9nESnyIPF^>hKVAdOX z2Cnbu{EZz<4vGI776Q|;VDf0SqRqfq>YY`cYGPKi!*-4_;Wjn2Xg&AUP42s|E|+}E zFJubsN_w>jeaD9WZ(gRyg5|a3l9z{M_JtVkf5vdH@93@R{7t5&G}@j2B~z@rGFEq( z&%`9;#L=#4*-WGTz47rmt8@_!a zZZW1geJbPH7G}^huH;oAl^IBSywaXNUvu)nhyJ@LPc)i0$x@#Y8L`wh(79q;w3i*_ zdHmj>owvJ`_iU_zL`qs%)SQL1wgkd*hoXJYLF1jAZ@+T`C5_omT(!Bz5qcd~olaw$ zGm#UX4cx}X@B?LBJP0r6GlhGTjN7;f(7gB&!4#tsfxTMLh%F3VC9eOo?|^z11lPIp zaAbf7c$69r;VdyRPW=A&#|pxWX6orsfe~%wPJu2U@<+gjx}Oetl5hG|c9@?}&I+li zx2mb}lqLQq->P<`o~%ngStpMZvi2v1QJ{9STI~DPj!>6c*7u3shH#aK%{1i?hxSfv zHcydXqQBfm}&Tz8HPuRJV$cq^+-IdWjPqr#fqNL$?3gSJR-!~`w=8EQ&sFU z?1ixO%c_7(FKejIrCtc7zE2&>RI{nK{0k3f-QRZttNVqJgG)MtJ~~ZW*j5=TCM9Mv zPu@T!s5prYEXp6-i?U+jvBn>e=VB8V=fOX=IPay!dFdD9zx!hR|M_zKUM7WiFp0l} zcBoTQH|qit0*cdDx(Kw_)pIdv4paQb6A%u@hJ~*?VIg{_t_ruVr8!~iLn!wyZcP(5 zph}V|nDM)L`}uozwPxH`7es7BbGNfofxDLJqxsHgpiPW3l+wuJ5%${&8e5``T|^sU zILdY5@YTBD3-D6Mg0ktxjymJG%Ul7A>@orb!_p$VVqK7}RVR`t!dS_C$JcSfdY}#= z5GR?3VnJ5CKV6;ce!5!iI|kMKyFujP#q=S#HyGxUFXnOK%PTZI_ts?36lZQ{X3rb} zE_4n!&9rRqTNbQv)U|Nh%#GOUS5iA=>yta{gh9at1f?ogaTPH2h*BF)S&ucLX#NVK zgw;AU7_}?}yh}pFPzca9MQCzKNa4N_bgl06c&e8b?>q5DCmv#PJo#>LVdYLh!-eCv zkL}~OkNLRGc7*;J331(*s@Rb#E*X#BS@kztgfl)Xli)OpQ9(02}n6Kit#NyCQ z`*3q{hz~c{3Wdkwkc2Ft?+$-u=JT-}H33H`1@lPExH>S1V)Gn!l;(Xv)z;y~kAp;8 zSb_VgIM4(S7W!8J-U%l5yA<2k#r<_NLw_y7BQC}09?W*bML-*exJ!KKSCQsGA;3wF zx)2(#d&Ek-{r@rdCg5>ZSGs7O8g!~;$&%`nWTT_WmdXNmIdMqnB<^(DNhgIPXmnq9 zhf7FG_f#oVSKkl%5}Y`BeZTvz@Ce4n27|$7uxxBR+t>m;cm$7lo-kkx zMsNLVpQ&Woq5Jji?|op^Is2?Vt-bbIYwx}GS^;r~m{Rq|POsFog7kzHy&38QFAc%9 z5+08dI8Pie30vp-dcDq7(=cAj>H|*Hl?VI-SEuq2ggmb;mnPx$oA(px1Z!ei|@kiTTFt-zbcJMi3O^HYjo@py9`@cf%7gedW-d_-a)RB9UW;l~X*h84ASsnay~P;w zn>dOs??%&97m+WT1_}nQ{)+=wbDX$hpW{8E%R-opiG3HCAmeOxUdvsg*AM!F!Wp^G zV~h`O5zefWdjBI=H>t>IryH>k8YUGRd$Z(FQ4bAzi- zOOz4k;yoaHMv&>D%np%o(g^UU#f!&VWU|!Lo?0VOBAJdy|>> zzw+wVE|>Qk&*2E;I8EiRO8AJPCUvev@Xp{+lZ)c~(-5OL%@c{VCW?M03BOWBrDm$m z)*ZZDg2h;RKz-voy|I{FQJyDEO>0_;+R^af&qehmKQ!|S(-4?^!s!Z0w)Gxr3^%p3 zTT|=nB)$b-Y~lt+)izqrvgIE;# zVomBK)qUEi`?RQA+tb^?(&>`44h4uxTf-ICqT+6=faE3P{ZdKe0WTW4mRZXe9-FmH zEE3n{iO~7J{N0uxf1dH+g5r*>arF(4Nm4aOc}R+jRT@pC7n!mrf_U8x6N#clvAJx> zYcsrud}31h3?Ag;DOD)i%9n15kKXx!h|#txkJ!*SqsRxnCH=4CK!CZ93E8ZS+n>B> zOdvy}3beQ;6O~ z@elfXpf~po=*=hSjr(FTZ3n%1MIemm`9DW*9?<`d>CJl+dh;>8d3#2JiH2NybDQ+W z^UI(&uan+9G4cjL!5AlDm>+MUvL_uKAWEW`x45^cJP zHc6s+m}fZPo zkMZWg+iDL-9opR0RU9@%i#af*+=ErUqpNy@#JG?F@h>=h|C8$+DFuIWZRBMj9I)uoE?O7d-L992+wun$z2TrDwY(MVNM|5+GRZAL z?RMBuZsLtwSYT&FrjCq}>8)T!Z+I){rd*xrEOKQj7w$!r!*me4?^%(hGiziy70l|H zhEqXL%c)?q7kf{X3w|h(ZOaX_9p-F@Dcj+kY$uUzYq{)aTZeQaPvk>HB+SX!2SLN$ zI^o0CM9T-kW;vaZ4Y|7QhV@-7zDf*zxS z?d39|?w_Fs%wZ$pZaMViT92Mw=LvnAX4KbSV}oZ+ANTN1l*KzFl#q3ecGpcb%Ic`(2_av*TsbZf&CqmYVv=^E;QC5ThCexlNuNm7F)SBqyK^|fH zm?2m;Mj|H0EfK9<>xuO` z%bOyS{aL;OFJ1!L1#d!*PVXa49T@C~ox(hJU{z*3E;a1r3Ca&BwjMRBUMH%C%4(KE zlIBKPr}7y)HExX}!DqVHc!pDTfy;zX3@Ywkl=};OdD}b&nbfp|OsA{;n|<}hraJyu zyXr8;yb&q=cit#8hlk3_S`Jpl<{OHn+RNHX{uaAHYdr}s@NUL{^Ci5-mf%1*s=;>Z z{cS`-MIsOi!nT@QhO`bD0Otb14eT)c{19yp;($F{2QD7#W|&mjuU0HCj98U%k^$~9tnfB zY*%%6C(MGpxcXoylP60?2&+A;*-n-ucX;&H_zq9;cBkq`5CiWW3&EM+Nwr>g~seG+3;jE^#gtbJwV(A`m&eSMDQ; z^SvBl%_L?j44p&(*#V84`nb{1jGm>InzWQI&yz)F!jmCLeTGEb8cg_Dk~VA&`dYRI z5i*GOA|>q!$!)Y?-wn07i_qpSk~VkI*5wbzn~dvmtGeSB{6`EwiCMyU zsngilni0eW5tsnX2*xHAHB2gUwM;5%@3#Lt8~eYQ?&h+mlZG;jC66u^jmA!?*n{7Y zvj-pZHh5hv-j0kOKZM|MpO?h37d|7HF|Otu;)XqBwyURoe1JzkuBKwz_2i-cEe##r z8c2)D`b>`v%w%%5BT24Z;X81L*$}0?+eX1hy*Lt+*n~R*vkh;b^x)Wewy#*w8~^Ux z0V9on#svw7P0g`#E7o%IN+2~ih6gIU2Ew^45Uo-S?X5&Y|4W3f3P_=V|hR1n*1V`8+CT8mIT;3}|9Bl%w zrUr~HHIFjQZH`!Z9{#rs)mW3!<4FAhlP6v3?n$3bgd=%xa^2$uIlBi}}$! zHxWDapE&u4il^m6g}NmW@G8wkgJ4dS!}I1J#QrR!uo=TQFDQnQnsGMZ(hlV3wzs}< zY|x8xc)OH-aXK@+o&B=oRZm{%-*~Y0n# ze(De{7%jjo@bjY0Idyedb!AZ3rT#7>m=o2NGgjts^N_XoFl4$lWX@hwo#r5MkImm2 zp_!j5xBThM0{c2$Zu`?=GCc!&hc}qmCrs}RgSE$s@bA8zY-jWYkbl-e^ykXq9UgNC z#Lk4jG)P3hBuFfm)?u)wE{7K)geI$jNfeC!w&mf@baHVJCqp<1K%GXY2r;)88}Z^E&SY^p zjNK4WX&op|=g4Ovr|B9l1$5MB8e97r&qO zZ#><{*WGO8H?ZG8c(ptM^;v%o`kmZX$f3`BD7EoaA5U&6vKBK-@pD#DN^vc&)$k{H zw&}5~GktK(bEOKSfNTMF9wJ@1H!2#PLn!x?Nmt{TW!+AIHY8PoiMFgCdNc~^Whh9=9@_p z%B}=zjLWf_@n(G0tdGLI$n{_Crt;Ud9;I8xd}qdiC8a!T#b+Z~OyFu4E}t$TUcSTA zN<1lcIiOu2kc$C6`V|^vPFi}Ht{qfFoR3LGY5iU|PE%Rqy=JlA&%3eSUCeq<;T-O3 z2kY%(eWOgUUIWKiIb~9Bf~~cv9>bx#L!Vedq`rb#6xH~sYWZke!DCHnBXiQubJ{4? zVxw<@jgD4rKFd{&QO%}b>DKgjxan^IXsl{CeVhuZ0Ymo;cxtBQZef*wcWP~rFuFGQ z3#o}TfYgMdbT+jbxgWFJuo`W6+|dRG7;git1;7&yfVBXapypA+VzC}>7x*%Q?{w$; zsWpVAH9_!47OZQ6HSw*5oV3l6w5>30&!%;r0a2PosZ~KSp}WoJ+jHl$CI3QvY4Bkb zm@~I^%xz5EiQF$Xgj!|D`BlNjqh3Q5c~Zr!40ro{%XoSdX$PW}wg&S|J? zbAscr<&!aQi)WJSNO+ZqHT&wIF?pOM>vB!DM*WL!qrRI*eGahxlw;JNRza`@hOUrF zZ3e&;6`ue29{&bL9jS^Zy^_`+TlLSVaL8N)8orM-vWENIsSU{VtUcJ9FxXR7pPVOu z$(u%|?+S!6t!Wtn8=cL;mj1?w7sLtQyn{rm5e`7w>6{rF_5H`CHU-gf?fy3VCfcT8a)xZ*MB~@w)&3kskb{|y zFcKR^NG&4}f9!%9zfy?AL|%M`EXdAu>y+?{7B1viwIUb^^}Wm?2n9gG%StFH^*J6% zzMHhsAjOSLsp%SOu%QEqTZ8Kj(ZcTXAa^MH^E{?O%6<>A9ec9Sr)d_Yec6rD-epRA z3p6p^L1{0j@S^-(Cu`)$h358VY8!Oaw}Z59PVFR3HMKnmhp;v7R-#jqf~1@9u%Z_d}Z z=_?4$+~oFR7NHgR+*UG^R$io_A)LEa2ZjR}2U63?-L#s$)<;gg6Et+RA_r;KNhVFc zszSF%++kiRU8 z9MqHsz+xLf2fz{sfDVAAHUQr$e$4^ERV=ds-Uq;P6`J-}!W|>g<8M0ZJ98u|l@q)_ zml)f1u}aW>GmhXhAciL5u^8JFa}&xvrDsrLX-(?{C`{a2Q|mlAk~g~Y7EdZ0ME^&a zzP{4I2u$UF?p!fYHcAH;qO^t?(V2yXGjXSEuzpxhQ`2?>Qtt<`W_K3Sc(#uR#MNet z=B&Z+vJTPwx|%0(*m#l46bS$t5&TO)qmA(Y-BSy(%Ic|NQT7`a5nby>L}@0X_b_U2 zI*4e6>LCd^*dn4mAfmlYMEjTx?hnF+$pKo2{|$Cy8~#R09Yi53?V;a;p(En{+5A!WeHQJz1q+`Ftrq2e-Hmc}rrZxOp4%Lh`?iWO z1XUL0F831U9&^&^QDoW9+6ODbM}k52^>QRvpKR$b3{Cq}D|V;|!TgfsR2cbqS}*x0 zW?LRKfEJrJapnA z?I|+Fn-7{|TUQrv`jDst8{`cpfm>V8J%Uc{v2wVrQOjufHC$SYv0nOIAdLwpamiyUZgq|0@%%kpPaiK4rJZg{+ zjw6sf6Y45RD3J$LkObJ|+vLVkY0>@Yvd(4?=qR6ldtr0{CATMJqP&DpsmiSf-u#>u zZSq3f&eXyFz?+W!s^M3z)bSv2kWQWmVy_ETg$__Xc$i{U0Nuw?Y#w|X8)e!bP!8vd zzAmN)_3Qq&k_SnNzQ5sq7x3vQMHbZ_4>~gBR3ay2d@|-~LXN&1a={Y824cqFaW9ljzTmce4gCiR`O>s^)LTo|G^i;JcY9JF z8@h8k`Ek(PZg|(`+D9GC{5?)CGLrdZ<74ofw8hQ4x^eRibMwPsQo4hiXL{o1XPw;q z46Ho^hy;kzB0ySVB+C>j7q7*GY`>>$;`?o7vAfgYDSA7W+AGv7hr6``Kf& zpEC~jv)5)nXAJgp9us7r#eQ09bJSIiY%K>3P|bJ#5t>R-cBYt6nk-W!U0}dXwR!2GeRo zSTy=FuvO*hQScz!_8D(Q`QWnRWq4--{2#HuEeV#VC-NM8MXm{1@=G@5mu$)}nM&zx z$}bs3y+QJ;uaIBHmOrG5;bnk?n9dGyVn$He2zV&SAYHg^}G#T>5COyySRiqxitCRgfF z1*2k!RJ%kZIwV~2-&m4MG=@zTh)y=Sg@Y-(C8D@T6{o~8h0N-%t{!E^53iFMk19e| z*uRD!h15vJ6d5BGQ)HaAnM;dei;Q!&$e?5v86!b}=Pj-=vK!ZEXRdLLO-~$L<6^h% z*YOImj?uV7ks1Z#%1btdk46Qbs4y~thfkf4dHdCN+u zL7va-JY$jP^PA@xi#%6Yfqc><&O99q3a1CYnwIZCUmC3hkFovP@D7dHlbDMC!?}H% zYhYGbN`ntB9K9+IGi%~k0>wWTX9(8~@BmIXKw}TXMu^WL5XzD&XZw_dk4ng7mERC7 zjvq2vaqs|gL&J!U(X^~MbeaM_v56>UoPraEbgWlHFIQ@uB5XP`S$t@GtgqL8AFb3h zj_m6Lx<#;n$CQ#vE9Ya1WevhRu#YK?W6a!U+88Qf97-5#l<>H-gvYy;@VL_Wc=r;< zQVHYx`rrcV3ucorT8%!TFb2Efte1KCV4VYBRV5=JyqN_j=X&lL#Fwg%B-{(EZ+L}e z+BjuoXK|(QcS>oZNhI%T_2g*!H>S36R9`PVpY9i)PdU?LH_tS-wsGwBnI1=`B4;MO z@rk|?z)lG;F*CoiX5hGPGq8ha;C#%$YmOQCHDgN_GZ2OkY}rr;2gOCnHK4=fYL6n^ zOKCp zE!Oa)f}QlIz#t|mU=Wj$V{C;rai7G*9amw?$R`2tm<=!q0FOHWCIMi)4KNu1PdEU$ ziU~HrQvjIg0C)-jPgdX{eF_JmC)IX}!i;u`!p?UP%azFK5h%X!3Ljk{yHigqdUBx; zEmHgluSyT`g(U9~Wqz`mHd#UN_vB~A=$euCq!P#b?w}P9=nTI`AFp)@r>MI58b4Ev zA(~WyL%Q!7hjgM*H#wwBC!bdMoQ_9uvNdSqyA9e0JZKZq{ihs*_H@O~`S}zZm(K#1 z&s5x$&pwOtpSAN$MV_fQ&odQyp0o2jhdj^UJkN8;Gpz#KyW6?EpU?19twb z5Jj^AQ+L-}IC64Z7sor$*d8MS>Vr$PEY%QDMFE&r5gc?)@rdmAw z28{pLH(>m%8_Qb1X6QG2^zF6kgP;`hr! zS^(986Hjw;;%VJD@wDrBc@1(3UjCd>!gOZ|)4P>0{W@M=gPbNWpI%|{@)y1#FMpxJ z;^i;gke9z$aUCyzzGt>PfmrfH`uAjyynNctGfnD|mrwtOy!<6=_D$|K`}Xkcdj?ed zvSaqmsDN2`u{rw?IcTl|b7z8F!yf;o@=@^B8P1)VWeGDSFG0 zj$#$NJOewaK*O!kOA4G2u?Mjs9r&pU?H5i7ZO$+UoME8eGrAadw*)y$G0c6kh@B|>n$K1kXG)mC zU$()sy24J|XDJ5cD@qnPt53~RfQ5O?(bz{8?;yOaF!s4}!ad9!Dm;Xz^J4J~#A7W; ztY$Vf!!SO3MX?N!XyvoqFpy?>&;h{UFGNztHjl#DXEkWohyg)GW`)o6Sbsg*pOz%> z>xr|@l0EQCC^Czv5U(h~dyE37IEq7b2$9(?(|qTk4Wdkugo58Q3g%MN$yP=5ex@Qi zzQCF{Pj#C&dwJfx2%v=(c5vH8^ep>HQGu!G;tID%_J5zTme%jtAXCGa6<}G2BX4oT zU|B&1m-HGp$Syt_<}iJwN14EuaABh0r4@*f`*$Ff+dFab<&f-7i^v#vkQ5Rw-8<9S z=$=9eH4r8TvR`+I;MiV*8<@o-rDu(OMJn|*uE7fLyA0ihv)|a$wMMA!{)4p?{eRy+ z;i43N*p^pd<3&jiZhBU&8=QJpZJMgqg;G=DsF)|)@2Z%?b*lv-_y`VW#eRUPnC zcl>D;{%0%TDf4Mnk4;gv&)vzl%Cu)yeOAL1)g6DPc9WzNaH*JHuUB9Xa4!*^$n-*G z^2N$w{5!i!{JvBIJeCYPDsMpGi;DI>vC{9i@F zcq73J4}wT|!btET>?jf@8VPwIG9*ke5@fz-KnYJ834V6p=kmMNyNL(WKj;7d$p8O_ z|983G;683gA4!S^1`G?-|L65+LiZj`{PR6(q8`z|>;I4Q|1Q^?L>yLh=bF@FOpp~k z4}QdKj+nt_`L=ZIUmE_!m0F~LBoO5xw!2Ul6SgDM_?irN#M-XH(qmm+>BhARdqE-| zB>Ug60xuMsOlXlJuF}y%a$!aAAHeGPk-)IK7Rc~4QTo7E{X{@39!Ghz$*+r$&Ms6k z$+!C;&{R!`_v{xbMgjaILNVa6CVsUL?G5F$7uTMaSq-L%OTAvCXtQK?_c}|iNzIa} z`Kx%QvHdJHm~YN5QMjeVC|2`FaYF|0Ybp>TyHdOhzsHM|f$fp??&LGI`cGW9aqPIY z6+Xhqi;R)q5k?k+FP90FB(D}~kBn=1q+KuhlYx+{g#;CQq~Q@4B_l2xhM8+V=>Q;NLa-2w8Pf2%DeUBW-Xl5_`mGW%LmVtD73LcAy=uh116B z!U@>&2sOYk2_$e7>P9TmgqQe#TYstLcQ`40q^%?*(j3K-a(cB8R!vN>`2yE93#Y=c ziHC#Tj4ff>+rWJgm}V?LBKD3s3tW8bAOQg_I`(6uV*`7{ZtRh40~#;JigXO>psSSaPKnV<8h)^ZZu^N7Rj4T&K`NO3dTRAw#oi`(ScsDF#0k? zjSRx^H3tQ-o8b#Y*El#l#un^dHo|}p(9UU&4DBRU zkIEuZ=*EIfN64iKR>&o9M@AdMqn3dR%O|!OoY?vhR4@K)t=SZ9$T+m7`2PZ=)W&l{ zw6-%FlQL0Bitq4b2gH}iMvg3l_eVSzm=eY=)xho3Q*ir~aX5UsR3mv1?CBvh*ptBT z+dO=6M8}~vv*}j}$K2>zDBQnhH2707Ef*IlBZ9YC(_R=T@MCgTzcIY~O=J3HXi9Wr zrF&RJ8ba!Z@FD8b#I4xmIa(CyyBRKez=xyl|)>^=h7zW z`j1qF%=$2m%;J*0jyl$G9q(1-DYAck9tM?I%G6qp3v+9;|5ijFe6AKw%%4%4d)2i3 zvAKZ8y^#L(u4$Q~HW$%Tacrd=T}c@3Z8~DXX@yS0wWTjdvFVrmyl)Hr#{xIGM1r<; zsT7QfWK(jYY`kOD`+RM3TCIqELyyyI$BgOBBsWUhWp{E_8Qdo$`GwjsoyCslbaaE_ zB5F)W*V8Z9>`8a>%hJ%tMBGzrQO8$#+4_d5wI1pkPSGjlNm;w#PCi}64u%I5Q?u*i zTPs9RxJgvB2SAhL9YfZ(sRCvuq{4WGDKq#Fy>FKq4=)rb0Vfk&yX`xLWjL z1=LDdG;&LSdW@K})_+P>5f{Bva zmOl<`E=V2^)Nmsr?B+j#gfT>E^l%Jc(17g~q@<5AJ|Dy9-lV%HddKqVUH3-wr9>gA z?;a*hE};f@I3jyIi6VMwB~nfFN)$m{-5x9{`QOCYg8mXlQ?K}Bx%fv^#~1EoN0~8S zm>Qn4>P3zlTg^Pn8 z$weAr)?9Mx#9rT!Xa2su_&D&57voqMz7q6|_$+KY9N+Q~t;jdC_4gf|!faj^zFC&Y zQ~62*>pBo##q|)((WSDmhRfRLn8e&=V})1D=PzhtXeciUl{<1^{nUNq%+qh4dCKAq z75W)C%hkbwgVjSEFufsX_|P@<{zD zrAqh7(S5SZ@JZJ=r`89H8=eq->Fa(ux?gsQgM94>k@*fUMAU&B18ij(c93@^Yyik0 ze9mMWA1#1R`r(aB*v2J%Wzi-qi;h(Is4(7oPi<0S+hy&FJGrF{ z8Xb|+b{WS4N9{bDk>{8r&*mHCId13Kf;=Brc&Jx{(t}CAf-*^v!#hYv`uPIc&39c8 zRj54}Zx7KE%O=dGg;daT5|_~C+j)8*m=GoDx_PB( zz%b}`Q^k}tFg6tjK7bPYT;i$?UtDCpPk=On)Y^j?`e%hA9$k>3f5vNUzMP59m!%QG zI#C)nym-F$M%-^Kg)oBX*hjAPW17=Sj4v(k3*bOGFP3IJ<>vV;i8vPsLiXqldyWok!!va;iQ$ce^3@kCc zrF@S%Zu?Ft!&y#7cw^9ce_C%mktbz`8Jqrm!joy~%a_2<@Mc7kJ4CCBzUIPv3oUp4 z4$bAdh~%~?;<;1nC)`Pte2ePYAP;EVAWP0w^azX9FDn=kLm5`9UA!CtlpdQ~%Tu>;Zmrv_ z|FV-4ed>Jqj8_BSB7Okov5CX#>W$YFj?v9&o6ABR6ys}!of7R}srEUqj;IWrC0()D z|2zl#|7-gHz5{~&|Aw-B;n+&Pn!7jqCBI^!bkA$pYiQ?%;aARfUbEO|E7<4P{0gh& z-_lzbqj#*yo?;z1bLhsR9&oZKVnxb7I#~}}9cJJ&MMPmXx7a&*d$~@6o?vkj-fR{d z)O|9f8W?O2FoLKb`&GfKR z%8n|1#YeH~OZd3WL&mW!lolGtu1gH1Es=*cJ*-OcG>(tA-dDVve8uyyS}jF@aqTB< z@FVEDoW&K zEeo~H#q7>tbFpq6@pEj{Zp({hxyy^OP^rgMn$)_WJGCAZ)Ea}uM5Rrw<0^Bg^)ct@ zK5l-Cyj4!GYOF{!i(LUg3LG9VH)y|Gxr@#ZAkG>(d3ZwZ#L z93hN#O@a7tk%tp4tSsz~l@A40nqb4>z{;db=xIU5O4CSLJLXQFD@~0AiYHfMOQ+53 z=}_LB!j=@ZCOEBoul}pES3}2Pn~8M*J_F>_Rt&J#FPpsJ(S(bk5wMxe3ik!j`ba$O z@HB4ncyi~WBlzzQPke_bqw)Tl36w$iGj)8S7utF~W8x{s1gWX9MJ6UfgSDab|9u|` zOmspUeY(;pB8X>T$B1hNo$|0slDQ7zxX*Ie)cKE1AgJw5rUbrJyVG@Q$C2k z=gksHTkkPGJX`4znsWLc1g%egK;nV~BLU#K&Wt%YwGxM$)tnyziEjk=T&0gx<;%=c zO0h@%c)w;JbiO?$?h%~?ZG@QR0zyB66~fBmhLy!GbcWLEEvDo9(W3b0eh+N+aWGwE6zXWc znT_`tu)j`EjpHk%gu%g3DZ?`q$J_OBuwDL)fo2d4HG^TW8I*<_y7TjuI0yR?A~%jM zNG`6W|FIW4(umoUiHr+IKUF1j_TxRdq;{$q?n=booK}g`^e7)R=*e>x$$9;2;5db} zYVD43Eq4$jApFy6wUdu<(ivXOM)xREkfCU$j5%L=q^k=wKE2W_=gAv*>-Z&(_eD%^A1#_txtCdds~A4pfw1XC5VIK;B`l$CPhaQL=AhDMnzO^fR1YqfTAADQqvpKk zJcWNNh=2DT77XVgTZcFrHLDU^|0S$bVA1;vTw(hNP_I;4>%EWIaD%lBVVA)GbGSdh z;59@?Y@QOGr?^^%w8!QvdgFXWN?V@WQil|jfh#x;Z*JhF9|?om46#ynaKXI~L;W*L z(_{V8$wLa|Aeh(!Dtdt;33HvfR)?24JN%-8fA<{`9sUq4o#*KAe5=FR)KSIiHOv_7 z4j)B_7dkq86vZs!gaOXxrS;?*Idw!aJFO#ce2t9WEN1YUoZh69NANkfBTKA~EbpNs zM@2^tqXkPH9eK^skrO!`S!Q?S1Uj=*WtmNbnS(R@xmog^sLpbc6v`R}w??|1Uv;HDfw&N`#5Y~G>Hnah^t{T$`*lhB3w%sF9lF7ny@AX<7JM9(6P8Qj&xdGXp?vZTQ zT1a}M2P7RANIHq$t)uRHyaGvY(KD$+eBBbLSWl?%`U=H$O9gS8kYhuomr@(eErfF< zg#QYQ!?TLkug!Em$1fablpf(PhYd9G!Zw=iX>EvJ6aBico61BPRNF?b-O^h(vBFk{ z{kL0UZDsS?SI52mXbLig%>S#$f{nCB-i(S(MW36~!2yd8s5C)Hs!toEC!W zk;Owg8=dHO$ESs|*m5wB4zc?H2zp>+q-#?AngkKOjS%Gzh)Z=Gje=rnx=<8 z0NVk5K;y^|#GGD9T75vc+$n(`St8C7kfUXACw_EgA5qDdh*@J)dqE*Qx0Hyp(vs+& zG6{JJ#5mNu{-cjGe}{ddH#Fz5J=s%*t^`*KbFz6%8d ztJ2Ozmq9vdZ`NWfrfEg39$!%_)@U6>FM(eD>}Whg5Nt<(NJ0(mTmwSi40E~PtaV9} zYelWgJ;c??g_i2c7i4W^EgyNVs?~93g)%?jG9z}Gy^Jy+kk}L%?aeiaqp z%eBWWeyyynzOMMa->~>S&f-@)ir>d%X)Lz)^NWub+t>p-K&woDV1^{_@uicOmAWqF z=e%QfSy_xZuMcNG{`5K=X6AS(C}z&|se+e;cV=tqQ-$9%{FLyfE-SECBT~Aoq%%mP zk9DpB_$Mbe^{JAz_{jxjgowvSbf0PLlHA0#>hC!yd-!++Ix0QWupZ>8T8gRU+gZpn zFqW2U8q-V>A2QGTE%lJYd!~~ULczZmbJGX`YgkTVfij{)^mRfAf-htWKE(FahK!>+ z8+XcVWN}PLJN9i!a%MtEkkCgY1N?zL>A^UlHkiSH=;I-&9AU^{E+j2B=+n{4Ji^@oOzqE<6880Xtyj9? zS}!T}nSwO)gsP*7GIz%g1CdeC zQD-NFl525BZ`>6JRl&u4r=U}BaUVV@&Q=KCRrrI;ReTG}mT93(<9N4}sc&3YD;38O>H0n*%Vt^ZekWu{m}@T7ND*PK zDP_Bva($R|`A_Kd0%4#MlCk%IAks*G$M-X1$7Gbnuw2-x4Fk$9N$dmTGp>AEh=Q08wq z9^nS!U@`ejNQm)gLZo|JSAnR}7rD`Qux1!w9`j5H#>@a^yTNqqjM8vMaZx(b;GH_Q zL549nj!d{4w;46`7TKcbNek~Ms_56!uU#9WZIX59v{c_Gm2M*Vzvc`4B&3bwwJSu? zPq-yYi$zpW(oS z+g2gUxDn7*tV`fjFZNdM(R*+D|GpEvE~!kF#n$sz?|mOjm8mo6=$DnY0sdD`A$yHq zu%kVLPgcN;H%=K&j=%pKd;+j9- zVKLk);Zj4pZa8zPAEs-+ZWByUhs_#ao2&whyDRrvfEGwj=#zROlxAm1e_>w__-2;^ z9<73~%~&>*UgPT8{g7TSgt+w3Vw!L@&}7olmqIS|BzaT@?=rk*WFqfWU{h=aFLN@< z4YkxDHbpo0wMj(NT%yF=nDcGqoo~Yljc~N&W1>&^qBBAa=od!3efZMGF&T;g8k9Av z%vx0juz=Z6I}+1`=6Ne{L4bs>kyXaPiRIp?Do_Sw+QuFzia|rYiQ}$ z^s*W`Dy3dln`Wqyy-Gxi99JSQR!2@Kk(a6?rx2~|TURtfZdHNU2t}=@o{T2tKm9D)LHoWOj9APIctf>d4&c$h_)%WdeIeZJJ|)ja4J_t0Q|n zk&SBPNM+<`Wn_T>o1-?ZVz2;#h0||J;iq1d!dq8J;q$Lbg9d~@StEtFzbb_nyeoy< zPDz96!xOeh;W;l!_ZCp@Rcg~3JNNQaQg{#Lo<{#3rGMiI@*?G*zD^o+YxvAEDSYLO z#C=$!Hm$Sr4Z3a6z(Id8C^Bf!pl=QO_MpLozBB0dLEjzpy+L;j`pbKJ6ZAT@X}w*` zvPAgxM0iCayebjimwD4Iid`=6W*TR>y@TXe%iWdG-3xBPJyR>jiJp5=pJTe|09S@ICH*Z!vJUbqKH6ET94=;#^7skVj1!L;nURpc=#+~CLX>J4_~Bq#>1Zo1a4KE-nLsf zo59}Wy7qD5+qoI1xa!lK@jSQu1h?=EH+2iQYA09s5qIzcH*x{@?kG2J8Mn5L`%XQY z#r<8(?L5SdU%?H_aQoK)4~)RK)utT|>XpOG<#3xEeq9c~A&1|T!z<+QN;$kr4zHHO zYvk}+IlN8|za@v)%i#@jc%vNNEQhzq;jMCbn;d>y4sVykJLG%&Qpr2ird@W)Ps!n@ z0LE)NzoRlk;{s

p=1Xmi!b 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 diff --git a/static/tinymce1.3/plugins/powerpaste/img/spinner_96.gif b/static/tinymce1.3/plugins/powerpaste/img/spinner_96.gif deleted file mode 100644 index 24af6375eed5580d1beea62eb864f75e4f1876f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13707 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 diff --git a/static/tinymce1.3/plugins/powerpaste/js/wordimport.js b/static/tinymce1.3/plugins/powerpaste/js/wordimport.js deleted file mode 100644 index 0c05b1a7..00000000 --- a/static/tinymce1.3/plugins/powerpaste/js/wordimport.js +++ /dev/null @@ -1,381 +0,0 @@ -/** - * Word Import JavaScript Library - * Copyright (c) 2013-2015 Ephox Corp. All rights reserved. - * This software is provided "AS IS," without a warranty of any kind. - */ -function com_ephox_keurig_Keurig(){var Pb='',Qb='" for "gwt:onLoadErrorFn"',Rb='" for "gwt:onPropertyErrorFn"',Sb='"><\/script>',Tb='#',Ub='&',Vb='/',Wb='90BA12EED4B8175F02A135767FCD6360',Xb=':',Yb=':1',Zb=':2',$b=':3',_b=':4',ac=':5',bc=':6',cc=':7',dc=':8',ec=':9',fc='' + - ''); - frameLoad.unbind(); - }); - - Ready.execute(function () { - Insert.append(Body.body(), container); - Insert.append(container, iframe); - }); - }); - - var cleanDocument = function (wordHTML, merge) { - return cleanFunction.map(function (f) { - // TODO: This should probably do something with the log instead of throwing it away in the Java side - return f(wordHTML, merge); - }); - }; - - var ready = function () { - return cleanFunction.isSome(); - }; - - return { - load: load, - cleanDocument: cleanDocument, - ready: ready - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.keurig.api.WordCleaner', - - [ - 'ephox.keurig.loader.GWTLoader' - ], - - function (GWTLoader) { - return function (baseUrl) { - if (!GWTLoader.ready()) GWTLoader.load(baseUrl); - - return { - cleanDocument: GWTLoader.cleanDocument - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.photon.Sandbox', - - [ - 'ephox.peanut.Fun', - 'ephox.photon.Writer', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.DomEvent', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.Remove', - 'global!setTimeout' - ], - - function (Fun, Writer, Css, DomEvent, Element, Insert, Remove, setTimeout) { - return function (uiContainer) { - /** - * Creates a sandbox to play in. - * - * Asynchronously creates an iframe, runs the synchronous function `f` on the DOM, and then passes the result to the callback. - * - * This is done so that the sandbox can guarantee the iframe has been removed from the page, and available for garbage collection, before the callback is executed. - * - * html: - * source to load into the iframe - * f: (document -> body -> A) - * function that operates on the iframe DOM, passed both document reference and body element - * callback: (A -> Unit) - * function that receives the output of `f` when the iframe has been cleaned up - */ - var play = function (html, f, callback) { - var outputContainer = Element.fromTag('div'); - var iframe = Element.fromTag('iframe'); - - Css.setAll(outputContainer, { - display: 'none' - }); - - var load = DomEvent.bind(iframe, 'load', function () { - Writer.write(iframe, html); - - var rawDoc = iframe.dom().contentWindow.document; - if (rawDoc === undefined) throw "sandbox iframe load event did not fire correctly"; - var doc = Element.fromDom(rawDoc); - - var rawBody = rawDoc.body; - if (rawBody === undefined) throw "sandbox iframe does not have a body"; - var body = Element.fromDom(rawBody); - - // cache - var result = f(doc, body); - - // unbind and remove everything - load.unbind(); - Remove.remove(outputContainer); - - // setTimeout should allow the garbage collector to cleanup if necessary - setTimeout(Fun.curry(callback, result), 0); - }); - Insert.append(outputContainer, iframe); - Insert.append(uiContainer, outputContainer); - }; - - return { - play: play - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.impl.NodeValue', - - [ - 'ephox.perhaps.Option', - 'global!Error' - ], - - function (Option, Error) { - return function (is, name) { - var get = function (element) { - if (!is(element)) throw new Error('Can only get ' + name + ' value of a ' + name + ' node'); - return getOption(element).getOr(''); - }; - - var getOption = function (element) { - try { - return is(element) ? Option.some(element.dom().nodeValue) : Option.none(); - } catch (e) { - return Option.none(); // Prevent IE10 from throwing exception when setting parent innerHTML clobbers (TBIO-451). - } - }; - - var set = function (element, value) { - if (!is(element)) throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node'); - element.dom().nodeValue = value; - }; - - return { - get: get, - getOption: getOption, - set: set - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.Comment', - - [ - 'ephox.sugar.api.Node', - 'ephox.sugar.impl.NodeValue' - ], - - function (Node, NodeValue) { - var api = NodeValue(Node.isComment, 'comment'); - - var get = function (element) { - return api.get(element); - }; - - var getOption = function (element) { - return api.getOption(element); - }; - - var set = function (element, value) { - api.set(element, value); - }; - - return { - get: get, - getOption: getOption, - set: set - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.Html', - - [ - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert' - ], - - function ( Element, Insert) { - var get = function (element) { - return element.dom().innerHTML; - }; - - var set = function (element, content) { - element.dom().innerHTML = content; - }; - - var getOuter = function (element) { - var container = Element.fromTag('div'); - var clone = Element.fromDom(element.dom().cloneNode(true)); - Insert.append(container, clone); - return get(container); - }; - - return { - get: get, - set: set, - getOuter: getOuter - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.vogue.css.Set', - - [ - 'ephox.sugar.api.Insert' - ], - - function (Insert) { - - var setCss = function (style, css, element) { - if (style.dom().styleSheet) - style.dom().styleSheet.cssText = css; // IE - else - Insert.append(style, element); - }; - - return { - setCss: setCss - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.vogue.util.Regex', - - [ - ], - - function () { - var escape = function (text) { - return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - }; - - return { - escape: escape - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -ephox.bolt.module.api.define("global!RegExp", [], function () { return RegExp; }); -(function (define, require, demand) { -define( - 'ephox.vogue.css.Url', - - [ - 'ephox.compass.Obj', - 'ephox.vogue.util.Regex', - 'global!RegExp' - ], - - function (Obj, Regex, RegExp) { - var replace = function (css, urlPrefix, replacement) { - var r = new RegExp('url\\(\\s*[\'"]?' + Regex.escape(urlPrefix) + '(.*?)[\'"]?\\s*\\)', 'g'); - return css.replace(r, 'url("' + replacement + '$1")'); - }; - - var replaceMany = function (css, replacements) { - var current = css; - Obj.each(replacements, function (value, key) { - current = replace(current, key, value); - }); - return current; - }; - - return { - replace: replace, - replaceMany: replaceMany - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.vogue.api.DocStyle', - - [ - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.SelectorFind', - 'ephox.vogue.css.Set', - 'ephox.vogue.css.Url', - 'global!Array' - ], - - function (Attr, Element, Insert, SelectorFind, Set, Url, Array) { - - var styletag = function (doc) { - var style = Element.fromTag('style', doc.dom()); - Attr.set(style, 'type', 'text/css'); - return style; - }; - - var setCss = function (style, css, doc) { - Set.setCss(style, css, Element.fromText(css, doc.dom())); - }; - - var inject = function (css, replacements, doc) { - var style = styletag(doc); - var replacedCss = replacements === undefined ? css : Url.replaceMany(css, replacements); - setCss(style, replacedCss, doc); - var head = SelectorFind.descendant(doc, 'head').getOrDie(); - Insert.append(head, style); - }; - - var stylesheets = function (doc) { - var domStyleSheets = doc.dom().styleSheets; - return Array.prototype.slice.call(domStyleSheets); - }; - - return { - stylesheets: stylesheets, - inject: inject - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.vogue.css.Rules', - - [ - 'ephox.compass.Arr', - 'ephox.scullion.Struct' - ], - - function (Arr, Struct) { - var ruleStruct = Struct.immutable('selector', 'style'); - - var extract = function (stylesheet) { - var domRules = stylesheet.cssRules; - return Arr.map(domRules, function (rule) { - var selector = rule.selectorText; - var style = rule.style.cssText; - if (style === undefined) { - // This should be picked up in testing, and perhaps delete the check eventually - throw "WARNING: Browser does not support cssText property"; - } - return ruleStruct(selector, style); - }); - }; - - var extractAll = function (stylesheets) { - return Arr.bind(stylesheets, extract); - }; - - return { - extract: extract, - extractAll: extractAll - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.vogue.api.Rules', - - [ - 'ephox.vogue.css.Rules' - ], - - function (Rules) { - var extract = function (stylesheet) { - return Rules.extract(stylesheet); - }; - - var extractAll = function (stylesheets) { - return Rules.extractAll(stylesheets); - }; - - return { - extract: extract, - extractAll: extractAll - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.html.HtmlPaste', - - [ - 'ephox.cement.html.Transform', - 'ephox.cement.images.ImageReference', - 'ephox.classify.Type', - 'ephox.compass.Arr', - 'ephox.keurig.api.WordCleaner', - 'ephox.peanut.Fun', - 'ephox.photon.Sandbox', - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Class', - 'ephox.sugar.api.Comment', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Elements', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.SelectorFilter', - 'ephox.sugar.api.Traverse', - 'ephox.vogue.api.DocStyle', - 'ephox.vogue.api.Rules', - 'global!document' - ], - - function (Transform, ImageReference, Type, Arr, WordCleaner, Fun, Sandbox, Event, Events, Attr, Class, Comment, Element, Elements, Html, Remove, SelectorFilter, Traverse, DocStyle, Rules, document) { - var flagAttribute = 'data-textbox-image'; - - var emptyString = function (s) { - return s === undefined || s === null || s.length === 0; - }; - - var stripImageSources = function (html) { - var count = 1; - return html.replace(/(]*)src=".*?"/g, function (match, p1, offset) { - // the actual contents are irrelevant, it just needs to be unique - return p1 + flagAttribute + '="' + count++ + '"'; - }); - }; - - var removeFragmentComments = function (body) { - var bodyChildren = Traverse.children(body); - Arr.each(bodyChildren, function (c) { - Comment.getOption(c).each(function (commentText) { - if (commentText === 'StartFragment' || commentText === 'EndFragment') { - Remove.remove(c); - } - }); - }); - }; - - var insertRtfCorrelation = function (sourceImageList, tordImages) { - Arr.each(tordImages, function (img) { - var imageCounter = Attr.get(img, flagAttribute); - Arr.each(sourceImageList, function (imgData) { - var imgAttrs = imgData.img(); - var vshapeAttrs = imgData.vshape(); - if (imgAttrs[flagAttribute] == imageCounter) { - // NOTE: If we discover more than 2 possible attributes, de-dupe with RtfImage somehow - var spid = vshapeAttrs['o:spid']; - var vshapeId = spid === undefined ? vshapeAttrs.id : spid; - - Transform.rotateImage(img, vshapeAttrs); - - Class.add(img, 'rtf-data-image'); - Attr.set(img, 'data-image-id', vshapeId.substr('_x0000_'.length)); - Attr.set(img, 'data-image-type', 'code'); - Attr.remove(img, flagAttribute); - } - }); - }); - }; - - var mergeInlineStyles = function (body, stylesheets) { - var rules = Rules.extractAll(stylesheets); - Arr.each(rules, function (rule) { - - var matchingElements = SelectorFilter.descendants(body, rule.selector()); - - Arr.each(matchingElements, function (element) { - Attr.remove(element, 'class'); - Attr.set(element, 'style', rule.style()); - }); - }); - }; - - var tordPostProcessor = function (sourceImageList, mergeStyles) { - var sandbox = Sandbox(Element.fromDom(document.body)); - return function (dump, callback) { - // loading dump into the sandbox *will* perform some built-in browser cleanup operations, - // we are hoping this is a suitable replacement for the use of HTML Tidy in ELJ. - sandbox.play(dump, function (iframeDoc, body) { - var images = SelectorFilter.descendants(body, 'img'); - - // post-tord DOM filters - removeFragmentComments(body); - insertRtfCorrelation(sourceImageList, images); - if (mergeStyles) { - mergeInlineStyles(body, DocStyle.stylesheets(iframeDoc)); - } - - return Html.get(body); - }, callback); - }; - }; - - var cleanEnd = function (raw) { - // Trim any weirdness that exists after the closing HTML tag. - var i = raw.indexOf(''); - return (i > -1) ? raw.substr(0, i + ''.length) : raw; - }; - - return function (mergeSettings, pasteSettings) { - var cleaner = WordCleaner(pasteSettings.baseUrl); - - var events = Events.create({ - paste: Event(['elements', 'assets']), - error: Event(['message']) - }); - - var handler = function (raw) { - var html = cleanEnd(raw); - // This will only be called if we have word styles, so force true - mergeSettings.get(true, function (settings) { - var mergeStyles = settings.mergeOfficeStyles; - - // remove local file references, so that loading the HTML into a DOM does not trigger console warnings - var safeHtml = stripImageSources(html); - - var sourceImageList = ImageReference.extract(safeHtml); - - var postProcess = tordPostProcessor(sourceImageList, mergeStyles); - - cleaner.cleanDocument(safeHtml, mergeStyles).fold(function () { - events.trigger.error('errors.paste.word.notready'); - }, function (dump) { - if (emptyString(dump)) events.trigger.paste([], []); - else { - // postProcess is basically String -> Future (String) - postProcess(dump, function (tordHtml) { - var elements = Elements.fromHtml(tordHtml); - events.trigger.paste(elements, []); - }); - } - - }); - }); - return true; - }; - - return { - handler: handler, - isSupported: Fun.constant(true), - events: events.registry - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.images.ImagePaste', - - [ - 'ephox.compass.Arr', - 'ephox.fred.PlatformDetection', - 'ephox.hermes.api.ImageAsset', - 'ephox.hermes.api.ImageExtract', - 'ephox.peanut.Fun', - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Element', - 'global!console' - ], - - function (Arr, PlatformDetection, ImageAsset, ImageExtract, Fun, Event, Events, Attr, Element, console) { - return function (pasteSettings) { - var platform = PlatformDetection.detect(); - var CAPTUTED_EVENT = true; - - //IE & FF handle image paste conversion into base64 data URIs automatically - var isSupported = !platform.browser.isIE() && !platform.browser.isFirefox(); - - var events = Events.create({ - paste: Event(['elements', 'assets']), - error: Event(['message']) - }); - - var readImages = function (assets) { - return Arr.bind(assets, function (asset) { - return ImageAsset.cata(asset, - function (id, file, objurl, data) { - // create an image and inject it at the current selection - var image = Element.fromTag('img'); - Attr.set(image, 'src', objurl); - return image; - }, - function (id, url, raw) { - // TODO: Is this the best way? - console.log('Internal error: Paste operation produced an image URL instead of a Data URI: ', url); - } - ); - }); - }; - - var actualHandler = function (clipboardItems) { - var images = Arr.filter(clipboardItems, function (item) { - return item.kind === 'file' && /image/.test(item.type); - }); - - var files = Arr.map(images, function (image) { - return image.getAsFile(); - }); - - ImageExtract.toAssets(files, function (assets) { - // perform the insert (SmartPaste handles undo and focus trickery) - var elements = readImages(assets); - events.trigger.paste(elements, assets); - }); - //prevent other content from coming through - return CAPTUTED_EVENT; - }; - - var safariHandler = function () { - events.trigger.error('safari.imagepaste'); - // prevent default paste - return CAPTUTED_EVENT; - }; - - var imageDisabled = function () { - events.trigger.error('errors.local.images.disallowed'); - return CAPTUTED_EVENT; - }; - - var imageHandler = platform.browser.isSafari() ? safariHandler : actualHandler; - - var handler = pasteSettings.allowLocalImages ? imageHandler : imageDisabled; - - return { - handler: handler, - isSupported: Fun.constant(isSupported), - events: events.registry - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.api.CementConstants', - - [ - 'ephox.cement.style.Styles', - 'ephox.peanut.Fun' - ], - - function (Styles, Fun) { - - /* - The filter history may not quite work as I would hope. The problem it is likely to - have is that it might be the content's selection as well, which means that we are - changing what is about to used as serialisation ... likely leading to issues. I think - it just only sets valid selections, so it will probably be ok .. but the cursor will - be jarring. - - The paste bin class is added when the paste event is being triggered in the setTimeout. - That may be too late for it not to end up in the undo history, but currently it seems - like it will possibly work. Adding the class directly to the element would be more reliable, - but I haven't thought of a clean enough way to do that yet. - */ - var bin = Styles.resolve('smartpaste-eph-bin'); - - return { - binStyle: Fun.constant(bin) - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.knoch.core.Bounce', - - [ - 'global!Array' - ], - - function (Array) { - - var bounce = function(f) { - return function() { - var args = Array.prototype.slice.call(arguments); - var me = this; - setTimeout(function() { - f.apply(me, args); - }, 0); - }; - }; - - return { - bounce: bounce - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.knoch.core.FutureOps', - - [ - ], - - function () { - - return function (nu, get) { - - /** map :: this Future a -> (a -> b) -> Future b */ - var map = function(fab) { - return nu(function(callback) { - get(function(a) { - callback(fab(a)); - }); - }); - }; - - /** bind :: this Future a -> (a -> Future b) -> Future b */ - var bind = function(aFutureB) { - return nu(function(callback) { - get(function(a) { - aFutureB(a).get(callback); - }); - }); - }; - - /** anonBind :: this Future a -> Future b -> Future b - * Returns a future, which evaluates the first future, ignores the result, then evaluates the second. - */ - var anonBind = function(futureB) { - return nu(function(callback) { - get(function(a) { - futureB.get(callback); - }); - }); - }; - - return { - get: get, - map: map, - bind: bind, - anonBind: anonBind - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.knoch.future.Future', - - [ - 'ephox.compass.Arr', - 'ephox.knoch.core.Bounce', - 'ephox.knoch.core.FutureOps' - ], - - /** A future value that is evaluated on demand. The base function is re-evaluated each time 'get' is called. */ - function (Arr, Bounce, FutureOps) { - - // baseFn is a function(callback) { ... } - var nu = function(baseFn) { - - var get = function(callback) { - baseFn(Bounce.bounce(callback)); - }; - - return FutureOps(nu, get); - }; - - /** [Future a] -> Future [a] */ - var par = function(futures) { - return nu(function(callback) { - var r = []; - var count = 0; - - var cb = function(i) { - return function(value) { - r[i] = value; - count++; - if (count >= futures.length) { - callback(r); - } - }; - }; - - if (futures.length === 0) { - callback([]); - } else { - Arr.each(futures, function(future, i) { - future.get(cb(i)); - }); - } - }); - }; - - /** [a] -> (a -> Future b) -> Future [b] */ - var mapM = function(as, fn) { - return par(Arr.map(as, fn)); - }; - - /** (Future a, Future b) -> ((a, b) -> c) -> Future C - * Executes the two futures in "parallel" with respect to browser JS threading. - */ - var lift2 = function(fa, fb, abc) { - return nu(function(callback) { - var completeA = false; - var completeB = false; - var valueA = undefined; - var valueB = undefined; - - var done = function() { - if (completeA && completeB) { - var c = abc(valueA, valueB); - callback(c); - } - }; - - fa.get(function(a) { - valueA = a; - completeA = true; - done(); - }); - - fb.get(function(b) { - valueB = b; - completeB = true; - done(); - }); - }); - }; - - return { - nu: nu, - par: par, - mapM: mapM, - lift2: lift2 - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.knoch.future.CachedFuture', - - [ - 'ephox.compass.Arr', - 'ephox.highway.Merger', - 'ephox.knoch.core.Bounce', - 'ephox.knoch.core.FutureOps', - 'ephox.knoch.future.Future', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option' - ], - - /** - * A future value. - * The base function is evaluated eagerly, and only evaluated once. - * Each call to 'get' queues a callback, which is invoked when the value is available. - */ - function (Arr, Merger, Bounce, FutureOps, Future, Fun, Option) { - - // f is a function(callback) { ... } - var nu = function (baseFn) { - - var data = Option.none(); - var callbacks = []; - - var get = function (callback) { - isSet() ? call(callback) : callbacks.push(callback); - }; - - var set = function (x) { - data = Option.some(x); - run(callbacks); - callbacks = []; - }; - - var isSet = function() { - return data.isSome(); - }; - - var run = function (cbs) { - Arr.each(cbs, call); - }; - - var call = function(cb) { - data.each(function(x) { - Bounce.bounce(cb)(x); - }); - }; - - Future.nu(baseFn).get(set); - - var ops = FutureOps(nu, get); - - return Merger.merge(ops, { - isSet: isSet - }); - }; - - return { - nu: nu - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.pastiche.IeBlob', - - [ - 'ephox.compass.Arr', - 'ephox.epithet.Resolve', - 'ephox.hermes.api.ImageExtract', - 'ephox.knoch.future.CachedFuture', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option' - ], - - function (Arr, Resolve, ImageExtract, CachedFuture, Fun, Option) { - var convertURL = function (raw) { - return raw.convertURL !== undefined ? raw.convertURL // Use standard if available. - : raw.msConvertURL !== undefined ? raw.msConvertURL - : undefined; - }; - - var convert = function (raw) { - // IE11 defines data on the window, but requires the event to convert... /headdesk - var files = Resolve.resolve('window.clipboardData.files'); - - var convert = convertURL(raw); - - if (files !== undefined && convert !== undefined && files.length > 0) { - var blobs = Arr.map(files, function (file) { - var blob = ImageExtract.blob(file); - convert.apply(raw, [file, 'specified', blob.objurl()]); - - return blob; - }); - - // do the async operation in a future - var future = CachedFuture.nu(function (callback) { - ImageExtract.fromBlobs(blobs, callback); - }); - - // initiate the conversion immediately - future.get(Fun.noop); - - return Option.some(future); - } else { - return Option.none(); - } - }; - - return { - convert: convert - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.api.Situ', - - [ - ], - - function () { - var on = function (element, offset) { - return folder(function (b, o, a) { - return o(element, offset); - }); - }; - - var before = function (element) { - return folder(function (b, o, a) { - return b(element); - }); - }; - - var after = function (element) { - return folder(function (b, o, a) { - return a(element); - }); - }; - - - var folder = function(fold) { - return { - fold: fold - }; - }; - - return { - on: on, - before: before, - after: after - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.api.SelectionRange', - - [ - 'ephox.fussy.api.Situ', - 'ephox.scullion.Struct', - 'ephox.sugar.api.Element' - ], - - function (Situ, Struct, Element) { - var read = Struct.immutable('start', 'soffset', 'finish', 'foffset'); - var general = Struct.immutable('start', 'soffset', 'finish', 'foffset'); - var write = Struct.immutable('start', 'finish'); - - var writeFromNative = function (range) { - var start = Element.fromDom(range.startContainer); - var finish = Element.fromDom(range.endContainer); - return write( - Situ.on(start, range.startOffset), - Situ.on(finish, range.endOffset) - ); - }; - - return { - read: read, - general: general, - write: write, - writeFromNative: writeFromNative - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.api.Supported', - - [ - ], - - function () { - var run = function (win, w3c) { - // this is scaffolding for what was an alternate selection model. - // We now only have one but the concept could be useful later. - if (win.getSelection) return w3c(win, win.getSelection()); - else throw 'No selection model supported.'; - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.DocumentPosition', - - [ - 'ephox.sugar.api.Compare', - 'ephox.sugar.api.Traverse' - ], - - function (Compare, Traverse ) { - var after = function (start, soffset, finish, foffset) { - var doc = Traverse.owner(start); - - // TODO: Find a sensible place to put the native range creation code. - var rng = doc.dom().createRange(); - rng.setStart(start.dom(), soffset); - rng.setEnd(finish.dom(), foffset); - - var same = Compare.eq(start, finish) && soffset === foffset; - return rng.collapsed && !same; - }; - - return { - after: after - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.wwwc.Directions', - - [ - 'ephox.fussy.api.SelectionRange', - 'ephox.sugar.api.DocumentPosition', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Traverse' - ], - - function (SelectionRange, DocumentPosition, Element, Traverse) { - var isReversed = function (model) { - return DocumentPosition.after(Element.fromDom(model.anchorNode), model.anchorOffset, Element.fromDom(model.focusNode), model.focusOffset); - }; - - var flipGet = function (model, range) { - var start = Element.fromDom(range.startContainer); - var finish = Element.fromDom(range.endContainer); - return isReversed(model) ? - SelectionRange.read(finish, range.endOffset, start, range.startOffset) : - SelectionRange.read(start, range.startOffset, finish, range.endOffset); - }; - - var isRtlGet = function (model) { - return isReversed(model); - }; - - var flipSet = function (start, startOffset, end, endOffset) { - return function (model) { - if (model.extend) { - model.collapse(start.dom(), startOffset); - model.extend(end.dom(), endOffset); - } else { - // this is IE... we can’t have a backwards range, so reverse it. - var range = Traverse.owner(start).dom().createRange(); - range.setStart(end.dom(), endOffset); - range.setEnd(start.dom(), startOffset); - model.removeAllRanges(); - model.addRange(range); - } - }; - }; - - var isRtlSet = function (start, startOffset, end, endOffset) { - return DocumentPosition.after(start, startOffset, end, endOffset); - }; - - var read = function () { - return { - flip: flipGet, - isRtl: isRtlGet - }; - }; - - var write = function () { - return { - flip: flipSet, - isRtl: isRtlSet - }; - }; - - return { - read: read, - write: write - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.wwwc.DomRange', - - [ - 'ephox.fussy.api.SelectionRange', - 'ephox.fussy.wwwc.Directions', - 'ephox.perhaps.Option', - 'ephox.sugar.api.DocumentPosition', - 'ephox.sugar.api.Element' - ], - - function (SelectionRange, Directions, Option, DocumentPosition, Element) { - - /* - * The approach here is to create a range using the selection. If it collapses, - * and the inverse of the selection does not collapse ... then it is a backwards - * selection. - */ - var reversed = function (win, selection) { - // Calculate the range going from start -> finish - var startToFinish = toNativeFrom(win, selection.start(), selection.finish()); - // If it is collapsed, there is a chance that it only collapsed because it was RTL - if (startToFinish.collapsed === true) { - // Check that the inverted selection isn't collapsed. - // If the inverted selection is not collapsed ... it is a backwards selection, otherwise it is just collapsed anyway - var finishToStart = toNativeFrom(win, selection.finish(), selection.start()); - return finishToStart.collapsed === true ? Option.none() : Option.some(SelectionRange.general( - Element.fromDom(finishToStart.endContainer), - finishToStart.endOffset, - Element.fromDom(finishToStart.startContainer), - finishToStart.startOffset - )); - } else { - return Option.none(); - } - }; - - var forceRange = function (win, selection) { - var range = toNativeFrom(win, selection.start(), selection.finish()); - return range.collapsed === true ? toNativeFrom(win, selection.finish(), selection.start()) : range; - }; - - var toNativeFrom = function (win, start, finish) { - var range = create(win); - - start.fold(function (e) { - range.setStartBefore(e.dom()); - }, function (e, o) { - range.setStart(e.dom(), o); - }, function (e) { - range.setStartAfter(e.dom()); - }); - - finish.fold(function (e) { - range.setEndBefore(e.dom()); - }, function (e, o) { - range.setEnd(e.dom(), o); - }, function (e) { - range.setEndAfter(e.dom()); - }); - - return range; - }; - - var toNative = function (win, selection) { - return toNativeFrom(win, selection.start(), selection.finish()); - }; - - var toExactNative = function (win, s, so, e, eo) { - var backwards = DocumentPosition.after(s, so, e, eo); - var range = win.document.createRange(); - if (backwards) { - range.setStart(e.dom(), eo); - range.setEnd(s.dom(), so); - } else { - range.setStart(s.dom(), so); - range.setEnd(e.dom(), eo); - } - return range; - }; - - var forwards = function (win, selection) { - var range = toNative(win, selection); - - return function (model) { - model.addRange(range); - }; - }; - - var build = function (win, selection) { - var backwards = reversed(win, selection); - return backwards.fold(function () { - return forwards(win, selection); - }, function (range) { - return Directions.write().flip(range.start(), range.soffset(), range.finish(), range.foffset()); - }); - }; - - var create = function (win) { - return win.document.createRange(); - }; - - return { - create: create, - build: build, - toNative: toNative, - forceRange: forceRange, - toExactNative: toExactNative - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.search.Within', - - [ - 'ephox.compass.Arr', - 'ephox.fussy.wwwc.DomRange', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Node', - 'ephox.sugar.api.SelectorFilter', - 'ephox.sugar.api.Selectors' - ], - - function (Arr, DomRange, Element, Node, SelectorFilter, Selectors) { - // Adapted from: http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element - var inRange = function (tempRange, range, element) { - tempRange.selectNodeContents(element.dom()); - return tempRange.compareBoundaryPoints(range.END_TO_START, range) < 1 && tempRange.compareBoundaryPoints(range.START_TO_END, range) > -1; - }; - - var withinContainer = function (win, container, range, selector) { - var tempRange = win.document.createRange(); - var self = Selectors.is(container, selector) ? [ container ] : []; - var elements = self.concat(SelectorFilter.descendants(container, selector)); - return Arr.filter(elements, function (elem) { - return inRange(tempRange, range, elem); - }); - }; - - var find = function (win, raw, selector) { - // Reverse the selection if it is RTL when doing the comparison - var range = DomRange.forceRange(win, raw); - var container = Element.fromDom(range.commonAncestorContainer); - // Note, this might need to change when we have to start looking for non elements. - return Node.isElement(container) ? withinContainer(win, container, range, selector) : []; - }; - - return { - find: find - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.wwwc.Prefilter', - - [ - 'ephox.fussy.api.SelectionRange', - 'ephox.fussy.api.Situ', - 'ephox.sugar.api.Node' - ], - - function (SelectionRange, Situ, Node) { - var beforeBr = function (element, offset) { - return Node.name(element) === 'br' ? Situ.before(element) : Situ.on(element, offset); - }; - - var preprocess = function (selection) { - var start = selection.start().fold(Situ.before, beforeBr, Situ.after); - var finish = selection.finish().fold(Situ.before, beforeBr, Situ.after); - return SelectionRange.write(start, finish); - }; - - return { - preprocess: preprocess - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.Fragment', - - [ - 'ephox.compass.Arr', - 'ephox.sugar.api.Element', - 'global!document' - ], - - function (Arr, Element, document) { - var fromElements = function (elements, scope) { - var doc = scope || document; - var fragment = doc.createDocumentFragment(); - Arr.each(elements, function (element) { - fragment.appendChild(element.dom()); - }); - return Element.fromDom(fragment); - }; - - return { - fromElements: fromElements - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.wwwc.WwwcModel', - - [ - 'ephox.fussy.api.SelectionRange', - 'ephox.fussy.wwwc.Directions', - 'ephox.fussy.wwwc.DomRange', - 'ephox.fussy.wwwc.Prefilter', - 'ephox.perhaps.Option', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Fragment' - ], - - function (SelectionRange, Directions, DomRange, Prefilter, Option, Element, Fragment) { - var set = function (raw) { - return function (win, model) { - var selection = Prefilter.preprocess(raw); - var modifier = DomRange.build(win, selection); - if (model !== undefined && model !== null) { - model.removeAllRanges(); - modifier(model); - } - }; - }; - - var selectElementContents = function (element) { - return function (win, model) { - var rng = DomRange.create(win); - rng.selectNodeContents(element.dom()); - model.removeAllRanges(); - model.addRange(rng); - }; - }; - - var normaliseRange = function (win, model) { - // In a multiple rangeset we take the first and the last item in the range, and create a new range model - var first = model.getRangeAt(0); - var last = model.getRangeAt(model.rangeCount - 1); - var range = win.document.createRange(); - range.setStart(first.startContainer, first.startOffset); - range.setEnd(last.endContainer, last.endOffset); - return range; - }; - - var fromNative = function (model, range) { - var start = Element.fromDom(range.startContainer); - var finish = Element.fromDom(range.endContainer); - - return Directions.read().isRtl(model) ? - Directions.read().flip(model, range) : - SelectionRange.read(start, range.startOffset, finish, range.endOffset); - }; - - var getNative = function (win, model) { - return model !== undefined && model !== null && model.rangeCount > 0 ? Option.from(normaliseRange(win, model)) : Option.none(); - }; - - var get = function (win, model) { - var range = getNative(win, model); - return range.map(function (r) { - return fromNative(model, r); - }); - }; - - var replace = function (elements) { - return function (win, model) { - var selection = getNative(win, model); - selection.each(function (range) { - doReplaceRange(win, range, elements); - }); - }; - }; - - var doReplaceRange = function (win, range, elements) { - // Note: this document fragment approach may not work on IE9. - var fragment = Fragment.fromElements(elements, win.document); - range.deleteContents(); - range.insertNode(fragment.dom()); - }; - - var replaceRange = function (raw, elements) { - return function (win, model) { - var selection = Prefilter.preprocess(raw); - // NOTE: This selection has to be LTR, or the range will collapse. - var range = DomRange.toNative(win, selection); - doReplaceRange(win, range, elements); - }; - }; - - var deleteRange = function (s, so, e, eo) { - return function (win, model) { - var rng = DomRange.toExactNative(win, s, so, e, eo); - rng.deleteContents(); - }; - }; - - var cloneFragment = function (s, so, e, eo) { - return function (win, model) { - var rng = DomRange.toExactNative(win, s, so, e, eo); - var fragment = rng.cloneContents(); - return Element.fromDom(fragment); - }; - }; - - var rectangleAt = function (s, so, e, eo) { - return function (win, model) { - var rng = DomRange.toExactNative(win, s, so, e, eo); - var rects = rng.getClientRects(); - // ASSUMPTION: The first rectangle is the start of the selection - var bounds = rects.length > 0 ? rects[0] : rng.getBoundingClientRect(); - return bounds.width > 0 || bounds.height > 0 ? Option.some(bounds) : Option.none(); - }; - }; - - var clearSelection = function (win, model) { - win.getSelection().removeAllRanges(); - }; - - return { - get: get, - set: set, - selectElementContents: selectElementContents, - replace: replace, - replaceRange: replaceRange, - deleteRange: deleteRange, - cloneFragment: cloneFragment, - rectangleAt: rectangleAt, - clearSelection: clearSelection - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.fussy.api.WindowSelection', - - [ - 'ephox.fussy.api.SelectionRange', - 'ephox.fussy.api.Situ', - 'ephox.fussy.api.Supported', - 'ephox.fussy.search.Within', - 'ephox.fussy.wwwc.DomRange', - 'ephox.fussy.wwwc.WwwcModel', - 'ephox.sugar.api.Compare', - 'ephox.sugar.api.Element' - ], - - function (SelectionRange, Situ, Supported, Within, DomRange, WwwcModel, Compare, Element) { - var get = function (win) { - return Supported.run(win, WwwcModel.get); - }; - - var set = function (win, raw) { - Supported.run(win, WwwcModel.set(raw)); - }; - - var setExact = function (win, s, so, e, eo) { - var raw = SelectionRange.write( - Situ.on(s, so), - Situ.on(e, eo) - ); - set(win, raw); - }; - - var selectElementContents = function (win, element) { - Supported.run(win, WwwcModel.selectElementContents(element)); - }; - - var replace = function (win, elements) { - Supported.run(win, WwwcModel.replace(elements)); - }; - - var replaceRange = function (win, raw, elements) { - Supported.run(win, WwwcModel.replaceRange(raw, elements)); - }; - - var deleteRange = function (win, s, so, e, eo) { - Supported.run(win, WwwcModel.deleteRange(s, so, e, eo)); - }; - - var cloneFragment = function (win, s, so, e, eo) { - return Supported.run(win, WwwcModel.cloneFragment(s, so, e, eo)); - }; - - var isCollapsed = function (s, so, e, eo) { - return Compare.eq(s, e) && so === eo; - }; - - var rectangleAt = function (win, s, so, e, eo) { - return Supported.run(win, WwwcModel.rectangleAt(s, so, e, eo)); - }; - - var findWithin = function (win, raw, selector) { - // Note, we don't need the getSelection() model for this. - return Within.find(win, raw, selector); - }; - - var findWithinExact = function (win, s, so, e, eo, selector) { - var raw = SelectionRange.write( - Situ.on(s, so), - Situ.on(e, eo) - ); - // Note, we don't need the getSelection() model for this. - return findWithin(win, raw, selector); - }; - - var deriveExact = function (win, raw) { - var rng = DomRange.forceRange(win, raw); - return SelectionRange.general(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset); - }; - - var clearAll = function (win) { - Supported.run(win, WwwcModel.clearSelection); - }; - - return { - get: get, - set: set, - setExact: setExact, - selectElementContents: selectElementContents, - replace: replace, - replaceRange: replaceRange, - deleteRange: deleteRange, - isCollapsed: isCollapsed, - cloneFragment: cloneFragment, - rectangleAt: rectangleAt, - findWithin: findWithin, - findWithinExact: findWithinExact, - deriveExact: deriveExact, - clearAll: clearAll - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.api.HtmlPatterns', - - [ - - ], - - function () { - return { - validStyles: function () { - return /^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/; - }, - specialInline: function () { - return /^(font|em|strong|samp|acronym|cite|code|dfn|kbd|tt|b|i|u|s|sub|sup|ins|del|var|span)$/; - } - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.violin.StringMatch', - - [ - - ], - - function () { - var starts = function (value) { - return folder(function (s, p, c, e, a, n) { - return s(value); - }); - }; - - var pattern = function (regex) { - return folder(function (s, p, c, e, a, n) { - return p(regex); - }); - }; - - var contains = function (value) { - return folder(function (s, p, c, e, a, n) { - return c(value); - }); - }; - - var exact = function (value) { - return folder(function (s, p, c, e, a, n) { - return e(value); - }); - }; - - var all = function () { - return folder(function (s, p, c, e, a, n) { - return a(); - }); - }; - - var not = function (sm) { - return folder(function (s, p, c, e, a, n) { - return n(sm); - }); - }; - - var folder = function (fold) { - var matches = function (str) { - return fold(function (value) { - return str.toLowerCase().indexOf(value.toLowerCase()) === 0; - }, function (regex) { - return regex.test(str.toLowerCase()); - }, function (value) { - return str.toLowerCase().indexOf(value.toLowerCase()) >= 0; - }, function (value) { - return str.toLowerCase() === value.toLowerCase(); - }, function () { - return true; - }, function (other) { - return !other.matches(str); - }); - }; - - return { - fold: fold, - matches: matches - }; - }; - - var cata = function (subject, s, p, c, e, a, n) { - return subject.fold(s, p, c, e, a, n); - }; - - return { - starts: starts, - pattern: pattern, - contains: contains, - exact: exact, - all: all, - not: not, - cata: cata - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.api.RuleMatch', - - [ - 'ephox.peanut.Fun', - 'ephox.sugar.api.Node', - 'ephox.violin.StringMatch' - ], - - function (Fun, Node, StringMatch) { - var keyval = function (element, value, key, rule) { - var ruleName = rule.name; - var ruleCondition = rule.condition !== undefined ? rule.condition : Fun.constant(true); - var ruleValue = rule.value !== undefined ? rule.value : StringMatch.all(); - return ruleName.matches(key) && ruleValue.matches(value) && ruleCondition(element); - }; - - var name = function (element, rule) { - var tag = Node.name(element); - var ruleName = rule.name; - var ruleCondition = rule.condition !== undefined ? rule.condition : Fun.constant(true); - return ruleName.matches(tag) && ruleCondition(element); - }; - - return { - keyval: keyval, - name: name - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.cleanup.AttributeAccess', - - [ - 'ephox.compass.Arr', - 'ephox.compass.Obj', - 'ephox.peanut.Fun', - 'ephox.sugar.api.Attr' - ], - - function (Arr, Obj, Fun, Attr) { - var filter = function (element, predicate) { - var r = {}; - Arr.each(element.dom().attributes, function (a) { - if (!predicate(a.value, a.name)) r[a.name] = a.value; - }); - return r; - }; - - var update = function (element, names, keepers) { - Arr.each(names, function (name) { - Attr.remove(element, name); - }); - - Obj.each(keepers, function (v, k) { - Attr.set(element, k, v); - }); - }; - - var clobber = function (element, supported, _unsupported) { - var names = Arr.map(element.dom().attributes, function (attribute) { - return attribute.name; - }); - - if (Obj.size(supported) !== names.length) update(element, names, supported); - }; - - return { - filter: filter, - clobber: clobber, - // There are no hidden attributes that I know about. - scan: Fun.constant({}) - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.cleanup.StyleAccess', - - [ - 'ephox.compass.Arr', - 'ephox.compass.Obj', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Css', - 'ephox.violin.Strings' - ], - - function (Arr, Obj, Attr, Css, Strings) { - var separate = function (style) { - var css = {}; - var bits = style !== undefined && style !== null ? style.split(';') : []; - Arr.each(bits, function (bit) { - var parts = bit.split(':'); - if (parts.length === 2) { - css[Strings.trim(parts[0])] = Strings.trim(parts[1]); - } - }); - return css; - }; - - var get = function (element, property) { - return element.dom().style.getPropertyValue(property); - }; - - var filter = function (element, predicate) { - var r = {}; - Arr.each(element.dom().style, function (property) { - var value = get(element, property); - if (!predicate(value, property)) r[property] = value; - }); - return r; - }; - - var set = function (element, property, value) { - Css.set(element, property, value); - }; - - // Find the style for any special styles. - var scan = function (element, special, predicate) { - var style = element.dom().getAttribute('style'); - var css = separate(style); - - var before = {}; - Arr.each(special, function (property) { - var value = css[property]; - if (value !== undefined && !predicate(value, property)) before[property] = value; - }); - - return before; - }; - - var serialise = function (unsupported) { - var preserved = Obj.keys(unsupported); - return Arr.map(preserved, function (pre) { - return pre + ': ' + unsupported[pre]; - }).join('; '); - }; - - var clobber = function (element, supported, unsupported) { - Attr.set(element, 'style', ''); - - var numSupported = Obj.size(supported); - var numUnsupported = Obj.size(unsupported); - - if (numSupported === 0 && numUnsupported === 0) Attr.remove(element, 'style'); - else if (numSupported === 0) Attr.set(element, 'style', serialise(unsupported)); - else { - Obj.each(supported, function (v, k) { - set(element, k, v); - }); - - var base = Attr.get(element, 'style'); - var extra = numUnsupported > 0 ? serialise(unsupported) + '; ' : ''; - Attr.set(element, 'style', extra + base); - } - }; - - return { - filter: filter, - clobber: clobber, - scan: scan - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.cleanup.Cleaners', - - [ - 'ephox.pastiche.cleanup.AttributeAccess', - 'ephox.pastiche.cleanup.StyleAccess', - 'ephox.peanut.Fun', - 'ephox.sugar.api.Element' - ], - - function (AttributeAccess, StyleAccess, Fun, Element) { - var special = [ 'mso-list' ]; - - var style = function (element, predicate) { - var unsupported = StyleAccess.scan(element, special, predicate); - var supported = StyleAccess.filter(element, predicate); - StyleAccess.clobber(element, supported, unsupported); - }; - - var attribute = function (element, predicate) { - var keepers = AttributeAccess.filter(element, predicate); - AttributeAccess.clobber(element, keepers, {}); - }; - - var validateStyles = function (element) { - var supported = StyleAccess.filter(element, Fun.constant(false)); - StyleAccess.clobber(element, supported, {}); - }; - - var styleDom = function (dom, predicate) { - style(Element.fromDom(dom), predicate); - }; - - var attributeDom = function (dom, predicate) { - attribute(Element.fromDom(dom), predicate); - }; - - return { - style: style, - attribute: attribute, - styleDom: styleDom, - attributeDom: attributeDom, - validateStyles: validateStyles - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.Classes', - - [ - 'ephox.compass.Arr', - 'ephox.sugar.api.Class', - 'global!Array' - ], - - function (Arr, Class, Array) { - /* - * ClassList is IE10 minimum: - * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList - */ - - var add = function (element, classes) { - Arr.each(classes, function (x) { - Class.add(element, x); - }); - }; - - var remove = function (element, classes) { - Arr.each(classes, function (x) { - Class.remove(element, x); - }); - }; - - var toggle = function (element, classes) { - Arr.each(classes, function (x) { - Class.toggle(element, x); - }); - }; - - var hasAll = function (element, classes) { - return Arr.forall(classes, function (clazz) { - return Class.has(element, clazz); - }); - }; - - var hasAny = function (element, classes) { - return Arr.exists(classes, function (clazz) { - return Class.has(element, clazz); - }); - }; - - var get = function (element) { - var classList = element.dom().classList; - var r = new Array(classList.length); - for (var i = 0; i < classList.length; i++) { - r[i] = classList.item(i); - } - return r; - }; - - // set deleted, risks bad performance. Be deterministic. - - return { - add: add, - remove: remove, - toggle: toggle, - hasAll: hasAll, - hasAny: hasAny, - get: get - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.Pipeless', - - [ - 'ephox.compass.Arr', - 'ephox.highway.Merger', - 'ephox.pastiche.api.RuleMatch', - 'ephox.pastiche.cleanup.Cleaners', - 'ephox.peanut.Fun', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Class', - 'ephox.sugar.api.Classes', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.SelectorFilter' - ], - - function (Arr, Merger, RuleMatch, Cleaners, Fun, Attr, Class, Classes, Remove, SelectorFilter) { - var cleaner = function (type, rules, element) { - // Use Cleaners.style or Cleaners.attribute as "type". - type(element, function (value, key) { - return Arr.exists(rules, function (rule) { - return RuleMatch.keyval(element, value, key, rule); - }); - }); - }; - - var remover = function (container, strat) { - var strategy = Merger.merge({ styles: [], attributes: [], classes: [], tags: [] }, strat); - - var elements = SelectorFilter.descendants(container, '*'); - Arr.each(elements, function (element) { - cleaner(Cleaners.style, strategy.styles, element); - cleaner(Cleaners.attribute, strategy.attributes, element); - - Arr.each(strategy.classes, function (rule) { - var actual = Attr.has(element, 'class') ? Classes.get(element) : []; - Arr.each(actual, function (act) { - if (rule.name.matches(act)) Class.remove(element, act); - }); - }); - }); - - // Now, remove the tags. - var postElements = SelectorFilter.descendants(container, '*'); - Arr.each(postElements, function (element) { - var matching = Arr.exists(strategy.tags, Fun.curry(RuleMatch.name, element)); - if (matching) Remove.remove(element); - }); - }; - - var unwrapper = function (container, strat) { - var strategy = Merger.merge({ tags: [] }, strat); - - var elements = SelectorFilter.descendants(container, '*'); - Arr.each(elements, function (element) { - var matching = Arr.exists(strategy.tags, Fun.curry(RuleMatch.name, element)); - if (matching) Remove.unwrap(element); - }); - }; - - var transformer = function (container, strat) { - var strategy = Merger.merge({ tags: [] }, strat); - - var elements = SelectorFilter.descendants(container, '*'); - Arr.each(elements, function (element) { - var rule = Arr.find(strategy.tags, Fun.curry(RuleMatch.name, element)); - if (rule !== undefined && rule !== null) rule.mutate(element); - }); - }; - - var validator = function (container) { - var elements = SelectorFilter.descendants(container, '*'); - Arr.each(elements, function (element) { - Cleaners.validateStyles(element); - }); - }; - - return { - remover: remover, - unwrapper: unwrapper, - transformer: transformer, - validator: validator - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.Token', - - [ - 'ephox.compass.Obj', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.Element' - ], - - function (Obj, Css, Element) { - var START_ELEMENT_TYPE = 'startElement'; - var END_ELEMENT_TYPE = 'endElement'; - var TEXT_TYPE = 'text'; - var COMMENT_TYPE = 'comment'; - - var token = function(node, endNode, syntheticStyles) { - var tokenType; - var tagName; - var tokenText; - - var element = Element.fromDom(node); - - switch (node.nodeType) { - case 1: - if (endNode) { - tokenType = END_ELEMENT_TYPE; - } else { - tokenType = START_ELEMENT_TYPE; - - Css.setAll(element, syntheticStyles || {}); - } - if (node.scopeName !== "HTML" && node.scopeName && node.tagName && node.tagName.indexOf(':') <= 0) { - tagName = (node.scopeName + ":" + node.tagName).toUpperCase(); - } else { - tagName = node.tagName; - } - - break; - case 3: - tokenType = TEXT_TYPE; - tokenText = node.nodeValue; - break; - case 8: - tokenType = COMMENT_TYPE; - tokenText = node.nodeValue; - break; - default: - console.log("WARNING: Unsupported node type encountered: " + node.nodeType); - break; - } - - var getNode = function() { - return node; - }; - - var tag = function() { - return tagName; - }; - - var type = function() { - return tokenType; - }; - - var text = function() { - return tokenText; - }; - - return { - getNode: getNode, - tag: tag, - type: type, - text: text - }; - }; - - var createStartElement = function(tag, attributes, styles, document) { - var node = document.createElement(tag), css = ""; - - Obj.each(attributes, function(value, name) { - node.setAttribute(name, value); - }); - - return token(node, false, styles); - }; - - var createEndElement = function(tag, document) { - return token(document.createElement(tag), true); - }; - - var createComment = function(text, document) { - return token(document.createComment(text), false); - }; - - var createText = function(text, document) { - return token(document.createTextNode(text)); - }; - - var FINISHED = createEndElement('HTML', window.document); - - return { - START_ELEMENT_TYPE: START_ELEMENT_TYPE, - END_ELEMENT_TYPE: END_ELEMENT_TYPE, - TEXT_TYPE: TEXT_TYPE, - COMMENT_TYPE: COMMENT_TYPE, - FINISHED: FINISHED, - token: token, - createStartElement: createStartElement, - createEndElement: createEndElement, - createComment: createComment, - createText: createText - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.Serialiser', - - [ - 'ephox.pastiche.engine.Token' - ], - - function (Token) { - var create = function (doc) { - var currentNode = doc.createDocumentFragment(); - var initialNode = currentNode; - - var push = function(node) { - append(node); - currentNode = node; - }; - - var pop = function() { - currentNode = currentNode.parentNode; - }; - - var append = function(node) { - currentNode.appendChild(node); - }; - - var receive = function(token) { - var startElement = function(token) { - var node = token.getNode().cloneNode(false); - push(node); - }; - - var text = function(token, serializer) { - // IE7 will crash if you clone a text node that's a URL. - // IE8 throws an invalid argument error. - // So while cloning may be faster, we have to create a new node here. - var node = doc.createTextNode(token.text()); - append(node); - }; - - switch (token.type()) { - case Token.START_ELEMENT_TYPE: - startElement(token); - break; - case Token.TEXT_TYPE: - text(token); - break; - case Token.END_ELEMENT_TYPE: - pop(); - break; - case Token.COMMENT_TYPE: - // Ignore. - break; - default: - throw { message: 'Unsupported token type: ' + token.type() }; - } - }; - - return { - dom: initialNode, - receive: receive, - label: 'SERIALISER' - }; - }; - - return { - create: create - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.Tokeniser', - - [ - 'ephox.pastiche.engine.Token' - ], - - function (Token) { - var tokenise = function(html, document) { - var container; - document = document || window.document; - container = document.createElement('div'); - document.body.appendChild(container); - container.style.position = 'absolute'; - container.style.left = '-10000px'; - container.innerHTML = html; - - nextNode = container.firstChild || Token.FINISHED; - - var nodeStack = []; - endNode = false; - - var getTokenForNode = function(node, endTag) { - if (node === Token.FINISHED) { - return node; - } else if (node) { - return Token.token(node, endTag); - } else { - return undefined; - } - }; - - var next = function() { - var currentNode = nextNode; - var currentEndNode = endNode; - if (!endNode && nextNode.firstChild) { - nodeStack.push(nextNode); - nextNode = nextNode.firstChild; - } else if (!endNode && nextNode.nodeType === 1) { - // Empty element. - endNode = true; - } else if (nextNode.nextSibling) { - nextNode = nextNode.nextSibling; - endNode = false; - } else { - nextNode = nodeStack.pop(); - endNode = true; - } - - if (currentNode !== Token.FINISHED && !nextNode) { - document.body.removeChild(container); - nextNode = Token.FINISHED; - } - - return getTokenForNode(currentNode, currentEndNode); - }; - - var hasNext = function() { - return nextNode !== undefined; - }; - - return { - hasNext: hasNext, - next: next - }; - }; - - return { - tokenise: tokenise - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.Pipeline', - - [ - 'ephox.pastiche.engine.Serialiser', - 'ephox.pastiche.engine.Tokeniser' - ], - - function (Serialiser, Tokeniser) { - var build = function(doc, filters, sink) { - var i, filter = sink; - for (i = filters.length - 1; i >= 0; i--) { - //This is calling the function defined by Filter.createFilter(). - //The best description I can come up with is "function composition using CPS". - //Filters are run in reverse order to the loop, which is reversed so the arrays below define the order. - //And then the sink comes last (which means it's injected on the first pass of the loop). - // filter = filters[i](doc, filter); - - // TEMPORARY: - filter = filters[i](filter, {}, doc); - } - return filter; - }; - - var run = function(doc, content, filters) { - var sink = Serialiser.create(doc); - var tokeniser = Tokeniser.tokenise(content, doc); - var pipeline = build(doc, filters, sink); - while (tokeniser.hasNext()) { - var token = tokeniser.next(); - pipeline.receive(token); - } - return sink.dom; - }; - - return { - build: build, - run: run - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.api.HybridAction', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.engine.Pipeless', - 'ephox.pastiche.engine.Pipeline', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.Traverse' - ], - - function (Arr, Pipeless, Pipeline, Element, Html, Remove, Traverse) { - var removal = function (spec) { - return function (container) { - Pipeless.remover(container, spec); - }; - }; - - var unwrapper = function (spec) { - return function (container) { - Pipeless.unwrapper(container, spec); - }; - }; - - var transformer = function (spec) { - return function (container) { - Pipeless.transformer(container, spec); - }; - }; - - var validate = function () { - return function (container) { - Pipeless.validator(container); - }; - }; - - var pipeline = function (pipes) { - return function (container) { - var html = Html.get(container); - var doc = Traverse.owner(container); - var sink = Pipeline.run(doc.dom(), html, pipes); - Remove.empty(container); - container.dom().appendChild(sink); - }; - }; - - var go = function (doc, input, actions) { - var container = Element.fromTag('div', doc.dom()); - container.dom().innerHTML = input; - Arr.each(actions, function (action) { - action(container); - }); - return Html.get(container); - }; - - var isWordContent = function (content) { - return content.indexOf('') >= 0 || // IE, Safari, Opera - content.indexOf('p.MsoNormal, li.MsoNormal, div.MsoNormal') >= 0 || // Firefox Mac - content.indexOf('MsoListParagraphCxSpFirst') >= 0 || // Windows list only selection - content.indexOf('') >= 0; // Firefox Windows - }; - - return { - removal: removal, - unwrapper: unwrapper, - transformer: transformer, - validate: validate, - pipeline: pipeline, - isWordContent: isWordContent, - go: go - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.api.RuleConditions', - - [ - 'ephox.compass.Arr', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Node', - 'ephox.sugar.api.PredicateExists' - ], - - function (Arr, Attr, Html, Node, PredicateExists) { - var isNotImage = function (elem) { - return Node.name(elem) !== 'img'; - }; - - var isImportantSpan = function (elem) { - var attrs = elem.dom().attributes; - var hasAttrs = attrs !== undefined && attrs !== null && attrs.length > 0; - return Node.name(elem) === 'span' ? hasAttrs : true; - }; - - var hasContent = function (elem) { - if (!hasNoAttributes(elem)) return true; - else { - return isImportantSpan(elem) && PredicateExists.descendant(elem, function (e) { - var hasAttributes = !hasNoAttributes(e); - var isContentTag = !Arr.contains([ - 'font', 'em', 'strong', 'samp', 'acronym', 'cite', 'code', 'dfn', 'kbd', 'tt', 'b', 'i', - 'u', 's', 'sub', 'sup', 'ins', 'del', 'var', 'span' - ], Node.name(e)); - - return Node.isText(e) || hasAttributes || isContentTag; - }); - } - }; - - var isList = function (elem) { - return Node.name(elem) === 'ol' || Node.name(elem) === 'ul'; - }; - - var isLocal = function (element) { - var src = Attr.get(element, 'src'); - return (/^file:/).test(src); - }; - - var hasNoAttributes = function (elem) { - if (elem.dom().attributes === undefined || elem.dom().attributes === null) return true; - return elem.dom().attributes.length === 0 || (elem.dom().attributes.length === 1 && elem.dom().attributes[0].name === 'style'); - }; - - var isEmpty = function (elem) { - // Note, this means that things with zero width cursors are NOT considered empty - return Html.get(elem).length === 0; - }; - - return { - isNotImage: isNotImage, - hasContent: hasContent, - isList: isList, - isLocal: isLocal, - hasNoAttributes: hasNoAttributes, - isEmpty: isEmpty - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.api.RuleMutations', - - [ - 'ephox.compass.Arr', - 'ephox.compass.Obj', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.InsertAll', - 'ephox.sugar.api.Node', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.Traverse' - ], - - function (Arr, Obj, Attr, Css, Element, Html, Insert, InsertAll, Node, Remove, Traverse) { - var changeTag = function (tag, element) { - // We cannot use replication because it uses innerHTML rather than setting the children. - // Which means that any further transformations done to the children are not represented - // in the final output. - var replica = Element.fromTag(tag); - Insert.before(element, replica); - - var attributes = element.dom().attributes; - Arr.each(attributes, function (attr) { - replica.dom().setAttribute(attr.name, attr.value); - }); - - var children = Traverse.children(element); - InsertAll.append(replica, children); - Remove.remove(element); - return replica; - }; - - // Adds a
tag to any

tags that are empty - var addBrTag = function (element) { - if (Html.get(element).length === 0) { - Insert.append(element, Element.fromTag('br')); - } - }; - - var properlyNest = function (element) { - Traverse.parent(element).each(function (parent) { - var tag = Node.name(parent); - if (Arr.contains([ 'ol', 'ul' ], tag)) { - var li = Element.fromTag('li'); - Css.set(li, 'list-style-type', 'none'); - Insert.wrap(element, li); - } - }); - }; - - var fontToSpan = function (element) { - var span = changeTag('span', element); - var conversions = { - face: 'font-family', - size: 'font-size', - color: 'font-color' - }; - - var values = { - 'font-size': { - '1': '8pt', - '2': '10pt', - '3': '12pt', - '4': '14pt', - '5': '18pt', - '6': '24pt', - '7': '36pt' - } - }; - - Obj.each(conversions, function (style, attribute) { - if (Attr.has(span, attribute)) { - var value = Attr.get(span, attribute); - var cssValue = values[style] !== undefined && values[style][value] !== undefined ? values[style][value] : value; - Css.set(span, style, cssValue); - Attr.remove(span, attribute); - } - }); - }; - - return { - changeTag: changeTag, - addBrTag: addBrTag, - properlyNest: properlyNest, - fontToSpan: fontToSpan - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.Filter', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.engine.Token' - ], - - function (Arr, Token) { - var createFilter = function(actualReceiver, clientReset, label) { - var filter = function(nextFilter, settings, document, _logger) { - var logger = _logger !== undefined ? _logger : []; - - var deferred; - var receivedTokens, emittedTokens, inTransaction = false; - - var resetState = function() { - if (clientReset) clientReset(api); - inTransaction = false; - receivedTokens = []; - emittedTokens = []; - }; - - var emitTokens = function(tokens) { - Arr.each(tokens, function(tok) { - nextFilter.receive(tok); - }); - }; - - var emit = function(token) { - if (inTransaction) { - emittedTokens.push(token); - } else { - nextFilter.receive(token); - } - }; - - var receive = function(token) { - if (clientReset) receivedTokens.push(token); - actualReceiver(api, token); - if (token === Token.FINISHED) { - commit(); - } - }; - - var startTransaction = function() { - inTransaction = true; - }; - - var rollback = function() { - emitTokens(receivedTokens); - resetState(); - }; - - var commit = function() { - emitDeferred(); - emitTokens(emittedTokens); - resetState(); - }; - - var defer = function(token) { - deferred = deferred || []; - deferred.push(token); - }; - - var hasDeferred = function() { - return deferred && deferred.length > 0; - }; - - var emitDeferred = function() { - Arr.each(deferred || [], function(token) { - emit(token); - }); - dropDeferred(); - }; - - var dropDeferred = function() { - deferred = []; - }; - - var api = { - document: document || window.document, - settings: settings || {}, - emit: emit, - receive: receive, - startTransaction: startTransaction, - rollback: rollback, - commit: commit, - defer: defer, - hasDeferred: hasDeferred, - emitDeferred: emitDeferred, - dropDeferred: dropDeferred, - label: label - }; - - resetState(); - return api; - }; - return filter; - }; - - return { - createFilter: createFilter - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.engine.TokenUtil', - - [ - 'ephox.pastiche.cleanup.StyleAccess', - 'ephox.pastiche.engine.Token', - 'ephox.peanut.Fun', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.Element' - ], - - function (StyleAccess, Token, Fun, Attr, Css, Element) { - var getAttribute = function (token, property) { - var element = Element.fromDom(token.getNode()); - return Attr.get(element, property); - }; - - var getStyle = function (token, property) { - var element = Element.fromDom(token.getNode()); - return Css.get(element, property); - }; - - var isWhitespace = function (token) { - return token.type() === Token.TEXT_TYPE && /^[\s\u00A0]*$/.test(token.text()); - }; - - var getMsoList = function (token) { - var element = Element.fromDom(token.getNode()); - var styles = StyleAccess.scan(element, [ 'mso-list' ], Fun.constant(false)); - return styles['mso-list']; - }; - - return { - getAttribute: getAttribute, - getStyle: getStyle, - isWhitespace: isWhitespace, - getMsoList: getMsoList - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.detect.ListSymbols', - - [ - 'ephox.compass.Arr', - 'ephox.highway.Merger' - ], - - function (Arr, Merger) { - - var orderedListTypes = [ - { regex: /^\(?[dc][\.\)]$/, type: { tag: 'OL', type: 'lower-alpha' } }, - { regex: /^\(?[DC][\.\)]$/, type: { tag: 'OL', type: 'upper-alpha' } }, - { regex: /^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/, type: { tag: 'OL', type: 'upper-roman' } }, - { regex: /^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/, type: { tag: 'OL', type: 'lower-roman' } }, - { regex: /^\(?[0-9]+[\.\)]$/, type: { tag: 'OL' } }, - { regex: /^([0-9]+\.)*[0-9]+\.?$/, type: { tag: 'OL', variant: 'outline' } }, - { regex: /^\(?[a-z]+[\.\)]$/, type: { tag: 'OL', type: 'lower-alpha' } }, - { regex: /^\(?[A-Z]+[\.\)]$/, type: { tag: 'OL', type: 'upper-alpha' } } - ]; - - var ulChars = { - '\u2022': { tag: 'UL', type: 'disc' }, - '\u00B7': { tag: 'UL', type: 'disc' }, - '\u00A7': { tag: 'UL', type: 'square' } - }; - - var ulNonSymbolChars = { - 'o': { tag: 'UL', type: 'circle' }, - '-': { tag: 'UL', type: 'disc' }, - '\u25CF': { tag: 'UL', type: 'disc' }, - '�': { tag: 'UL', type: 'circle' } - }; - - var getVariant = function (type, text) { - if (type.variant !== undefined) return type.variant; - else if (text.charAt(0) === '(') return '()'; - else if (text.charAt(text.length - 1) === ')') return ')'; - else return '.'; - }; - - var getStart = function (text) { - var number = parseInt(text, 10); - return isNaN(number) ? { } : { start: number }; - }; - - var match = function (text, inSymbol) { - var nonSymbols = ulNonSymbolChars[text] ? [ ulNonSymbolChars[text] ] : []; - var symbols = inSymbol && ulChars[text] ? [ ulChars[text] ] : inSymbol ? [{ tag: 'UL', variant: text }] : []; - var ordered = Arr.bind(orderedListTypes, function (o) { - return o.regex.test(text) ? [ Merger.merge(o.type, getStart(text), { - variant: getVariant(o.type, text) - })] : []; - }); - - var result = nonSymbols.concat(symbols).concat(ordered); - return Arr.map(result, function (x) { - return x.variant !== undefined ? x : Merger.merge(x, { - variant: text - }); - }); - }; - - return { - match: match - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.detect.ListGuess', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.list.detect.ListSymbols', - 'ephox.perhaps.Option', - 'ephox.violin.Strings' - ], - - function (Arr, ListSymbols, Option, Strings) { - - var guess = function(bulletInfo, preferredType) { - var text = bulletInfo ? Strings.trim(bulletInfo.text) : ''; - var symbolFont = bulletInfo ? !!bulletInfo.symbolFont : false; - var candidates = ListSymbols.match(text, symbolFont); - var preferred = Arr.find(candidates, function (c) { - // The original code only ran preferred types for ordered lists. I have - // no idea whether this is a condition that we want preserved, but one - // of the QUnit tests implicitly stated it is. - return c.tag === 'UL' || (preferredType && eqListType(c, preferredType, true)); - }); - return preferred !== undefined ? Option.some(preferred) : - candidates.length > 0 ? Option.some(candidates[0]) : Option.none(); - }; - - var eqListType = function(t1, t2, ignoreVariant) { - return t1 === t2 || - (t1 && t2 && t1.tag === t2.tag && t1.type === t2.type && - (ignoreVariant || t1.variant === t2.variant)); - }; - - return { - guess: guess, - eqListType: eqListType - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.detect.ListTypes', - - [ - 'ephox.pastiche.engine.Token', - 'ephox.pastiche.engine.TokenUtil', - 'ephox.pastiche.list.detect.ListGuess' - ], - - function (Token, TokenUtil, ListGuess) { - - var guess = function(bulletInfo, preferredType, originalToken) { - var candidate = ListGuess.guess(bulletInfo, preferredType); - return candidate.fold(function () { - return null; - }, function (c) { - if (c.tag === 'OL' && originalToken && (originalToken.tag() !== 'P' || /^MsoHeading/.test(TokenUtil.getAttribute(originalToken, 'class')))) { - // Don't convert numbered headings but do convert bulleted headings. - listType = null; - } else { - return c; - } - }); - }; - - var eqListType = ListGuess.eqListType; - - var checkFont = function(token, symbolFont) { - if (token.type() == Token.START_ELEMENT_TYPE) { - font = TokenUtil.getStyle(token, 'font-family'); - if (font) { - symbolFont = (font === 'Wingdings' || font === 'Symbol'); - } else if (/^(P|H[1-6]|DIV)$/.test(token.tag())) { - symbolFont = false; - } - } - return symbolFont; - }; - - return { - guess: guess, - eqListType: eqListType, - checkFont: checkFont - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Microsoft', - - [ - 'ephox.pastiche.engine.Token', - 'ephox.pastiche.engine.TokenUtil' - ], - - function (Token, TokenUtil) { - var isList = function (state, token) { - var style = TokenUtil.getMsoList(token); - return style && style !== 'skip'; - }; - - var isIgnore = function (state, token) { - return token.type() == Token.START_ELEMENT_TYPE && TokenUtil.getMsoList(token) === 'Ignore'; - }; - - return { - isList: isList, - isIgnore: isIgnore - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Tags', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.engine.Token', - 'ephox.violin.Strings' - ], - - function (Arr, Token, Strings) { - var isStart = function (state, token) { - return token.type() === Token.START_ELEMENT_TYPE; - }; - - var isEnd = function (state, token) { - return token.type() === Token.END_ELEMENT_TYPE; - }; - - var isTag = function (tag) { - return function (state, token) { - return token.tag() === tag; - }; - }; - - var isWhitespace = function (tag) { - return function (state, token) { - return isTag(tag)(state, token) && Strings.trim(token.getNode().textContent) === ''; - }; - }; - - var isStartOf = function (tag) { - return function (state, token) { - return isStart(state, token) && token.tag() === tag; - }; - }; - - var isEndOf = function (tag) { - return function (state, token) { - return isEnd(state, token) && token.tag() === tag; - }; - }; - - var isStartAny = function (tags) { - return function (state, token) { - return isStart(state, token) && Arr.contains(tags, token.tag()); - }; - }; - - var isEndAny = function (tags) { - return function (state, token, tags) { - return isEnd(state, token) && Arr.contains(tags, token.tag()); - }; - }; - - return { - isStart: isStart, - isEnd: isEnd, - isTag: isTag, - isStartOf: isStartOf, - isEndOf: isEndOf, - isStartAny: isStartAny, - isEndAny: isEndAny, - isWhitespace: isWhitespace - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Paragraphs', - - [ - 'ephox.pastiche.inspect.Microsoft', - 'ephox.pastiche.inspect.Tags' - ], - - function (Microsoft, Tags) { - // MOVE ME. - var isNormal = function (state, token) { - return !state.skippedPara.get() && Tags.isStart(state, token, 'P') && !Microsoft.isList(state, token); - }; - - return { - isNormal: isNormal - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Texts', - - [ - 'ephox.pastiche.engine.Token', - 'ephox.pastiche.engine.TokenUtil', - 'ephox.violin.Strings' - ], - - function (Token, TokenUtil, Strings) { - var isWhitespace = function (state, token) { - return is(state, token) && TokenUtil.isWhitespace(token); - }; - - var is = function (state, token) { - return token.type() === Token.TEXT_TYPE; - }; - - var eq = function (value) { - return function (state, token) { - return is(state, token) && token.text() === value; - }; - }; - - var matches = function (value) { - return function (state, token) { - return is(state, token) && value.test(token.text()); - }; - }; - - // CHECK: Is this equivalent to isWhitespace? - var isBlank = function (state, token) { - return is(state, token) && Strings.trim(token.text()) === ''; - }; - - return { - isWhitespace: isWhitespace, - is: is, - isBlank: isBlank, - eq: eq, - matches: matches - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.Handler', - - [ - 'ephox.peanut.Fun' - ], - - function (Fun) { - return function (pred, action, label) { - return { - pred: pred, - action: action, - label: Fun.constant(label) - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.Handlers', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option' - ], - - function (Arr, Fun, Option) { - var logger = function (label, action) { - return function (api, state, token) { - // console.log('LOGGER: ', label, token.getNode().cloneNode(false)); - return action(api, state, token); - }; - }; - - return function (name, handlers, fallback) { - var logFallback = logger(name + ' :: FALLBACK --- ', fallback); - - var r = function (api, state, token) { - // console.log('token: ', token.getNode().cloneNode(true)); - var match = Option.from(Arr.find(handlers, function (x) { - return x.pred(state, token); - })); - - var action = match.fold(Fun.constant(logFallback), function (m) { - var label = m.label(); - return label === undefined ? m.action : logger(name + ' :: ' + label, m.action); - }); - action(api, state, token); - }; - - r.toString = function () { return 'Handlers for ' + name; }; - return r; - }; - - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.state.Transitions', - - [ - ], - - function () { - var next = function (state, listState) { - if (state === undefined || listState === undefined) { - console.trace(); - throw 'brick'; - } - state.nextFilter.set(listState); - }; - - var setNext = function (listState) { - return function (api, state, token) { - next(state, listState); - }; - }; - - var go = function (api, state, token) { - var nextFilter = state.nextFilter.get(); - nextFilter(api, state, token); - }; - - var jump = function (listState) { - return function (api, state, token) { - next(state, listState); - go(api, state, token); - }; - }; - - var isNext = function (state, listState) { - return state.nextFilter.get() === listState; - }; - - return { - next: next, - go: go, - jump: jump, - isNext: isNext, - setNext: setNext - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.AfterListState', - - [ - 'ephox.pastiche.inspect.Paragraphs', - 'ephox.pastiche.inspect.Texts', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Transitions' - ], - - function (Paragraphs, Texts, Handler, Handlers, Transitions) { - var run = function (skipEmptyParaState, noListState) { - - var blankAction = function (api, state, token) { - api.defer(token); - }; - - var normalParaAction = function (api, state, token) { - state.openedTag.set(token); - api.defer(token); - Transitions.next(state, skipEmptyParaState); - }; - - var fallback = function (api, state, token) { - noListState(api, state, token); - }; - - return Handlers('AfterListState', [ - Handler(Texts.isBlank, blankAction, 'blank text'), - Handler(Paragraphs.isNormal, normalParaAction, 'normal paragraph') - ], fallback); - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.States', - - [ - 'ephox.pastiche.engine.Token' - ], - - function (Token) { - // MOVE ME? - var isCloser = function (state, token) { - return token.type() === Token.END_ELEMENT_TYPE && state.originalToken.get() && token.tag() === state.originalToken.get().tag(); - }; - - return { - isCloser: isCloser - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.AfterNoBulletListState', - - [ - 'ephox.pastiche.inspect.States', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Transitions' - ], - - function (States, Handler, Handlers, Transitions) { - var run = function (afterListState) { - - var action = function (api, state, token) { - Transitions.next(state, afterListState); - /* - I think that this should be 0, but it breaks qUnit test cases in powerpaste if it isn't -1. Probably - need to look into it in more detail. The level 0 check in ListModel in the emitter should - take care of it anyway. - */ - state.styleLevelAdjust.set(-1); - api.emit(token); - }; - - var fallback = function (api, state, token) { - api.emit(token); - }; - - return Handlers('AfterNoBullet', [ - Handler(States.isCloser, action, ' closing open tag') - ], fallback); - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Images', - - [ - 'ephox.pastiche.inspect.Tags' - ], - - function (Tags) { - - var isEnd = Tags.isEndOf('IMG'); - var isStart = Tags.isStartOf('IMG'); - - return { - isStart: isStart, - isEnd: isEnd - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Markers', - - [ - 'ephox.pastiche.engine.Token' - ], - - function (Token) { - - var is = function (state, token) { - return token.tag() === 'A' || token.tag() === 'SPAN'; - }; - - var isStart = function (state, token) { - return token.type() === Token.START_ELEMENT_TYPE && is(state, token); - }; - - var isEnd = function (state, token) { - return token.type() === Token.END_ELEMENT_TYPE && is(state, token); - }; - - return { - isStart: isStart, - isEnd: isEnd, - is: is - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.state.Spans', - - [ - 'ephox.pastiche.list.state.Transitions' - ], - - function (Transitions) { - var deferAndPop = function (api, state, token) { - api.defer(token); - pop(api, state, token); - }; - - var deferAndPush = function (api, state, token) { - api.defer(token); - push(api, state, token); - }; - - var push = function (api, state, token) { - state.spanCount.get().push(token); - }; - - var pop = function (api, state, token) { - state.spanCount.get().pop(); - }; - - var pushThen = function (listState) { - return function (api, state, token) { - push(api, state, token); - Transitions.next(state, listState); - }; - }; - - var popThen = function (listState) { - return function (api, state, token) { - pop(api, state, token); - Transitions.next(state, listState); - }; - }; - - return { - deferAndPush: deferAndPush, - deferAndPop: deferAndPop, - push: push, - pop: pop, - pushThen: pushThen, - popThen: popThen - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.BeforeSpacerState', - - [ - 'ephox.pastiche.inspect.Images', - 'ephox.pastiche.inspect.Markers', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Spans', - 'ephox.peanut.Fun' - ], - - function (Images, Markers, Handler, Handlers, Spans, Fun) { - var run = function (spacerState, closeSpansState, unexpectedToken) { - - var fallback = function (api, state, token) { - unexpectedToken(api, token); - }; - - return Handlers('BeforeSpacer', [ - Handler(Markers.isStart, Spans.pushThen(spacerState), 'start marker'), - Handler(Markers.isEnd, Spans.popThen(closeSpansState), 'end marker'), - Handler(Images.isEnd, Fun.noop, 'end image') - ], fallback); - - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Comments', - - [ - 'ephox.pastiche.engine.Token' - ], - - function (Token) { - - var is = function (state, token) { - return token.type() === Token.COMMENT_TYPE; - }; - - var isNotEndIf = function (state, token) { - return is(state, token) && token.text() !== '[endif]'; - }; - - var isEndIf = function (state, token) { - return is(state, token) && token.text() === '[endif]'; - }; - - var isListSupport = function (state, token) { - return is(state, token) && token.text() === '[if !supportLists]'; - }; - - return { - is: is, - isNotEndIf: isNotEndIf, - isEndIf: isEndIf, - isListSupport: isListSupport - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Logic', - - [ - 'ephox.compass.Arr' - ], - - function (Arr) { - var any = function (conditions) { - return function (state, token) { - return Arr.exists(conditions, function (c) { - return c(state, token); - }); - }; - }; - - var all = function (conditions) { - return function (state, token) { - return Arr.forall(conditions, function (c) { - return c(state, token); - }); - }; - }; - - return { - any: any, - all: all - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.CloseSpansState', - - [ - 'ephox.pastiche.inspect.Comments', - 'ephox.pastiche.inspect.Logic', - 'ephox.pastiche.inspect.Markers', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.inspect.Texts', - 'ephox.pastiche.list.detect.ListTypes', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Spans', - 'ephox.pastiche.list.state.Transitions', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option', - 'ephox.perhaps.Result' - ], - - function (Comments, Logic, Markers, Tags, Texts, ListTypes, Handler, Handlers, Spans, Transitions, Fun, Option, Result) { - var run = function (itemContentState, unexpectedToken) { - - var getListType = function (state) { - var currentType = state.emitter.getCurrentListType(); - var currentLevel = state.emitter.getCurrentLevel(); - // FIX: Don't coerce types. - var preferred = currentLevel == state.itemLevel.get() ? currentType : null; - return Option.from(ListTypes.guess(state.bulletInfo.get(), preferred, state.originalToken.get())); - }; - - var openItem = function (api, state, token) { - state.emitter.openItem(state.itemLevel.get(), state.originalToken.get(), state.listType.get(), state.skippedPara.get()); - api.emitDeferred(); - while (state.spanCount.get().length > 0) { - api.emit(state.spanCount.get().shift()); - } - }; - - var updateState = function (state, token) { - Transitions.next(state, itemContentState); - if (state.commentMode.get()) { - var indent = state.indentGuesser.guessIndentLevel(token, state.originalToken.get(), state.styles, state.bulletInfo.get()); - state.itemLevel.set(indent); - } - }; - - var tryItem = function (api, state, token) { - var listType = getListType(state); - return listType.fold(function () { - state.listType.set(null); - return Result.error("Unknown list type: " + state.bulletInfo.get().text + " Symbol font? " + state.bulletInfo.get().symbolFont); - }, function (type) { - state.listType.set(type); - return Result.value(openItem); - }); - }; - - var updateAndEmit = function (api, state, token) { - updateState(state, token); - var emitter = tryItem(api, state, token); - emitter.fold(function (msg) { - console.log(msg); - api.rollback(); - }, function (x) { - x(api, state, token); - api.emit(token); - }); - }; - - var skipComment = function (api, state, token) { - updateState(state, token); - var emitter = tryItem(api, state, token); - emitter.fold(function (msg) { - console.log(msg); - api.rollback(); - }, function (x) { - x(api, state, token); - }); - }; - - var handlers = [ - Handler(Logic.any([ Texts.is, Tags.isStart ]), updateAndEmit, 'text or start tag'), - Handler(Comments.isNotEndIf, updateAndEmit, 'non-endif comment'), - Handler(Comments.isEndIf, skipComment, 'endif comment'), - Handler(Markers.isEnd, Spans.pop, 'end marker'), - Handler(Tags.isEnd, Fun.noop, 'end tag') - ]; - - return Handlers('CloseSpans', handlers, function (api, state, token) { - unexpectedToken(api, token); - }); - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.FindListTypeState', - - [ - 'ephox.pastiche.inspect.Images', - 'ephox.pastiche.inspect.Markers', - 'ephox.pastiche.inspect.Texts', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Spans', - 'ephox.pastiche.list.state.Transitions', - 'ephox.peanut.Fun' - ], - - function (Images, Markers, Texts, Handler, Handlers, Spans, Transitions, Fun) { - var run = function (beforeSpacerState, unexpectedToken) { - var action = function (bullets) { - return function (api, state, token) { - Transitions.next(state, beforeSpacerState); - state.bulletInfo.set(bullets(state, token)); - }; - }; - - var textAction = action(function (state, token) { - return { - text: token.text(), - symbolFont: state.symbolFont.get() - }; - }); - - var imageAction = action(function (state, token) { - // Custom list image type. We can't access the image so use a normal bullet instead. - // EditLive! may want this to come through as a CSS reference. - return { - text: '\u2202', - symbolFont: true - }; - }); - - var fallback = function (api, state, token) { - unexpectedToken(api, token); - }; - - return Handlers('FindListType', [ - Handler(Texts.isWhitespace, Fun.noop, 'text is whitespace'), - Handler(Texts.is, textAction, 'text'), - Handler(Markers.isStart, Spans.push, 'start marker'), - Handler(Markers.isEnd, Spans.pop, 'end marker'), - Handler(Images.isStart, imageAction, 'start image') - ], fallback); - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.ItemContentState', - - [ - 'ephox.pastiche.inspect.States', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Transitions' - ], - - function (States, Handler, Handlers, Transitions) { - var run = function (afterListState) { - - var closeItem = function (api, state, token) { - Transitions.next(state, afterListState); - state.skippedPara.set(false); - }; - - var handlers = [ - Handler(States.isCloser, closeItem, 'Closing open tag') - ]; - - return Handlers('ItemContentState', handlers, function (api, state, token) { - api.emit(token); - }); - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.state.CommentOff', - - [ - 'ephox.pastiche.inspect.Comments', - 'ephox.pastiche.inspect.Texts' - ], - - function (Comments, Texts) { - var isText = function (state, token) { - return !state.commentMode.get() && Texts.is(state, token); - }; - - var isComment = function (state, token) { - return !state.commentMode.get() && Comments.is(state, token); - }; - - return { - isText: isText, - isComment: isComment - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.state.CommentOn', - - [ - 'ephox.pastiche.engine.TokenUtil', - 'ephox.pastiche.inspect.Comments', - 'ephox.pastiche.inspect.Texts' - ], - - function (TokenUtil, Comments, Texts) { - var isText = function (state, token) { - return state.commentMode.get() && Texts.is(state, token); - }; - - var isComment = function (state, token) { - return state.commentMode.get() && Comments.is(state, token); - }; - - var isUnstyled = function (state, token) { - var style = TokenUtil.getAttribute(token, 'style'); - return state.commentMode.get() && style === "" || style === null; - }; - - return { - isText: isText, - isComment: isComment, - isUnstyled: isUnstyled - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.ListStartState', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.inspect.Logic', - 'ephox.pastiche.inspect.Microsoft', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.inspect.Texts', - 'ephox.pastiche.list.detect.ListSymbols', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.CommentOff', - 'ephox.pastiche.list.state.CommentOn', - 'ephox.pastiche.list.state.Spans', - 'ephox.pastiche.list.state.Transitions', - 'ephox.peanut.Fun' - ], - - function (Arr, Logic, Microsoft, Tags, Texts, ListSymbols, Handler, Handlers, CommentOff, CommentOn, Spans, Transitions, Fun) { - var run = function (findListTypeState, afterNoBulletListState, unexpectedToken) { - - /* In one of the adhoc tests on Word 2007, Win XP ... a span with a massive number of nbsp was - added at the ListStart stage. This was added to jump to the end of it. */ - var skipWhitespace = function () { - return Handlers('TESTER', [ - Handler(Tags.isEndOf('SPAN'), Transitions.setNext(result), 'Finishing span'), - Handler(Texts.isWhitespace, Fun.noop, 'Is whitespace') - ], function (api, state, token) { - unexpectedToken(api, token); - }); - }; - - var noBullet = function (api, state, token) { - // List type without a bullet, we should treat it as a paragraph. - - // What about if it is 1. or something similar? - var start = state.originalToken.get(); - var spans = state.spanCount.get(); - state.emitter.closeAllLists(); - api.emit(start); - Arr.each(spans, api.emit); - api.emit(token); - api.commit(); - state.originalToken.set(start); - Transitions.next(state, afterNoBulletListState); - }; - - var isBulletSymbol = function (s, t) { - return Texts.is(s, t) && ListSymbols.match(t.text(), s.symbolFont.get()).length > 0; - }; - - var result = function (api, state, token) { - if (Microsoft.isIgnore(state, token)) { - Transitions.next(state, findListTypeState); - } - - var r = Handlers('ListStartState', [ - Handler( - Logic.all([ Tags.isStartOf('SPAN'), CommentOn.isUnstyled ]), - Spans.pushThen(findListTypeState), - 'unstyled span' - ), - - // This handler was added due to adhoc Word 2007 XP content. It breaks QUnit tests. - /* Handler(Logic.all([ Tags.isStart, Tags.isWhitespace('SPAN') ]), Transitions.setNext(skipWhitespace()), 'a whitespace tag'), */ - Handler(Tags.isStartOf('SPAN'), Spans.push, 'starting span'), - Handler(Tags.isStartOf('A'), Spans.push, 'starting a'), - Handler(Tags.isEndOf('A'), Spans.pop, 'ending a'), - Handler(CommentOn.isText, Transitions.jump(findListTypeState), 'commentOn -> text'), - // This handler is new. It may be a problem. - Handler(isBulletSymbol, Transitions.jump(findListTypeState), 'mogran :: text is [1-9].'), - Handler(Texts.is, noBullet, 'text'), - Handler(CommentOff.isComment, Fun.noop, 'commentOff -> comment'), - - // This was added to handle more gracefully the images in some of the test data. May be wrong. - Handler(Tags.isStartOf('IMG'), Transitions.jump(findListTypeState), 'mogran :: start image tag') - ], function (api, state, token) { - unexpectedToken(api, token); - }); - - return r(api, state, token); - }; - - result.toString = function () { return 'Handlers for ListStartState'; }; - return result; - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Browser', - - [ - 'ephox.pastiche.engine.Token', - 'ephox.pastiche.inspect.Microsoft', - 'global!document', - 'global!navigator' - ], - - function (Token, Microsoft, document, navigator) { - var supportsCustomStyles = function () { - // Firefox 4 preserves these styles in the DOM, but strips them when pasting. - // Since we can't trigger a paste there's no way to detect this situation apart from sniffing. - if (navigator.userAgent.indexOf('Gecko') > 0 && navigator.userAgent.indexOf('WebKit') < 0) return false; - var div = document.createElement('div'); - try { - div.innerHTML = '

 

'; - } catch (ex) { - // Can't set innerHTML if we're in XHTML mode so just assume we don't get custom styles. - return false; - } - - var token = Token.token(div.firstChild); - // INVESTIGATE: Does this need to be lowercased? - return Microsoft.isIgnore({}/*state*/, token); - }; - - return { - supportsCustomStyles: supportsCustomStyles - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.detect.ImageList', - - [ - ], - - function () { - var is = function (state, node, symbol) { - var alt = node !== undefined && node !== null && node.getAttribute !== undefined && node.getAttribute !== null ? node.getAttribute('alt') : ''; - // The check here for === * is because we are disabling image lists as they - // interfere with regular images. The one exception where it is reasonable - // to assume it is a list is if the alt text is *. - return !!node && node.tagName === 'IMG' && alt === '*'; - }; - - return { - is: is - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.detect.TextList', - - [ - 'ephox.pastiche.list.detect.ListTypes', - 'ephox.violin.Strings' - ], - - function (ListTypes, Strings) { - var is = function (state, rawNode, symbol) { - var node = rawNode; - var value = node.nodeValue; - if (!Strings.trim(value)) { - // This handles the case where there's a SPAN with nbsps before the bullet such as with roman numerals. - node = node.parentNode.nextSibling; - value = node ? node.nodeValue : ''; - } - - // Real lists have the bullet with NBSPs either side surrounded in a SPAN. If there's anything else, it's not a list. - if (!node || Strings.trim(node.parentNode.textContent) != value) { - return false; - } - listType = ListTypes.guess({ text: value, symbolFont: symbol }, null, state.originalToken.get()); - - if (listType) { - - // Don't convert numbered headings to lists. - var r = !!node.nextSibling && node.nextSibling.tagName === 'SPAN' && /^[\u00A0\s]/.test(node.nextSibling.firstChild.nodeValue) && - (state.openedTag.get().tag() === 'P' || listType.tag === 'UL'); - return r; - } else { - return false; - } - }; - - return { - is: is - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.detect.ListDetect', - - [ - 'ephox.highway.Merger', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.list.detect.ImageList', - 'ephox.pastiche.list.detect.TextList' - ], - - function (Merger, Tags, ImageList, TextList) { - - var update = function (output) { - var node = output.node; - var font = node.style.fontFamily; - return font ? Merger.merge(output, { symbol: (font === 'Wingdings' || font === 'Symbol') }) : output; - }; - - var hasMarkerFirst = function (node) { - return !!node.firstChild && (node.firstChild.tagName === 'SPAN' || node.firstChild.tagName === 'A'); - }; - - var findItem = function (node) { - var output = update({ node: node }); - - var initialEmptyA = node.childNodes.length > 1 && output.node.firstChild.tagName === 'A' && output.node.firstChild.textContent === ''; - output = initialEmptyA ? { node: output.node.childNodes[1], symbol: output.symbol } : output; - - while (hasMarkerFirst(output.node)) { - output = update({ node: output.node.firstChild, symbol: output.symbol }); - } - - return { - node: output.node.firstChild, - symbol: output.symbol - }; - }; - - var isUnofficialList = function (state, token) { - if (!Tags.isStartOf('SPAN')(state, token) || !state.openedTag.get()) return false; - var node = state.openedTag.get().getNode(); - var item = findItem(node); - var detector = item.node && item.node.nodeType === 3 ? TextList : ImageList; - return detector.is(state, item.node, item.symbol); - }; - - return { - isUnofficialList: isUnofficialList - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.inspect.Lists', - - [ - 'ephox.pastiche.engine.TokenUtil', - 'ephox.pastiche.inspect.Browser', - 'ephox.pastiche.inspect.Comments', - 'ephox.pastiche.inspect.Microsoft', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.list.detect.ListDetect', - 'ephox.perhaps.Option' - ], - - function (TokenUtil, Browser, Comments, Microsoft, Tags, ListDetect, Option) { - var getLevel = function (token) { - var msoList = TokenUtil.getMsoList(token); - var lvl = / level([0-9]+)/.exec(msoList); - return lvl && lvl[1] ? Option.some(parseInt(lvl[1], 10)) : Option.none(); - }; - - var isStart = function (state, token) { - return Tags.isStart(state, token) && Microsoft.isList(state, token) && token.tag() !== 'LI'; - }; - - var isValidStart = function (state, token) { - return isStart(state, token) && getLevel(token).isSome(); - }; - - var isInvalidStart = function (state, token) { - return isStart(state, token) && getLevel(token).isNone(); - }; - - var isSpecial = function (state, token) { - var custom = Browser.supportsCustomStyles(); - return !custom && Comments.isListSupport(state, token) || ListDetect.isUnofficialList(state, token); - }; - - return { - getLevel: getLevel, - isStart: isStart, - isValidStart: isValidStart, - isInvalidStart: isInvalidStart, - isSpecial: isSpecial - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.NoListState', - - [ - 'ephox.pastiche.inspect.Lists', - 'ephox.pastiche.inspect.Markers', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Spans', - 'ephox.pastiche.list.state.Transitions' - ], - - function (Lists, Markers, Tags, Handler, Handlers, Spans, Transitions) { - var run = function (lazyListStartState) { - - var startList = function (api, state, token) { - var level = Lists.getLevel(token); - level.each(function (l) { - state.itemLevel.set(l + state.styleLevelAdjust.get()); - // Tokens between lists should be dropped (they're just whitespace anyway) - // however, tokens before a list should be emitted if we find an mso-list style - // since this is the very first token of the list. - var deferring = Transitions.isNext(state, result) ? api.emitDeferred : api.dropDeferred; - deferring(); - - Transitions.next(state, lazyListStartState()); - api.startTransaction(); - state.originalToken.set(token); - state.commentMode.set(false); - }); - }; - - var specialList = function (api, state, token) { - if (Tags.isStartOf('SPAN')(state, token)) { - Spans.push(api, state, token); - } - Transitions.next(state, lazyListStartState()); - api.startTransaction(); - state.originalToken.set(state.openedTag.get()); - state.commentMode.set(true); - state.openedTag.set(null); - api.dropDeferred(); - }; - - var startTag = function (api, state, token) { - if (state.openedTag.get()) { - state.emitter.closeAllLists(); - api.emitDeferred(); - } - state.openedTag.set(token); - api.defer(token); - }; - - var closeOutLists = function (api, state, token) { - state.emitter.closeAllLists(); - api.emitDeferred(); - state.openedTag.set(null); - api.emit(token); - Transitions.next(state, result); - }; - - var result = Handlers('NoListState', [ - Handler(Lists.isValidStart, startList, 'valid list so start it'), - Handler(Lists.isInvalidStart, closeOutLists, 'invalid list so close lists'), - Handler(Lists.isSpecial, specialList, 'special list'), - Handler(Markers.isEnd, Spans.deferAndPop, 'closing marker'), - Handler(Markers.isStart, Spans.deferAndPush, 'starting marker'), - Handler(Tags.isStart, startTag, 'starting tag') - ], closeOutLists); - - return result; - }; - - return { - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.SkipEmptyParaState', - - [ - 'ephox.pastiche.inspect.Browser', - 'ephox.pastiche.inspect.Logic', - 'ephox.pastiche.inspect.Microsoft', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.inspect.Texts', - 'ephox.pastiche.list.detect.ListDetect', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Spans', - 'ephox.pastiche.list.state.Transitions' - ], - - function (Browser, Logic, Microsoft, Tags, Texts, ListDetect, Handler, Handlers, Spans, Transitions) { - var run = function (noListState, lazyAfterListState) { - - var isFirstMarker = function (state, token) { - return Tags.isStartOf('SPAN')(state, token) && state.spanCount.get().length === 0; - }; - - var isNotList = function (state, token) { - return (Browser.supportsCustomStyles() || !ListDetect.isUnofficialList(state, token)) && !Microsoft.isList(state, token); - }; - - var skip = function (api, state, token) { - api.defer(token); - state.skippedPara.set(true); - state.openedTag.set(null); - Transitions.next(state, lazyAfterListState()); - }; - - var defer = function (api, state, token) { - api.defer(token); - }; - - return Handlers('SkipEmptyPara', [ - Handler(Logic.all([ isFirstMarker, isNotList ]), Spans.deferAndPush, 'first marker or not list'), - Handler(Tags.isEndOf('SPAN'), Spans.deferAndPop, 'end span'), - Handler(Tags.isEndOf('P'), skip, 'end p'), - Handler(Tags.isEnd, Transitions.jump(noListState), 'end tag'), - Handler(Texts.isWhitespace, defer, 'whitespace') - ], Transitions.jump(noListState)); - }; - - return { - run: run - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.stage.SpacerState', - - [ - 'ephox.pastiche.inspect.Markers', - 'ephox.pastiche.inspect.Tags', - 'ephox.pastiche.list.stage.Handler', - 'ephox.pastiche.list.stage.Handlers', - 'ephox.pastiche.list.state.Spans', - 'ephox.pastiche.list.state.Transitions', - 'ephox.peanut.Fun' - ], - - function (Markers, Tags, Handler, Handlers, Spans, Transitions, Fun) { - var run = function (closeSpansState) { - return Handlers('Spacer', [ - Handler(Markers.isEnd, Spans.popThen(closeSpansState), 'end marker'), - Handler(Tags.isEnd, Transitions.setNext(closeSpansState), 'end tag') - ], Fun.noop); - }; - - return { - run: run - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.Emission', - - [ - 'ephox.scullion.Struct' - ], - - function (Struct) { - var result = Struct.immutable('state', 'result'); - var value = Struct.immutable('state', 'value'); - var state = Struct.immutable('level', 'type', 'types', 'items'); - - return { - state: state, - value: value, - result: result - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.ItemStack', - - [ - 'ephox.pastiche.list.emit.Emission', - 'ephox.perhaps.Option' - ], - - function (Emission, Option) { - var finish = function (state) { - var stack = state.items().slice(0); - if (stack.length > 0 && stack[stack.length - 1] !== 'P') { - var item = stack[stack.length - 1]; - stack[stack.length - 1] = 'P'; - var newState = Emission.state(state.level(), state.type(), state.types(), stack); - return Emission.value(newState, Option.some(item)); - } else { - return Emission.value(state, Option.none()); - } - }; - - var start = function (state, tag) { - var stack = state.items().slice(0); - var value = tag !== undefined && tag !== 'P' ? Option.some(tag) : Option.none(); - - value.fold(function () { - stack.push('P'); - }, function (v) { - stack.push(v); - }); - - var newState = Emission.state(state.level(), state.type(), state.types(), stack); - return Emission.value(newState, value); - }; - - return { - start: start, - finish: finish - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.ListLevels', - - [ - 'ephox.pastiche.list.emit.Emission' - ], - - function (Emission) { - var moveUntil = function (state, predicate, f) { - var tokens = []; - - var current = state; - while (predicate(current)) { - var acc = f(current); - current = acc.state(); - tokens = tokens.concat(acc.result()); - } - return Emission.result(current, tokens); - }; - - var moveRight = function (state, level, open) { - var predicate = function (s) { - return s.level() < level; - }; - - return moveUntil(state, predicate, open); - }; - - var moveLeft = function (state, level, close) { - var predicate = function (state) { - return state.level() > level; - }; - - return moveUntil(state, predicate, close); - }; - - return { - moveRight: moveRight, - moveLeft: moveLeft, - moveUntil: moveUntil - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.ListItemStyles', - - [ - 'ephox.pastiche.engine.TokenUtil' - ], - - function (TokenUtil) { - - var unsafeFrom = function (token) { - var leftMargin = TokenUtil.getStyle(token, 'margin-left'); - return leftMargin !== undefined && leftMargin !== '0px' ? { 'margin-left': leftMargin } : {}; - }; - - var from = function (token) { - var noToken = { - 'list-style-type': 'none' - }; - - return !token ? noToken : unsafeFrom(token); - }; - - return { - from: from - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.SkippedTokens', - - [ - 'ephox.pastiche.engine.Token', - 'ephox.peanut.Fun' - ], - - function (Token, Fun) { - var para = function (doc) { - return [ - Fun.curry(Token.createStartElement, 'P', {}, {}), - Fun.curry(Token.createText, '\u00A0'), - Fun.curry(Token.createEndElement, 'P') - ]; - }; - - return { - para: para - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.ListTokens', - - [ - 'ephox.pastiche.cleanup.Cleaners', - 'ephox.pastiche.engine.Token', - 'ephox.pastiche.list.detect.ListTypes', - 'ephox.pastiche.list.emit.Emission', - 'ephox.pastiche.list.emit.ItemStack', - 'ephox.pastiche.list.emit.ListItemStyles', - 'ephox.pastiche.list.emit.SkippedTokens', - 'ephox.peanut.Fun' - ], - - function (Cleaners, Token, ListTypes, Emission, ItemStack, ListItemStyles, SkippedTokens, Fun) { - var open = function(state, type, style) { - var attributes = type.start && type.start > 1 ? { start: type.start } : {}; - var level = state.level() + 1; - var listType = type; - var listTypes = state.types().concat([type]); - var result = [ Fun.curry(Token.createStartElement, type.tag, attributes, style) ]; - var newState = Emission.state(level, listType, listTypes, state.items()); - return Emission.result(newState, result); - }; - - var close = function(state) { - var listTypes = state.types().slice(0); - var result = [ Fun.curry(Token.createEndElement, listTypes.pop().tag) ]; - var level = state.level() - 1; - var listType = listTypes[listTypes.length - 1]; - var newState = Emission.state(level, listType, listTypes, state.items()); - return Emission.result(newState, result); - }; - - var shuffle = function (state, type, skippedPara) { - var e1 = close(state); - var extra = skippedPara ? SkippedTokens.para() : []; - var e2 = open(e1.state(), type, type.type ? { 'list-style-type': type.type } : {}); - return Emission.result(e2.state(), e1.result().concat(extra).concat(e2.result())); - }; - - var openItem = function(state, paragraphToken, type, skippedPara) { - var attributes = {}; - var style = ListItemStyles.from(paragraphToken); - - var e1 = state.type() && !ListTypes.eqListType(state.type(), type) ? - shuffle(state, type, skippedPara) : - Emission.result(state, []); - var tokens = [ Fun.curry(Token.createStartElement, 'LI', attributes, style) ]; - - var e2 = ItemStack.start(e1.state(), paragraphToken && paragraphToken.tag()); - var moreTokens = e2.value().map(function (v) { - Cleaners.styleDom(paragraphToken.getNode(), Fun.constant(true)); - return [ Fun.constant(paragraphToken) ]; - }).getOr([]); - - return Emission.result(e2.state(), e1.result().concat(tokens).concat(moreTokens)); - }; - - var closeItem = function(state) { - var li = Fun.curry(Token.createEndElement, 'LI'); - var e1 = ItemStack.finish(state); - var r = e1.value().fold(function () { - return [ li ]; - }, function (item) { - return [ Fun.curry(Token.createEndElement, item), li ]; - }); - return Emission.result(e1.state(), r); - }; - - return { - open: open, - openItem: openItem, - close: close, - closeItem: closeItem - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.ListModel', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.engine.Token', - 'ephox.pastiche.list.emit.Emission', - 'ephox.pastiche.list.emit.ItemStack', - 'ephox.pastiche.list.emit.ListLevels', - 'ephox.pastiche.list.emit.ListTokens', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option' - ], - - function (Arr, Token, Emission, ItemStack, ListLevels, ListTokens, Fun, Option) { - var compose = function (emissions) { - if (emissions.length === 0) throw 'Compose must have at least one element in the list'; - var last = emissions[emissions.length - 1]; - var tokens = Arr.bind(emissions, function (emission) { - return emission.result(); - }); - return Emission.result(last.state(), tokens); - }; - - var closeLevel = function (state) { - var e1 = ListTokens.closeItem(state); - var e2 = ListTokens.close(e1.state()); - return compose([ e1, e2 ]); - }; - - var openLevel = function (state, type, level, paragraphToken) { - var style = state.level() === level - 1 && type.type ? { 'list-style-type': type.type } : {}; - var e1 = ListTokens.open(state, type, style); - var e2 = ListTokens.openItem(e1.state(), e1.state().level() == level ? paragraphToken : undefined, type); - return compose([ e1, e2 ]); - }; - - var sameLevel = function (state, type, paragraphToken, skippedPara) { - var e1 = state.level() > 0 ? ListTokens.closeItem(state) : Emission.result(state, []); - var e2 = ListTokens.openItem(e1.state(), paragraphToken, type, skippedPara); - return compose([ e1, e2 ]); - }; - - var openLevels = function (state, type, level, paragraphToken) { - return ListLevels.moveRight(state, level, function (s) { - return openLevel(s, type, level, paragraphToken); - }); - }; - - var closeLevels = function (state, level) { - return ListLevels.moveLeft(state, level, closeLevel); - }; - - var jumpToLevel = function (state, type, level, paragraphToken) { - var e1 = level > 1 ? ItemStack.finish(state) : Emission.value(state, Option.none()); - var tokens = e1.value().map(function (tag) { - return [ Fun.curry(Token.createEndElement, tag) ]; - }).getOr([]); - - var numLevels = level - e1.state().level(); - var e2 = openLevels(e1.state(), type, level, paragraphToken); - return Emission.result(e2.state(), tokens.concat(e2.result())); - }; - - var openItem = function(state, level, paragraphToken, type, skippedPara) { - var e1 = state.level() > level ? closeLevels(state, level) : Emission.result(state, []); - var e2 = e1.state().level() === level ? - sameLevel(e1.state(), type, paragraphToken, skippedPara) : - jumpToLevel(e1.state(), type, level, paragraphToken); - return compose([ e1, e2 ]); - }; - - var closeAllLists = closeLevels; - - return { - openItem: openItem, - closeAllLists: closeAllLists - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.emit.Emitter', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.list.emit.Emission', - 'ephox.pastiche.list.emit.ListModel' - ], - - function (Arr, Emission, ListModel) { - var impliedULatLevel = [ 'disc', 'circle', 'square' ]; - - var removeImpliedListType = function(type, level) { - if (type.tag === 'UL') { - if (impliedULatLevel[level - 1] === type.type) { - type = { tag: 'UL' }; - } - } - return type; - }; - - return function (api, doc) { - - var state = Emission.state(0, undefined, [], []); - - var emit = function (emission) { - Arr.each(emission.result(), function (x) { - var token = x(doc); - api.emit(token); - }); - }; - - var closeAllLists = function() { - var e1 = ListModel.closeAllLists(state, 0); - state = e1.state(); - emit(e1); - api.commit(); - }; - - var openItem = function(level, paragraphToken, type, skippedPara) { - var style = {}, token; - if (!type) return; - var cleanType = removeImpliedListType(type, level); - var e1 = ListModel.openItem(state, level, paragraphToken, cleanType, skippedPara); - state = e1.state(); - emit(e1); - }; - - var getCurrentLevel = function() { - return state.level(); - }; - var getCurrentListType = function() { - return state.type(); - }; - - return { - closeAllLists: closeAllLists, - openItem: openItem, - getCurrentListType: getCurrentListType, - getCurrentLevel: getCurrentLevel - }; - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.indent.ListIndent', - - [ - 'ephox.compass.Arr', - 'ephox.pastiche.engine.TokenUtil', - 'ephox.violin.Strings', - 'global!Math' - ], - - function (Arr, TokenUtil, Strings, Math) { - var getLeftOffset = function(node, paragraph) { - var parent, child, offset = 0; - parent = node.parentNode; - while (parent !== null && parent !== paragraph.parentNode) { - offset += parent.offsetLeft; - parent = parent.offsetParent; - } - return offset; - }; - - var ephoxGetComputedStyle = function(node) { - if (node.ownerDocument.defaultView) { - return node.ownerDocument.defaultView.getComputedStyle(node, null); - } - return node.currentStyle || {}; - }; - - - /** A simplified memoize function which only supports one or two function parameters. - * - * @param fn - * @param param the funtion p - * @returns - */ - var memoize2 = function(fn) { - var cache = {}; - return function(param1, param2) { - var result, key = param1 + "," + param2; - if (cache.hasOwnProperty(key)) { - return cache[key]; - } - result = fn.call(null, param1, param2); - cache[key] = result; - return result; - }; - }; - - var findStyles = memoize2(function(css, className) { - var results, matcher = /([^{]+){([^}]+)}/g, match, el, computedStyle; - matcher.lastIndex = 0; // Firefox Mac reuses the same regex so we need to reset it. - while ((results = matcher.exec(css)) !== null && !match) { - Arr.each(results[1].split(','), function(selector) { - var dotIndex = selector.indexOf('.'); - if (dotIndex >= 0 && Strings.trim(selector.substring(dotIndex + 1)) === className) { - match = results[2]; - return false; - } - }); - } - if (match) { - el = document.createElement('p'); - el.setAttribute("style", match); - computedStyle = ephoxGetComputedStyle(el); - return computedStyle ? "" + computedStyle.marginLeft : false; - } - return false; - }); - - var indentGuesser = function() { - - var listIndentAdjust; - var listIndentAmount; - var guessIndentLevel = function(currentToken, token, styles, bulletInfo) { - var indentAmount, itemIndent, el, level = 1; - - if (bulletInfo && /^([0-9]+\.)+[0-9]+\.?$/.test(bulletInfo.text)) { - // Outline list type so we can just count the number of sections. - return bulletInfo.text.replace(/([0-9]+|\.$)/g, '').length + 1; - } - indentAmount = listIndentAmount || parseInt(findStyles(styles, TokenUtil.getAttribute(token, 'class'))); - - itemIndent = getLeftOffset(currentToken.getNode(), token.getNode()); - if (!indentAmount) { - indentAmount = 48; - } else { - // We might get a 0 item indent if the list CSS code wasn't pasted as happens on Windows. - if (listIndentAdjust) { - itemIndent += listIndentAdjust; - } else if (itemIndent === 0) { - listIndentAdjust = indentAmount; - itemIndent += indentAmount; - } - } - listIndentAmount = indentAmount = Math.min(itemIndent, indentAmount); - level = Math.max(1, Math.floor(itemIndent / indentAmount)) || 1; - return level; - }; - return { - guessIndentLevel: guessIndentLevel - }; - }; - - return { - indentGuesser: indentGuesser - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.state.ListStyles', - - [ - 'ephox.pastiche.engine.Token' - ], - - function (Token) { - return function () { - var inStyle = false; - var styles = ""; - var check = function(token) { - if (inStyle && token.type() === Token.TEXT_TYPE) { - styles += token.text(); - return true; - } else if (token.type() === Token.START_ELEMENT_TYPE && token.tag() === 'STYLE') { - inStyle = true; - return true; - } else if (token.type() === Token.END_ELEMENT_TYPE && token.tag() === 'STYLE') { - inStyle = false; - return true; - } - return false; - }; - return { - check: check - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.scullion.Cell', - - [ - ], - - function () { - var Cell = function (initial) { - var value = initial; - - var get = function () { - return value; - }; - - var set = function (v) { - value = v; - }; - - var clone = function () { - return Cell(get()); - }; - - return { - get: get, - set: set, - clone: clone - }; - }; - - return Cell; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.list.state.ListState', - - [ - 'ephox.pastiche.list.emit.Emitter', - 'ephox.pastiche.list.indent.ListIndent', - 'ephox.pastiche.list.state.ListStyles', - 'ephox.peanut.Fun', - 'ephox.scullion.Cell' - ], - - function (Emitter, ListIndent, ListStyles, Fun, Cell) { - - var indentGuesser = ListIndent.indentGuesser(); - var styles = ListStyles(); - - - var emitter = { - getCurrentListType: function () { - return lazyEmitter().getCurrentListType(); - }, - getCurrentLevel: function () { - return lazyEmitter().getCurrentLevel(); - }, - closeAllLists: function () { - return lazyEmitter().closeAllLists.apply(undefined, arguments); - }, - openItem: function () { - return lazyEmitter().openItem.apply(undefined, arguments); - } - }; - - var lazyEmitter = function () { - return { - getCurrentListType: Fun.constant({}), - getCurrentLevel: Fun.constant(1), - closeAllLists: Fun.identity, - openItem: Fun.identity - }; - }; - - return function (initialState) { - var nextFilter = Cell(initialState); - var itemLevel = Cell(0); - var originalToken = Cell(null); - var commentMode = Cell(false); - var openedTag = Cell(null); - var symbolFont = Cell(false); - var listType = Cell(null); - var spanCount = Cell([]); - var skippedPara = Cell(false); - var styleLevelAdjust = Cell(0); - var bulletInfo = Cell(undefined); - var logger = Cell([]); - - var reset = function (api) { - nextFilter.set(initialState); - itemLevel.set(0); - originalToken.set(null); - commentMode.set(false); - openedTag.set(null); - symbolFont.set(false); - listType.set(null); - spanCount.set([]); - skippedPara.set(false); - styleLevelAdjust.set(0); - bulletInfo.set(undefined); - logger.set([]); - - // ASSUMPTION: I think this approach in the past also papered over the stack needing resetting in the emitter. - _emitter = Emitter(api, api.document); - lazyEmitter = Fun.constant(_emitter); - }; - - return { - reset: reset, - nextFilter: nextFilter, - itemLevel: itemLevel, - originalToken: originalToken, - commentMode: commentMode, - openedTag: openedTag, - symbolFont: symbolFont, - listType: listType, - spanCount: spanCount, - skippedPara: skippedPara, - styleLevelAdjust: styleLevelAdjust, - bulletInfo: bulletInfo, - logger: logger, - - emitter: emitter, - styles: styles, - indentGuesser: indentGuesser - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.pastiche.filter.Lists', - - [ - 'ephox.pastiche.engine.Filter', - 'ephox.pastiche.list.detect.ListTypes', - 'ephox.pastiche.list.stage.AfterListState', - 'ephox.pastiche.list.stage.AfterNoBulletListState', - 'ephox.pastiche.list.stage.BeforeSpacerState', - 'ephox.pastiche.list.stage.CloseSpansState', - 'ephox.pastiche.list.stage.FindListTypeState', - 'ephox.pastiche.list.stage.ItemContentState', - 'ephox.pastiche.list.stage.ListStartState', - 'ephox.pastiche.list.stage.NoListState', - 'ephox.pastiche.list.stage.SkipEmptyParaState', - 'ephox.pastiche.list.stage.SpacerState', - 'ephox.pastiche.list.state.ListState', - 'ephox.pastiche.list.state.Transitions' - ], - - function (Filter, ListTypes, AfterListState, AfterNoBulletListState, BeforeSpacerState, CloseSpansState, FindListTypeState, ItemContentState, ListStartState, NoListState, SkipEmptyParaState, SpacerState, ListState, Transitions) { - var unexpectedToken = function(api, token) { - var info = 'Type: ' + token.type() + ', Tag: ' + token.tag() + ' Text: ' + token.text(); - console.log('Unexpected token in list conversion: ' + info, activeState.nextFilter.get()); - api.rollback(); - }; - - var noListState = NoListState.run(function () { - return listStartState; - }); - var skipEmptyParaState = SkipEmptyParaState.run(noListState, function () { - return afterListState; - }); - var afterListState = AfterListState.run(skipEmptyParaState, noListState); - var itemContentState = ItemContentState.run(afterListState); - var closeSpansState = CloseSpansState.run(itemContentState, unexpectedToken); - var spacerState = SpacerState.run(closeSpansState); - var beforeSpacerState = BeforeSpacerState.run(spacerState, closeSpansState, unexpectedToken); - var findListTypeState = FindListTypeState.run(beforeSpacerState, unexpectedToken); - var afterNoBulletListState = AfterNoBulletListState.run(afterListState); - var listStartState = ListStartState.run(findListTypeState, afterNoBulletListState, unexpectedToken); - - var activeState = ListState(noListState); - - var receive = function(api, token) { - if (activeState.styles && activeState.styles.check(token)) { - return; - } - - activeState.symbolFont.set(ListTypes.checkFont(token, activeState.symbolFont.get())); - Transitions.go(api, activeState, token); - }; - - return Filter.createFilter(receive, activeState.reset, 'lists'); - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.limbo.process.Strategies', - - [ - 'ephox.pastiche.api.HtmlPatterns', - 'ephox.pastiche.api.HybridAction', - 'ephox.pastiche.api.RuleConditions', - 'ephox.pastiche.api.RuleMutations', - 'ephox.pastiche.filter.Lists', - 'ephox.peanut.Fun', - 'ephox.sugar.api.Class', - 'ephox.sugar.api.Css', - 'ephox.violin.StringMatch' - ], - - function (HtmlPatterns, HybridAction, RuleConditions, RuleMutations, Lists, Fun, Class, Css, StringMatch) { - // This will UNWRAP! tags such as and - // Context: Word copy and paste. - var unwrapWordTags = HybridAction.unwrapper({ - tags: [ - { name: StringMatch.pattern(/^([OVWXP]|U[0-9]+|ST[0-9]+):/i) } - ] - }); - - // This will try and turn p tags into ol,ul and li tags where appropriate - // Context: Word copy and paste. - var parseLists = HybridAction.pipeline([ Lists ]); - - // This will remove attributes matching: v:.., href with #_toc|#_mso, xmlns:, align - // and type on lists. - // Context: Word copy and paste. - var removeWordAttributes = HybridAction.removal({ - attributes: [ - { name: StringMatch.pattern(/^v:/) }, - { name: StringMatch.exact('href'), value: StringMatch.contains('#_toc') }, - { name: StringMatch.exact('href'), value: StringMatch.contains('#_mso') }, - { name: StringMatch.pattern(/^xmlns(:|$)/) }, - { name: StringMatch.exact('align') }, - { name: StringMatch.exact('type'), condition: RuleConditions.isList } - ] - }); - - // This will remove script,meta,link,empty-style tags and on,id,name,lang attributes - // or styles containing OLE_LINK - // Context: All - var removeExcess = HybridAction.removal({ - tags: [ - { name: StringMatch.exact('script') }, - { name: StringMatch.exact('meta') }, - { name: StringMatch.exact('link') }, - { name: StringMatch.exact('style'), condition: RuleConditions.isEmpty } - ], - attributes: [ - { name: StringMatch.starts('on') }, - { name: StringMatch.exact('"') }, - { name: StringMatch.exact('id') }, - { name: StringMatch.exact('name') }, - { name: StringMatch.exact('lang') }, - { name: StringMatch.exact('language') } - // INVESTIGATE: Should language go here as well ? - ], - styles: [ - { name: StringMatch.all(), value: StringMatch.pattern(/OLE_LINK/i) } - ] - }); - - var isNotTransformed = function (element) { - return !Class.has(element, 'ephox-limbo-transform'); - }; - - // This will remove any styles that are not list-style-type for all tags, and keep the width and height - // styles only for images. - // Context: Clean copy and paste. - var cleanStyles = HybridAction.removal({ - styles: [ - { - name: StringMatch.not( - StringMatch.pattern(/width|height|list-style-type/) - ), - condition: isNotTransformed - }, - { name: StringMatch.pattern(/width|height/), condition: RuleConditions.isNotImage } - ] - }); - - // This will remove all classes that are not 'rtf-data-image' - // Context: Clean copy and paste. - var cleanClasses = HybridAction.removal({ - classes: [ - { - name: StringMatch.not( - StringMatch.exact('rtf-data-image') - ) - } - ] - }); - - // This will remove all styles that are not considered valid. - // Context: Merge copy and paste. - var mergeStyles = HybridAction.removal({ - styles: [ - { name: StringMatch.pattern(HtmlPatterns.validStyles()) } - ] - }); - - // This will remove all classes that have mso in them. - // Context: Merge copy and paste. - var mergeClasses = HybridAction.removal({ - classes: [ - { name: StringMatch.pattern(/mso/i) } - ] - }); - - // This will remove (unwrap) all images that have a file protocol - // Context: Copy and paste with images. - var removeLocalImages = HybridAction.unwrapper({ - tags: [ - { name: StringMatch.exact('img'), condition: RuleConditions.isLocal }, - // OLE_LINK exact part. - { name: StringMatch.exact('a'), condition: RuleConditions.hasNoAttributes } - ] - }); - - // This will unwrap any
tags that have no attributes (i.e. are essentially useless) - // Context: Any - var removeVacantLinks = HybridAction.unwrapper({ - tags: [ - { name: StringMatch.exact('a'), condition: RuleConditions.hasNoAttributes } - ] - }); - - // This will remove any style attribute that has no content. - // Context: Any - var removeEmptyStyle = HybridAction.removal({ - attributes: [ - { name: StringMatch.exact('style'), value: StringMatch.exact(''), debug: true } - ] - }); - - // This will remove any style attribute that has no content. - // Context: Any - var removeEmptyClass = HybridAction.removal({ - attributes: [ - { name: StringMatch.exact('class'), value: StringMatch.exact(''), debug: true } - ] - }); - - // This will remove any inline elements that no longer serve a purpose: - // Fancy inline elements: contain no content - // Span inline elements: have no attributes - // Context: Any - var pruneInlineTags = HybridAction.unwrapper({ - tags: [ - { - name: StringMatch.pattern(HtmlPatterns.specialInline()), - condition: Fun.not(RuleConditions.hasContent) - } - ] - }); - - var addPlaceholders = HybridAction.transformer({ - tags: [ - { name: StringMatch.exact('p'), mutate: RuleMutations.addBrTag } - ] - }); - - var toUnderline = function (element) { - var span = RuleMutations.changeTag('span', element); - Class.add(span, 'ephox-limbo-transform'); - Css.set(span, 'text-decoration', 'underline'); - }; - - var nestedListFixes = HybridAction.transformer({ - tags: [ - { name: StringMatch.pattern(/ol|ul/), mutate: RuleMutations.properlyNest } - ] - }); - - var inlineTagFixes = HybridAction.transformer({ - tags: [ - { name: StringMatch.exact('b'), mutate: Fun.curry(RuleMutations.changeTag, 'strong') }, - { name: StringMatch.exact('i'), mutate: Fun.curry(RuleMutations.changeTag, 'em') }, - { name: StringMatch.exact('u'), mutate: toUnderline }, - { name: StringMatch.exact('s'), mutate: Fun.curry(RuleMutations.changeTag, 'strike') }, - { name: StringMatch.exact('font'), mutate: RuleMutations.fontToSpan, debug: true } - ] - }); - - // This will remove all classes that were put in to preserve transformations. - // Context: Any - var cleanupFlags = HybridAction.removal({ - classes: [ - { name: StringMatch.exact('ephox-limbo-transform') } - ] - }); - - // This will remove any href attributes of a tags that are local. - // Context: Any - var removeLocalLinks = HybridAction.removal({ - attributes: [ - { name: StringMatch.exact('href'), value: StringMatch.starts('file:///'), debug: true } - ] - }); - - return { - unwrapWordTags: unwrapWordTags, - removeWordAttributes: removeWordAttributes, - parseLists: parseLists, - removeExcess: removeExcess, - cleanStyles: cleanStyles, - cleanClasses: cleanClasses, - mergeStyles: mergeStyles, - mergeClasses: mergeClasses, - removeLocalImages: removeLocalImages, - removeVacantLinks: removeVacantLinks, - removeEmptyStyle: removeEmptyStyle, - removeEmptyClass: removeEmptyClass, - pruneInlineTags: pruneInlineTags, - addPlaceholders: addPlaceholders, - nestedListFixes: nestedListFixes, - inlineTagFixes: inlineTagFixes, - cleanupFlags: cleanupFlags, - removeLocalLinks: removeLocalLinks, - none: Fun.noop - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.limbo.process.PasteFilters', - - [ - 'ephox.compass.Arr', - 'ephox.limbo.api.RtfImage', - 'ephox.limbo.process.Strategies', - 'ephox.pastiche.api.HybridAction', - 'ephox.pastiche.engine.Filter', - 'ephox.pastiche.engine.Token', - 'ephox.sugar.api.Element' - ], - - function (Arr, RtfImage, Strategies, HybridAction, Filter, Token, Element) { - var isIE11 = function (platform) { - return platform.browser.isIE() && platform.browser.version.major >= 11; - }; - - var transform = function (f) { - // TODO: Move this to API in pastiche or change how this works. - // I think the reason I want to keep it in the tokenizer is because - // it needs to access comments. - return Filter.createFilter(function (api, token) { - var next = f(Element.fromDom(token.getNode())).fold(function () { - return token; - }, function (sugared) { - var node = sugared.dom(); - return Token.token(node, token.type() === Token.END_ELEMENT_TYPE, {}); - }); - api.emit(next); - }); - }; - - var images = function (isWord, merging, platform) { - var searcher = platform.browser.isFirefox() ? RtfImage.local : RtfImage.vshape; - var transformer = isIE11(platform) ? Strategies.none : HybridAction.pipeline([ transform(searcher) ]); - var local = searcher === RtfImage.local ? Strategies.none : Strategies.removeLocalImages; - var annotate = isWord ? transformer : Strategies.none; - - return { - annotate: [ annotate ], - local: [ local ] - }; - }; - - var styling = function (isWord, merging, platform) { - var merge = [ Strategies.mergeStyles, Strategies.mergeClasses ]; - var clean = [ Strategies.cleanStyles, Strategies.cleanClasses ]; - return merging ? merge : clean; - }; - - var word = function (isWord, merging, platform) { - if (!isWord) return Strategies.none; - var base = [ Strategies.unwrapWordTags ]; - var lists = isIE11(platform) ? [] : Strategies.parseLists; - return base.concat(lists); - }; - - var derive = function (isWord, merging, platform) { - var imageFilters = images(isWord, merging, platform); - - return Arr.flatten([ - imageFilters.annotate, - [ Strategies.inlineTagFixes ], - word(isWord, merging, platform), - [ Strategies.nestedListFixes ], - [ Strategies.removeExcess ], - imageFilters.local, - styling(isWord, merging, platform), - [ Strategies.removeLocalLinks, Strategies.removeVacantLinks ], - [ Strategies.removeEmptyStyle ], - [ Strategies.removeEmptyClass ], - [ Strategies.pruneInlineTags ], - [ Strategies.addPlaceholders ], - [ Strategies.cleanupFlags ] - ]); - }; - - return { - derive: derive - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.boss.common.TagBoundaries', - - [ - - ], - - function () { - // TODO: We need to consolidate this list. I think when we get rid of boss/universe, we can do it then. - return [ - 'body', - 'p', - 'div', - 'article', - 'aside', - 'figcaption', - 'figure', - 'footer', - 'header', - 'nav', - 'section', - 'ol', - 'ul', - 'li', - 'table', - 'thead', - 'tbody', - 'caption', - 'tr', - 'td', - 'th', - 'h1', - 'h2', - 'h3', - 'h4', - 'h5', - 'h6', - 'blockquote', - 'pre', - 'address' - ]; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.Text', - - [ - 'ephox.sugar.api.Node', - 'ephox.sugar.impl.NodeValue' - ], - - function (Node, NodeValue) { - var api = NodeValue(Node.isText, 'text'); - - var get = function (element) { - return api.get(element); - }; - - var getOption = function (element) { - return api.getOption(element); - }; - - var set = function (element, value) { - api.set(element, value); - }; - - return { - get: get, - getOption: getOption, - set: set - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.boss.api.DomUniverse', - - [ - 'ephox.boss.common.TagBoundaries', - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Compare', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.InsertAll', - 'ephox.sugar.api.Node', - 'ephox.sugar.api.PredicateFilter', - 'ephox.sugar.api.PredicateFind', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.SelectorFilter', - 'ephox.sugar.api.SelectorFind', - 'ephox.sugar.api.Text', - 'ephox.sugar.api.Traverse' - ], - - function (TagBoundaries, Arr, Fun, Attr, Compare, Css, Element, Insert, InsertAll, Node, PredicateFilter, PredicateFind, Remove, SelectorFilter, SelectorFind, Text, Traverse) { - return function () { - var clone = function (element) { - return Element.fromDom(element.dom().cloneNode(false)); - }; - - var isBoundary = function (element) { - if (!Node.isElement(element)) return false; - if (Node.name(element) === 'body') return true; - var display = Css.get(element, 'display'); - // When the read display value is empty, we need to check the node name. - return display !== undefined && display.length > 0 ? - Arr.contains(['block', 'table-cell', 'table-row', 'table', 'list-item'], display) : - Arr.contains(TagBoundaries, Node.name(element)); - }; - - var isEmptyTag = function (element) { - if (!Node.isElement(element)) return false; - return Arr.contains(['br', 'img', 'hr'], Node.name(element)); - }; - - var comparePosition = function (element, other) { - return element.dom().compareDocumentPosition(other.dom()); - }; - - var copyAttributesTo = function (source, destination) { - var as = Attr.clone(source); - Attr.setAll(destination, as); - }; - - return { - up: Fun.constant({ - selector: SelectorFind.ancestor, - closest: SelectorFind.closest, - predicate: PredicateFind.ancestor, - all: Traverse.parents - }), - down: Fun.constant({ - selector: SelectorFilter.descendants, - predicate: PredicateFilter.descendants - }), - styles: Fun.constant({ - get: Css.get, - set: Css.set, - remove: Css.remove - }), - attrs: Fun.constant({ - get: Attr.get, - set: Attr.set, - remove: Attr.remove, - copyTo: copyAttributesTo - }), - insert: Fun.constant({ - before: Insert.before, - after: Insert.after, - afterAll: InsertAll.after, - append: Insert.append, - appendAll: InsertAll.append, - prepend: Insert.prepend, - wrap: Insert.wrap - }), - remove: Fun.constant({ - unwrap: Remove.unwrap, - remove: Remove.remove - }), - create: Fun.constant({ - nu: Element.fromTag, - clone: clone, - text: Element.fromText - }), - query: Fun.constant({ - comparePosition: comparePosition, - prevSibling: Traverse.prevSibling, - nextSibling: Traverse.nextSibling - }), - property: Fun.constant({ - children: Traverse.children, - name: Node.name, - parent: Traverse.parent, - isText: Node.isText, - isElement: Node.isElement, - getText: Text.get, - setText: Text.set, - isBoundary: isBoundary, - isEmptyTag: isEmptyTag - }), - eq: Compare.eq, - is: Compare.is - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.api.data.NamedPattern', - - [ - 'ephox.scullion.Struct' - ], - - function (Struct) { - return Struct.immutable('word', 'pattern'); - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.api.data.Spot', - - [ - 'ephox.scullion.Struct' - ], - - function (Struct) { - var point = Struct.immutable('element', 'offset'); - var delta = Struct.immutable('element', 'deltaOffset'); - var range = Struct.immutable('element', 'start', 'finish'); - var points = Struct.immutable('begin', 'end'); - var text = Struct.immutable('element', 'text'); - - return { - point: point, - delta: delta, - range: range, - points: points, - text: text - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.extract.TypedItem', - - [ - 'ephox.peanut.Fun', - 'ephox.perhaps.Option' - ], - - /** - * Church encoded ADT representing whether an element is: - * - boundary (block tag or inline tag with block CSS display) - * - empty - * - text - */ - function (Fun, Option) { - var no = Fun.constant(false); - var yes = Fun.constant(true); - - var boundary = function (item, universe) { - return folder(function (b, e, t) { - return b(item, universe); - }); - }; - - var empty = function (item, universe) { - return folder(function (b, e, t) { - return e(item, universe); - }); - }; - - var text = function (item, universe) { - return folder(function (b, e, t) { - return t(item, universe); - }); - }; - - var folder = function (fold) { - var isBoundary = function () { - return fold(yes, no, no); - }; - - var toText = function () { - return fold(Option.none, Option.none, function (item, universe) { - return Option.some(item); - }); - }; - - var is = function (other) { - return fold(no, no, function (item, universe) { - return universe.eq(item, other); - }); - }; - - var len = function () { - return fold(Fun.constant(0), Fun.constant(1), function (item, universe) { - return universe.property().getText(item).length; - }); - }; - - return { - isBoundary: isBoundary, - fold: fold, - toText: toText, - is: is, - len: len - }; - }; - - return { - text: text, - boundary: boundary, - empty: empty - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.array.Boundaries', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun' - ], - - function (Arr, Fun) { - var boundAt = function (xs, left, right, comparator) { - var leftIndex = Arr.findIndex(xs, Fun.curry(comparator, left)); - var first = leftIndex > -1 ? leftIndex : 0; - var rightIndex = Arr.findIndex(xs, Fun.curry(comparator, right)); - var last = rightIndex > -1 ? rightIndex + 1 : xs.length; - return xs.slice(first, last); - }; - - return { - boundAt: boundAt - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.array.Slice', - - [ - 'ephox.compass.Arr' - ], - - function (Arr) { - /** - * Slice an array at the first item matched by the predicate - */ - var sliceby = function (list, pred) { - var index = Arr.findIndex(list, pred); - return list.slice(0, index); - }; - - return { - sliceby: sliceby - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.array.Split', - - [ - 'ephox.compass.Arr' - ], - - function (Arr) { - /** - * Split an array into chunks matched by the predicate - */ - var splitby = function (xs, pred) { - var r = []; - var part = []; - Arr.each(xs, function (x) { - if (pred(x)) { - r.push(part); - part = []; - } else { - part.push(x); - } - }); - - if (part.length > 0) r.push(part); - return r; - }; - - return { - splitby: splitby - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.api.Arrays', - - [ - 'ephox.polaris.array.Boundaries', - 'ephox.polaris.array.Slice', - 'ephox.polaris.array.Split' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Boundaries, Slice, Split) { - var boundAt = function (xs, left, right, comparator) { - return Boundaries.boundAt(xs, left, right, comparator); - }; - - var splitby = function (array, predicate) { - return Split.splitby(array, predicate); - }; - - var sliceby = function (array, predicate) { - return Slice.sliceby(array, predicate); - }; - - return { - splitby: splitby, - sliceby: sliceby, - boundAt: boundAt - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.extract.TypedList', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option', - 'ephox.phoenix.api.data.Spot', - 'ephox.polaris.api.Arrays' - ], - - /** - * Extracts various information from a list of TypedItem - */ - function (Arr, Fun, Option, Spot, Arrays) { - - var count = function (parray) { - return Arr.foldr(parray, function (b, a) { - return a.len() + b; - }, 0); - }; - - var dropUntil = function (parray, target) { - return Arrays.sliceby(parray, function (x) { - return x.is(target); - }); - }; - - /** - * Transform a TypedItem into a range representing that item from the start position. - * - * The generation function for making a PositionArray out of a list of TypedItems. - */ - var gen = function (unit, start) { - return unit.fold(Option.none, function (e) { - return Option.some(Spot.range(e, start, start + 1)); - }, function (t) { - return Option.some(Spot.range(t, start, start + unit.len())); - }); - }; - - var justText = function (parray) { - return Arr.bind(parray, function (x) { - return x.fold(Fun.constant([]), Fun.constant([]), Fun.identity); - }); - }; - - return { - count: count, - dropUntil: dropUntil, - gen: gen, - justText: justText - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.extract.Extract', - - [ - 'ephox.compass.Arr', - 'ephox.phoenix.api.data.Spot', - 'ephox.phoenix.extract.TypedItem', - 'ephox.phoenix.extract.TypedList' - ], - - function (Arr, Spot, TypedItem, TypedList) { - /** - * Flattens the item tree into TypedItem representations. - * - * Boundaries are returned twice, before and after their children. - */ - var typed = function (universe, item, optimise) { - if (universe.property().isText(item)) { - return [ TypedItem.text(item, universe) ]; - } else if (universe.property().isEmptyTag(item)) { - return [ TypedItem.empty(item, universe) ]; - } else if (universe.property().isElement(item)) { - var children = universe.property().children(item); - var boundary = universe.property().isBoundary(item) ? [TypedItem.boundary(item, universe)] : []; - var rest = optimise !== undefined && optimise(item) ? [] : Arr.bind(children, function (child) { - return typed(universe, child, optimise); - }); - return boundary.concat(rest).concat(boundary); - } else { - return []; - } - }; - - /** - * Returns just the actual elements from a call to typed(). - */ - var items = function (universe, item, optimise) { - var typedItemList = typed(universe, item, optimise); - - var raw = function (item, universe) { return item; }; - - return Arr.map(typedItemList, function (typedItem) { - return typedItem.fold(raw, raw, raw); - }); - }; - - var extractToElem = function (universe, child, offset, item, optimise) { - var extractions = typed(universe, item, optimise); - var prior = TypedList.dropUntil(extractions, child); - var count = TypedList.count(prior); - return Spot.point(item, count + offset); - }; - - /** - * Generates an absolute point in the child's parent - * that can be used to reference the offset into child later. - * - * To find the exact reference later, use Find. - */ - var extract = function (universe, child, offset, optimise) { - return universe.property().parent(child).fold(function () { - return Spot.point(child, offset); - }, function (parent) { - return extractToElem(universe, child, offset, parent, optimise); - }); - }; - - /** - * Generates an absolute point that can be used to reference the offset into child later. - * This absolute point will be relative to a parent node (specified by predicate). - * - * To find the exact reference later, use Find. - */ - var extractTo = function (universe, child, offset, pred, optimise) { - return universe.up().predicate(child, pred).fold(function () { - return Spot.point(child, offset); - }, function (v) { - return extractToElem(universe, child, offset, v, optimise); - }); - }; - - return { - typed: typed, - items: items, - extractTo: extractTo, - extract: extract - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.extract.ExtractText', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.phoenix.extract.Extract' - ], - - function (Arr, Fun, Extract) { - var newline = '\n'; - var space = ' '; - - var onEmpty = function (item, universe) { - return universe.property().name(item) === 'img' ? space : newline; - }; - - var from = function (universe, item, optimise) { - var typed = Extract.typed(universe, item, optimise); - return Arr.map(typed, function (t) { - return t.fold(Fun.constant(newline), onEmpty, universe.property().getText); - }).join(''); - }; - - return { - from: from - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.parray.Generator', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun' - ], - - function (Arr, Fun) { - - /** - * Generate a PositionArray - * - * xs: list of thing - * f: thing -> Optional unit - * _start: sets the start position to search at - */ - var make = function (xs, f, _start) { - - var init = { - len: _start !== undefined ? _start : 0, - list: [] - }; - - var r = Arr.foldl(xs, function (b, a) { - var value = f(a, b.len); - return value.fold(Fun.constant(b), function (v) { - return { - len: v.finish(), - list: b.list.concat([v]) - }; - }); - }, init); - - return r.list; - }; - - return { - make: make - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.parray.Query', - - [ - 'ephox.compass.Arr', - 'ephox.perhaps.Option' - ], - - function (Arr, Option) { - - /** - * Simple "is position within unit" utility function - */ - var inUnit = function (unit, position) { - return position >= unit.start() && position <= unit.finish(); - }; - - /** - * Finds the unit in the PositionArray that contains this offset (if there is one) - */ - var get = function (parray, offset) { - var unit = Arr.find(parray, function (x) { - return inUnit(x, offset); - }); - - return Option.from(unit); - }; - - var startindex = function (parray, offset) { - return Arr.findIndex(parray, function (unit) { - return unit.start() === offset; - }); - }; - - var tryend = function (parray, finish) { - var finishes = parray[parray.length - 1] && parray[parray.length - 1].finish() === finish; - return finishes ? parray.length + 1 : -1; - }; - - - /** - * Extracts the pieces of the PositionArray that are bounded *exactly* on the start and finish offsets - */ - var sublist = function (parray, start, finish) { - var first = startindex(parray, start); - var rawlast = startindex(parray, finish); - var last = rawlast > -1 ? rawlast : tryend(parray, finish); - - return first > -1 && last > -1 ? parray.slice(first, last) : []; - }; - - var find = function (parray, pred) { - return Option.from(Arr.find(parray, pred)); - }; - - return { - get: get, - find: find, - inUnit: inUnit, - sublist: sublist - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.parray.Translate', - - [ - 'ephox.compass.Arr', - 'ephox.highway.Merger', - 'ephox.peanut.Fun' - ], - - function (Arr, Merger, Fun) { - /** Adjust a PositionArray positions by an offset */ - var translate = function (parray, offset) { - return Arr.map(parray, function (unit) { - return Merger.merge(unit, { - start: Fun.constant(unit.start() + offset), - finish: Fun.constant(unit.finish() + offset) - }); - }); - }; - - return { - translate: translate - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.parray.Split', - - [ - 'ephox.compass.Arr', - 'ephox.polaris.parray.Query', - 'ephox.polaris.parray.Translate' - ], - - function (Arr, Query, Translate) { - /** - * After subdivide has split the unit, update the resulting PositionArray based on the unit start position. - */ - var divide = function (unit, positions, subdivide) { - var mini = subdivide(unit, positions); - return Translate.translate(mini, unit.start()); - }; - - /** - * Adds extra split points into a PositionArray, using subdivide to split if necessary - */ - var splits = function (parray, positions, subdivide) { - if (positions.length === 0) return parray; - - return Arr.bind(parray, function (unit) { - var relevant = Arr.bind(positions, function (pos) { - return Query.inUnit(unit, pos) ? [ pos - unit.start() ] : []; - }); - - return relevant.length > 0 ? divide(unit, relevant, subdivide) : [ unit ]; - }); - }; - - return { - splits: splits - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.api.PositionArray', - - [ - 'ephox.polaris.parray.Generator', - 'ephox.polaris.parray.Query', - 'ephox.polaris.parray.Split', - 'ephox.polaris.parray.Translate' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Generator, Query, Split, Translate) { - var generate = function (items, generator, _start) { - return Generator.make(items, generator, _start); - }; - - var get = function (parray, offset) { - return Query.get(parray, offset); - }; - - var find = function (parray, pred) { - return Query.find(parray, pred); - }; - - var splits = function (parray, positions, subdivide) { - return Split.splits(parray, positions, subdivide); - }; - - var translate = function (parray, amount) { - return Translate.translate(parray, amount); - }; - - var sublist = function (parray, start, finish) { - return Query.sublist(parray, start, finish); - }; - - return { - generate: generate, - get: get, - find: find, - splits: splits, - translate: translate, - sublist: sublist - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.extract.Find', - - [ - 'ephox.phoenix.api.data.Spot', - 'ephox.phoenix.extract.Extract', - 'ephox.phoenix.extract.TypedList', - 'ephox.polaris.api.PositionArray' - ], - - function (Spot, Extract, TypedList, PositionArray) { - - /** - * Finds an exact reference to a document point generated by Extract - */ - var find = function (universe, parent, offset, optimise) { - var extractions = Extract.typed(universe, parent, optimise); - - var parray = PositionArray.generate(extractions, TypedList.gen); - var spot = PositionArray.get(parray, offset); - return spot.map(function (v) { - return Spot.point(v.element(), offset - v.start()); - }); - }; - - return { - find: find - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.api.general.Extract', - - [ - 'ephox.phoenix.extract.Extract', - 'ephox.phoenix.extract.ExtractText', - 'ephox.phoenix.extract.Find' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Extract, ExtractText, Find) { - - var from = function (universe, item, optimise) { - return Extract.typed(universe, item, optimise); - }; - - var all = function (universe, item, optimise) { - return Extract.items(universe, item, optimise); - }; - - var extract = function (universe, child, offset, optimise) { - return Extract.extract(universe, child, offset, optimise); - }; - - var extractTo = function (universe, child, offset, pred, optimise) { - return Extract.extractTo(universe, child, offset, pred, optimise); - }; - - var find = function (universe, parent, offset, optimise) { - return Find.find(universe, parent, offset, optimise); - }; - - var toText = function (universe, item, optimise) { - return ExtractText.from(universe, item, optimise); - }; - - return { - extract: extract, - extractTo: extractTo, - all: all, - from: from, - find: find, - toText: toText - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.family.Group', - - [ - 'ephox.compass.Arr', - 'ephox.phoenix.api.general.Extract', - 'ephox.polaris.api.Arrays' - ], - - function (Arr, Extract, Arrays) { - /** - * Return an array of arrays split by boundaries - */ - var group = function (universe, items, optimise) { - var extractions = Arr.bind(items, function (item) { - return Extract.from(universe, item, optimise); - }); - - var segments = Arrays.splitby(extractions, function (item) { - return item.isBoundary(); - }); - - return Arr.filter(segments, function (x) { return x.length > 0; }); - }; - - return { - group: group - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.family.Parents', - - [ - 'ephox.compass.Arr', - 'ephox.perhaps.Option' - ], - - function (Arr, Option) { - /** - * Search the parents of both items for a common element - */ - var common = function (universe, item1, item2) { - var item1parents = [item1].concat(universe.up().all(item1)); - var item2parents = [item2].concat(universe.up().all(item2)); - - var r = Arr.find(item1parents, function (x) { - return Arr.exists(item2parents, function (y) { - return universe.eq(y, x); - }); - }); - - return Option.from(r); - }; - - return { - common: common - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.wrap.OrphanText', - - [ - 'ephox.compass.Arr' - ], - - function (Arr) { - // Textnodes cannot be children of these tags - var textBlacklist = [ 'table', 'tbody', 'thead', 'tfoot', 'tr', 'ul', 'ol' ]; - - return function (universe) { - var domUtils = universe.property(); - var validateParent = function (node, blacklist) { - return domUtils.parent(node).map(domUtils.name).map(function (name) { - return !Arr.contains(blacklist, name); - }).getOr(false); - }; - - var validateText = function (textNode) { - return domUtils.isText(textNode) && validateParent(textNode, textBlacklist); - }; - - return { - validateText: validateText - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.family.Range', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.phoenix.api.general.Extract', - 'ephox.phoenix.family.Parents', - 'ephox.phoenix.wrap.OrphanText' - ], - - function (Arr, Fun, Extract, Parents, OrphanText) { - var index = function (universe, items, item) { - return Arr.findIndex(items, Fun.curry(universe.eq, item)); - }; - - var order = function (items, a, delta1, b, delta2) { - return a < b ? items.slice(a + delta1, b + delta2) : items.slice(b + delta2, a + delta1); - }; - - /** - * Returns a flat array of text nodes between two defined nodes. - * - * Deltas are a broken concept. They control whether the item passed is included in the result. - */ - var range = function (universe, item1, delta1, item2, delta2) { - if (universe.eq(item1, item2)) return [item1]; - - return Parents.common(universe, item1, item2).fold(function () { - return []; // no common parent, therefore no intervening path. How does this clash with Path in robin? - }, function (parent) { - var items = [ parent ].concat(Extract.all(universe, parent, Fun.constant(false))); - var start = index(universe, items, item1); - var finish = index(universe, items, item2); - var result = start > -1 && finish > -1 ? order(items, start, delta1, finish, delta2) : []; - var orphanText = OrphanText(universe); - return Arr.filter(result, orphanText.validateText); - }); - }; - - return { - range: range - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.api.general.Family', - - [ - 'ephox.phoenix.family.Group', - 'ephox.phoenix.family.Range' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Group, Range) { - var range = function (universe, start, startDelta, finish, finishDelta) { - return Range.range(universe, start, startDelta, finish, finishDelta); - }; - - var group = function (universe, items, optimise) { - return Group.group(universe, items, optimise); - }; - - return { - range: range, - group: group - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.string.Sanitise', - - [ - - ], - - function () { - /** - * Sanitises a string for use in a CSS class name - */ - var css = function (str) { - // special case; the first character must a letter. More strict than CSS, but easier to implement. - var r = /^[a-zA-Z]/.test(str) ? '' : 'e'; - - // any non-word character becomes a hyphen - var sanitised = str.replace(/[^\w]/gi, '-'); - - return r + sanitised; - }; - - return { - css: css - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.string.Split', - - [ - 'ephox.compass.Arr' - ], - - function (Arr) { - /** - * Splits a string into multiple chunks - */ - var splits = function (value, indices) { - if (indices.length === 0) return [value]; - - var divisions = Arr.foldl(indices, function (acc, x) { - if (x === 0) return acc; - - var part = value.substring(acc.prev, x); - return { - prev: x, - values: acc.values.concat([part]) - }; - }, { prev: 0, values: [] }); - - var lastPoint = indices[indices.length - 1]; - return lastPoint < value.length ? divisions.values.concat(value.substring(lastPoint)) : divisions.values; - }; - - return { - splits: splits - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.api.Strings', - - [ - 'ephox.polaris.string.Sanitise', - 'ephox.polaris.string.Split' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Sanitise, Split) { - var splits = function (text, points) { - return Split.splits(text, points); - }; - - var cssSanitise = function (str) { - return Sanitise.css(str); - }; - - return { - cssSanitise: cssSanitise, - splits: splits - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.search.Splitter', - - [ - 'ephox.compass.Arr', - 'ephox.perhaps.Option', - 'ephox.phoenix.api.data.Spot', - 'ephox.polaris.api.PositionArray', - 'ephox.polaris.api.Strings' - ], - - function (Arr, Option, Spot, PositionArray, Strings) { - - /** - * Re-generates an item's text nodes, split as defined by the positions array. - * - * Returns a PositionArray of the result. - */ - var subdivide = function (universe, item, positions) { - var text = universe.property().getText(item); - var pieces = Arr.filter(Strings.splits(text, positions), function (section) { - return section.length > 0; - }); - - if (pieces.length <= 1) return [ Spot.range(item, 0, text.length) ]; - universe.property().setText(item, pieces[0]); - - var others = PositionArray.generate(pieces.slice(1), function (a, start) { - var nu = universe.create().text(a); - var result = Spot.range(nu, start, start + a.length); - return Option.some(result); - }, pieces[0].length); - - var otherElements = Arr.map(others, function (a) { return a.element(); }); - universe.insert().afterAll(item, otherElements); - - return [ Spot.range(item, 0, pieces[0].length) ].concat(others); - }; - - return { - subdivide: subdivide - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.search.MatchSplitter', - - [ - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.phoenix.search.Splitter', - 'ephox.polaris.api.PositionArray' - ], - - function (Arr, Fun, Splitter, PositionArray) { - /** - * Split each text node in the list using the match endpoints. - * - * Each match is then mapped to the word it matched and the elements that make up the word. - */ - var separate = function (universe, list, matches) { - var allPositions = Arr.bind(matches, function (match) { - return [ match.start(), match.finish() ]; - }); - - var subdivide = function (unit, positions) { - return Splitter.subdivide(universe, unit.element(), positions); - }; - - var structure = PositionArray.splits(list, allPositions, subdivide); - - var collate = function (match) { - var sub = PositionArray.sublist(structure, match.start(), match.finish()); - - var elements = Arr.map(sub, function (unit) { return unit.element(); }); - - var exact = Arr.map(elements, universe.property().getText).join(''); - return { - elements: Fun.constant(elements), - word: match.word, - exact: Fun.constant(exact) - }; - }; - - return Arr.map(matches, collate); - }; - - return { - separate: separate - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.bud.Unicode', - - [ - ], - - function () { - // \u200B needs to be removed manually as it is not considered whitespace when trimming - // \uFEFF does not need to be removed manually. It is considered whitespace when trimming - var zeroWidth = function () { - return '\u200B'; - }; - - // Note, we are separating these out so that we are accounting for the subtle differences - // between them. Eventually, we'll want to combine them again. - var trimNative = function (str) { - return str.replace(/\u200B/, '').trim(); - }; - - var trimWithRegex = function (str) { - return str.replace(/^\s+|\s+$/g, '').replace(/\u200B/, ''); - }; - - return { - zeroWidth: zeroWidth, - trimNative: trimNative, - trimWithRegex: trimWithRegex - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.pattern.Chars', - - [ - 'ephox.bud.Unicode', - 'ephox.peanut.Fun' - ], - - function (Unicode, Fun) { - // \w is a word character - // \' is an apostrophe - // '-' is a hyphen - // \u00C0 - \u00FF are various language characters - // \u2018 and \u2019 are the smart quote characters - var chars = '\\w' + '\'' + '\\-' + '\\u00C0-\\u00FF' + Unicode.zeroWidth() + '\\u2018\\u2019'; - var wordbreak = '[^' + chars + ']'; - var wordchar = '[' + chars + ']'; - - return { - chars: Fun.constant(chars), - wordbreak: Fun.constant(wordbreak), - wordchar: Fun.constant(wordchar) - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.pattern.Custom', - - [ - 'global!RegExp' - ], - - function (RegExp) { - return function (regex, prefix, suffix, flags) { - var term = function () { - return new RegExp(regex, flags.getOr('g')); - }; - - return { - term: term, - prefix: prefix, - suffix: suffix - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.pattern.Unsafe', - - [ - 'ephox.peanut.Fun', - 'ephox.perhaps.Option', - 'ephox.polaris.pattern.Chars', - 'ephox.polaris.pattern.Custom' - ], - - function (Fun, Option, Chars, Custom) { - - /** - * Tokens have no prefix or suffix - */ - var token = function (input) { - return Custom(input, Fun.constant(0), Fun.constant(0), Option.none()); - }; - - /** - * Words have complex rules as to what a "word break" actually is. - * - * These are consumed by the regex and then excluded by prefix/suffix lengths. - */ - var word = function (input) { - var regex = '((?:^\'?)|(?:' + Chars.wordbreak() + '+\'?))' + input + '((?:\'?$)|(?:\'?' + Chars.wordbreak() + '+))'; - - // ASSUMPTION: There are no groups in their input - var prefix = function (match) { - return match.length > 1 ? match[1].length : 0; - }; - - var suffix = function (match) { - return match.length > 2 ? match[2].length : 0; - }; - - return Custom(regex, prefix, suffix, Option.none()); - }; - - return { - token: token, - word: word - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.pattern.Safe', - - [ - 'ephox.polaris.pattern.Unsafe' - ], - - /** Sanitises all inputs to Unsafe */ - function (Unsafe) { - /** Escapes regex characters in a string */ - var sanitise = function (input) { - return input.replace(/[-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&'); - }; - - var word = function (input) { - var value = sanitise(input); - return Unsafe.word(value); - }; - - var token = function (input) { - var value = sanitise(input); - return Unsafe.token(value); - }; - - return { - sanitise: sanitise, - word: word, - token: token - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.api.Pattern', - - [ - 'ephox.polaris.pattern.Chars', - 'ephox.polaris.pattern.Custom', - 'ephox.polaris.pattern.Safe', - 'ephox.polaris.pattern.Unsafe' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Chars, Custom, Safe, Unsafe) { - var safeword = function (input) { - return Safe.word(input); - }; - - var safetoken = function (input) { - return Safe.token(input); - }; - - var custom = function (input, prefix, suffix, flags) { - return Custom(input, prefix, suffix, flags); - }; - - var unsafeword = function (input) { - return Unsafe.word(input); - }; - - var unsafetoken = function (input) { - return Unsafe.token(input); - }; - - var sanitise = function (input) { - return Safe.sanitise(input); - }; - - var chars = function () { - return Chars.chars(); - }; - - var wordbreak = function () { - return Chars.wordbreak(); - }; - - var wordchar = function () { - return Chars.wordchar(); - }; - - return { - safeword: safeword, - safetoken: safetoken, - custom: custom, - unsafeword: unsafeword, - unsafetoken: unsafetoken, - sanitise: sanitise, - chars: chars, - wordbreak: wordbreak, - wordchar: wordchar - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.search.Find', - - [ - 'ephox.peanut.Fun' - ], - - function (Fun) { - - /** - * Returns the offset pairs of all matches of pattern on the input string, adjusting for prefix and suffix offsets - */ - var all = function (input, pattern) { - var term = pattern.term(); - var r = []; - var match = term.exec(input); - while (match) { - var start = match.index + pattern.prefix(match); - var length = match[0].length - pattern.prefix(match) - pattern.suffix(match); - r.push({ - start: Fun.constant(start), - finish: Fun.constant(start + length) - }); - term.lastIndex = start + length; - match = term.exec(input); - } - return r; - }; - - return { - all: all - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.search.Sleuth', - - [ - 'ephox.compass.Arr', - 'ephox.highway.Merger', - 'ephox.polaris.search.Find', - 'global!Array' - ], - - function (Arr, Merger, Find, Array) { - var sort = function (array) { - var r = Array.prototype.slice.call(array, 0); - r.sort(function (a, b) { - if (a.start() < b.start()) return -1; - else if (b.start() < a.start()) return 1; - else return 0; - }); - return r; - }; - - /** - * For each target (pattern, ....), find the matching text (if there is any) and record the start and end offsets. - * - * Then sort the result by start point. - */ - var search = function (text, targets) { - var unsorted = Arr.bind(targets, function (t) { - var results = Find.all(text, t.pattern()); - return Arr.map(results, function (r) { - return Merger.merge(t, { - start: r.start, - finish: r.finish - }); - }); - }); - - return sort(unsorted); - }; - - return { - search: search - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.polaris.api.Search', - - [ - 'ephox.polaris.search.Find', - 'ephox.polaris.search.Sleuth' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Find, Sleuth) { - var findall = function (input, pattern) { - return Find.all(input, pattern); - }; - - var findmany = function (input, targets) { - return Sleuth.search(input, targets); - }; - - return { - findall: findall, - findmany: findmany - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.search.Searcher', - - [ - 'ephox.compass.Arr', - 'ephox.perhaps.Option', - 'ephox.phoenix.api.data.NamedPattern', - 'ephox.phoenix.api.data.Spot', - 'ephox.phoenix.api.general.Family', - 'ephox.phoenix.extract.TypedList', - 'ephox.phoenix.search.MatchSplitter', - 'ephox.polaris.api.Pattern', - 'ephox.polaris.api.PositionArray', - 'ephox.polaris.api.Search' - ], - - function (Arr, Option, NamedPattern, Spot, Family, TypedList, MatchSplitter, Pattern, PositionArray, Search) { - var gen = function (universe, input) { - return PositionArray.generate(input, function (unit, offset) { - var finish = offset + universe.property().getText(unit).length; - return Option.from(Spot.range(unit, offset, finish)); - }); - }; - - /** - * Extracts groups of elements separated by boundaries. - * - * For each group, search the text for pattern matches. - * - * Returns a list of matches. - */ - var run = function (universe, elements, patterns, optimise) { - var sections = Family.group(universe, elements, optimise); - var result = Arr.bind(sections, function (x) { - var input = TypedList.justText(x); - var text = Arr.map(input, universe.property().getText).join(''); - - var matches = Search.findmany(text, patterns); - var plist = gen(universe, input); - - return MatchSplitter.separate(universe, plist, matches); - }); - - return result; - }; - - - /** - * Runs a search for one or more words - */ - var safeWords = function (universe, elements, words, optimise) { - var patterns = Arr.map(words, function (word) { - var pattern = Pattern.safeword(word); - return NamedPattern(word, pattern); - }); - return run(universe, elements, patterns, optimise); - }; - - - /** - * Runs a search for a single token - */ - var safeToken = function (universe, elements, token, optimise) { - var pattern = NamedPattern(token, Pattern.safetoken(token)); - return run(universe, elements, [pattern], optimise); - }; - - return { - safeWords: safeWords, - safeToken: safeToken, - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.api.general.Search', - - [ - 'ephox.phoenix.search.Searcher' - ], - - /** - * Documentation is in the actual implementations. - */ - function (Searcher) { - var run = function (universe, items, patterns, optimise) { - return Searcher.run(universe, items, patterns, optimise); - }; - - var safeWords = function (universe, items, words, optimise) { - return Searcher.safeWords(universe, items, words, optimise); - }; - - var safeToken = function (universe, items, token, optimise) { - return Searcher.safeToken(universe, items, token, optimise); - }; - - return { - safeWords: safeWords, - safeToken: safeToken, - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.phoenix.api.dom.DomSearch', - - [ - 'ephox.boss.api.DomUniverse', - 'ephox.phoenix.api.general.Search' - ], - - /** - * Documentation is in the actual implementations. - */ - function (DomUniverse, Search) { - var universe = DomUniverse(); - - var run = function (elements, patterns, optimise) { - return Search.run(universe, elements, patterns, optimise); - }; - - var safeWords = function (elements, words, optimise) { - return Search.safeWords(universe, elements, words, optimise); - }; - - var safeToken = function (elements, token, optimise) { - return Search.safeToken(universe, elements, token, optimise); - }; - - return { - safeWords: safeWords, - safeToken: safeToken, - run: run - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sugar.api.SelectorExists', - - [ - 'ephox.sugar.api.SelectorFind' - ], - - function (SelectorFind) { - var any = function (selector) { - return SelectorFind.first(selector).isSome(); - }; - - var ancestor = function (scope, selector, isRoot) { - return SelectorFind.ancestor(scope, selector, isRoot).isSome(); - }; - - var sibling = function (scope, selector) { - return SelectorFind.sibling(scope, selector).isSome(); - }; - - var child = function (scope, selector) { - return SelectorFind.child(scope, selector).isSome(); - }; - - var descendant = function (scope, selector) { - return SelectorFind.descendant(scope, selector).isSome(); - }; - - var closest = function (scope, selector, isRoot) { - return SelectorFind.closest(scope, selector, isRoot).isSome(); - }; - - return { - any: any, - ancestor: ancestor, - sibling: sibling, - child: child, - descendant: descendant, - closest: closest - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.limbo.process.Preprocessor', - - [ - 'ephox.compass.Arr', - 'ephox.perhaps.Option', - 'ephox.phoenix.api.dom.DomSearch', - 'ephox.polaris.api.Pattern', - 'ephox.scullion.Struct', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.InsertAll', - 'ephox.sugar.api.Node', - 'ephox.sugar.api.SelectorExists' - ], - - function (Arr, Option, DomSearch, Pattern, Struct, Attr, Css, Element, Html, Insert, InsertAll, Node, SelectorExists) { - //the big fat holy grail of URL pattern matching.. - var regex = '((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)(:[0-9]+)?((?:\\/[\\+~%\\/\\.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@\\.\\w_]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)'; - - var findLinks = function (elements) { - var data = Struct.immutable('word', 'pattern'); - var term = Pattern.unsafetoken(regex); - var pattern = data('__INTERNAL__', term); - return DomSearch.run(elements, [pattern]); - }; - - var notInLink = function (element) { - // return true; - return !SelectorExists.closest(element, 'a'); - }; - - var wrap = function (elements) { - return Option.from(elements[0]).filter(notInLink).map(function (first) { - var tag = Element.fromTag('a'); - Insert.before(first, tag); - InsertAll.append(tag, elements); - Attr.set(tag, 'href', Html.get(tag)); - return tag; - }); - }; - - var links = function (elements) { - var matches = findLinks(elements); - Arr.each(matches, function (match) { - // TBIO-2444 Do not wrap anything with @ symbol, it could be an email - if(match.exact().indexOf('@') < 0) wrap(match.elements()); - }); - }; - - var position = function (elements) { - Arr.each(elements, function (elem) { - if (Node.isElement(elem)) Css.remove(elem, 'position'); - }); - }; - - return { - links: links, - position: position - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.limbo.api.RunPaste', - - [ - 'ephox.compass.Arr', - 'ephox.limbo.process.PasteFilters', - 'ephox.limbo.process.Preprocessor', - 'ephox.pastiche.api.HybridAction', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Traverse' - ], - - function (Arr, PasteFilters, Preprocessor, HybridAction, Html, Traverse) { - var preprocess = function (platform, container) { - var children = Traverse.children(container); - Arr.each([ Preprocessor.links, Preprocessor.position ], function (f) { - f(children); - }); - }; - - var go = function (doc, platform, container, merging, isWord) { - preprocess(platform, container); - var html = Html.get(container); - var filters = PasteFilters.derive(isWord, merging, platform); - return HybridAction.go(doc, html, filters); - }; - - return { - go: go - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.limbo.api.Sources', - - [ - 'ephox.pastiche.api.HybridAction', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.PredicateExists' - ], - - function (HybridAction, Attr, Html, PredicateExists) { - var ie11 = function (container) { - // This looks expensive. Using grep on corpus, - // string searching for " -1 : false; - }); - }; - - var other = function (container) { - var html = Html.get(container); - return HybridAction.isWordContent(html); - }; - - var isWord = function (platform, container) { - var browser = platform.browser; - var detector = browser.isIE() && browser.version.major >= 11 ? ie11 : other; - return detector(container); - }; - - return { - isWord: isWord - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.data.Range', - - [ - 'ephox.peanut.Fun', - 'ephox.sugar.api.Compare' - ], - - function (Fun, Compare) { - return function (startContainer, startOffset, endContainer, endOffset) { - var collapsed = Compare.eq(startContainer, endContainer) && startOffset === endOffset; - - return { - startContainer: Fun.constant(startContainer), - startOffset: Fun.constant(startOffset), - endContainer: Fun.constant(endContainer), - endOffset: Fun.constant(endOffset), - collapsed: Fun.constant(collapsed) - }; - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.api.BodySwitch', - - [ - 'ephox.sloth.data.Range', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.Traverse' - ], - - function (Range, Element, Insert, Remove, Traverse) { - return function (selection) { - - var placeholder = Element.fromTag('br'); - - var toOn = function (element, offscreen) { - element.dom().focus(); - }; - - var getWin = function (offscreen) { - var doc = Traverse.owner(offscreen); - return doc.dom().defaultView; - }; - - var toOff = function (element, offscreen) { - var win = getWin(offscreen); - win.focus(); - Insert.append(offscreen, placeholder); - selection.set(win, Range(placeholder, 0, placeholder, 0)); - }; - - var cleanup = function () { - Remove.remove(placeholder); - }; - - return { - cleanup: cleanup, - toOn: toOn, - toOff: toOff - }; - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.api.DivSwitch', - - [ - 'ephox.peanut.Fun' - ], - - function (Fun) { - return function () { - var toOn = function (element, offscreen) { - element.dom().focus(); - }; - - var toOff = function (element, offscreen) { - offscreen.dom().focus(); - }; - - var cleanup = Fun.identity; - - return { - toOn: toOn, - toOff: toOff, - cleanup: cleanup - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.plumber.tap.control.BlockControl', - - [ - ], - - function () { - var create = function () { - var blocked = false; - var isBlocked = function () { return blocked; }; - var block = function () { blocked = true; }; - var unblock = function () { blocked = false; }; - - return { - isBlocked: isBlocked, - block: block, - unblock: unblock - } - }; - - return { - create: create - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.plumber.tap.wrap.Tapped', - - [ - ], - - function () { - var create = function (control, instance) { - return { - control: control, - instance: instance - } - }; - - return { - create: create - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.plumber.tap.function.BlockTap', - - [ - 'ephox.plumber.tap.control.BlockControl', - 'ephox.plumber.tap.wrap.Tapped' - ], - - function (BlockControl, Tapped) { - var tap = function (fn) { - var control = BlockControl.create(); - - var instance = function () { - if (!control.isBlocked()) - fn.apply(null, arguments); - }; - - return Tapped.create(control, instance); - }; - - return { - tap: tap - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.api.Paste', - - [ - 'ephox.fred.PlatformDetection', - 'ephox.peanut.Fun', - 'global!setTimeout' - ], - - function (PlatformDetection, Fun, setTimeout) { - var detection = PlatformDetection.detect(); - - var ie10 = function (doc, tap, postpaste) { - // Block the tap, and fire a paste. - tap.control.block(); - doc.dom().execCommand('paste'); - postpaste(); - tap.control.unblock(); - }; - - var others = function (doc, tap, postpaste) { - setTimeout(postpaste, 1); - }; - - // Most browsers can just let the paste event continue. - // on IE10, the paste event must be cancelled and done manually - var willBlock = detection.browser.isIE() && detection.browser.version.major <= 10; - - var runner = willBlock ? ie10 : others; - - var run = function (doc, tap, postpaste) { - return runner(doc, tap, postpaste); - }; - - return { - willBlock: Fun.constant(willBlock), - run: run - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.engine.Consolidator', - - [ - 'ephox.compass.Arr', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.InsertAll', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.Traverse' - ], - - function (Arr, Element, Insert, InsertAll, Remove, Traverse) { - // TBIO-2440. In some situations on Windows 7 Chrome, pasting into the offscreen div - // actually splits the div in two. The purpose of this function is to incorporate - // any of the split divs into the main one. - var consolidate = function (offscreen, isOffscreen) { - Traverse.nextSibling(offscreen).filter(isOffscreen).each(function (other) { - var children = Traverse.children(other); - InsertAll.append(offscreen, children); - Remove.remove(other); - }); - oneChild(offscreen, isOffscreen); - }; - // TBIO-3010: In Chrome (reproducible in both Windows and Mac) when pasting from notepad the offscreen div - // generates multiple sloth divs, causing the content to be not pasted correctly. This function - // runs across the children of the offscreen div and if it is a sloth element then it extract - // the content and wraps it in a normal div. - var cleanChild = function (child, offscreen) { - var children = Traverse.children(child); - var wrapper = Element.fromTag('div', Traverse.owner(child).dom()); - InsertAll.append(wrapper, children); - Insert.before(child, wrapper); - Remove.remove(child); - }; - - var oneChild = function (offscreen, isOffscreen) { - var children = Traverse.children(offscreen); - Arr.each(children, function (child) { - if (isOffscreen(child)) cleanChild(child, offscreen); - }); - }; - - return { - consolidate: consolidate - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.engine.Offscreen', - - [ - 'ephox.epithet.Id', - 'ephox.scullion.Struct', - 'ephox.sloth.engine.Consolidator', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Class', - 'ephox.sugar.api.Css', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Html', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.SelectorFind', - 'ephox.sugar.api.Traverse' - ], - - function (Id, Struct, Consolidator, Attr, Class, Css, Element, Html, Insert, Remove, SelectorFind, Traverse) { - var hash = Id.generate('ephox-sloth-bin'); - - return function (switcher) { - var offscreen = Element.fromTag('div'); - Attr.set(offscreen, 'contenteditable', 'true'); - Class.add(offscreen, hash); - Css.setAll(offscreen, { - position: 'absolute', - left: '0px', - top: '0px', - width: '0px', - height: '0px', - overflow: 'hidden' - }); - - var attach = function (target) { - Remove.empty(offscreen); - Insert.append(target, offscreen); - }; - - var focus = function () { - var body = SelectorFind.ancestor(offscreen, 'body'); - body.each(function (b) { - switcher.toOff(b, offscreen); - }); - }; - - var isOffscreen = function (other) { - return Class.has(other, hash); - }; - - var contents = function () { - Consolidator.consolidate(offscreen, isOffscreen); - var data = Struct.immutable('elements', 'html', 'container'); - var elements = Traverse.children(offscreen); - var html = Html.get(offscreen); - return data(elements, html, offscreen); - }; - - var detach = function () { - Remove.remove(offscreen); - }; - - var container = function () { - return offscreen; - }; - - return { - attach: attach, - focus: focus, - contents: contents, - container: container, - detach: detach - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.sloth.api.ProxyPaste', - - [ - 'ephox.peanut.Fun', - 'ephox.plumber.tap.function.BlockTap', - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.sloth.api.Paste', - 'ephox.sloth.engine.Offscreen', - 'ephox.sugar.api.Traverse' - ], - - function (Fun, BlockTap, Event, Events, Paste, Offscreen, Traverse) { - return function (switcher, element) { - var offscreen = Offscreen(switcher); - - var postpaste = function () { - switcher.cleanup(); - var contents = offscreen.contents(); - offscreen.detach(); - events.trigger.after(contents.elements(), contents.html(), offscreen.container()); - }; - - var tap = BlockTap.tap(function () { - events.trigger.before(); - offscreen.attach(element); - offscreen.focus(); - Paste.run(Traverse.owner(element), tap, postpaste); - }); - - var handler = function () { - tap.instance(); - }; - - var events = Events.create({ - before: Event([]), - after: Event(['elements', 'html', 'container']) - }); - - var destroy = Fun.noop; - - return { - instance: Fun.constant(handler), - destroy: destroy, - events: events.registry - }; - }; - - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.pastiche.Pastiche', - - [ - 'ephox.cement.api.CementConstants', - 'ephox.cement.pastiche.IeBlob', - 'ephox.compass.Arr', - 'ephox.fred.PlatformDetection', - 'ephox.fussy.api.WindowSelection', - 'ephox.limbo.api.RunPaste', - 'ephox.limbo.api.Sources', - 'ephox.peanut.Fun', - 'ephox.perhaps.Option', - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.sloth.api.BodySwitch', - 'ephox.sloth.api.DivSwitch', - 'ephox.sloth.api.ProxyPaste', - 'ephox.sugar.api.Class', - 'ephox.sugar.api.Elements', - 'ephox.sugar.api.Node', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.Traverse', - 'global!console', - 'global!setTimeout' - ], - - function (CementConstants, IeBlob, Arr, PlatformDetection, WindowSelection, RunPaste, Sources, Fun, Option, Event, Events, BodySwitch, DivSwitch, ProxyPaste, Class, Elements, Node, Remove, Traverse, console, setTimeout) { - var platform = PlatformDetection.detect(); - - return function (prePasteFilter, body, mergeSettings, intraFlag) { - // Temporary hack until we restructure in TBIO-1515 - var findClipboardTags = function (container, isWord) { - return (intraFlag !== undefined && !isWord) ? intraFlag.findClipboardTags(Traverse.children(container)) : Option.none(); - }; - - - var events = Events.create({ - paste: Event(['elements', 'assets']), - error: Event(['message']) - }); - - var fakeSelecton = { - // dupe from hare.selection.Selection - set: function (win, range) { - WindowSelection.setExact(win, range.startContainer(), range.startOffset(), range.endContainer(), range.endOffset()); - } - }; - - // TBIO-2019: scrollbar lock on paste. - // When using DivSwitch for inline editing, FF & webkit browsers will lock the scrollbar after paste - // This is because the the offscreen div was not used and hence no filtration was run and the scrollbar unlock code never got called - // To verify this paste formatted html and see the formatting unchanged test - // DivSwitch calls focus on the offscreen div, FF & Webkit do not set selection on focus, - // so inserting into offscreen div fails, bypassing the rest of the past process. - // It works in IE because amazingly IE sets selection on focus. - // Calling BodySwitch with IE inline mode paste fails altogether, the cause of the failure is unknown - var switchF = platform.browser.isIE() && Node.name(body) !== 'body' ? DivSwitch: BodySwitch; - var switcher = switchF(fakeSelecton); - var documentElement = Traverse.owner(body); - var proxyPaste = ProxyPaste(switcher, body); - var backgroundAssets = Option.none(); - - proxyPaste.events.after.bind(function (event) { - var container = event.container(); - switcher.toOn(body, container); - - // Run a paste filter over the off-screen div. - prePasteFilter(container); - - Class.add(container, CementConstants.binStyle()); - var isWord = Sources.isWord(platform, container); - - var pasteImpl = function (pasteSettings) { - var merging = (isWord && pasteSettings.mergeOfficeStyles) === true || (!isWord && pasteSettings.mergeHtmlStyles === true); - - try { - var dump = RunPaste.go(documentElement, platform, container, merging, isWord); - if (dump !== undefined && dump !== null && dump.length > 0) { - var elements = Elements.fromHtml(dump); - - backgroundAssets.fold(function () { - events.trigger.paste(elements, []); - }, function (future) { - future.get(function (assets) { - events.trigger.paste(elements, assets); - }); - }); - backgroundAssets = Option.none(); - } else { - // This is required to stop the scroll blocking. (TBIO-2440) - events.trigger.paste([], []); - } - } catch (e) { - console.error(e); - events.trigger.error('errors.paste.process.failure'); - } - }; - - // This potentially prompts the user, so it needs to be a callback - var normalPaste = Fun.curry(mergeSettings.get, isWord, pasteImpl); - - // Temporary hack until we restructure in TBIO-1515 - findClipboardTags(container, isWord).fold(normalPaste, function (tags) { - Arr.each(tags, Remove.remove); - // making sure it's asynchronous in both scenarios - setTimeout(function () { - // No need to call mergeSettings.get, we're just hard coding true - pasteImpl({ mergeHtmlStyles: true }); - }, 0); - }); - }); - - var destroy = function () { - proxyPaste.destroy(); - }; - - var handler = function (raw) { - try { - backgroundAssets = IeBlob.convert(raw); - var instance = proxyPaste.instance(); - instance(); - } catch (e) { - console.error(e); - events.trigger.error('errors.paste.process.failure'); - } - }; - - return { - handler: handler, - isSupported: Fun.constant(true), - events: events.registry, - destroy: destroy - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.smartpaste.PasteHandlers', - - [ - 'ephox.cement.html.HtmlPaste', - 'ephox.cement.images.ImagePaste', - 'ephox.cement.pastiche.Pastiche', - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.scullion.Struct', - 'ephox.violin.Strings' - ], - - function (HtmlPaste, ImagePaste, Pastiche, Event, Events, Struct, Strings) { - var result = Struct.immutable('captured'); - - var dataContainsMicrosoftOfficeUrn = function (data) { - // copied from ELJ, this logic doesn't exist in Tord and Pastiche's version isn't good enough - return Strings.contains(data, ' SourceEvent - */ - return function (fields, source) { - var mine = Event(fields); - var numHandlers = 0; - - var triggerer = function(evt) { - // yay! Let's unbox this event, convert it to a varargs, so it can be re-boxed! - var args = Arr.map(fields, function (field) { - return evt[field](); - }); - mine.trigger.apply(null, args); - }; - - var bind = function (handler) { - mine.bind(handler); - numHandlers++; - if (numHandlers === 1) { - source.bind(triggerer); - } - }; - - var unbind = function (handler) { - mine.unbind(handler); - numHandlers--; - if (numHandlers === 0) { - source.unbind(triggerer); - } - }; - - return { - bind: bind, - unbind: unbind, - trigger: Fun.die("Cannot trigger a source event.") - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.cement.api.Cement', - - [ - 'ephox.cement.flash.Flash', - 'ephox.cement.smartpaste.MergeSettings', - 'ephox.cement.smartpaste.PasteBroker', - 'ephox.limbo.api.RtfImage', - 'ephox.plumber.tap.function.BlockTap', - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.porkbun.SourceEvent', - 'ephox.sloth.api.Paste', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.InsertAll' - ], - - function (Flash, MergeSettings, PasteBroker, RtfImage, BlockTap, Event, Events, SourceEvent, Paste, Element, InsertAll) { - return function (body, createDialog, prePasteFilter, cementConfig) { - var flash = Flash(createDialog, cementConfig); - var mergeSettings = MergeSettings(createDialog, cementConfig); - var pasteSettings = { baseUrl: cementConfig.baseUrl, allowLocalImages: cementConfig.allowLocalImages, intraFlag: cementConfig.intraFlag }; - var pasteBroker = PasteBroker(prePasteFilter, body, mergeSettings, pasteSettings); - - var events = Events.create({ - cancel: SourceEvent([], mergeSettings.events.cancel), // only merge settings can cancel paste, not flash - error: Event(['message']), - insert: Event(['elements', 'assets']) - }); - - var insert = function (event) { - pasteTap.control.unblock(); - events.trigger.insert(event.elements(), event.assets()); - }; - - flash.events.insert.bind(insert); - - var pasteTap = BlockTap.tap(function (nativeEvent) { - if (Paste.willBlock()) { - /* - On IE10, a second paste is required. That happens synchronously, before we can - return anything that says "block the tap". - In order to make this code reentrant, we need to eagerly block. - */ - pasteTap.control.block(); - - /* - We then need to cancel the native event, because due to reentrancy the "is blocked" - check below actually returns false. If we don't prevent default here, we allow the - default paste to complete on the initial paste event. - */ - nativeEvent.preventDefault(); - } - - pasteBroker.handlePaste(nativeEvent); - - // If dialogs are opened, we set the block and need to prevent default - if (pasteTap.control.isBlocked()) nativeEvent.preventDefault(); - }); - - // block the broker from receiving paste events while the merge window is open. - mergeSettings.events.open.bind(pasteTap.control.block); - mergeSettings.events.close.bind(pasteTap.control.unblock); - - pasteBroker.events.paste.bind(function (event) { - var elements = event.elements(); - var content = Element.fromTag('div'); - InsertAll.append(content, elements); - - if (RtfImage.exists(content)) { - // block the broker from receiving paste events while the flash window is open. - pasteTap.control.block(); - flash.gordon(content, event.assets()); - } else { - insert(event); - } - }); - - var destroy = function () { - pasteBroker.destroy(); - }; - - var passThroughError = function (event) { - pasteTap.control.unblock(); - events.trigger.error(event.message()); - }; - flash.events.error.bind(passThroughError); - pasteBroker.events.error.bind(passThroughError); - - return { - paste: pasteTap.instance, - isBlocked: pasteTap.control.isBlocked, - destroy: destroy, - events: events.registry - }; - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.powerpaste.settings.Defaults', - - [ - - ], - - function() { - return { - officeStyles: 'prompt', - htmlStyles: 'clean' - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.powerpaste.styles.Styles', - - [ - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.SelectorExists', - 'ephox.sugar.api.SelectorFind', - 'global!document' - ], - - function(Attr, Element, Insert, Remove, SelectorExists, SelectorFind, document) { - var styleid = 'powerpaste-styles'; - var styleidselector = '#' + styleid; - - var injectStyles = function(url) { - if (!SelectorExists.any(styleidselector)){ - var htmlString = - ''; - - var style = Element.fromHtml(htmlString); - Attr.set(style, 'type', 'text/css'); - Attr.set(style, 'id', styleid); - - var head = SelectorFind.first('head').getOrDie('Head element could not be found.'); - - Insert.append(head, style); - - } - }; - - var removeStyles = function() { - if (SelectorExists.any(styleidselector)) { - - var head = SelectorFind.first('head').getOrDie('Head element could not be found.'); - var style = SelectorFind.descendant(head, styleidselector).getOrDie('The style element could not be removed'); - - Remove.remove(style); - - } - }; - - return { - injectStyles: injectStyles, - removeStyles: removeStyles - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.powerpaste.tinymce.ModernTinyDialog', - - [ - 'ephox.porkbun.Event', - 'ephox.porkbun.Events', - 'ephox.powerpaste.util.NodeUtil', - 'ephox.sugar.api.Attr', - 'ephox.sugar.api.Element', - 'ephox.sugar.api.Insert', - 'ephox.sugar.api.Remove', - 'ephox.sugar.api.SelectorFind' - ], - - function(Event, Events, NodeUtil, Attr, Element, Insert, Remove, SelectorFind) { - return function(editor) { - var createDialog = function() { - var win, title = "", content = "", controls = [], dialogContent = null; - - var events = Events.create({ - close: Event([]) - }); - - var setTitle = function(label) { - title = label; - }; - - var setContent = function(c) { - if (tinymce.Env.safari) { - - } - var contentString = NodeUtil.nodeToString(c.dom()); - content = [{ - type: 'container', - html: contentString - }]; - dialogContent = c; - }; - - var setButtons = function(buttons) { - var tinyButtons = []; - - buttons.forEach(function(element, index, array){ - //Convert cement buttons into tiny buttons - tinyButtons.push({ - text: element.text, - onclick: element.click - }); - }); - - controls = tinyButtons; - - }; - - var winCloseEvent = function(e) { - events.trigger.close(); - }; - - var programmaticWinClose = function() { - //Unbind the close event, as the dialog close event has already triggered and doesn't need to be triggered again - win.off('close', winCloseEvent); - win.close('close'); - }; - - var show = function() { - //If we don't have any buttons, we need to add one (even if it just closes the dialog) - if (controls.length === 0) { - //This gives us back the capability to hit esc to close the dialog & the dialog doesn't take focus away from the editor - controls = [{ - text: 'Close', - onclick: function() { - win.close(); - } - }]; - } - - var winSettings = { - title: title, - spacing: 10, - padding: 10, - items: content, - buttons: controls - }; - - win = editor.windowManager.open(winSettings); - - var tinyWindow = Element.fromDom(win.getEl()); - var proxy = SelectorFind.descendant(tinyWindow, '.' + Attr.get(dialogContent, 'class')).getOrDie('We must find this element or we cannot continue'); - Insert.before(proxy, dialogContent); - Remove.remove(proxy); - - win.on('close', winCloseEvent); - - }; - - var hide = function() { - programmaticWinClose(); - }; - - var destroy = function() { - programmaticWinClose(); - }; - - var reflow = function() { - //(this doesn't work, reflow doesn't calc based on what's actually there, it works it out based on what's in the container on tiny's side) - //So we could update the items, but for now the dialog sizes match so... - }; - - return { - events: events.registry, - setTitle: setTitle, - setContent: setContent, - setButtons: setButtons, - show: show, - hide: hide, - destroy: destroy, - reflow: reflow - }; - }; - - return { - createDialog: createDialog - }; - }; - - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.powerpaste.tinymce.ModernPowerPaste', - [ - 'ephox.cement.api.Cement', - 'ephox.compass.Arr', - 'ephox.peanut.Fun', - 'ephox.powerpaste.i18n.I18n', - 'ephox.powerpaste.settings.Defaults', - 'ephox.powerpaste.styles.Styles', - 'ephox.powerpaste.tinymce.ErrorDialog', - 'ephox.powerpaste.tinymce.ModernTinyDialog', - 'ephox.powerpaste.util.NodeUtil', - 'ephox.sugar.api.DomEvent', - 'ephox.sugar.api.Element', - 'global!setTimeout', - 'global!tinymce' - ], - function (Cement, Arr, Fun, I18n, Defaults, Styles, ErrorDialog, ModernTinyDialog, NodeUtil, DomEvent, Element, setTimeout, tinymce) { - return function (editor, url, settings, uploader) { - - var bm, swfUrl, imgUrl, cssUrl, jsUrl; - - jsUrl = (settings ? settings.swfUrl : url) + '/js'; - swfUrl = (settings ? settings.swfUrl : url) + '/flash/textboxpaste.swf'; - imgUrl = (settings ? settings.imgUrl : url) + '/img/spinner_96.gif'; - cssUrl = (settings ? settings.cssUrl : url) + '/css/editorcss.css'; - - editor.on('init', function(e) { - //Inject the styles for our dialog into the page - Styles.injectStyles(imgUrl); - - //Inject css into editor - editor.dom.loadCSS(cssUrl); - - var cementSettings = { - baseUrl: jsUrl, - swf: swfUrl, - officeStyles: editor.settings.powerpaste_word_import || Defaults.officeStyles, - htmlStyles: editor.settings.powerpaste_html_import || Defaults.htmlStyles, - translations: I18n.translate, - allowLocalImages: editor.settings.powerpaste_allow_local_images - }; - - var tinyDialog = ModernTinyDialog(editor); - var ed = Element.fromDom(editor.getBody()); - var cement = Cement(ed, tinyDialog.createDialog, Fun.noop, cementSettings); - - cement.events.cancel.bind(function() { - bm = null; - }); - - cement.events.error.bind(function(event) { - - bm = null; - - ErrorDialog.showDialog(editor, - I18n.translate( - event.message() - ) - ); - }); - - cement.events.insert.bind(function(event) { - - var stringHTML = Arr.map(event.elements(), function (element) { - return NodeUtil.nodeToString(element.dom()); - }).join(''); - - //This code was taken from tiny4 - if (editor.hasEventListeners('PastePostProcess')) { - // We need to attach the element to the DOM so Sizzle selectors work on the contents - var tempBody = editor.dom.add(editor.getBody(), 'div', {style: 'display:none'}, stringHTML); - stringHTML = editor.fire('PastePostProcess', {node: tempBody}).node.innerHTML; - editor.dom.remove(tempBody); - } - - //Ensure the editor has focus - editor.focus(); - - //Wait for focus to come back (ie10) - setTimeout(function(){ - - //Once we've got the html we want to insert and have performed post processing, return the - editor.selection.moveToBookmark(bm); //the selection to where it was - - //Delete the bookmark reference so we can do it all again - bm = null; - - editor.undoManager.transact(function(){ - //Content insertion - editor.insertContent(stringHTML, {merge: editor.settings.paste_merge_formats !== false}); - - uploader.prepareImages(event.assets()); - }); - - uploader.uploadImages(event.assets()); - - }, 1); - - - }); - - DomEvent.bind(ed, 'paste', function (e) { - //We need to bookmark the selection before we paste the content - //So that it knows where to place it back in to the editor when we insert from cement. - - if (!bm) { - //Since ie pastes twice, we need to get the bookmark once and ignore the second - bm = editor.selection.getBookmark(); - } - - cement.paste(e.raw()); - - //IE appears to require that we blur the iframe - setTimeout(function() { - if (editor.windowManager.windows[0]) { - editor.windowManager.windows[0].getEl().focus(); - } - }, 1); - }); - - }); - - editor.on('remove', function(e) { - //When we're removing the last editor, we need to remove our injected styles - if (tinymce.editors.length === 1) { - Styles.removeStyles(); - } - }); - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.powerpaste.tinymce.TinyPowerPaste', - [ - 'ephox.powerpaste.imageupload.UploaderFactory', - 'ephox.powerpaste.tinymce.LegacyPowerPaste', - 'ephox.powerpaste.tinymce.ModernPowerDrop', - 'ephox.powerpaste.tinymce.ModernPowerPaste', - 'global!tinymce' - ], - - function (UploaderFactory, LegacyPowerPaste, ModernPowerDrop, ModernPowerPaste, tinymce) { - /*jshint jquery:true */ - return function (settings) { - - return function (editor, url) { - - var setupModern = function () { - var uploader = UploaderFactory(editor); - - ModernPowerPaste(editor, url, settings, uploader); - - if (!editor.settings.powerpaste_block_drop) { - ModernPowerDrop(editor, url, settings, uploader); - } - }; - - var setupLegacy = function () { - LegacyPowerPaste(editor, settings); - }; - - if (tinymce.Env.ie && tinymce.Env.ie < 10) { - setupLegacy(); - } else { - setupModern(); - } - - var blockDragEvents = function (element) { - editor.dom.bind(element, 'drop dragstart dragend dragover dragenter dragleave dragdrop draggesture', function(e) { - return tinymce.dom.Event.cancel(e); - }); - }; - - if (editor.settings.powerpaste_block_drop) { - editor.on('init', function(e) { - blockDragEvents(editor.getBody()); - blockDragEvents(editor.getDoc()); - }); - } - - if (editor.settings.paste_postprocess) { - editor.on('PastePostProcess', function(e) { - editor.settings.paste_postprocess.call(this, this, e); - }); - } - }; - }; - } -); - -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -(function (define, require, demand) { -define( - 'ephox.powerpaste.PowerPastePlugin', - [ - 'ephox.powerpaste.tinymce.TinyPowerPaste', - 'global!tinymce' - ], - function(TinyPowerPaste, tinymce) { - return function(settings) { - tinymce.PluginManager.requireLangPack('powerpaste', 'ar,ca,cs,da,de,el,es,fa,fi,fr_FR,he_IL,hr,hu_HU,it,ja,kk,ko_KR,nb_NO,nl,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,sv_SE,th_TH,tr,uk,zh_CN,zh_TW'); - tinymce.PluginManager.add('powerpaste', TinyPowerPaste(settings)); - - }; - } -); -})(ephox.bolt.module.api.define, ephox.bolt.module.api.require, ephox.bolt.module.api.demand); - -dem('ephox.powerpaste.PowerPastePlugin')(); - if (this.ephox && this.ephox.bolt) - this.ephox.bolt = old; -})(); diff --git a/static/tinymce1.3/plugins/powerpaste/plugin.min.js b/static/tinymce1.3/plugins/powerpaste/plugin.min.js deleted file mode 100644 index a6f2107a..00000000 --- a/static/tinymce1.3/plugins/powerpaste/plugin.min.js +++ /dev/null @@ -1,23 +0,0 @@ -; -/* Ephox Fluffy plugin - * - * Copyright 2010-2016 Ephox Corporation. All rights reserved. - * - * Version: 1.0.0-3 - */ - -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;ih&&(b(i),f())},g)};return{waitFor:d}}),h("4",window),h("c",document),g("8",["b","4","c"],function(a,b,c){var d=function(a,c){var d=a.currentStyle?a.currentStyle[c]:b.getComputedStyle(a,null)[c];return d?d:""},e=function(a){return function(){var b=d(a,"position").toLowerCase();return"absolute"===b||"fixed"===b}},f=function(){var a=c.createElement("div");return a.style.display="none",a.className="mce-floatpanel",a},g=function(a){a.parentNode.removeChild(a)},h=function(b,d){var h=f();c.body.appendChild(h),a.waitFor(e(h),function(){g(h),b()},function(){g(h),d()},10,5e3)};return{waitForSkinLoaded:h}}),h("9",alert),g("6",["8","9"],function(a,b){var c=function(a,b){a.notificationManager?a.notificationManager.open({text:b,type:"warning",timeout:0,icon:""}):a.windowManager.alert(b)},d=function(d){d.EditorManager.on("AddEditor",function(d){var e=d.editor,f=e.settings.service_message;f&&a.waitForSkinLoaded(function(){c(e,e.settings.service_message)},function(){b(f)})})};return{error:c,register:d}}),g("2",["5","1","6","4"],function(a,b,c,d){var e=function(b){var c,e,f=a.resolve(d,"tinymce.util.URI");c=b.base_url,c&&(this.baseURL=new f(this.documentBaseURL).toAbsolute(c.replace(/\/+$/,"")),this.baseURI=new f(this.baseURL)),e=b.suffix,b.suffix&&(this.suffix=e),this.defaultSettings=b},f=function(b){var c=a.resolve(d,"tinymce.util.Tools");return[c.extend({},this.defaultSettings,b)]},g=function(a){return"function"!=typeof a.overrideDefaults},h=function(a){c.register(a),a.overrideDefaults=e,a.EditorManager.init=b.before(a.EditorManager.init,f)};return{patch:b.nu(g,h)}}),g("a",[],function(){var a=0,b=1,c=-1,d=function(a){return parseInt(a,10)},e=function(a){return function(){return a}},f=function(a,b,c){return{major:e(a),minor:e(b),patch:e(c)}},g=function(a){var b=/([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(a);return b?f(d(b[1]),d(b[2]),d(b[3])):f(0,0,0)},h=function(d,e){var f=d-e;return 0===f?a:f>0?b:c},i=function(b,c){var d=h(b.major(),c.major());if(d!==a)return d;var e=h(b.minor(),c.minor());if(e!==a)return e;var f=h(b.patch(),c.patch());return f!==a?f:a};return{nu:f,parse:g,compare:i}}),g("7",["a"],function(a){var b=function(a){var b=[a.majorVersion,a.minorVersion].join(".");return b.split(".").slice(0,3).join(".")},c=function(c){return c?a.parse(b(c)):null},d=function(b,d){return a.compare(c(b),a.parse(d))<0};return{getVersion:c,isLessThan:d}}),g("3",["7","1"],function(a,b){var c=function(a){return function(b){var c=b.plugin_base_urls;for(var d in c)a.PluginManager.urls[d]=c[d]}},d=function(b){return a.isLessThan(b,"4.5.0")},e=function(a){a.overrideDefaults=b.before(a.overrideDefaults,c(a))};return{patch:b.nu(d,e)}}),g("0",["1","2","3","4"],function(a,b,c,d){var e=function(d){a.applyPatches(d,[b.patch,c.patch])};return e(d.tinymce),function(){return{applyPatches:e}}}),d("0")()}();; - -/* Ephox PowerPaste plugin - * - * Copyright 2010-2016 Ephox Corporation. All rights reserved. - * - * Version: 2.1.10-115 - */ - -!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i-1},f=function(a,b){return r(a,b)>-1},g=function(a,b){for(var c=[],d=0;dMore information on paste for Safari':b()},d=function(){return'Safari does not support direct paste of images. More information on image pasting for Safari'},e={"cement.dialog.paste.title":"Paste Formatting Options","cement.dialog.paste.instructions":"Choose to keep or remove formatting in the pasted content.","cement.dialog.paste.merge":"Keep Formatting","cement.dialog.paste.clean":"Remove Formatting","cement.dialog.flash.title":"Additional step needed to paste images","cement.dialog.flash.trigger-paste":"Your browser requires you to take one more action to paste the images in your content. Please press the below keys to complete the image paste:","cement.dialog.flash.missing":'Adobe Flash is required to import images from Microsoft Office. Install the Adobe Flash Player.',"cement.dialog.flash.press-escape":'Press "Close" to paste your content without images.',"loading.wait":"Please wait...","flash.clipboard.no.rtf":c(),"safari.imagepaste":d(),"webview.imagepaste":d(),"error.code.images.not.found":"The images service was not found: (","error.imageupload":"Image failed to upload: (","error.full.stop":").","errors.local.images.disallowed":"Local image paste has been disabled. Local images have been removed from pasted content.","flash.crashed":"Images have not been imported as Adobe Flash appears to have crashed. This may be caused by pasting large documents.","errors.imageimport.failed":"Some images failed to import.","errors.imageimport.unsupported":"Unsupported image type.","errors.imageimport.invalid":"Image is invalid."},f=function(a){return e[a]},g=function(b){return a.translate(f(b))};return{translate:g}}),g("s",[],function(){return{showDialog:function(a,b){var c=function(){win.close()},d=[{text:"Ok",onclick:c}],e={title:"Error",spacing:10,padding:10,items:[{type:"container",html:b}],buttons:d};win=a.windowManager.open(e)}}}),g("15",["y","d","s"],function(a,b,c){return function(d,e){var f=function(){return b.translate("error.code.images.not.found")+e+b.translate("error.full.stop")},g=function(){return b.translate("error.imageupload")+e+b.translate("error.full.stop")},h=function(a){var b=a.status(),e=0===b||b>=400||b<500,h=e?f:g;c.showDialog(d,h())},i=function(){return a(h)};return{instance:i}}}),g("3g",["g"],function(a){var b=function(b){var e=c(b),f=function(b){var c=b.split(" "),f=a.map(c,function(a){return d(e,a)});return f.join(" ")};return{resolve:f}},c=function(a){return a.replace(/\./g,"-")},d=function(a,b){return a+"-"+b};return{create:b,cssNamespace:c,cssClass:d}}),g("2d",["3g"],function(a){var b=a.create("ephox-salmon");return{resolve:b.resolve}}),g("26",["p","2d"],function(a,b){var c=b.resolve("upload-image-in-progress"),d="data-"+b.resolve("image-blob");return{uploadInProgress:a.constant(c),blobId:a.constant(d)}}),g("3h",[],function(){return function(a,b,c){var d=c||!1,e=function(){b(),d=!0},f=function(){a(),d=!1},g=function(){var a=d?f:e;a()},h=function(){return d};return{on:e,off:f,toggle:g,isOn:h}}}),g("1b",["12","13"],function(a,b){var c=function(c){if(null===c)return"null";var d=typeof c;return"object"===d&&a.prototype.isPrototypeOf(c)?"array":"object"===d&&b.prototype.isPrototypeOf(c)?"string":d},d=function(a){return function(b){return c(b)===a}};return{isString:d("string"),isObject:d("object"),isArray:d("array"),isNull:d("null"),isBoolean:d("boolean"),isUndefined:d("undefined"),isFunction:d("function"),isNumber:d("number")}}),g("1c",["14"],function(a){var b=function(){var b=a.keys,c=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b};return void 0===b?c:b}(),c=function(a,c){for(var d=b(a),e=0,f=d.length;e0?b.set(d,e,g.join(" ")):b.remove(d,e)};return{read:c,add:d,remove:e}}),g("3i",["g","5z"],function(a,b){var c=function(a){return void 0!==a.dom().classList},d=function(a){return b.read(a,"class")},e=function(a,c){return b.add(a,"class",c)},f=function(a,c){return b.remove(a,"class",c)},g=function(b,c){a.contains(d(b),c)?f(b,c):e(b,c)};return{get:d,add:e,remove:f,toggle:g,supports:c}}),g("27",["3h","j","3i"],function(a,b,c){var d=function(a,b){c.supports(a)?a.dom().classList.add(b):c.add(a,b)},e=function(a){var d=c.supports(a)?a.dom().classList:c.get(a);0===d.length&&b.remove(a,"class")},f=function(a,b){if(c.supports(a)){var d=a.dom().classList;d.remove(b)}else c.remove(a,b);e(a)},g=function(a,b){return c.supports(a)?a.dom().classList.toggle(b):c.toggle(a,b)},h=function(b,d){var e=c.supports(b),f=b.dom().classList,g=function(){e?f.remove(d):c.remove(b,d)},h=function(){e?f.add(d):c.add(b,d)};return a(g,h,i(b,d))},i=function(a,b){return c.supports(a)&&a.dom().classList.contains(b)};return{add:d,remove:f,toggle:g,toggler:h,has:i}}),h("1g",document),g("k",["p","1e","1f","1g"],function(a,b,c,d){var e=function(a,b){var e=b||d,f=e.createElement("div");if(f.innerHTML=a,!f.hasChildNodes()||f.childNodes.length>1)throw c.error("HTML does not have a single root node",a),"HTML must have a single root node";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b("Node cannot be null or undefined");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g("3k",["g","1c","p","12"],function(a,b,c,d){var e=function(e,f){var g=function(){for(var b=new d(arguments.length),f=0;f0&&e.unsuppMessage(m);var n={};return a.each(g,function(a){n[a]=c.constant(j[a])}),a.each(h,function(a){n[a]=c.constant(f.prototype.hasOwnProperty.call(j,a)?d.some(j[a]):d.none())}),n}}}),g("2c",["3j","3k","3l"],function(a,b,c){return{immutable:a,immutable2:b,immutableBag:c}}),g("3m",[],function(){var a=function(a,b){var c=[],d=function(a){return c.push(a),b(a)},e=b(a);do e=e.bind(d);while(e.isSome());return c};return{toArray:a}}),g("4j",["p"],function(a){return function(b,c,d){var e=b.isiOS()&&/ipad/i.test(d)===!0,f=b.isiOS()&&!e,g=b.isAndroid()&&3===b.version.major,h=b.isAndroid()&&4===b.version.major,i=e||g||h&&/mobile/i.test(d)===!0,j=b.isiOS()||b.isAndroid(),k=j&&!i,l=c.isSafari()&&b.isiOS()&&/safari/i.test(d)===!1;return{isiPad:a.constant(e),isiPhone:a.constant(f),isTablet:a.constant(i),isPhone:a.constant(k),isTouch:a.constant(j),isAndroid:b.isAndroid,isiOS:b.isiOS,isWebView:a.constant(l)}}}),g("4k",[],function(){var a=function(a,b,c){return{browser:{current:a,version:b},os:{current:c}}};return{create:a}}),g("61",[],function(){var a=function(a){return function(){return a}},b=function(b,c,d){for(var e=0;e=e?c:b(c,F(d,e-f))}},H=G(function(a,b){return b+a}),I=G(function(a,b){return a+b});return{supplant:c,startsWith:e,startsWithIgnoringCase:f,endsWith:g,endsWithIgnoringCase:h,first:i,last:j,removeLeading:l,removeTrailing:m,ensureLeading:q,ensureTrailing:r,trim:s,lTrim:t,rTrim:u,contains:v,containsIgnoringCase:w,htmlEncodeDoubleQuotes:x,equals:y,equalsIgnoringCase:z,head:A,repead:F,padLeft:H,padRight:I,toe:B,tail:C,torso:D,capitalize:E}}),g("4m",["37"],function(a){var b=a.contains,c=function(a){return function(c){return b(c,a)}},d=function(){try{var a=new ActiveXObject("ChromeTab.ChromeFrame");return!!a}catch(b){return!1}},e=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,f=function(a){var d=[{name:"Spartan",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(a){var c=b(a,"edge/")&&b(a,"chrome")&&b(a,"safari")&&b(a,"applewebkit");return c}},{name:"ChromeFrame",versionRegexes:[/.*?chromeframe\/([0-9]+)\.([0-9]+).*/,e],search:function(c){return!!b(c,"chromeframe")&&a()}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,e],search:function(a){return b(a,"chrome")&&!b(a,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(c){var d=b(c,"msie")||b(c,"trident"),e=b(c,"chromeframe");return e?d&&!a():d}},{name:"Opera",versionRegexes:[e,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:c("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:c("firefox")},{name:"Safari",versionRegexes:[e,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(a){return(b(a,"safari")||b(a,"mobile/"))&&b(a,"applewebkit")}},{name:"Envjs",versionRegexes:[/.*?envjs\/\ ?([0-9]+)\.([0-9]+).*/],search:c("envjs")}],f=[{name:"Windows",search:c("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(a){return b(a,"iphone")||b(a,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:c("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:c("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:c("linux")},{name:"Solaris",search:c("sunos")},{name:"FreeBSD",search:c("freebsd")}];return{browsers:d,oses:f}};return{create:f,chromeFrameChecker:d}}),g("4n",[],function(){var a=function(a,b){var c=typeof a;if("boolean"===c)return!!a;if("object"===c){var d=a.minimum;return b.major>d.major||b.major===d.major&&b.minor>=d.minor}throw"invalid spec"};return{meetsSpec:a}}),g("66",[],function(){var a=function(a,b,c){for(var d=0;d-1?d.some(f):d.none()})},n=function(b,d){for(var e=a.isFunction(d)?d:c.constant(!1),f=b.dom(),g=[];null!==f.parentNode&&void 0!==f.parentNode;){var i=f.parentNode,j=h.fromDom(i);if(g.push(j),e(j)===!0)break;f=i}return g},o=function(a){var c=function(c){return b.filter(c,function(b){return!g.eq(a,b)})};return l(a).map(u).map(c).getOr([])},p=function(a){var b=a.dom();return d.from(b.offsetParent).map(h.fromDom)},q=function(a){var b=a.dom();return d.from(b.previousSibling).map(h.fromDom)},r=function(a){var b=a.dom();return d.from(b.nextSibling).map(h.fromDom)},s=function(a){return b.reverse(f.toArray(a,q))},t=function(a){return f.toArray(a,r)},u=function(a){var c=a.dom();return b.map(c.childNodes,h.fromDom)},v=function(a,b){var c=a.dom().childNodes;return d.from(c[b]).map(h.fromDom)},w=function(a){return v(a,0)},x=function(a){return v(a,a.dom().childNodes.length-1)},y=e.immutable("element","offset"),z=function(a,b){var c=u(a);return c.length>0&&b0},q=function(c){return a.contains(b,c)};return{findById:i,findAll:j,register:k, -report:n,inProgress:p,isActive:q,events:g.registry}}}),g("1l",["1b","12"],function(a,b){var c=function(a,b){return b},d=function(b,c){var d=a.isObject(b)&&a.isObject(c);return d?f(b,c):c},e=function(a){return function(){for(var c=new b(arguments.length),d=0;d=c.length&&b(d)}};0===c.length?b([]):a.each(c,function(a,b){a.get(f(b))})})},e=function(b,c){return d(a.map(b,c))},f=function(a,c,d){return b(function(b){var e=!1,f=!1,g=void 0,h=void 0,i=function(){if(e&&f){var a=d(g,h);b(a)}};a.get(function(a){g=a,e=!0,i()}),c.get(function(a){h=a,f=!0,i()})})},g=function(a,b){return function(c){return b(c).bind(a)}};return{nu:b,pure:c,par:d,mapM:e,lift2:f,compose:g}}}),g("o",["1u","1v","1w"],function(a,b,c){var d=function(c){var e=function(b){c(a.bounce(b))};return b(d,e)};return c(d)}),g("2u",["3p"],function(a){return function(){var b=a.getOrDie("FileReader");return new b}}),g("73",["o","2u"],function(a,b){return function(c){return a.nu(function(a){var d=b();d.onload=function(b){var c=b.target;a(c.result)},d.readAsText(c)})}}),g("74",["3p"],function(a){return function(){var b=a.getOrDie("XMLHttpRequest");return new b}}),g("69",["1b","1c","1l","73","o","74","n","2f","37","1f"],function(a,b,c,d,e,f,g,h,i,j){var k={"*":"*/*",text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},l=function(l,m,n,o){var p={url:l,contentType:"application/json",processData:!1,type:"GET"},q=c.merge(p,o),r=f();r.open(q.type.toUpperCase(),q.url,!0),"blob"===q.responseType&&(r.responseType=q.responseType),a.isString(q.contentType)&&r.setRequestHeader("Content-Type",q.contentType);var s=q.dataType,t=a.isString(s)&&"*"!==s?k[s]+", "+k["*"]+"; q=0.01":k["*"];r.setRequestHeader("Accept",t),void 0!==q.xhrFields&&q.xhrFields.withCredentials===!0&&(r.withCredentials=!0),a.isObject(q.headers)&&b.each(q.headers,function(b,c){a.isString(c)||a.isString(b)?r.setRequestHeader(c,b):j.error("Request header data was not a string: ",c," -> ",b)});var u=function(a,b,c){m(a)},v=function(){return"blob"===q.responseType?g.from(r.response).map(d).getOr(e.pure("no response content")):e.pure(r.responseText)},w=function(){v().get(function(a){0===r.status?n("Unknown HTTP error (possible cross-domain request)",r.status,a):n('Could not load url "'+l+'": '+r.statusText,r.status,a)})},x=function(){try{return h.value(JSON.parse(r.response))}catch(a){return h.error({status:r.status,statusText:"Response was not JSON",responseText:r.responseText})}},y=function(){var a="json"===s?x(r):h.value(r.response);a.fold(w,function(a){u(a,r.statusText,r)})},z=function(){0===r.status?i.startsWith(q.url,"file:")?y():w():r.status<100||r.status>=400?w():y()};r.onerror=w,r.onload=z,void 0===q.data?r.send():r.send(q.data)};return{ajax:l}}),g("3u",["3p"],function(a){var b=function(){return a.getOrDie("JSON")},c=function(a){return b().parse(a)},d=function(a,c,d){return b().stringify(a,c,d)};return{parse:c,stringify:d}}),g("3t",["1l","69","3u"],function(a,b,c){var d=function(c,d,e,f){b.ajax(c,d,e,a.merge({dataType:"text",type:"GET"},f))},e=function(d,e,f,g,h){b.ajax(d,f,g,a.merge({dataType:"text",data:c.stringify(e),type:"POST"},h))};return{get:d,post:e}}),g("6a",[],function(){var a=function(a){var b="";return""!==a.protocol&&(b+=a.protocol,b+=":"),""!==a.authority&&(b+="//",b+=a.authority),b+=a.path,""!==a.query&&(b+="?",b+=a.query),""!==a.anchor&&(b+="#",b+=a.anchor),b};return{recompose:a}}),g("75",["1l"],function(a){var b={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@\/]*)(?::([^:@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@\/]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}},c=function(a,b){for(var c=b,d=c.parser[c.strictMode?"strict":"loose"].exec(a),e={},f=14;f--;)e[c.key[f]]=d[f]||"";return e[c.q.name]={},e[c.key[12]].replace(c.q.parser,function(a,b,d){b&&(e[c.q.name][b]=d)}),e},d=function(d,e){var f=a.merge(b,e);return c(d,f)};return{parse:d}}),g("76",["37"],function(a){var b=function(b){return a.removeTrailing(b,d(b))},c=function(a){return a.match(/(^\/?.*?)(\/|$)/)[1]},d=function(a){return a.substring(a.lastIndexOf("/"))},e=function(d){for(var e=d,f="";""!==e;)if(a.startsWith(e,"../"))e=a.removeLeading(e,"../");else if(a.startsWith(e,"./"))e=a.removeLeading(e,"./");else if(a.startsWith(e,"/./"))e="/"+a.removeLeading(e,"/./");else if("/."===e)e="/";else if(a.startsWith(e,"/../"))e="/"+a.removeLeading(e,"/../"),f=b(f);else if("/.."===e)e="/",f=b(f);else if("."===e||".."===e)e="";else{var g=c(e);e=a.removeLeading(e,g),f+=g}return f};return{remove:e}}),g("77",["37"],function(a){var b=function(b,c,d){if(""!==d&&""===b)return"/"+c;var e=b.substring(b.lastIndexOf("/")+1);return a.removeTrailing(b,e)+c};return{merge:b}}),g("6b",["37","75","76","77"],function(a,b,c,d){var e=function(e,f){var g={strictMode:!0},h=b.parse(e,g),i=b.parse(f,g),j={};return""!==i.protocol?(j.protocol=i.protocol,j.authority=i.authority,j.path=c.remove(i.path),j.query=i.query):(""!==i.authority?(j.authority=i.authority,j.path=c.remove(i.path),j.query=i.query):(""===i.path?(j.path=h.path,""!==i.query?j.query=i.query:j.query=h.query):(a.startsWith(i.path,"/")?j.path=c.remove(i.path):(j.path=d.merge(h.path,i.path,e.authority),j.path=c.remove(j.path)),j.query=i.query),j.authority=h.authority),j.protocol=h.protocol),j.anchor=i.anchor,j};return{transform:e}}),g("3v",["6a","6b"],function(a,b){var c=function(c,d){var e=b.transform(c,d);return a.recompose(e)};return{resolve:c}}),g("2k",["1b","1l","3t","3u","2f","2j","37","3v"],function(a,b,c,d,e,f,g,h){return function(i){var j=function(){var a=i.url,b=a.lastIndexOf("/"),c=b>0?a.substr(0,b):a,d=void 0===i.basePath?c:i.basePath;return g.endsWith(d,"/")?d:d+"/"},k=j(),l=function(a,b){var c=a.split(/\s+/),d=1===c.length&&""!==c[0]?c[0]:b;return h.resolve(k,d)},m=function(g,h,j){var k=g.blob(),m=function(a,b,c){j(e.error(f.failureObject(a,b,c)))},n=f.getFilename(k,h),o=i.credentials!==!0?{}:{xhrFields:{withCredentials:!0}},p=b.merge(o,f.buildExtra("image",k,n)),q=function(b){var c;try{var f=d.parse(b);if(!a.isString(f.location))return void m("JSON response did not contain a string location",500,b);c=f.location}catch(g){c=b}var h=l(c,n);j(e.value({location:h}))};c.post(i.url,{},q,m,p)};return{upload:m}}}),h("x",setTimeout),g("2l",["1b","2f","2j","2c","1f","x"],function(a,b,c,d,e,f){var g=d.immutable("id","filename","blob","base64");return function(d){var h=function(h,i,j){var k=function(a){j(b.error(a))},l=function(c){a.isString(c)?j(b.value({location:c})):(e.error("Image upload result was not a string"),k(""))},m=c.getFilename(h.blob(),i),n=g(i,m,h.blob(),h.data().result);f(function(){d(n,l,k)},0)};return{upload:h}}}),g("1a",["2j","2k","2l"],function(a,b,c){var d=function(a){return b(a)},e=function(a){return c(a)},f=function(b,c,d){return a.failureObject(b,c,d)},g=function(b,c){return a.getFilename(b,c)},h=function(b,c,d){return a.buildExtra(b,c,d)};return{direct:d,custom:e,failureObject:f,getFilename:g,buildExtra:h}}),g("b",["g","p","n","c","15","16","17","18","19","1a","j","k"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(d,m){var n=g(),o=h(),p=(e(),e(d,m.url)),q=j.direct(m),r=function(){return l.fromDom(d.getBody())},s=function(b,c,e){a.each(c,function(a){k.set(a,"data-mce-src",b.location)}),f.resrcHistory(d,e,b)};o.events.complete.bind(function(a){f.unwrapHistory(d)});var t=function(a,b,c){i.handleUpload(q,o,n,r(),a,b,function(a){a.fold(function(a){c(a)},s)})},u=function(a,b){i.prepareForUpload(o,a.blobInfo().id(),a.image()).each(function(c){t(c,a.blobInfo(),b)})},v=function(b){var c=p.instance(),d=i.registerAssets(n,r(),b);a.each(d,function(a){a.fold(function(a){console.error(a)},function(a){u(a,c)})})},w=function(){var b=p.instance(),d=i.findBlobs(o,n,r());a.each(d,function(a){a.fold(function(a){o.report(a,c.none(),!1)},function(a){u(a,b)})})},x=function(a){w(),v(a)},y=function(a,b,c,d){return c};return{uploadImages:x,prepareImages:b.noop,getLocalURL:y}},n=function(a){var c=d(a);return{uploadImages:b.noop,prepareImages:c.prepareImages,getLocalURL:c.getLocalURL}};return function(a,b){return b?m(a,b):n(a)}}),g("3",["b","c"],function(a,b){return function(c){var d=!c.uploadImages&&c.settings.images_upload_url?{url:c.settings.images_upload_url,basePath:c.settings.images_upload_base_path,credentials:c.settings.images_upload_credentials}:null;return c.uploadImages?b(c):a(c,d)}}),g("1h",[],function(){var a=function(a,b){return function(){return a.apply(b,arguments)}},b=function(a){return a.ownerDocument.defaultView?a.ownerDocument.defaultView.getComputedStyle(a,null):a.currentStyle||{}},c=function(a){"undefined"!=typeof console&&console.log&&console.log(a)},d=function(a){var b=Array.prototype.slice.call(a).reverse();return function(a){for(var c=a,d=0;d/i),p=null===o?n:o[0];return c(p)}if(!l.get("_mcePaste")){if(f=l.add(m,"div",{id:"_mcePaste","class":"mcePaste"},'\ufeff
'),i=m!=b.getDoc().body?l.getPos(b.selection.getStart(),m).y:m.scrollTop,l.setStyles(f,{position:"absolute",left:-1e4,top:i,width:1,height:1,overflow:"hidden"}),tinymce.isIE)return h=l.doc.body.createTextRange(),h.moveToElementText(f),h.execCommand("Paste"),l.remove(f),"\ufeff"===f.innerHTML?(b.execCommand("mcePasteWord"),void e.preventDefault()):(c(j?f.innerText:f.innerHTML),tinymce.dom.Event.cancel(e));var q=function(a){a.preventDefault()};l.bind(b.getDoc(),"mousedown",q),l.bind(b.getDoc(),"keydown",q),tinymce.isGecko&&(h=b.selection.getRng(!0),h.startContainer==h.endContainer&&3==h.startContainer.nodeType&&(nodes=l.select("p,h1,h2,h3,h4,h5,h6,pre",f),1==nodes.length&&l.remove(nodes.reverse(),!0))),g=b.selection.getRng(),f=f.firstChild,h=b.getDoc().createRange(),h.setStart(f,0),h.setEnd(f,1),k.setRng(h),window.setTimeout(function(){var d="",e=l.select("div.mcePaste");a.each(e,function(b){var c=b.firstChild;c&&"DIV"==c.nodeName&&c.style.marginTop&&c.style.backgroundColor&&l.remove(c,1),a.each(l.select("div.mcePaste",b),function(a){l.remove(a,1)}),a.each(l.select("span.Apple-style-span",b),function(a){l.remove(a,1)}),a.each(l.select("br[_mce_bogus]",b),function(a){l.remove(a)}),d+=b.innerHTML}),a.each(e,function(a){l.remove(a)}),g&&k.setRng(g),c(d),l.unbind(b.getDoc(),"mousedown",q),l.unbind(b.getDoc(),"keydown",q)},0)}}),c=function(a,c,d){return function(e){b(a,c,d,e)}},d=function(a,c,d){return function(e){(tinymce.isOpera||navigator.userAgent.indexOf("Firefox/2")>0)&&((tinymce.isMac?e.metaKey:e.ctrlKey)&&86==e.keyCode||e.shiftKey&&45==e.keyCode)&&b(a,c,d,e)}};return{getOnPasteFunction:c,getOnKeyDownFunction:d}}),g("1i",[],function(){var a=function(a,b){var c,d=b.getDoc(),e="ephoxInsertMarker",f=b.selection,g=b.dom;f.setContent(' '),c=g.get(e);for(var h=d.createDocumentFragment();a.firstChild&&!g.isBlock(a.firstChild);)h.appendChild(a.firstChild);for(var i=d.createDocumentFragment();a.lastChild&&!g.isBlock(a.lastChild);)i.appendChild(a.lastChild);if(c.parentNode.insertBefore(h,c),g.insertAfter(i,c),a.firstChild){if(g.isBlock(a.firstChild)){for(;!g.isBlock(c.parentNode)&&c.parentNode!==g.getRoot();)c=g.split(c.parentNode,c);g.is(c.parentNode,"td,th")||c.parentNode===g.getRoot()||(c=g.split(c.parentNode,c))}g.replace(a,c)}else g.remove(c)};return{insert:a}}),g("1j",["1h"],function(a){var b={strip_class_attributes:"all",retain_style_properties:"none"},c={strip_class_attributes:"none",retain_style_properties:"valid"},d=function(a,d){if(a&&"string"!=typeof a)return a;switch(a){case"clean":return b;case"merge":return c;default:return d}},e=function(b,c,e){var f=d(b,c);return f=a.extend(f,{base_64_images:e})},f=function(a,d,f){var g=e(a,b,f),h=e(d,c,f),i=h,j=function(a){i=a?g:h},k=function(a){return i[a]};return{setWordContent:j,get:k}};return{create:f}}),g("6c",["1h"],function(a){var b=function(a){return a.specified!==!1||"name"===a.nodeName&&""!==a.value},c=function(a,b){return a&&b?function(c,d){return b(c,a(c,d))}:a||b},d=function(d){var e,f,g=0,h=function(){return e},i=function(){return f()};f=function(){return e={},g=0,a.each(d.attributes,function(a){var c=a.nodeName,d=a.value;b(a)&&null!==d&&void 0!==d&&(e[c]=d,g++)}),void 0===e.style&&d.style.cssText&&(e.style=d.style.cssText,g++),f=h,e};var j,k,l=function(){return f(),g},m=function(a){j||(k=f),j=c(j,a),f=function(){return f=k,o(function(a,b){var c=j(a,b);null===c?(d.removeAttribute(a),delete e[a],g--):c!==b&&("class"===a?d.className=c:d.setAttribute(a,c),e[a]=c)}),f=h,e}},n=function(a){return f()[a]},o=function(b){a.each(f(),function(a,c){b(c,a)})};return{get:n,each:o,filter:m,getAttributes:i,getAttributeCount:l}};return{manager:d}}),g("3w",["6c","1h"],function(a,b,c){var d="startElement",e="endElement",f="text",g="comment",h=a.manager,i=function(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})},j=function(a){return a.replace(/([A-Z])/g,function(a,b){return"-"+b.toLowerCase()})},k=!1,l=function(a,c,d){var e,f,g;a.style.length;g=c||a.getAttribute("style"),void 0!==g&&null!==g&&g.split||(g=a.style.cssText),b.each(g.split(";"),function(a){var c=a.indexOf(":");c>0&&(e=b.trim(a.substring(0,c)),e.toUpperCase()===e&&(e=e.toLowerCase()),e=j(e),f=b.trim(a.substring(c+1)),k||(k=0===e.indexOf("mso-")),d(e,f))}),k||(f=a.style["mso-list"],f&&d("mso-list",f))},m=function(a,c,j){var k,m,n,o,p;switch(a.nodeType){case 1:c?k=e:(k=d,o=h(a),p={},l(a,j,function(a,b){p[a]=b})),m="HTML"!==a.scopeName&&a.scopeName&&a.tagName&&a.tagName.indexOf(":")<=0?(a.scopeName+":"+a.tagName).toUpperCase():a.tagName;break;case 3:k=f,n=a.nodeValue;break;case 8:k=g,n=a.nodeValue;break;default:b.log("WARNING: Unsupported node type encountered: "+a.nodeType)}var q=function(){return o&&o.getAttributes(),a},r=function(){return m},s=function(){return k},t=function(){return n},u=function(){return"Type: "+k+", Tag: "+m+" Text: "+n},v=function(a){return o.get(a.toLowerCase())},w=function(a){k===d&&o.filter(a)},x=function(c){if(s()===d){var e="";b.each(p,function(b,d){var f=c(d,b);null===f?(a.style.removeProperty?a.style.removeProperty(i(d)):a.style.removeAttribute(i(d)),delete p[d]):(e+=d+": "+f+"; ",p[d]=f)}),e=e?e:null,w(function(a,b){return"style"===a?e:b}),a.style.cssText=e}},y=function(){return o.getAttributeCount()},z=function(a){o.each(a)},A=function(a){return p[a]},B=function(a){b.each(p,function(b,c){a(c,b)})},C=function(){return b.ephoxGetComputedStyle(a)},D=function(){return k===f&&/^[\s\u00A0]*$/.test(n)};return{getNode:q,tag:r,type:s,text:t,toString:u,getAttribute:v,filterAttributes:w,filterStyles:x,getAttributeCount:y,attributes:z,getStyle:A,styles:B,getComputedStyle:C,isWhitespace:D}},n=function(a,c,d,e){var f=e.createElement(a),g="";return b.each(c,function(a,b){f.setAttribute(b,a)}),b.each(d,function(a,b){g+=b+":"+a+";",f.style[i(b)]=a}),m(f,!1,""!==g?g:null)},o=function(a,b){return m(b.createElement(a),!0)},p=function(a,b){return m(b.createComment(a),!1)},q=function(a,b){return m(b.createTextNode(a))},r=o("HTML",window.document);return{START_ELEMENT_TYPE:d,END_ELEMENT_TYPE:e,TEXT_TYPE:f,COMMENT_TYPE:g,FINISHED:r,token:m,createStartElement:n,createEndElement:o,createComment:p,createText:q}}),g("2m",["3w"],function(a){var b=function(b){var c=b.createDocumentFragment(),d=c,e=function(a){g(a),c=a},f=function(){c=c.parentNode},g=function(a){c.appendChild(a)},h=function(c){var d=function(a){var b=a.getNode().cloneNode(!1);e(b)},h=function(a,c){var d=b.createTextNode(a.text());g(d)};switch(c.type()){case a.START_ELEMENT_TYPE:d(c);break;case a.TEXT_TYPE:h(c);break;case a.END_ELEMENT_TYPE:f();break;case a.COMMENT_TYPE:break;default:throw{message:"Unsupported token type: "+c.type()}}};return{dom:d,receive:h}};return{create:b}}),g("2n",["3w"],function(a){var b=function(b,c){var d;c=c||window.document,d=c.createElement("div"),c.body.appendChild(d),d.style.position="absolute",d.style.left="-10000px",d.innerHTML=b,nextNode=d.firstChild||a.FINISHED;var e=[];endNode=!1;var f=function(b,c){return b===a.FINISHED?b:b?a.token(b,c):void 0},g=function(){var b=nextNode,g=endNode;return!endNode&&nextNode.firstChild?(e.push(nextNode),nextNode=nextNode.firstChild):endNode||1!==nextNode.nodeType?nextNode.nextSibling?(nextNode=nextNode.nextSibling,endNode=!1):(nextNode=e.pop(),endNode=!0):endNode=!0,b===a.FINISHED||nextNode||(c.body.removeChild(d),nextNode=a.FINISHED),f(b,g)},h=function(){return void 0!==nextNode};return{hasNext:h,next:g}};return{tokenize:b}}),g("3x",["3w","1h"],function(a,b){var c=function(c,d){var e=function(e,f,g){var h,i,j,k=!1,l=function(){d&&d(w),k=!1,i=[],j=[]},m=function(a){b.each(a,function(a){e.receive(a)})},n=function(a){k?j.push(a):e.receive(a)},o=function(b){d&&i.push(b),c(w,b),b===a.FINISHED&&r()},p=function(){k=!0},q=function(){m(i),l()},r=function(){u(),m(j),l()},s=function(a){h=h||[],h.push(a)},t=function(){return h&&h.length>0},u=function(){b.each(h,function(a){n(a)}),v()},v=function(){h=[]},w={document:g||window.document,settings:f||{},emit:n,receive:o,startTransaction:p,rollback:q,commit:r,defer:s,hasDeferred:t,emitDeferred:u,dropDeferred:v};return l(),w};return e},d=function(a){return c(function(c,d){d.filterAttributes(b.bind(a,c)),c.emit(d)})};return{createFilter:c,createAttributeFilter:d}}),g("2o",["3x","3w"],function(a,b){var c=/^(P|H[1-6]|T[DH]|LI|DIV|BLOCKQUOTE|PRE|ADDRESS|FIELDSET|DD|DT|CENTER)$/,d=function(a){return c.test(a.tag())},e=function(){return null},f=!1;return a.createFilter(function(a,c){var g=function(){f||(a.emit(b.createStartElement("P",{},{},a.document)),f=!0)};switch(c.type()){case b.TEXT_TYPE:g(),a.emit(c);break;case b.END_ELEMENT_TYPE:f&&(d(c)||c===b.FINISHED)?(a.emit(b.createEndElement("P",a.document)),f=!1):"BR"===c.tag()&&a.emit(c);break;case b.START_ELEMENT_TYPE:"BR"===c.tag()?(c.filterAttributes(e),c.filterStyles(e),a.emit(c)):"IMG"===c.tag()&&c.getAttribute("alt")&&(g(),a.emit(b.createText(c.getAttribute("alt"),a.document)))}c===b.FINISHED&&a.emit(c)})}),g("3y",["3w"],function(a){var b=function(){if(navigator.userAgent.indexOf("Gecko")>0&&navigator.userAgent.indexOf("WebKit")<0)return!1;var b=document.createElement("div");try{b.innerHTML='

 

'}catch(c){return!1}return"Ignore"===a.token(b.firstChild).getStyle("mso-list")},c=b(),d=function(a){return"A"===a.tag()||"SPAN"===a.tag()},e=function(a){var b=a.getStyle("mso-list");return b&&"skip"!==b},f=function(b,c){return b.type()===a.START_ELEMENT_TYPE?0===b.getAttributeCount()||c&&1===b.getAttributeCount()&&null!==b.getAttribute("style")&&void 0!==b.getAttribute("style"):b.type()===a.END_ELEMENT_TYPE};return{hasNoAttributes:f,supportsCustomStyles:c,spanOrA:d,hasMsoListStyle:e}}),g("42",["3w","1h"],function(a,b){var c=[{regex:/^\(?[dc][\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[DC][\.\)]$/,type:{tag:"OL",type:"upper-alpha"}},{regex:/^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/,type:{tag:"OL",type:"upper-roman"}},{regex:/^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/,type:{tag:"OL",type:"lower-roman"}},{regex:/^\(?[0-9]+[\.\)]$/,type:{tag:"OL"}},{regex:/^([0-9]+\.)*[0-9]+\.?$/,type:{tag:"OL",variant:"outline"}},{regex:/^\(?[a-z]+[\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[A-Z]+[\.\)]$/,type:{tag:"OL",type:"upper-alpha"}}],d={"\u2022":{tag:"UL",type:"disc"},"\xb7":{tag:"UL",type:"disc"},"\xa7":{tag:"UL",type:"square"}},e={o:{tag:"UL",type:"circle"},"-":{tag:"UL",type:"disc"},"\u25cf":{tag:"UL",type:"disc"}},f=function(a,b){var c={tag:a.tag,type:a.type,variant:b};return a.start&&(c.start=a.start),a.type||delete c.type,c},g=function(a,g,i){var j,k,l,m=null;return a&&(j=a.text,k=a.symbolFont),j=b.trim(j),m=e[j],m?m=f(m,j):k?(m=d[j],m=m?f(m,j):{tag:"UL",variant:j}):(b.each(c,function(a){if(a.regex.test(j)){if(g&&h(a.type,g,!0))return m=a.type,m.start=parseInt(j),!1;m||(m=a.type),m.start=parseInt(j)}}),m&&!m.variant&&(l="("===j.charAt(0)?"()":")"===j.charAt(j.length-1)?")":".",m=f(m,l))),m&&"OL"===m.tag&&i&&("P"!==i.tag()||/^MsoHeading/.test(i.getAttribute("class")))&&(m=null),m},h=function(a,b,c){return a===b||a&&b&&a.tag===b.tag&&a.type===b.type&&(c||a.variant===b.variant)},i=function(b,c){return b.type()==a.START_ELEMENT_TYPE&&(font=b.getStyle("font-family"),font?c="Wingdings"===font||"Symbol"===font:/^(P|H[1-6]|DIV)$/.test(b.tag())&&(c=!1)),c};return{guessListType:g,eqListType:h,checkFont:i}}),g("3z",["3w","42","1h"],function(a,b,c){var d=function(d,e){var f,g,h,i=!1,j=function(a){var b=a.style.fontFamily;b&&(i="Wingdings"===b||"Symbol"===b)};if(d.type()===a.START_ELEMENT_TYPE&&e.openedTag&&"SPAN"===d.tag()){for(f=e.openedTag.getNode(),j(f),f.childNodes.length>1&&"A"===f.firstChild.tagName&&""===f.firstChild.textContent&&(f=f.childNodes[1]);f.firstChild&&("SPAN"===f.firstChild.tagName||"A"===f.firstChild.tagName);)f=f.firstChild,j(f);if(f=f.firstChild,!f||3!==f.nodeType)return f&&"IMG"===f.tagName;if(g=f.value,c.trim(g)||(f=f.parentNode.nextSibling,g=f?f.value:""),!f||c.trim(f.parentNode.textContent)!=g)return!1;if(h=b.guessListType({text:g,symbolFont:i},null,e.originalToken))return f.nextSibling&&"SPAN"===f.nextSibling.tagName&&/^[\u00A0\s]/.test(f.nextSibling.firstChild.value)&&("P"===e.openedTag.tag()||"UL"===h.tag)}return!1},e=function(a,b){var c,d=0;for(c=a.parentNode;null!==c&&void 0!==c&&c!==b.parentNode;)d+=c.offsetLeft,c=c.offsetParent;return d},f=function(a){var b={};return function(c,d){var e,f=c+","+d;return b.hasOwnProperty(f)?b[f]:(e=a.call(null,c,d),b[f]=e,e)}},g=function(a){var b=a.indexOf(".");if(b>=0&&c.trim(a.substring(b+1))===className)return match=results[2],!1},h=f(function(a,b){var d,e,f,h,i=/([^{]+){([^}]+)}/g;for(i.lastIndex=0;null!==(d=i.exec(a))&&!e;)c.each(d[1].split(","),g(selector));return!!e&&(f=document.createElement("p"),f.setAttribute("style",e),h=c.ephoxGetComputedStyle(f),!!h&&""+h.marginLeft)}),i=function(){var a,b,c=function(c,d,f,g){var i,j,k=1;return g&&/^([0-9]+\.)+[0-9]+\.?$/.test(g.text)?g.text.replace(/([0-9]+|\.$)/g,"").length+1:(i=b||parseInt(h(f,d.getAttribute("class"))),j=e(c.getNode(),d.getNode()),i?a?j+=a:0===j&&(a=i,j+=i):i=48,b=i=Math.min(j,i),k=Math.max(1,Math.floor(j/i))||1)};return{guessIndentLevel:c}},j=function(){var b=!1,c="",d=function(d){return b&&d.type()===a.TEXT_TYPE?(c+=d.text(),!0):d.type()===a.START_ELEMENT_TYPE&&"STYLE"===d.tag()?(b=!0,!0):d.type()===a.END_ELEMENT_TYPE&&"STYLE"===d.tag()&&(b=!1,!0)};return{check:d}};return{isListWithoutCommentsOrStyles:d,indentGuesser:i,styles:j}}),g("40",["3w","42"],function(a,b){var c=["disc","circle","square"],d=function(a,b){return"UL"===a.tag&&c[b-1]===a.type&&(a={tag:"UL"}),a};return function(c,e){var f,g=[],h=[],i=0,j=function(b,d){var h={},j={};i++,d&&b.type&&(h={"list-style-type":b.type}),b.start&&b.start>1&&(j={start:b.start}),g.push(b),c.emit(a.createStartElement(b.tag,j,h,e)),f=b},k=function(){c.emit(a.createEndElement(g.pop().tag,e)),i--,f=g[g.length-1]},l=function(){for(;i>0;)m(),k();c.commit()},m=function(){var b=h?h.pop():"P";"P"!=b&&c.emit(a.createEndElement(b,e)),c.emit(a.createEndElement("LI",e))},n=function(d,g,i){var l={};if(d){var m=d.getStyle("margin-left");void 0!==m&&(l["margin-left"]=m)}else l["list-style-type"]="none";f&&!b.eqListType(f,g)&&(k(),i&&(c.emit(a.createStartElement("P",{},{},e)),c.emit(a.createText("\xa0",e)),c.emit(a.createEndElement("P",e))),j(g,!0)),c.emit(a.createStartElement("LI",{},l,e)),d&&"P"!=d.tag()?(h.push(d.tag()),d.filterStyles(function(){return null}),c.emit(d)):h.push("P")},o=function(b,f,g,l){if(g){for(i||(i=0);i>b;)m(),k();if(g=d(g,b),i==b)m(),n(f,g,l);else for(b>1&&h.length>0&&"P"!==h[h.length-1]&&(c.emit(a.createEndElement(h[h.length-1],e)),h[h.length-1]="P");i0;)c.emit(h.spanCount.shift());a&&c.emit(i)}else e.log("Unknown list type: "+h.bulletInfo.text+" Symbol font? "+h.bulletInfo.symbolFont),c.rollback()};i.type()===b.TEXT_TYPE||i.type()===b.START_ELEMENT_TYPE?j(!0):i.type()===b.COMMENT_TYPE?j("[endif]"!==i.text()):i.type()===b.END_ELEMENT_TYPE?a.spanOrA(i)&&h.spanCount.pop():f(c,i)},q=function(a,c,d){d.type()===b.END_ELEMENT_TYPE&&d.tag()===c.originalToken.tag()?(c.nextFilter=h,c.skippedPara=!1):a.emit(d)},r=j;return{initial:r}}),g("2p",["3x","3y","3w","3z","40","41","42","1h"],function(a,b,c,d,e,f,g,h){var i={},j=function(a){i.nextFilter=f.initial,i.itemLevel=0,i.originalToken=null,i.commentMode=!1,i.openedTag=null,i.symbolFont=!1,i.listType=null,i.indentGuesser=d.indentGuesser(),i.emitter=e(a,a.document),i.styles=d.styles(),i.spanCount=[],i.skippedPara=!1,i.styleLevelAdjust=0,i.bulletInfo=void 0};j({});var k=function(a){j(a)},l=function(a,b){i.styles.check(b)||(i.symbolFont=g.checkFont(b,i.symbolFont),i.nextFilter(a,i,b))};return a.createFilter(l,k)}),g("2q",["1h"],function(a){var b=function(a){var b=a,c=65279===b.charCodeAt(b.length-1);return c?b.substring(0,b.length-1):a},c=function(a){return/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(a)?a.replace(/(?:
 [\s\r\n]+|
)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"):a},d=function(a){return a.replace(/

/g,"

")},e=function(a){return a.replace(/
/g," ")},f=function(a){return a.replace(/

/g,"
")},g=[b],h=tinymce.isIE&&document.documentMode>=9?[f,e,d,c].concat(g):g,i=a.compose(h);return{all:i,textOnly:b}}),g("43",["3x"],function(a){var b=/^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/,c=function(a){return function(c,d){var e=!1;switch(a){case"all":case"*":e=!0;break;case"valid":e=!b.test(c);break;case void 0:case"none":e="list-style-type"===c;break;default:e=(","+a+",").indexOf(","+c+",")>=0}return e?d:null}};return a.createFilter(function(a,b){var d=a.settings.get("retain_style_properties");b.filterStyles(c(d)),a.emit(b)})}),g("44",["3x","3w"],function(a,b){return a.createFilter(function(a,c){a.seenList?a.emit(c):a.inferring?("LI"===c.tag()&&(c.type()===b.START_ELEMENT_TYPE?a.inferring++:(a.inferring--,a.inferring||(a.needsClosing=!0))),a.emit(c)):("OL"===c.tag()||"UL"===c.tag()?a.seenList=!0:"LI"===c.tag()&&(a.inferring=1,a.needsClosing||a.emit(b.createStartElement("UL",{},{},a.document))),!a.needsClosing||a.inferring||c.isWhitespace()||(a.needsClosing=!1,a.emit(b.createEndElement("UL",a.document))),a.emit(c))})}),g("45",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"name"===a||"id"===a?null:b})}),g("46",["3x"],function(a){return a.createAttributeFilter(function(a,b){var c;if("class"===a)switch(c=this.settings.get("strip_class_attributes")){case"mso":return 0===b.indexOf("Mso")?null:b;case"none":return b;default:return null}return b})}),g("47",["3x","3y","3w"],function(a,b,c){var d=[],e=[],f=!1,g=function(a,b){var e,f,g=1;for(e=b+1;e=0&&b.hasNoAttributes(a,!0))};0===d.length?e.type()===c.START_ELEMENT_TYPE?h(e)?a.emit(e):i(a,e):a.emit(e):(f||(f=h(e)),i(a,e))})}),g("48",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"style"===a&&""===b?null:b})}),g("49",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"lang"===a?null:b})}),g("4a",["3x","3w"],function(a,b){return a.createFilter(function(a,c){if("IMG"===c.tag()){if(c.type()===b.END_ELEMENT_TYPE&&a.skipEnd)return void(a.skipEnd=!1);if(c.type()===b.START_ELEMENT_TYPE){if(/^file:/.test(c.getAttribute("src")))return void(a.skipEnd=!0);if(a.settings.get("base_64_images")&&/^data:image\/.*;base64/.test(c.getAttribute("src")))return void(a.skipEnd=!0)}}a.emit(c)})}),g("4b",["3x"],function(a){return a.createFilter(function(a,b){"META"!==b.tag()&&"LINK"!==b.tag()&&a.emit(b)})}),g("4c",["3x","3y","3w"],function(a,b,c){var d=function(a){return!b.hasNoAttributes(a)&&!/^OLE_LINK/.test(a.getAttribute("name"))},e=[];return a.createFilter(function(a,b){var f;b.type()===c.START_ELEMENT_TYPE&&"A"===b.tag()?(e.push(b),d(b)&&a.defer(b)):b.type()===c.END_ELEMENT_TYPE&&"A"===b.tag()?(f=e.pop(),d(f)&&a.defer(b),0===e.length&&a.emitDeferred()):a.hasDeferred()?a.defer(b):a.emit(b)})}),g("4d",["3x","3w"],function(a,b){var c=!1;return a.createFilter(function(a,d){"SCRIPT"===d.tag()?c=d.type()===b.START_ELEMENT_TYPE:c||(d.filterAttributes(function(a,b){return/^on/.test(a)||"language"===a?null:b}),a.emit(d))})}),g("2r",["43","44","45","46","47","48","49","4a","4b","4c","4d"],function(a,b,c,d,e,f,g,h,i,j,k){return[k,c,h,a,g,f,d,j,e,i,b]}),g("4e",["3x"],function(a){return a.createFilter(function(a,b){b.filterAttributes(function(a,c){return"align"===a?null:"UL"!==b.tag()&&"OL"!==b.tag()||"type"!==a?c:null}),a.emit(b)})}),g("4f",["3x"],function(a){return a.createAttributeFilter(function(a,b){return/^xmlns(:|$)/.test(a)?null:b})}),g("4g",["3x"],function(a){return a.createFilter(function(a,b){b.tag&&/^([OVWXP]|U[0-9]+|ST[0-9]+):/.test(b.tag())||a.emit(b)})}),g("4h",["3x"],function(a){return a.createAttributeFilter(function(a,b){return"href"===a&&(b.indexOf("#_Toc")>=0||b.indexOf("#_mso")>=0)?null:b})}),g("4i",["3x"],function(a){return a.createAttributeFilter(function(a,b){return/^v:/.test(a)?null:b})}),g("2s",["4e","4f","4g","4h","4i","2p"],function(a,b,c,d,e,f){return[c,f,d,e,b,a]}),g("1k",["2m","2n","2o","2p","2q","2r","2s"],function(a,b,c,d,e,f,g){var h=function(a,b,c,d){var e,f=b;for(e=a.length-1;e>=0;e--)f=a[e](f,c,d);return f},i=function(c,d,e,f){var g=a.create(e),i=b.tokenize(c,e);for(pipeline=h(f,g,d,e);i.hasNext();)pipeline.receive(i.next());return g.dom},j=function(a,b,c){var d=e.all(a),h=l(d);b.setWordContent(h);var j=f;return h&&(j=g.concat(f)),i(d,b,c,j)},k=function(a,b,d){var f=e.textOnly(a);return i(f,b,d,[c])},l=function(a){return a.indexOf("")>=0||a.indexOf("p.MsoNormal, li.MsoNormal, div.MsoNormal")>=0||a.indexOf("MsoListParagraphCxSpFirst")>=0||a.indexOf("")>=0};return{filter:j,filterPlainText:k,isWordContent:l}}),g("f",["1i","1j","1k","x"],function(a,b,c,d){return function(e,f){var g=function(g){var h=function(d){var f={content:g};e.fire("PastePreProcess",f);var h=b.create(d||e.settings.powerpaste_word_import,d||e.settings.powerpaste_html_import,!0),i=c.filter(f.content,h,e.getDoc());e.fire("PastePostProcess",i),e.undoManager.transact(function(){a.insert(i,e)})},i=function(a){return"clean"===a||"merge"===a},j=function(){var a,b=function(){a.close(),h("clean")},c=function(){a.close(),h("merge")},g=[{text:f("cement.dialog.paste.clean"),onclick:b},{text:f("cement.dialog.paste.merge"),onclick:c}],i={title:f("cement.dialog.paste.title"),spacing:10,padding:10,items:[{type:"container",html:f("cement.dialog.paste.instructions")}],buttons:g};a=e.windowManager.open(i),d(function(){a&&a.getEl().focus()},1)};c.isWordContent(g)&&!i(e.settings.powerpaste_word_import)?j():i(e.settings.powerpaste_html_import)?h():j()};return{showDialog:g}}}),g("4",["d","e","f"],function(a,b,c){return function(d,e,f){var g,h,i=this,j=c(d,a.translate),k=function(a){return function(b){a(b)}};g=b.getOnPasteFunction(d,j.showDialog,e),d.on("paste",k(g)),h=b.getOnKeyDownFunction(d,j.showDialog,e),d.on("keydown",k(h)),d.addCommand("mceInsertClipboardContent",function(a,b){j.showDialog(b.content||b)}),d.settings.paste_preprocess&&d.on("PastePreProcess",function(a){d.settings.paste_preprocess.call(i,i,a)})}}),g("1s",[],function(){var a=0,b=function(b){var c=new Date,d=c.getTime(),e=Math.floor(1e9*Math.random());return a++,b+"_"+e+a+String(d)};return{generate:b}}),g("1n",["g","1s","2t","h","o","2u","2b","j"],function(a,b,c,d,e,f,g,h){var i=c.detect(),j=function(a){var b=g.createObjectURL(a);return k(a,b)},k=function(a,c){return e.nu(function(e){var g=f();g.onload=function(f){var g=b.generate("image"),h=f.target,i=d.blob(g,a,c,h);e(i)},g.readAsDataURL(a)})},l=function(a){return 0===a.length?e.pure([]):e.mapM(a,j)},m=function(a){return a.raw().target.files||a.raw().dataTransfer.files},n=function(b){return 1===b.length&&a.contains(b,"Files")},o=function(b){return!a.contains(b,"text/_moz_htmlcontext")},p=function(b){return a.contains(b,"Files")},q=function(a){return!0},r=function(){return i.browser.isChrome()||i.browser.isSafari()||i.browser.isOpera()?p:i.browser.isFirefox()?o:i.browser.isIE()?n:q},s=r(),t=function(c){var f=a.map(c,function(a){var c=b.generate("image");return d.url(c,h.get(a,"src"),a)});return e.pure(f)};return{multiple:l,toFiles:m,isFiles:s,fromImages:t,single:j,singleWithUrl:k}}),g("i",["1n"],function(a){var b=function(b){return a.multiple(b)},c=function(b){return a.single(b)},d=function(b,c){return a.singleWithUrl(b,c)};return{multiple:b,single:c,singleWithUrl:d}}),g("5",["g","h","i","j","k","d","f","2"],function(a,b,c,d,e,f,g,h){return function(i,j,k,l){var m,n=/^image\/(jpe?g|png|gif|bmp)$/i;i.on("dragstart dragend",function(a){m="dragstart"===a.type}),i.on("dragover dragend dragleave",function(a){a.preventDefault()});var o=function(a){var b={};if(a){if(a.getData){var c=a.getData("Text");c&&c.length>0&&(b["text/plain"]=c)}if(a.types)for(var d=0;d0},q=function(a){return!r(a)&&(p(a,"text/html")||p(a,"text/plain"))},r=function(a){var b=a["text/plain"];return!!b&&0===b.indexOf("file://")},s=function(b){var c=b.target.files||b.dataTransfer.files;return a.filter(c,function(a){return n.test(a.type)})},t=function(c){return a.map(c,function(a){var c=e.fromTag("img"),f=b.cata(a,l.getLocalURL,function(a,b,c){return b});return d.set(c,"src",f),c.dom().outerHTML}).join("")},u=function(a){c.multiple(a).get(function(a){var b=t(a);i.insertContent(b,{merge:i.settings.paste_merge_formats!==!1}),l.uploadImages(a)})};i.on("drop",function(a){if(!m){if(h.dom.RangeUtils&&h.dom.RangeUtils.getCaretRangeFromPoint){var b=h.dom.RangeUtils.getCaretRangeFromPoint(a.clientX,a.clientY,i.getDoc());b&&i.selection.setRng(b)}var c=s(a);if(c.length>0)return u(c),void a.preventDefault();var d=o(a.dataTransfer);if(q(d)){var e=g(i,f.translate);e.showDialog(d["text/html"]||d["text/plain"]),a.preventDefault()}}})}}),g("4r",["g","2c","1f"],function(a,b,c){var d=["officeStyles","htmlStyles","isWord","proxyBin","isInternal","backgroundAssets"],e=function(b,c){var e={};return a.each(d,function(a){var d=c[a]().or(b[a]());d.each(function(b){e[a]=b})}),f(e)},f=b.immutableBag([],d);return{nu:f,merge:e}}),g("2w",["n","1m"],function(a,b){var c=b.generate([{error:["message"]},{paste:["elements","assets","correlated"]},{cancel:[]},{incomplete:["elements","assets","correlated","message"]}]),d=function(a,b,c,d,e){return a.fold(b,c,d,e)},e=function(b,e){return d(b,a.none,a.none,a.none,function(b,f,g,h){return d(e,a.none,function(b,d,e){return a.some(c.incomplete(b,d,e,h))},a.none,a.none)}).getOr(e)};return{error:c.error,paste:c.paste,cancel:c.cancel,incomplete:c.incomplete,cata:d,carry:e}}),g("4q",["4r","2w","1v","2c"],function(a,b,c,d){var e=d.immutableBag(["response","bundle"],[]),f=function(a){return l(function(b){var c=e(a);b(c)})},g=function(a,b){a(e(b))},h=function(a){return f({response:a.response(),bundle:a.bundle()})},i=function(c){return f({response:b.error(c),bundle:a.nu({})})},j=function(){return f({response:b.cancel(),bundle:a.nu({})})},k=function(){return f({response:b.paste([],[],[]),bundle:a.nu({})})},l=function(a){var b=function(b){a(b)};return c(l,b)};return{call:g,sync:l,pure:f,pass:h,done:e,error:i,initial:k,cancel:j}}),g("23",["n"],function(a){var b=function(a){for(var b=[],c=function(a){b.push(a)},d=0;d0){var j=c.mapM(h,function(a){var c=d.createObjectURL(a);return i.apply(g,[a,"specified",c]),b.singleWithUrl(a,c)});return e.some(j)}return e.none()};return{convert:g}}),g("30",["4u","o","p","n"],function(a,b,c,d){var e=function(){var c=d.none(),e=function(b){c=a.convert(b)},f=function(a){return c.fold(function(){return b.nu(function(a){a([])})},function(a){return a}).get(a)},g=function(){c=d.none()};return{convert:e,listen:f,clear:g}},f=function(){return{convert:d.none,listen:function(a){a([])},clear:c.noop}};return{background:e,ignore:f}}),h("4v",RegExp),g("31",["n","23","4v"],function(a,b,c){var d=function(a){return void 0!==a&&void 0!==a.types&&null!==a.types},e=function(a,c){return b.findMap(a,function(a){return f(c,a)})},f=function(d,e){var f=new c(e,"i");return b.findMap(d,function(b){return null!==b.match(f)?a.some({type:b,flavor:e}):a.none()})};return{isValidData:d,getPreferredFlavor:e,getFlavor:f}}),g("4x",["1l","1m"],function(a,b){var c=b.generate([{none:[]},{error:["message "]},{blob:["blob"]}]),d=function(a,b,c,d){return a.fold(b,c,d)};return a.merge(c,{cata:d})}),g("78",["3p"],function(a){return function(b,c){var d=a.getOrDie("Blob");return new d(b,c)}}),g("79",["3p"],function(a){return function(b){var c=a.getOrDie("Uint8Array");return new c(b)}}),g("7a",["3p"],function(a){var b=function(b){var c=a.getOrDie("requestAnimationFrame");c(b)},c=function(b){var c=a.getOrDie("atob");return c(b)};return{atob:c,requestAnimationFrame:b}}),g("6d",["4x","78","79","7a","n","2f","37","12","62"],function(a,b,c,d,e,f,g,h,i){var j=function(a,e){for(var f=1024,g=d.atob(a),j=g.length,k=i.ceil(j/f),l=new h(k),m=0;m"data:image/".length},l=function(b){if(!k(b))return a.none();var c=b.indexOf(";"),d=b.substr("data:".length,c-"data:".length),e=b.substr(c+";base64,".length);try{var f=a.blob(j(e,d));return f}catch(g){return a.error(g)}};return{convert:l}}),g("4w",["6d"],function(a){var b=function(b){return a.convert(b)};return{toBlob:b}}),g("4y",["2w","g","h","p","2c","j","k","1d","2a","1f"],function(a,b,c,d,e,f,g,h,i,j){var k=e.immutable("asset","image"),l=function(a,e){var g=[];return b.each(a,function(a,b){c.cata(a,function(c,d,h,i){var j=e[b];f.set(j,"src",h),g.push(k(a,j))},d.noop)}),g},m=function(a,e){var g=[],j=b.bind(a,function(a){return"img"===h.name(a)?[a]:i.descendants(a,"img")});return b.each(e,function(a){c.cata(a,function(c,d,e,h){b.each(j,function(b){f.get(b,"src")===e&&g.push(k(a,b))})},d.noop)}),g},n=function(d){var e=[],h=[],i=[];return b.each(d,function(a){return c.cata(a,function(b,c,d,j){var l=g.fromTag("img");f.set(l,"src",d),e.push(l),h.push(a),i.push(k(a,l))},function(a,b,c){j.error("Internal error: Paste operation produced an image URL instead of a Data URI: ",b)})}),a.paste(e,h,i)};return{createImages:n,findImages:m,updateSources:l}}),g("1y",["g","29","3f"],function(a,b,c){var d=function(b){b.dom().textContent="",a.each(c.children(b),function(a){e(a)})},e=function(a){var b=a.dom();null!==b.parentNode&&b.parentNode.removeChild(b)},f=function(a){var d=c.children(a);d.length>0&&b.before(a,d),e(a)};return{empty:d,remove:e,unwrap:f}}),g("32",["4w","4x","4q","4y","2w","g","i","n","2c","j","k","1d","1y","29","2a"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=i.immutable("blob","image"),q=function(c,d){var e=a.toBlob(d);return b.cata(e,h.none,h.none,function(a){return h.some(p(a,c))})},r=function(a){var b=k.fromTag("div");return n.append(b,a),o.descendants(b,"img[src]")},s=function(a){return 0===a.indexOf("data:")&&a.indexOf("base64")>-1},t=function(a){return 0===a.indexOf("blob:")},u=function(a){return s(a)||t(a)},v=function(a){var b=j.get(a,"src");return u(b)},w=function(a){return f.bind(r(a),function(a){var b=j.get(a,"src");return u(b)?q(a,b).toArray():[]})},x=function(a){var b=f.filter(a,function(a){return"img"!==l.name(a)||!v(a)});return e.incomplete(b,[],[],"errors.local.images.disallowed")};return function(a){return function(b,h){return c.sync(function(b){var i=function(){c.call(b,{response:h.response(),bundle:h.bundle()})},j=function(a){var i=w(a),j=f.map(i,function(a){return a.blob()});g.multiple(j).get(function(g){var j=f.map(i,function(a){return a.image()}),k=d.updateSources(g,j);c.call(b,{response:e.paste(a,g,k),bundle:h.bundle()})})},k=function(a){var d=f.filter(r(a),v);f.each(d,m.remove),c.call(b,{response:d.length>0?x(a):h.response(),bundle:h.bundle()})},l=function(b,c,d,e){a.allowLocalImages===!1?k(b):0===c.length?j(b):i()};e.cata(h.response(),i,l,i,l)})}}}),g("4z",["4q","2w","o","1f"],function(a,b,c,d){var e=function(c){var e=function(e,f){return c.proxyBin().fold(function(){return d.error(e),a.pure({response:b.cancel(),bundle:{}})},f)};return{handle:e}},f=function(a){return c.nu(function(b){a.backgroundAssets().fold(function(){b([])},function(a){a.listen(b)})})},g=function(a){var b=j(a);return b&&h(a)||!b&&i(a)},h=function(a){return a.officeStyles().getOr(!0)},i=function(a){return a.htmlStyles().getOr(!1)},j=function(a){return a.isWord().getOr(!1)},k=function(a){return a.isInternal().getOr(!1)};return{proxyBin:e,backgroundAssets:f,merging:g,mergeOffice:h,mergeNormal:i,isWord:j,isInternal:k}}),g("5c",["3g"],function(a){var b=a.create("ephox-cement");return{resolve:b.resolve}}),g("50",["5c","1l","p","n","27","k","28","1x","29"],function(a,b,c,d,e,f,g,h,i){return function(j,k){var l=k.translations,m=function(a,c,e){e(d.some(b.merge(c,{officeStyles:a,htmlStyles:a})))},n=function(b,c){var k=function(){t(),m(!1,b,c)},n=function(){t(),m(!0,b,c)},o=f.fromTag("div");e.add(o,a.resolve("styles-dialog-content"));var p=f.fromTag("p"),q=g.fromHtml(l("cement.dialog.paste.instructions"));i.append(p,q),h.append(o,p);var r={text:l("cement.dialog.paste.clean"),tabindex:0,className:a.resolve("clean-styles"),click:k},s={text:l("cement.dialog.paste.merge"),tabindex:1,className:a.resolve("merge-styles"),click:n},t=function(){v.destroy()},u=function(){c(d.none()),t()},v=j(!0);v.setTitle(l("cement.dialog.paste.title")),v.setContent(o),v.setButtons([r,s]),v.show(),v.events.close.bind(u)},o=function(a,b){var c=a?"officeStyles":"htmlStyles",d=k[c];"clean"===d?m(!1,k,b):"merge"===d?m(!0,k,b):n(k,b)};return{get:o,destroy:c.noop}}}),g("33",["4q","4r","4z","50","2w"],function(a,b,c,d,e){var f=function(f,g){var h=d(f,g);return function(d,f){var g=f.bundle(),i=f.response();return a.sync(function(d){h.get(c.isWord(g),function(c){var g=c.fold(function(){return{response:e.cancel(),bundle:f.bundle()}},function(a){return{response:i,bundle:b.nu({officeStyles:a.officeStyles,htmlStyles:a.htmlStyles})}});a.call(d,g)})})}},g=function(d,e){return function(g,h){return c.isInternal(h.bundle())?a.pure({response:h.response(),bundle:b.nu({officeStyles:!0,htmlStyles:!0})}):f(d,e)(g,h)}},h=function(c,d){return function(e,f){return a.pure({response:f.response(),bundle:b.nu({officeStyles:c,htmlStyles:d})})}};return{fixed:h,fromConfig:f,fromConfigIfExternal:g}}),g("7r",["2t","p","k","1g"],function(a,b,c,d){var e=function(a){for(var b=[];null!==a.nextNode();)b.push(c.fromDom(a.currentNode));return b},f=function(a){try{return e(a)}catch(b){return[]}},g=a.detect().browser,h=g.isIE()||g.isSpartan()?f:e,i=b.constant(b.constant(!0)),j=function(a,b){var c=b.fold(i,function(a){return function(b){return a(b.nodeValue)}});c.acceptNode=c;var e=d.createTreeWalker(a.dom(),NodeFilter.SHOW_COMMENT,c,!1);return h(e)};return{find:j}}),g("7b",["n","7r","37","1g"],function(a,b,c,d){var e=function(d){return b.find(d,a.some(function(a){return c.startsWith(a,"[if gte vml 1]")}))};return{find:e}}),g("6q",[],function(){var a=function(a){return void 0!==a.style};return{isSupported:a}}),h("11",window),g("5d",["1b","g","1c","n","j","5i","k","1d","6q","37","1e","1f","11"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c,d){if(!a.isString(d))throw l.error("Invalid call to CSS.set. Property ",c,":: Value ",d,":: Element ",b),new k("CSS value must be a string: "+d);i.isSupported(b)&&b.style.setProperty(c,d)},o=function(a,b){i.isSupported(a)&&a.style.removeProperty(b)},p=function(a,b,c){var d=a.dom();n(d,b,c)},q=function(a,b){var d=a.dom();c.each(b,function(a,b){n(d,b,a)})},r=function(a,b){var d=a.dom();c.each(b,function(a,b){a.fold(function(){o(d,b)},function(a){n(d,b,a)})})},s=function(a,b){var c=a.dom(),d=m.getComputedStyle(c),e=d.getPropertyValue(b),g=""!==e||f.inBody(a)?e:t(c,b);return null===g?void 0:g},t=function(a,b){return i.isSupported(a)?a.style.getPropertyValue(b):""},u=function(a,b){var c=a.dom(),e=t(c,b);return d.from(e).filter(function(a){return a.length>0})},v=function(a,b,c){var d=g.fromTag(a);p(d,b,c);var e=u(d,b);return e.isSome()},w=function(a,b){var c=a.dom();o(c,b),e.has(a,"style")&&""===j.trim(e.get(a,"style"))&&e.remove(a,"style")},x=function(a,b){var c=e.get(a,"style"),d=b(a),f=void 0===c?e.remove:e.set;return f(a,"style",c),d},y=function(a,b){var c=a.dom(),d=b.dom();i.isSupported(c)&&i.isSupported(d)&&(d.style.cssText=c.style.cssText)},z=function(a){return a.dom().offsetWidth},A=function(a,b,c){u(a,c).each(function(a){u(b,c).isNone()&&p(b,c,a)})},B=function(a,c,d){h.isElement(a)&&h.isElement(c)&&b.each(d,function(b){A(a,c,b)})};return{copy:y,set:p,preserve:x,setAll:q,setOptions:r,remove:w,get:s,getRaw:u,isValidValue:v,reflow:z,transfer:B}}),g("6r",["1b","g","p","n","5i","3n","k","2i"],function(a,b,c,d,e,f,g,h){var i=function(a){return n(e.body(),a)},j=function(b,e,f){for(var h=b.dom(),i=a.isFunction(f)?f:c.constant(!1);h.parentNode;){h=h.parentNode;var j=g.fromDom(h);if(e(j))return d.some(j);if(i(j))break}return d.none()},k=function(a,b,c){var d=function(a){return b(a)};return h(d,j,a,b,c)},l=function(a,b){var c=a.dom();return c.parentNode?m(g.fromDom(c.parentNode),function(c){return!f.eq(a,c)&&b(c)}):d.none()},m=function(a,e){var f=b.find(a.dom().childNodes,c.compose(e,g.fromDom));return d.from(f).map(g.fromDom)},n=function(a,b){var c=function(a){for(var e=0;e");return d.dom().innerHTML=c.substr(h+"]>".length),g.descendant(d,function(a){return f.name(a)===b})},l=function(b){return f.isComment(b)?k(b,"v:shape"):a.none()},m=function(a){return l(a).map(function(a){var f=b.get(a,"o:spid"),g=void 0===f?b.get(a,"id"):f,h=e.fromTag("img");return c.add(h,"rtf-data-image"),b.set(h,"data-image-id",g.substr("_x0000_".length)),b.set(h,"data-image-type","code"),d.setAll(h,{width:d.get(a,"width"),height:d.get(a,"height")}),h})},n=function(d){if("img"===f.name(d)){var e=b.get(d,"src");if(void 0!==e&&null!==e&&j.startsWith(e,"file://")){var g=h.shallow(d),i=e.split(/[\/\\]/),k=i[i.length-1];return b.set(g,"data-image-id",k),b.remove(g,"src"),b.set(g,"data-image-type","local"),c.add(g,"rtf-data-image"),a.some(g)}return a.none()}return a.none()},o=function(a){return p(a).length>0},p=function(a){return i.descendants(a,".rtf-data-image")};return{local:n,vshape:m,find:p,exists:o,scour:l}}),g("6e",["7b","g","5a","n","23","2c","j","28","2a","1f"],function(a,b,c,d,e,f,g,h,i,j){var k=f.immutable("img","vshape"),l=function(a){var b=n(a);return b._rawElement=a.dom(),b},m=function(a){var b=n(a);return b._rawElement=a.dom(),b},n=function(a){return g.clone(a)},o=function(d){var f=h.fromHtml(d),g=b.bind(f,function(a){return i.descendants(a,"img")}),j=b.bind(f,a.find),k=e.cat(b.map(j,c.scour)),l=b.map(g,function(a){return p(a,k)});return e.cat(l)},p=function(a,c){var e=g.get(a,"v:shapes"),f=d.from(b.find(c,function(a){return g.get(a,"id")===e}));return f.isNone()&&j.log("WARNING: unable to find data for image",a.dom()),f.map(function(b){return q(a,b)})},q=function(a,b){return k(l(a),m(b))};return{extract:o}}),g("7c",["1b","g","p","n","j","27"],function(a,b,c,d,e,f){var g=function(b,c){var d=c.style;if(e.has(b,"width")&&e.has(b,"height")&&a.isString(d)){var f=d.match(/rotation:([^;]*)/);null===f||"90"!==f[1]&&"-90"!==f[1]||e.setAll(b,{width:e.get(b,"height"),height:e.get(b,"width")})}},h=function(a,b){var c=b["o:spid"],d=void 0===c?b.id:c;g(a,b),f.add(a,"rtf-data-image"),e.set(a,"data-image-id",d.substr("_x0000_".length)),e.set(a,"data-image-type","code")},i=function(a,b,c){return c.img()[a]===b},j=function(a,f,g){var h=e.get(f,g),j=c.curry(i,g,h),k=b.find(a,j);return d.from(k).map(function(a){return e.remove(f,g),a})},k=function(a,c,d){b.each(c,function(b){j(a,b,d).each(function(a){h(b,a.vshape())})})};return{rotateImage:g,insertRtfCorrelation:k}}),g("7s",["2t","n","1e"],function(a,b,c){return function(d,e){var f=function(a){if(!d(a))throw new c("Can only get "+e+" value of a "+e+" node");return j(a).getOr("")},g=function(a){try{return h(a)}catch(c){return b.none()}},h=function(a){ -return d(a)?b.from(a.dom().nodeValue):b.none()},i=a.detect().browser,j=i.isIE()&&10===i.version.major?g:h,k=function(a,b){if(!d(a))throw new c("Can only set raw "+e+" value of a "+e+" node");a.dom().nodeValue=b};return{get:f,getOption:j,set:k}}}),g("7d",["1d","7s"],function(a,b){var c=b(a.isComment,"comment"),d=function(a){return c.get(a)},e=function(a){return c.getOption(a)},f=function(a,b){c.set(a,b)};return{get:d,getOption:e,set:f}}),g("7t",["1x"],function(a){var b=function(b,c,d){b.dom().styleSheet?b.dom().styleSheet.cssText=c:a.append(b,d)};return{setCss:b}}),g("8f",[],function(){var a=function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")};return{escape:a}}),g("7u",["1c","8f","4v"],function(a,b,c){var d=function(a,d,e){var f=new c("url\\(\\s*['\"]?"+b.escape(d)+"(.*?)['\"]?\\s*\\)","g");return a.replace(f,'url("'+e+'$1")')},e=function(b,c){var e=b;return a.each(c,function(a,b){e=d(e,b,a)}),e};return{replace:d,replaceMany:e}}),g("7e",["j","k","1x","20","7t","7u","12"],function(a,b,c,d,e,f,g){var h=function(c){var d=b.fromTag("style",c.dom());return a.set(d,"type","text/css"),d},i=function(a,c,d){e.setCss(a,c,b.fromText(c,d.dom()))},j=function(a,b,e){var g=h(e),j=void 0===b?a:f.replaceMany(a,b);i(g,j,e);var k=d.descendant(e,"head").getOrDie();c.append(k,g)},k=function(a){var b=a.dom().styleSheets;return g.prototype.slice.call(b)};return{stylesheets:k,inject:j}}),g("7v",["g","2c"],function(a,b){var c=b.immutable("selector","style","raw"),d=function(b){var d=b.cssRules;return a.map(d,function(a){var b=a.selectorText,d=a.style.cssText;if(void 0===d)throw"WARNING: Browser does not support cssText property";return c(b,d,a.style)})},e=function(b){return a.bind(b,d)};return{extract:d,extractAll:e}}),g("7f",["7v"],function(a){var b=function(b){return a.extract(b)},c=function(b){return a.extractAll(b)};return{extract:b,extractAll:c}}),function(a,b,c){a("7g",[],function(){var a=function(){var a,b,c;return a=function(a){var c,d,e,f,g=[];for(c=a.split(","),e=0,f=c.length;e0&&g.push(b(d));return g},b=function(a){var b,c=a,d={a:0,b:0,c:0},e=[],f=/(\[[^\]]+\])/g,g=/(#[^\s\+>~\.\[:]+)/g,h=/(\.[^\s\+>~\.\[:]+)/g,i=/(::[^\s\+>~\.\[:]+|:first-line|:first-letter|:before|:after)/gi,j=/(:[\w-]+\([^\)]*\))/gi,k=/(:[^\s\+>~\.\[:]+)/g,l=/([^\s\+>~\.\[:]+)/g;return b=function(b,f){var g,h,i,j,k,l;if(b.test(c))for(g=c.match(b),h=0,i=g.length;h~]/g," "),c=c.replace(/[#\.]/g," "),b(l,"c"),e.sort(function(a,b){return a.index-b.index}),{selector:a,specificity:"0,"+d.a.toString()+","+d.b.toString()+","+d.c.toString(),specificityArray:[0,d.a,d.b,d.c],parts:e}},c=function(a,c){var d,e,f;if("string"==typeof a){if(a.indexOf(",")!==-1)throw"Invalid CSS selector";d=b(a).specificityArray}else{if(!Array.isArray(a))throw"Invalid CSS selector or specificity array";if(4!==a.filter(function(a){return"number"==typeof a}).length)throw"Invalid specificity array";d=a}if("string"==typeof c){if(c.indexOf(",")!==-1)throw"Invalid CSS selector";e=b(c).specificityArray}else{if(!Array.isArray(c))throw"Invalid CSS selector or specificity array";if(4!==c.filter(function(a){return"number"==typeof a}).length)throw"Invalid specificity array";e=c}for(f=0;f<4;f+=1){if(d[f]e[f])return 1}return 0},{calculate:a,compare:c}}();return"undefined"!=typeof exports&&(exports.calculate=a.calculate,exports.compare=a.compare),a})}(f.bolt.module.api.define,f.bolt.module.api.require,f.bolt.module.api.demand),g("6f",["7c","g","p","2c","j","7d","5d","1y","2a","3f","7e","7f","7g"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=d.immutable("selector","raw"),o=function(b,c,d,e,f){var g=i.descendants(c,"img");t(c),a.insertRtfCorrelation(d,g,e);var h=f.mergeInline()?s:p;h(b,c)},p=c.noop,q=function(a,c){var d={};return b.each(a,function(e){if(void 0!==a[e]){var f=c.dom().style;b.contains(f,e)||(d[e]=a[e])}}),d},r=function(a,c){var d=b.bind(c,function(c){var d=i.descendants(a,c.selector());return b.each(d,function(a){var b=q(c.raw(),a);g.setAll(a,b)}),d});b.each(d,function(a){e.remove(a,"class")})},s=function(a,c){var d=k.stylesheets(a),e=l.extractAll(d),f=function(a){return a.selector().indexOf(",")!==-1},g=function(a){return!f(a)},h=function(a){var c=a.selector().split(",");return b.map(c,function(b){var c=b.trim();return n(c,a.raw())})},i=b.flatten(b.map(b.filter(e,f),h)),j=b.filter(e,g),o=j.concat(i);o.sort(function(a,b){return m.compare(a.selector(),b.selector())}).reverse(),r(c,o)},t=function(a){var c=j.children(a);b.each(c,function(a){f.getOption(a).each(function(b){"StartFragment"!==b&&"EndFragment"!==b||h.remove(a)})})};return{doMergeInlineStyles:r,process:o}}),g("71",["n","k"],function(a,b){var c=function(c){var d=c.dom();try{var e=d.contentWindow?d.contentWindow.document:d.contentDocument;return void 0!==e&&null!==e?a.some(b.fromDom(e)):a.none()}catch(f){return console.log("Error reading iframe: ",d),console.log("Error was: "+f),a.none()}},d=function(a){var b=c(a);return b.fold(function(){return a},function(a){return a})};return{doc:d}}),g("5x",["71","5i"],function(a,b){var c=function(c,d){if(!b.inBody(c))throw"Internal error: attempted to write to an iframe that is not in the DOM";var e=a.doc(c),f=e.dom();f.open(),f.writeln(d),f.close()};return{write:c}}),g("25",["p","k"],function(a,b){var c=function(b,c,d,e,f,g,h){return{target:a.constant(b),x:a.constant(c),y:a.constant(d),stop:e,prevent:f,kill:g,raw:a.constant(h)}},d=function(d,e){return function(f){if(d(f)){var g=b.fromDom(f.target),h=function(){f.stopPropagation()},i=function(){f.preventDefault()},j=a.compose(i,h),k=c(g,f.clientX,f.clientY,h,i,j,f);e(k)}}},e=function(b,c,e,f,g){var i=d(e,f);return b.dom().addEventListener(c,i,g),{unbind:a.curry(h,b,c,i,g)}},f=function(a,b,c,d){return e(a,b,c,d,!1)},g=function(a,b,c,d){return e(a,b,c,d,!0)},h=function(a,b,c,d){a.dom().removeEventListener(b,c,d)};return{bind:f,capture:g}}),g("w",["p","25"],function(a,b){var c=a.constant(!0),d=function(a,d,e){return b.bind(a,d,c,e)},e=function(a,d,e){return b.capture(a,d,c,e)};return{bind:d,capture:e}}),g("6g",["p","5x","5d","w","k","1x","1y","x"],function(a,b,c,d,e,f,g,h){return function(i){var j=function(j,k,l){var m=e.fromTag("div"),n=e.fromTag("iframe");c.setAll(m,{display:"none"});var o=d.bind(n,"load",function(){o.unbind(),b.write(n,j);var c=n.dom().contentWindow.document;if(void 0===c)throw"sandbox iframe load event did not fire correctly";var d=e.fromDom(c),f=c.body;if(void 0===f)throw"sandbox iframe does not have a body";var i=e.fromDom(f),p=k(d,i);g.remove(m),h(a.curry(l,p),0)});f.append(m,n),f.append(i,m)};return{play:j}}}),g("6h",["k","28","1x","29","1y","3f"],function(a,b,c,d,e,f){var g=function(a){return a.dom().innerHTML},h=function(g,h){var i=f.owner(g),j=i.dom(),k=a.fromDom(j.createDocumentFragment()),l=b.fromHtml(h,j);d.append(k,l),e.empty(g),c.append(g,k)},i=function(b){var d=a.fromTag("div"),e=a.fromDom(b.dom().cloneNode(!0));return c.append(d,e),g(d)};return{get:g,set:h,getOuter:i}}),g("51",["4q","4r","6e","6f","2w","p","6g","k","28","6h","1g"],function(a,b,c,d,e,f,g,h,i,j,k){var l="data-textbox-image",m=function(a){return void 0===a||null===a||0===a.length},n=function(a){var b=1;return a.replace(/(]*)src=".*?"/g,function(a,c,d){return c+l+'="'+b++ +'"'})},o=function(a,b){var c=g(h.fromDom(k.body));return function(e,g){c.play(e,function(c,e){return d.process(c,e,a,l,{mergeInline:f.constant(b)}),j.get(e)},g)}},p=function(d,f,g){return a.sync(function(h){var j=c.extract(d),k=o(j,f);k(g,function(c){var d=i.fromHtml(c);a.call(h,{response:e.paste(d,[],[]),bundle:b.nu({})})})})},q=function(){return a.pure({response:e.paste([],[],[]),bundle:b.nu({})})},r=function(a){var b=a.indexOf("");return b>-1?a.substr(0,b+"".length):a},s=function(b,c,d){var f=r(b.data()),g=n(f);return d.cleanDocument(g,c).fold(function(){return a.pure({response:e.error("errors.paste.word.notready"),bundle:{}})},function(a){return m(a)?q():p(g,c,a)})};return{handle:s}}),g("52",["4q","4r","4y","g","i"],function(a,b,c,d,e){var f=function(f){var g=d.filter(f,function(a){return"file"===a.kind&&/image/.test(a.type)}),h=d.map(g,function(a){return a.getAsFile()});return a.sync(function(d){e.multiple(h).get(function(e){var f=c.createImages(e);a.call(d,{response:f,bundle:b.nu({})})})})};return{handle:f}}),g("7w",[],function(){return{validStyles:function(){return/^(mso-.*|tab-stops|tab-interval|language|text-underline|text-effect|text-line-through|font-color|horiz-align|list-image-[0-9]+|separator-image|table-border-color-(dark|light)|vert-align|vnd\..*)$/},specialInline:function(){return/^(font|em|strong|samp|acronym|cite|code|dfn|kbd|tt|b|i|u|s|sub|sup|ins|del|var|span)$/}}}),g("83",[],function(){var a=function(a){return g(function(b,c,d,e,f,g){return b(a)})},b=function(a){return g(function(b,c,d,e,f,g){return c(a)})},c=function(a){return g(function(b,c,d,e,f,g){return d(a)})},d=function(a){return g(function(b,c,d,e,f,g){return e(a)})},e=function(){return g(function(a,b,c,d,e,f){return e()})},f=function(a){return g(function(b,c,d,e,f,g){return g(a)})},g=function(a){var b=function(b){return a(function(a){return 0===b.toLowerCase().indexOf(a.toLowerCase())},function(a){return a.test(b.toLowerCase())},function(a){return b.toLowerCase().indexOf(a.toLowerCase())>=0},function(a){return b.toLowerCase()===a.toLowerCase()},function(){return!0},function(a){return!a.matches(b)})};return{fold:a,matches:b}},h=function(a,b,c,d,e,f,g){return a.fold(b,c,d,e,f,g)};return{starts:a,pattern:b,contains:c,exact:d,all:e,not:f,cata:h}}),g("7x",["p","1d","83"],function(a,b,c){var d=function(b,d,e,f){var g=f.name,h=void 0!==f.condition?f.condition:a.constant(!0),i=void 0!==f.value?f.value:c.all();return g.matches(e)&&i.matches(d)&&h(b)},e=function(c,d){var e=b.name(c),f=d.name,g=void 0!==d.condition?d.condition:a.constant(!0);return f.matches(e)&&g(c)};return{keyval:d,name:e}}),g("8g",["g","1c","p","j"],function(a,b,c,d){var e=function(b,c){var d={};return a.each(b.dom().attributes,function(a){c(a.value,a.name)||(d[a.name]=a.value)}),d},f=function(c,e,f){a.each(e,function(a){d.remove(c,a)}),b.each(f,function(a,b){d.set(c,b,a)})},g=function(c,d,e){var g=a.map(c.dom().attributes,function(a){return a.name});b.size(d)!==g.length&&f(c,g,d)};return{filter:e,clobber:g,scan:c.constant({})}}),g("8h",["g","1c","j","5d","37"],function(a,b,c,d,e){var f=function(b){var c={},d=void 0!==b&&null!==b?b.split(";"):[];return a.each(d,function(a){var b=a.split(":");2===b.length&&(c[e.trim(b[0])]=e.trim(b[1]))}),c},g=function(a,b){return a.dom().style.getPropertyValue(b)},h=function(b,c){var d=b.dom().style,e=void 0===d?[]:d,f={};return a.each(e,function(a){var d=g(b,a);c(d,a)||(f[a]=d)}),f},i=function(a,b,c){d.set(a,b,c)},j=function(b,c,d){var e=b.dom().getAttribute("style"),g=f(e),h={};return a.each(c,function(a){var b=g[a];void 0===b||d(b,a)||(h[a]=b)}),h},k=function(c){var d=b.keys(c);return a.map(d,function(a){return a+": "+c[a]}).join("; ")},l=function(a,d,e){c.set(a,"style","");var f=b.size(d),g=b.size(e);if(0===f&&0===g)c.remove(a,"style");else if(0===f)c.set(a,"style",k(e));else{b.each(d,function(b,c){i(a,c,b)});var h=c.get(a,"style"),j=g>0?k(e)+"; ":"";c.set(a,"style",j+h)}};return{filter:h,clobber:l,scan:j}}),g("7y",["8g","8h","p","k"],function(a,b,c,d){var e=["mso-list"],f=function(a,c){var d=b.scan(a,e,c),f=b.filter(a,c);b.clobber(a,f,d)},g=function(b,c){var d=a.filter(b,c);a.clobber(b,d,{})},h=function(a){var d=b.filter(a,c.constant(!1));b.clobber(a,d,{})},i=function(a,b){f(d.fromDom(a),b)},j=function(a,b){g(d.fromDom(a),b)};return{style:f,attribute:g,styleDom:i,attributeDom:j,validateStyles:h}}),g("7i",["g","1l","7x","7y","p","j","27","3q","1y","2a"],function(a,b,c,d,e,f,g,h,i,j){var k=function(b,d,e){b(e,function(b,f){return a.exists(d,function(a){return c.keyval(e,b,f,a)})})},l=function(l,m){var n=b.merge({styles:[],attributes:[],classes:[],tags:[]},m),o=j.descendants(l,"*");a.each(o,function(b){k(d.style,n.styles,b),k(d.attribute,n.attributes,b),a.each(n.classes,function(c){var d=f.has(b,"class")?h.get(b):[];a.each(d,function(a){c.name.matches(a)&&g.remove(b,a)})})});var p=j.descendants(l,"*");a.each(p,function(b){var d=a.exists(n.tags,e.curry(c.name,b));d&&i.remove(b)})},m=function(d,f){var g=b.merge({tags:[]},f),h=j.descendants(d,"*");a.each(h,function(b){var d=a.exists(g.tags,e.curry(c.name,b));d&&i.unwrap(b)})},n=function(d,f){var g=b.merge({tags:[]},f),h=j.descendants(d,"*");a.each(h,function(b){var d=a.find(g.tags,e.curry(c.name,b));void 0!==d&&null!==d&&d.mutate(b)})},o=function(b){var c=j.descendants(b,"*");a.each(c,function(a){d.validateStyles(a)})};return{remover:l,unwrapper:m,transformer:n,validator:o}}),g("86",["1c","5d","k"],function(a,b,c){var d="startElement",e="endElement",f="text",g="comment",h=function(a,h,i){var j,k,l,m=c.fromDom(a);switch(a.nodeType){case 1:h?j=e:(j=d,b.setAll(m,i||{})),k="HTML"!==a.scopeName&&a.scopeName&&a.tagName&&a.tagName.indexOf(":")<=0?(a.scopeName+":"+a.tagName).toUpperCase():a.tagName;break;case 3:j=f,l=a.nodeValue;break;case 8:j=g,l=a.nodeValue;break;default:console.log("WARNING: Unsupported node type encountered: "+a.nodeType)}var n=function(){return a},o=function(){return k},p=function(){return j},q=function(){return l};return{getNode:n,tag:o,type:p,text:q}},i=function(b,c,d,e){var f=e.createElement(b);return a.each(c,function(a,b){f.setAttribute(b,a)}),h(f,!1,d)},j=function(a,b){return h(b.createElement(a),!0)},k=function(a,b){return h(b.createComment(a),!1)},l=function(a,b){return h(b.createTextNode(a))},m=j("HTML",window.document);return{START_ELEMENT_TYPE:d,END_ELEMENT_TYPE:e,TEXT_TYPE:f,COMMENT_TYPE:g,FINISHED:m,token:h,createStartElement:i,createEndElement:j,createComment:k,createText:l}}),g("7z",["86"],function(a){var b=function(b){var c=b.createDocumentFragment(),d=c,e=function(a){g(a),c=a},f=function(){c=c.parentNode,null===c&&(c=d)},g=function(a){c.appendChild(a)},h=function(c){var d=function(a){var b=a.getNode().cloneNode(!1);e(b)},h=function(a,c){var d=b.createTextNode(a.text());g(d)};switch(c.type()){case a.START_ELEMENT_TYPE:d(c);break;case a.TEXT_TYPE:h(c);break;case a.END_ELEMENT_TYPE:f();break;case a.COMMENT_TYPE:break;default:throw{message:"Unsupported token type: "+c.type()}}};return{dom:d,receive:h,label:"SERIALISER"}};return{create:b}}),g("80",["86"],function(a){var b=function(b,c){var d;c=c||window.document,d=c.createElement("div"),c.body.appendChild(d),d.style.position="absolute",d.style.left="-10000px",d.innerHTML=b,nextNode=d.firstChild||a.FINISHED;var e=[];endNode=!1;var f=function(b,c){return b===a.FINISHED?b:b?a.token(b,c):void 0},g=function(){var b=nextNode,g=endNode;return!endNode&&nextNode.firstChild?(e.push(nextNode),nextNode=nextNode.firstChild):endNode||1!==nextNode.nodeType?nextNode.nextSibling?(nextNode=nextNode.nextSibling,endNode=!1):(nextNode=e.pop(),endNode=!0):endNode=!0,b===a.FINISHED||nextNode||(c.body.removeChild(d),nextNode=a.FINISHED),f(b,g)},h=function(){return void 0!==nextNode};return{hasNext:h,next:g}};return{tokenise:b}}),g("7j",["7z","80"],function(a,b){var c=function(a,b,c){var d,e=c;for(d=b.length-1;d>=0;d--)e=b[d](e,{},a);return e},d=function(d,e,f){for(var g=a.create(d),h=b.tokenise(e,d),i=c(d,f,g);h.hasNext();){var j=h.next();i.receive(j)}return g.dom};return{build:c,run:d}}),g("6m",["g","7i","7j","k","6h","1y","3f"],function(a,b,c,d,e,f,g){var h=function(a){return function(c){b.remover(c,a)}},i=function(a){return function(c){b.unwrapper(c,a)}},j=function(a){return function(c){b.transformer(c,a)}},k=function(){return function(a){b.validator(a)}},l=function(a){return function(b){var d=e.get(b),h=g.owner(b),i=c.run(h.dom(),d,a);f.empty(b),b.dom().appendChild(i)}},m=function(b,c,f){var g=d.fromTag("div",b.dom());return g.dom().innerHTML=c,a.each(f,function(a){a(g)}),e.get(g)},n=function(a,b){return a.indexOf("")>=0||b.browser.isSpartan()&&a.indexOf('v:shapes="')>=0||b.browser.isSpartan()&&a.indexOf("mso-")>=0||a.indexOf("mso-list")>=0||a.indexOf("p.MsoNormal, li.MsoNormal, div.MsoNormal")>=0||a.indexOf("MsoListParagraphCxSpFirst")>=0||a.indexOf("")>=0};return{removal:h,unwrapper:i,transformer:j,validate:k,pipeline:l,isWordContent:n,go:m}}),g("7l",["g","86"],function(a,b){return function(c,d,e){return function(e,f,g){var h=function(b){a.each(b,i)},i=function(a){e.receive(a)},j=function(a){c(l,a,k)},k=function(a,c){return b.token(c,a.type()===b.END_ELEMENT_TYPE,{})},l={emit:i,emitTokens:h,receive:j,document:window.document};return d(l),l}}}),g("8u",["8h","86","p","j","5d","k"],function(a,b,c,d,e,f){var g=function(a,b){var c=f.fromDom(a.getNode());return d.get(c,b)},h=function(a,b){var c=f.fromDom(a.getNode());return e.get(c,b)},i=function(a){return a.type()===b.TEXT_TYPE&&/^[\s\u00A0]*$/.test(a.text())},j=function(b){var d=f.fromDom(b.getNode()),e=a.scan(d,["mso-list"],c.constant(!1));return e["mso-list"]};return{getAttribute:g,getStyle:h,isWhitespace:i,getMsoList:j}}),g("96",["g","n"],function(a,b){var c=function(c,e){var f=a.find(c,function(a){return"UL"===a.tag||e&&d(a,e,!0)});return void 0!==f?b.some(f):c.length>0?b.some(c[0]):b.none()},d=function(a,b,c){return a===b||a&&b&&a.tag===b.tag&&a.type===b.type&&(c||a.variant===b.variant)};return{guessFrom:c,eqListType:d}}),g("8l",[],function(){var a=function(a,b){if(void 0===a||void 0===b)throw console.trace(),"brick";a.nextFilter.set(b)},b=function(b){return function(c,d,e){a(d,b)}},c=function(a,b,c){var d=b.nextFilter.get();d(a,b,c)},d=function(b){return function(d,e,f){a(e,b),c(d,e,f)}},e=function(a,b){return a.nextFilter.get()===b};return{next:a,go:c,jump:d,isNext:e,setNext:b}}),g("8t",["g","8u","96","8l","p","2c","j","k"],function(a,b,c,d,e,f,g,h){var i=function(a,b){return g.has(h.fromDom(b.getNode()),"data-list-level")},j=function(a){var b=parseInt(g.get(a,"data-list-level"),10),c=g.get(a,"data-list-emblems"),d=JSON.parse(c);return g.remove(a,"data-list-level"),g.remove(a,"data-list-emblems"),{level:e.constant(b),emblems:e.constant(d)}},k=f.immutable("level","token","type"),l=function(c){return!a.contains(["P"],c.tag())||/^MsoHeading/.test(b.getAttribute(c,"class"))},m=function(a,b,d,e){var f=d.getCurrentListType(),g=d.getCurrentLevel(),h=g==e.level()?f:null;return c.guessFrom(e.emblems(),h).filter(function(a){return!("OL"===a.tag&&l(b))})},n=function(a,b,c){var d=m(c.listType.get(),a,c.emitter,b);return d.each(c.listType.set),k(b.level(),c.originalToken.get(),c.listType.get())},o=function(a){return function(b,c,e){var f=j(h.fromDom(e.getNode()));f.level();c.originalToken.set(e);var g=n(e,f,c);c.emitter.openItem(g.level(),g.token(),g.type()),d.next(c,a.inside())}};return{predicate:i,action:o}}),g("8v",["p"],function(a){return function(b,c,d){return{pred:b,action:c,label:a.constant(d)}}}),g("8w",["g","p","n"],function(a,b,c){var d=function(a,b){return function(a,c,d){return b(a,c,d)}};return function(e,f,g){var h=d(e+" :: FALLBACK --- ",g),i=function(g,i,j){var k=c.from(a.find(f,function(a){return a.pred(i,j)})),l=k.fold(b.constant(h),function(a){var b=a.label();return void 0===b?a.action:d(e+" :: "+b,a.action)});l(g,i,j)};return i.toString=function(){return"Handlers for "+e},i}}),g("8i",["8t","86","8u","8v","8w","8l"],function(a,b,c,d,e,f){var g=function(a){var c=function(b,c,d){f.next(c,a.outside())},g=function(a,c){return c.type()===b.END_ELEMENT_TYPE&&a.originalToken.get()&&c.tag()===a.originalToken.get().tag()};return e("Inside.List.Item",[d(g,c,"Closing open tag")],function(a,b,c){a.emit(c)})},h=function(g){var h=function(a,b,c){b.emitter.closeAllLists(),a.emit(c),f.next(b,g.outside())},i=function(a,d){return d.type()===b.TEXT_TYPE&&c.isWhitespace(d)};return e("Outside.List.Item",[d(a.predicate,a.action(g),"Data List ****"),d(i,function(a,b,c){a.emit(c)},"Whitespace")],h)};return{inside:g,outside:h}}),g("97",["2c"],function(a){var b=a.immutable("state","result"),c=a.immutable("state","value"),d=a.immutable("level","type","types","items");return{state:d,value:c,result:b}}),g("9j",["97","n"],function(a,b){var c=function(c){var d=c.items().slice(0);if(d.length>0&&"P"!==d[d.length-1]){var e=d[d.length-1];d[d.length-1]="P";var f=a.state(c.level(),c.type(),c.types(),d);return a.value(f,b.some(e))}return a.value(c,b.none())},d=function(c,d){var e=c.items().slice(0),f=void 0!==d&&"P"!==d?b.some(d):b.none();f.fold(function(){e.push("P")},function(a){e.push(a)});var g=a.state(c.level(),c.type(),c.types(),e);return a.value(g,f)};return{start:d,finish:c}}),g("9k",["97"],function(a){var b=function(b,c,d){for(var e=[],f=b;c(f);){var g=d(f);f=g.state(),e=e.concat(g.result())}return a.result(f,e)},c=function(a,c,d){var e=function(a){return a.level()c};return b(a,e,d)};return{moveRight:c,moveLeft:d,moveUntil:b}}),g("9v",["8u"],function(a){var b=function(b){var c=a.getStyle(b,"margin-left");return void 0!==c&&"0px"!==c?{"margin-left":c}:{}},c=function(a){var c={"list-style-type":"none"};return a?b(a):c};return{from:c}}),g("9l",["7y","86","96","97","9j","9v","p"],function(a,b,c,d,e,f,g){var h=function(a,c,e){var f=c.start&&c.start>1?{start:c.start}:{},h=a.level()+1,i=c,j=a.types().concat([c]),k=[g.curry(b.createStartElement,c.tag,f,e)],l=d.state(h,i,j,a.items());return d.result(l,k)},i=function(a){var c=a.types().slice(0),e=[g.curry(b.createEndElement,c.pop().tag)],f=a.level()-1,h=c[c.length-1],i=d.state(f,h,c,a.items());return d.result(i,e)},j=function(a,b){var c=i(a),e=h(c.state(),b,b.type?{"list-style-type":b.type}:{});return d.result(e.state(),c.result().concat(e.result()))},k=function(h,i,k){var l={},m=f.from(i),n=h.type()&&!c.eqListType(h.type(),k)?j(h,k):d.result(h,[]),o=[g.curry(b.createStartElement,"LI",l,m)],p=e.start(n.state(),i&&i.tag()),q=p.value().map(function(b){return a.styleDom(i.getNode(),g.constant(!0)),[g.constant(i)]}).getOr([]);return d.result(p.state(),n.result().concat(o).concat(q))},l=function(a){var c=g.curry(b.createEndElement,"LI"),f=e.finish(a),h=f.value().fold(function(){return[c]},function(a){return[g.curry(b.createEndElement,a),c]});return d.result(f.state(),h)};return{open:h,openItem:k,close:i,closeItem:l}}),g("98",["g","86","97","9j","9k","9l","p","n"],function(a,b,c,d,e,f,g,h){var i=function(b){if(0===b.length)throw"Compose must have at least one element in the list";var d=b[b.length-1],e=a.bind(b,function(a){return a.result()});return c.result(d.state(),e)},j=function(a){var b=f.closeItem(a),c=f.close(b.state());return i([b,c])},k=function(a,b,c,d){var e=a.level()===c-1&&b.type?{"list-style-type":b.type}:{},g=f.open(a,b,e),h=f.openItem(g.state(),g.state().level()==c?d:void 0,b);return i([g,h])},l=function(a,b,d){var e=a.level()>0?f.closeItem(a):c.result(a,[]),g=f.openItem(e.state(),d,b);return i([e,g])},m=function(a,b,c,d){return e.moveRight(a,c,function(a){return k(a,b,c,d)})},n=function(a,b){return e.moveLeft(a,b,j)},o=function(a,e,f,i){var j=f>1?d.finish(a):c.value(a,h.none()),k=j.value().map(function(a){return[g.curry(b.createEndElement,a)]}).getOr([]),l=(f-j.state().level(),m(j.state(),e,f,i));return c.result(l.state(),k.concat(l.result()))},p=function(a,b,d,e){var f=a.level()>b?n(a,b):c.result(a,[]),g=f.state().level()===b?l(f.state(),e,d):o(f.state(),e,b,d);return i([f,g])},q=n;return{openItem:p,closeAllLists:q}}),g("8x",["g","97","98"],function(a,b,c){var d=["disc","circle","square"],e=function(a,b){return"UL"===a.tag&&d[b-1]===a.type&&(a={tag:"UL"}),a};return function(d,f){var g=b.state(0,void 0,[],[]),h=function(b){a.each(b.result(),function(a){var b=a(f);d.emit(b)})},i=function(){var a=c.closeAllLists(g,0);g=a.state(),h(a)},j=function(a,b,d){if(d){var f=e(d,a),i=c.openItem(g,a,b,f);g=i.state(),h(i)}},k=function(){return g.level()},l=function(){return g.type()};return{closeAllLists:i,openItem:j,getCurrentListType:l,getCurrentLevel:k}}}),g("z",[],function(){var a=function(b){var c=b,d=function(){return c},e=function(a){c=a},f=function(){return a(d())};return{get:d,set:e,clone:f}};return a}),g("8j",["8x","p","z"],function(a,b,c){var d={getCurrentListType:function(){return e().getCurrentListType()},getCurrentLevel:function(){return e().getCurrentLevel()},closeAllLists:function(){return e().closeAllLists.apply(void 0,arguments)},openItem:function(){return e().openItem.apply(void 0,arguments)}},e=function(){return{getCurrentListType:b.constant({}),getCurrentLevel:b.constant(1),closeAllLists:b.identity,openItem:b.identity}};return function(f){var g=c(f),h=c(null),i=c(null),j=function(c){g.set(f),h.set(null),i.set(null),_emitter=a(c,c.document),e=b.constant(_emitter)};return{reset:j,nextFilter:g,originalToken:h,listType:i,emitter:d}}}),g("8k",["86"],function(a){return function(){var b=!1,c="",d=function(d){return b&&d.type()===a.TEXT_TYPE?(c+=d.text(),!0):d.type()===a.START_ELEMENT_TYPE&&"STYLE"===d.tag()?(b=!0,!0):d.type()===a.END_ELEMENT_TYPE&&"STYLE"===d.tag()&&(b=!1,!0)};return{check:d}}}),g("81",["7l","8i","8j","8k","8l","1g"],function(a,b,c,d,e,f){var g={inside:function(){return i},outside:function(){return j}},h=d(),i=b.inside(g),j=b.outside(g),k=c(j);return a(function(a,b,c){h.check(b)||e.go(a,k,b)},k.reset,"list.filters")}),h("8o",parseInt),g("8y",["g","1l","64","8o"],function(a,b,c,d){var e=[{regex:/^\(?[dc][\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[DC][\.\)]$/,type:{tag:"OL",type:"upper-alpha"}},{regex:/^\(?M*(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})[\.\)]$/,type:{tag:"OL",type:"upper-roman"}},{regex:/^\(?m*(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})[\.\)]$/,type:{tag:"OL",type:"lower-roman"}},{regex:/^\(?[0-9]+[\.\)]$/,type:{tag:"OL"}},{regex:/^([0-9]+\.)*[0-9]+\.?$/,type:{tag:"OL",variant:"outline"}},{regex:/^\(?[a-z]+[\.\)]$/,type:{tag:"OL",type:"lower-alpha"}},{regex:/^\(?[A-Z]+[\.\)]$/,type:{tag:"OL",type:"upper-alpha"}}],f={"\u2022":{tag:"UL",type:"disc"},"\xb7":{tag:"UL",type:"disc"},"\xa7":{tag:"UL",type:"square"}},g={o:{tag:"UL",type:"circle"},"-":{tag:"UL",type:"disc"},"\u25cf":{tag:"UL",type:"disc"},"\ufffd":{tag:"UL",type:"circle"}},h=function(a,b){return void 0!==a.variant?a.variant:"("===b.charAt(0)?"()":")"===b.charAt(b.length-1)?")":"."},i=function(a){var b=a.split("."),e=function(){if(0===b.length)return a;var c=b[b.length-1];return 0===c.length&&b.length>1?b[b.length-2]:c}(),f=d(e,10);return c(f)?{}:{start:f}},j=function(c,d){var j=g[c]?[g[c]]:[],k=d&&f[c]?[f[c]]:d?[{tag:"UL",variant:c}]:[],l=a.bind(e,function(a){return a.regex.test(c)?[b.merge(a.type,i(c),{variant:h(a.type,c)})]:[]}),m=j.concat(k).concat(l);return a.map(m,function(a){return void 0!==a.variant?a:b.merge(a,{variant:c})})};return{extract:j}}),g("7o",[],function(){var a=function(a){return a.dom().textContent},b=function(a,b){a.dom().textContent=b};return{get:a,set:b}}),g("8m",["g","8y","8h","p","n","5d","6h","1d","6r","7o","3f","62","64","8o"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=18,p=function(a){var b=c.scan(a,["mso-list"],d.constant(!1));return b["mso-list"]},q=function(a){var b=p(a),c=/ level([0-9]+)/.exec(b);return c&&c[1]?e.some(n(c[1],10)):e.none()},r=function(a,c){var d=j.get(a).trim(),f=b.extract(d,c);return f.length>0?e.some(f):e.none()},s=function(a){return i.child(a,v)},t=function(a){return i.child(a,h.isComment).bind(k.nextSibling).filter(function(a){return"span"===h.name(a)})},u=function(a){return i.descendant(a,function(a){var b=h.isElement(a)?c.scan(a,["mso-list"],d.constant(!1)):[];return!!b["mso-list"]})},v=function(b){return h.isElement(b)&&f.getRaw(b,"font-family").exists(function(b){return a.contains(["wingdings","symbol"],b.toLowerCase())})},w=function(a){return f.getRaw(a,"margin-left").bind(function(a){var b=n(a,10);return m(b)?e.none():e.some(l.max(1,l.ceil(b/o)))})};return{getMsoList:p,extractLevel:q,extractEmblem:r,extractSymSpan:s,extractMsoIgnore:u,extractCommentSpan:t,isSymbol:v,deduceLevel:w}}),h("8n",JSON),g("82",["g","8m","n","j","7r","1d","1y","3f","8n","8o"],function(a,b,c,d,e,f,g,h,i,j){var k=function(a,b,c){d.set(a,"data-list-level",b);var e=i.stringify(c);d.set(a,"data-list-emblems",e)},l=function(b){var d=e.find(b,c.none());a.each(d,g.remove)},m=function(b,c,e,f){k(b,c,e),l(b),a.each(f,g.remove),d.remove(b,"style"),d.remove(b,"class")},n=function(a){return b.extractLevel(a).bind(function(c){return b.extractSymSpan(a).bind(function(d){return b.extractEmblem(d,!0).map(function(b){var e=function(){m(a,c,b,[d])};return{mutate:e}})})})},o=function(a){return b.extractLevel(a).bind(function(c){return b.extractCommentSpan(a).bind(function(d){return b.extractEmblem(d,b.isSymbol(d)).map(function(b){var e=function(){m(a,c,b,[d])};return{mutate:e}})})})},p=function(a){return b.extractLevel(a).bind(function(c){return b.extractCommentSpan(a).bind(function(d){return b.extractEmblem(d,b.isSymbol(d)).map(function(b){var e=function(){m(a,c,b,[d])};return{mutate:e}})})})},q=function(a){return"p"!==f.name(a)?c.none():b.extractLevel(a).bind(function(c){return b.extractMsoIgnore(a).bind(function(d){return b.extractEmblem(d,!1).map(function(b){var e=function(){m(a,c,b,[h.parent(d).getOr(d)])};return{mutate:e}})})})},r=function(a){return"p"!==f.name(a)?c.none():b.extractMsoIgnore(a).bind(function(c){var d=h.parent(c).getOr(c),e=b.isSymbol(d);return b.extractEmblem(c,e).bind(function(c){return b.deduceLevel(a).map(function(b){var e=function(){m(a,b,c,[d])};return{mutate:e}})})})},s=function(a){return n(a).orThunk(function(){return o(a)}).orThunk(function(){return p(a)}).orThunk(function(){return q(a)}).orThunk(function(){return r(a)})};return{find:s}}),g("7k",["6m","81","82","83"],function(a,b,c,d){var e=a.transformer({tags:[{name:d.pattern(/^(p|h\d+)$/),mutate:function(a){c.find(a).each(function(a){a.mutate()})}}]});return{filter:b,preprocess:e}}),g("6n",["6r"],function(a){var b=function(b){return a.first(b).isSome()},c=function(b,c,d){return a.ancestor(b,c,d).isSome()},d=function(b,c,d){return a.closest(b,c,d).isSome()},e=function(b,c){return a.sibling(b,c).isSome()},f=function(b,c){return a.child(b,c).isSome()},g=function(b,c){return a.descendant(b,c).isSome()};return{any:b,ancestor:c,closest:d,sibling:e,child:f,descendant:g}}),g("84",["g","j","6h","1d","6n"],function(a,b,c,d,e){var f=function(a){return"img"!==d.name(a)},g=function(a){var b=a.dom().attributes,c=void 0!==b&&null!==b&&b.length>0;return"span"!==d.name(a)||c},h=function(b){return!k(b)||g(b)&&e.descendant(b,function(b){var c=!k(b),e=!a.contains(["font","em","strong","samp","acronym","cite","code","dfn","kbd","tt","b","i","u","s","sub","sup","ins","del","var","span"],d.name(b));return d.isText(b)||c||e})},i=function(a){return"ol"===d.name(a)||"ul"===d.name(a)},j=function(a){var c=b.get(a,"src");return/^file:/.test(c)},k=function(a){return void 0===a.dom().attributes||null===a.dom().attributes||(0===a.dom().attributes.length||1===a.dom().attributes.length&&"style"===a.dom().attributes[0].name)},l=function(a){return 0===c.get(a).length};return{isNotImage:f,hasContent:h,isList:i,isLocal:j,hasNoAttributes:k,isEmpty:l}}),g("8p",["1d","7s"],function(a,b){var c=b(a.isText,"text"),d=function(a){return c.get(a)},e=function(a){return c.getOption(a)},f=function(a,b){c.set(a,b)};return{get:d,getOption:e,set:f}}),g("85",["g","1c","n","j","5d","k","6h","1x","29","1d","1y","8p","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c){var d=f.fromTag(b);h.before(c,d);var e=c.dom().attributes;a.each(e,function(a){d.dom().setAttribute(a.name,a.value)});var g=m.children(c); -return i.append(d,g),k.remove(c),d},o=function(a){0===g.get(a).length&&h.append(a,f.fromTag("br"))},p=function(a){return m.prevSibling(a).bind(function(a){return j.isText(a)&&0===l.get(a).trim().length?p(a):"li"===j.name(a)?c.some(a):c.none()})},q=function(b){m.parent(b).each(function(c){var d=j.name(c);a.contains(["ol","ul"],d)&&p(b).fold(function(){var a=f.fromTag("li");e.set(a,"list-style-type","none"),h.wrap(b,a)},function(a){h.append(a,b)})})},r=function(a){var c=n("span",a),f={face:"font-family",size:"font-size",color:"color"},g={"font-size":{1:"8pt",2:"10pt",3:"12pt",4:"14pt",5:"18pt",6:"24pt",7:"36pt"}};b.each(f,function(a,b){if(d.has(c,b)){var f=d.get(c,b),h=void 0!==g[a]&&void 0!==g[a][f]?g[a][f]:f;e.set(c,a,h),d.remove(c,b)}})};return{changeTag:n,addBrTag:o,properlyNest:q,fontToSpan:r}}),g("7h",["7w","6m","7k","84","85","p","27","5d","3f","1d","83"],function(a,b,c,d,e,f,g,h,i,j,k){var l=b.unwrapper({tags:[{name:k.pattern(/^([OVWXP]|U[0-9]+|ST[0-9]+):/i)}]}),m=[b.pipeline([c.filter])],n=b.removal({attributes:[{name:k.pattern(/^v:/)},{name:k.exact("href"),value:k.contains("#_toc")},{name:k.exact("href"),value:k.contains("#_mso")},{name:k.pattern(/^xmlns(:|$)/)},{name:k.exact("type"),condition:d.isList}]}),o=b.removal({attributes:[{name:k.exact("id")},{name:k.exact("name")}]}),p=b.removal({tags:[{name:k.exact("script")},{name:k.exact("meta")},{name:k.exact("link")},{name:k.exact("style"),condition:d.isEmpty}],attributes:[{name:k.starts("on")},{name:k.exact('"')},{name:k.exact("lang")},{name:k.exact("language")}],styles:[{name:k.all(),value:k.pattern(/OLE_LINK/i)}]}),q=function(a){return!g.has(a,"ephox-limbo-transform")},r=function(a){return function(b){return i.parent(b).exists(function(b){return j.name(b)===a&&1===i.children(b).length})}},s=b.removal({styles:[{name:k.not(k.pattern(/width|height|list-style-type/)),condition:q},{name:k.pattern(/width|height/),condition:d.isNotImage}]}),t=b.removal({classes:[{name:k.not(k.exact("rtf-data-image"))}]}),u=b.removal({styles:[{name:k.pattern(a.validStyles())}]}),v=b.removal({classes:[{name:k.pattern(/mso/i)}]}),w=b.unwrapper({tags:[{name:k.exact("img"),condition:d.isLocal},{name:k.exact("a"),condition:d.hasNoAttributes}]}),x=b.unwrapper({tags:[{name:k.exact("a"),condition:d.hasNoAttributes}]}),y=b.removal({attributes:[{name:k.exact("style"),value:k.exact(""),debug:!0}]}),z=b.removal({attributes:[{name:k.exact("class"),value:k.exact(""),debug:!0}]}),A=b.unwrapper({tags:[{name:k.pattern(a.specialInline()),condition:f.not(d.hasContent)}]}),B=b.unwrapper({tags:[{name:k.exact("p"),condition:r("li")}]}),C=b.transformer({tags:[{name:k.exact("p"),mutate:e.addBrTag}]}),D=function(a){var b=e.changeTag("span",a);g.add(b,"ephox-limbo-transform"),h.set(b,"text-decoration","underline")},E=b.transformer({tags:[{name:k.pattern(/ol|ul/),mutate:e.properlyNest}]}),F=b.transformer({tags:[{name:k.exact("b"),mutate:f.curry(e.changeTag,"strong")},{name:k.exact("i"),mutate:f.curry(e.changeTag,"em")},{name:k.exact("u"),mutate:D},{name:k.exact("s"),mutate:f.curry(e.changeTag,"strike")},{name:k.exact("font"),mutate:e.fontToSpan,debug:!0}]}),G=b.removal({classes:[{name:k.exact("ephox-limbo-transform")}]}),H=b.removal({attributes:[{name:k.exact("href"),value:k.starts("file:///"),debug:!0}]});return{unwrapWordTags:l,removeWordAttributes:n,parseLists:m,removeExcess:p,cleanStyles:s,cleanClasses:t,mergeStyles:u,mergeClasses:v,removeLocalImages:w,removeVacantLinks:x,removeEmptyStyle:y,removeEmptyClass:z,pruneInlineTags:A,unwrapSingleParagraphsInlists:B,addPlaceholders:C,nestedListFixes:E,inlineTagFixes:F,cleanupFlags:G,removeLocalLinks:H,removeAnchors:o,none:f.noop}}),g("6k",["g","5a","7h","6m","7k","7l","p","k"],function(a,b,c,d,e,f,g,h){var i=function(a){return a.browser.isIE()&&a.browser.version.major>=11},j=function(a){return f(function(b,c,d){var e=a(h.fromDom(c.getNode())).fold(function(){return c},function(a){return d(c,a.dom())});b.emit(e)},g.noop,"image filters")},k=function(a,e,f){var g=f.browser.isFirefox()||f.browser.isSpartan()?b.local:b.vshape,h=i(f)?c.none:d.pipeline([j(g)]),k=g===b.local?c.none:c.removeLocalImages,l=a?h:c.none;return{annotate:[l],local:[k]}},l=function(a,b){var d=i(b)&&a;return d?[c.unwrapSingleParagraphsInlists]:[]},m=function(a,b,d){var e=[c.mergeStyles,c.mergeClasses],f=[c.cleanStyles,c.cleanClasses];return b?e:f},n=function(a,b,c){return i(c)||!a?[]:[e.preprocess]},o=function(a,b,d){if(!a)return[c.none];var e=[c.unwrapWordTags],f=i(d)?[]:c.parseLists;return e.concat(f).concat([c.removeWordAttributes])},p=function(a,b,d){return a?[c.removeAnchors]:[c.none]},q=function(b,d,e){var f=k(b,d,e);return a.flatten([n(b,d,e),f.annotate,[c.inlineTagFixes],o(b,d,e),[c.nestedListFixes],[c.removeExcess],p(b,d,e),f.local,m(b,d,e),[c.removeLocalLinks,c.removeVacantLinks],[c.removeEmptyStyle],[c.removeEmptyClass],[c.pruneInlineTags],[c.addPlaceholders],l(b,e),[c.cleanupFlags]])};return{derive:q}}),g("8q",[],function(){return["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"]}),g("87",["8q","g","p","j","3n","5d","k","1x","29","1d","3o","6r","1y","2a","20","8p","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){return function(){var r=function(a){return g.fromDom(a.dom().cloneNode(!1))},s=function(c){return!!j.isElement(c)&&("body"===j.name(c)||b.contains(a,j.name(c)))},t=function(a){return!!j.isElement(a)&&b.contains(["br","img","hr"],j.name(a))},u=function(a,b){return a.dom().compareDocumentPosition(b.dom())},v=function(a,b){var c=d.clone(a);d.setAll(b,c)};return{up:c.constant({selector:o.ancestor,closest:o.closest,predicate:l.ancestor,all:q.parents}),down:c.constant({selector:n.descendants,predicate:k.descendants}),styles:c.constant({get:f.get,getRaw:f.getRaw,set:f.set,remove:f.remove}),attrs:c.constant({get:d.get,set:d.set,remove:d.remove,copyTo:v}),insert:c.constant({before:h.before,after:h.after,afterAll:i.after,append:h.append,appendAll:i.append,prepend:h.prepend,wrap:h.wrap}),remove:c.constant({unwrap:m.unwrap,remove:m.remove}),create:c.constant({nu:g.fromTag,clone:r,text:g.fromText}),query:c.constant({comparePosition:u,prevSibling:q.prevSibling,nextSibling:q.nextSibling}),property:c.constant({children:q.children,name:j.name,parent:q.parent,isText:j.isText,isElement:j.isElement,getText:p.get,setText:p.set,isBoundary:s,isEmptyTag:t}),eq:e.eq,is:e.is}}}),g("8z",["2c"],function(a){return a.immutable("word","pattern")}),g("90",["2c"],function(a){var b=a.immutable("element","offset"),c=a.immutable("element","deltaOffset"),d=a.immutable("element","start","finish"),e=a.immutable("begin","end"),f=a.immutable("element","text");return{point:b,delta:c,range:d,points:e,text:f}}),g("9n",["p","n"],function(a,b){var c=a.constant(!1),d=a.constant(!0),e=function(a,b){return h(function(c,d,e){return c(a,b)})},f=function(a,b){return h(function(c,d,e){return d(a,b)})},g=function(a,b){return h(function(c,d,e){return e(a,b)})},h=function(e){var f=function(){return e(d,c,c)},g=function(){return e(b.none,b.none,function(a,c){return b.some(a)})},h=function(a){return e(c,c,function(b,c){return c.eq(b,a)})},i=function(){return e(a.constant(0),a.constant(1),function(a,b){return b.property().getText(a).length})};return{isBoundary:f,fold:e,toText:g,is:h,len:i}},i=function(a,b,c,d){return a.fold(b,c,d)};return{text:g,boundary:e,empty:f,cata:i}}),g("9o",["g","p"],function(a,b){var c=function(c,d,e,f){var g=a.findIndex(c,b.curry(f,d)),h=g>-1?g:0,i=a.findIndex(c,b.curry(f,e)),j=i>-1?i+1:c.length;return c.slice(h,j)};return{boundAt:c}}),g("9p",["g"],function(a){var b=function(b,c){var d=a.findIndex(b,c);return b.slice(0,d)};return{sliceby:b}}),g("9r",["1m"],function(a){var b=a.generate([{include:["item"]},{excludeWith:["item"]},{excludeWithout:["item"]}]),c=function(a,b,c,d){return a.fold(b,c,d)};return{include:b.include,excludeWith:b.excludeWith,excludeWithout:b.excludeWithout,cata:c}}),g("9q",["g","9r"],function(a,b){var c=function(a,c){return d(a,function(a){return c(a)?b.excludeWithout(a):b.include(a)})},d=function(c,d){var e=[],f=[];return a.each(c,function(a){var c=d(a);b.cata(c,function(){f.push(a)},function(){f.length>0&&e.push(f),e.push([a]),f=[]},function(){f.length>0&&e.push(f),f=[]})}),f.length>0&&e.push(f),e};return{splitby:c,splitbyAdv:d}}),g("9b",["9o","9p","9q"],function(a,b,c){var d=function(b,c,d,e){return a.boundAt(b,c,d,e)},e=function(a,b){return c.splitby(a,b)},f=function(a,b){return c.splitbyAdv(a,b)},g=function(a,c){return b.sliceby(a,c)};return{splitby:e,splitbyAdv:f,sliceby:g,boundAt:d}}),g("92",["g","p","n","90","9b"],function(a,b,c,d,e){var f=function(b){return a.foldr(b,function(a,b){return b.len()+a},0)},g=function(a,b){return e.sliceby(a,function(a){return a.is(b)})},h=function(a,b){return a.fold(c.none,function(a){return c.some(d.range(a,b,b+1))},function(e){return c.some(d.range(e,b,b+a.len()))})},i=function(c){return a.bind(c,function(a){return a.fold(b.constant([]),b.constant([]),function(a){return[a]})})};return{count:f,dropUntil:g,gen:h,justText:i}}),g("9w",["g","90","9n","92"],function(a,b,c,d){var e=function(b,d,f){if(b.property().isText(d))return[c.text(d,b)];if(b.property().isEmptyTag(d))return[c.empty(d,b)];if(b.property().isElement(d)){var g=b.property().children(d),h=b.property().isBoundary(d)?[c.boundary(d,b)]:[],i=void 0!==f&&f(d)?[]:a.bind(g,function(a){return e(b,a,f)});return h.concat(i).concat(h)}return[]},f=function(b,c,d){var f=e(b,c,d),g=function(a,b){return a};return a.map(f,function(a){return a.fold(g,g,g)})},g=function(a,c,f,g,h){var i=e(a,g,h),j=d.dropUntil(i,c),k=d.count(j);return b.point(g,k+f)},h=function(a,c,d,e){return a.property().parent(c).fold(function(){return b.point(c,d)},function(b){return g(a,c,d,b,e)})},i=function(a,c,d,e,f){return a.up().predicate(c,e).fold(function(){return b.point(c,d)},function(b){return g(a,c,d,b,f)})};return{typed:e,items:f,extractTo:i,extract:h}}),g("9x",["g","p","9w"],function(a,b,c){var d="\n",e=" ",f=function(a,b){return"img"===b.property().name(a)?e:d},g=function(e,g,h){var i=c.typed(e,g,h);return a.map(i,function(a){return a.fold(b.constant(d),f,e.property().getText)}).join("")};return{from:g}}),g("9d",["g","p"],function(a,b){var c=function(c,d,e){var f={len:void 0!==e?e:0,list:[]},g=a.foldl(c,function(a,c){var e=d(c,a.len);return e.fold(b.constant(a),function(b){return{len:b.finish(),list:a.list.concat([b])}})},f);return g.list};return{make:c}}),g("9e",["g","n"],function(a,b){var c=function(a,b){return b>=a.start()&&b<=a.finish()},d=function(d,e){var f=a.find(d,function(a){return c(a,e)});return b.from(f)},e=function(b,c){return a.findIndex(b,function(a){return a.start()===c})},f=function(a,b){var c=a[a.length-1]&&a[a.length-1].finish()===b;return c?a.length+1:-1},g=function(a,b,c){var d=e(a,b),g=e(a,c),h=g>-1?g:f(a,c);return d>-1&&h>-1?a.slice(d,h):[]},h=function(c,d){return b.from(a.find(c,d))};return{get:d,find:h,inUnit:c,sublist:g}}),g("9g",["g","1l","p"],function(a,b,c){var d=function(d,e){return a.map(d,function(a){return b.merge(a,{start:c.constant(a.start()+e),finish:c.constant(a.finish()+e)})})};return{translate:d}}),g("9f",["g","9e","9g"],function(a,b,c){var d=function(a,b,d){var e=d(a,b);return c.translate(e,a.start())},e=function(c,e,f){return 0===e.length?c:a.bind(c,function(c){var g=a.bind(e,function(a){return b.inUnit(c,a)?[a-c.start()]:[]});return g.length>0?d(c,g,f):[c]})};return{splits:e}}),g("94",["9d","9e","9f","9g"],function(a,b,c,d){var e=function(b,c,d){return a.make(b,c,d)},f=function(a,c){return b.get(a,c)},g=function(a,c){return b.find(a,c)},h=function(a,b,d){return c.splits(a,b,d)},i=function(a,b){return d.translate(a,b)},j=function(a,c,d){return b.sublist(a,c,d)};return{generate:e,get:f,find:g,splits:h,translate:i,sublist:j}}),g("9y",["90","9w","92","94"],function(a,b,c,d){var e=function(e,f,g,h){var i=b.typed(e,f,h),j=d.generate(i,c.gen),k=d.get(j,g);return k.map(function(b){return a.point(b.element(),g-b.start())})};return{find:e}}),g("9m",["9w","9x","9y"],function(a,b,c){var d=function(b,c,d){return a.typed(b,c,d)},e=function(b,c,d){return a.items(b,c,d)},f=function(b,c,d,e){return a.extract(b,c,d,e)},g=function(b,c,d,e,f){return a.extractTo(b,c,d,e,f)},h=function(a,b,d,e){return c.find(a,b,d,e)},i=function(a,c,d){return b.from(a,c,d)};return{extract:f,extractTo:g,all:e,from:d,find:h,toText:i}}),g("99",["g","9m","9n","9b","9r"],function(a,b,c,d,e){var f=function(f,g,h){var i=a.bind(g,function(a){return b.from(f,a,h)}),j=d.splitbyAdv(i,function(a){return c.cata(a,function(){return e.excludeWithout(a)},function(){return e.excludeWith(a)},function(){return e.include(a)})});return a.filter(j,function(a){return a.length>0})};return{group:f}}),g("9s",["g","n"],function(a,b){var c=function(c,d,e){var f=[d].concat(c.up().all(d)),g=[e].concat(c.up().all(e)),h=a.find(f,function(b){return a.exists(g,function(a){return c.eq(a,b)})});return b.from(h)};return{common:c}}),g("9t",["g"],function(a){var b=["table","tbody","thead","tfoot","tr","ul","ol"];return function(c){var d=c.property(),e=function(b,c){return d.parent(b).map(d.name).map(function(b){return!a.contains(c,b)}).getOr(!1)},f=function(a){return d.isText(a)&&e(a,b)};return{validateText:f}}}),g("9a",["g","p","9m","9s","9t"],function(a,b,c,d,e){var f=function(c,d,e){return a.findIndex(d,b.curry(c.eq,e))},g=function(a,b,c,d,e){return b-1&&o>-1?g(m,n,j,o,l):[],q=e(h);return a.filter(p,q.validateText)})};return{range:h}}),g("91",["99","9a"],function(a,b){var c=function(a,c,d,e,f){return b.range(a,c,d,e,f)},d=function(b,c,d){return a.group(b,c,d)};return{range:c,group:d}}),g("9z",[],function(){var a=function(a){var b=/^[a-zA-Z]/.test(a)?"":"e",c=a.replace(/[^\w]/gi,"-");return b+c};return{css:a}}),g("a0",["g"],function(a){var b=function(b,c){if(0===c.length)return[b];var d=a.foldl(c,function(a,c){if(0===c)return a;var d=b.substring(a.prev,c);return{prev:c,values:a.values.concat([d])}},{prev:0,values:[]}),e=c[c.length-1];return e0});if(j.length<=1)return[c.range(g,0,i.length)];f.property().setText(g,j[0]);var k=d.generate(j.slice(1),function(a,d){var e=f.create().text(a),g=c.range(e,d,d+a.length);return b.some(g)},j[0].length),l=a.map(k,function(a){return a.element()});return f.insert().afterAll(g,l),[c.range(g,0,j[0].length)].concat(k)};return{subdivide:f}}),g("93",["g","p","9c","94"],function(a,b,c,d){var e=function(e,f,g){var h=a.bind(g,function(a){return[a.start(),a.finish()]}),i=function(a,b){return c.subdivide(e,a.element(),b)},j=d.splits(f,h,i),k=function(c){var f=d.sublist(j,c.start(),c.finish()),g=a.map(f,function(a){return a.element()}),h=a.map(g,e.property().getText).join("");return{elements:b.constant(g),word:c.word,exact:b.constant(h)}};return a.map(g,k)};return{separate:e}}),g("8s",[],function(){var a=function(){return"\ufeff"};return{zeroWidth:a}}),g("89",["8s","p"],function(a,b){var c="\\w'\\-\\u0100-\\u017F\\u00C0-\\u00FF"+a.zeroWidth()+"\\u2018\\u2019",d="[^"+c+"]",e="["+c+"]";return{chars:b.constant(c),wordbreak:b.constant(d),wordchar:b.constant(e)}}),g("8a",["4v"],function(a){return function(b,c,d,e){var f=function(){return new a(b,e.getOr("g"))};return{term:f,prefix:c,suffix:d}}}),g("8c",["p","n","89","8a"],function(a,b,c,d){var e=function(c){return d(c,a.constant(0),a.constant(0),b.none())},f=function(a){var e="((?:^'?)|(?:"+c.wordbreak()+"+'?))"+a+"((?:'?$)|(?:'?"+c.wordbreak()+"+))",f=function(a){return a.length>1?a[1].length:0},g=function(a){return a.length>2?a[2].length:0};return d(e,f,g,b.none())};return{token:e,word:f}}),g("8b",["8c"],function(a){var b=function(a){return a.replace(/[-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},c=function(c){var d=b(c);return a.word(d)},d=function(c){var d=b(c);return a.token(d)};return{sanitise:b,word:c,token:d}}),g("7n",["89","8a","8b","8c"],function(a,b,c,d){var e=function(a){return c.word(a)},f=function(a){return c.token(a)},g=function(a,c,d,e){return b(a,c,d,e)},h=function(a){return d.word(a)},i=function(a){return d.token(a)},j=function(a){return c.sanitise(a)},k=function(){return a.chars()},l=function(){return a.wordbreak()},m=function(){return a.wordchar()};return{safeword:e,safetoken:f,custom:g,unsafeword:h,unsafetoken:i,sanitise:j,chars:k,wordbreak:l,wordchar:m}}),g("9h",["p"],function(a){var b=function(b,c){for(var d=c.term(),e=[],f=d.exec(b);f;){var g=f.index+c.prefix(f),h=f[0].length-c.prefix(f)-c.suffix(f);e.push({start:a.constant(g),finish:a.constant(g+h)}),d.lastIndex=g+h,f=d.exec(b)}return e};return{all:b}}),g("9i",["g","1l","9h","12"],function(a,b,c,d){var e=function(a){var b=d.prototype.slice.call(a,0);return b.sort(function(a,b){return a.start()=q&&b<=r},x=function(b){a.each(b,function(a){k.isElement(a)&&g.getRaw(a,"position").isSome()&&g.remove(a,"position")})},y=function(b){var c=a.filter(b,function(a){return"li"===k.name(a)});if(c.length>0){var d=n.prevSiblings(c[0]),e=h.fromTag("ul");if(i.before(b[0],e),d.length>0){var f=h.fromTag("li");i.append(e,f),j.append(f,d)}j.append(e,c)}};return{links:v,position:x,list:y}}),g("55",["g","6k","6l","6m","6h","3f"],function(a,b,c,d,e,f){var g=function(b){var d=f.children(b);a.each([c.links,c.position,c.list],function(a){a(d)})},h=function(a,c,f,h,i){g(f);var j=e.get(f),k=b.derive(i,h,c);return d.go(a,j,k)};return{go:h,preprocess:g}}),g("6i",["4q","4r","4y","2w","2t","55","2f","28","1f"],function(a,b,c,d,e,f,g,h,i){var j=e.detect(),k=function(a,b,c,d){try{var e=f.go(a,j,b,c,d),k=void 0!==e&&null!==e&&e.length>0,l=k?h.fromHtml(e):[];return g.value(l)}catch(m){return i.error(m),g.error("errors.paste.process.failure")}},l=function(e,f,g,h,i){var j=k(e,f,h,g);return j.fold(function(b){return a.error(b)},function(e){return a.sync(function(f){i.get(function(g){var h=c.findImages(e,g);a.call(f,{response:d.paste(e,g,h),bundle:b.nu({})})})})})};return{transfer:l}}),g("53",["6i","g","o","n","1y","3f"],function(a,b,c,d,e,f){var g=function(b,c,d,e,f){return a.transfer(b,c,e,d,f)},h=function(g,h,i){var j=!1,k=!0,l=function(a,b){return void 0===h||b?d.none():h.findClipboardTags(f.children(a))},m=l(i,j).getOr([]);b.each(m,e.remove);var n=c.nu(function(a){a([])});return a.transfer(g,i,j,k,n)};return{internal:h,external:g}}),g("6j",["g","k","6h","7o"],function(a,b,c,d){var e=function(a){var e=b.fromTag("div");return d.set(e,a),c.get(e)},f=function(b){var c=b.trim().split(/\n{2,}|(?:\r\n){2,}/),d=a.map(c,function(a){return a.split(/\n|\r\n/).join("
")});return 1===d.length?d[0]:a.map(d,function(a){return"

"+a+"

"}).join("")};return{encode:e,convert:f}}),g("54",["4q","6j","4r","31","2w","n","23","28","11"],function(a,b,c,d,e,f,g,h,i){var j=function(a){return a.length>0},k=function(a){return d.isValidData(a)?g.findMap(a.types,function(b){return"text/plain"===b?f.some(a.getData(b)):f.none()}):f.none()},l=function(){var a=i.clipboardData;return void 0!==a?f.some(a.getData("text")):f.none()},m=function(a){var c=b.encode(a),d=b.convert(c),f=h.fromHtml(d);return e.paste(f,[],[])},n=function(b){return a.sync(function(f){var g=d.isValidData(b)?k:l,h=g(b).filter(j).fold(e.cancel,m);a.call(f,{response:h,bundle:c.nu({})})})};return{handle:n}}),g("34",["4q","4r","4z","51","52","53","54","2w","2t","55","p","k","29","3f","1f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=i.detect(),q=function(a,b,c){return g.handle(a)},r=function(b,c){var d=function(b,d,e){var f=l.fromTag("div");m.append(f,b),j.preprocess(f);var g=n.children(f);return a.pure({response:h.paste(g,d,e),bundle:c.bundle()})},e=k.curry(a.pass,c);return h.cata(c.response(),e,d,e,d)},s=function(a,b){return function(d,e){var g=e.bundle();return c.proxyBin(g).handle("There was no proxy bin setup. Ensure you have run proxyStep first.",function(c){var d=n.owner(a);return f.internal(d,b,c)})}},t=function(a,b){return function(d,e){var g=e.bundle();return c.proxyBin(g).handle("There was no proxy bin setup. Ensure you have run proxyStep first.",function(d){var e=c.merging(g),h=c.isWord(g),i=c.isInternal(g),j=c.backgroundAssets(g),k=n.owner(a);return i?f.internal(k,b,d):f.external(k,d,e,h,j)})}},u=function(){return function(b,c){return a.error("errors.local.images.disallowed")}},v=function(){return function(b,c){if(p.browser.isSafari()){var d=p.deviceType.isWebView()?"webview.imagepaste":"safari.imagepaste";return a.error(d)}return e.handle(b)}},w=function(a){return function(b,e){var f=c.mergeOffice(e.bundle());return d.handle(b,f,a)}},x=function(b,c){return a.cancel()},y=function(c){return function(d,e){var f=b.merge(e.bundle(),b.nu(c));return a.pure({response:e.response(),bundle:f})}};return{plain:q,autolink:r,noImages:u,images:v,internal:s,external:t,gwt:w,setBundle:y,none:x}}),g("56",["5c","p"],function(a,b){var c=a.resolve("smartpaste-eph-bin");return{binStyle:b.constant(c)}}),g("57",["6m","j","6h","6n"],function(a,b,c,d){var e=function(a,c){return d.descendant(a,function(a){return!!b.has(a,"style")&&b.get(a,"style").indexOf("mso-")>-1})},f=function(b,d){var e=c.get(b);return a.isWordContent(e,d)},g=function(a,b){var c=a.browser,d=c.isIE()&&c.version.major>=11?e:f;return d(b,a)};return{isWord:g}}),g("35",["4q","4r","56","2t","57","27","3f"],function(a,b,c,d,e,f,g){var h=d.detect();return function(d,i,j,k,l){return function(m,n){var o=l(),p=n.response();return a.sync(function(l){var n=d(j);n.events.after.bind(function(d){var j=d.container();i(j),f.add(j,c.binStyle());var m=e.isWord(h,j),n=g.children(j),q=k.findClipboardTags(n,m).isSome();a.call(l,{response:p,bundle:b.nu({isWord:m,isInternal:q,proxyBin:j,backgroundAssets:o})})}),o.convert(m.data()),n.run()})}}}),g("8d",["78","79","12","62","13","8o"],function(a,b,c,d,e,f){var g=function(a){for(var b=new c(a.length/2),e=0;ec&&c!==-1?(b=c+1,++e):(c>d||c<0)&&d!==-1&&(b=d+1,--e),b>f||d===-1)return-1;while(e>0);return b},k=function(a,b,c,e){var f=i(a,c,e),g=/[^a-fA-F0-9]([a-fA-F0-9]+)\}$/;return h(c,e,f,g,d)},l=function(a,b,c,d){var e=i(a,c,d),g=/([a-fA-F0-9]{64,})(?:\}.*)/;return h(c,d,e,g,f)},m=function(d,f){var h=g(c,d,f),i=j(d,h),m=g(e,d,f),n=j(d,m),o=a.curry(l,d,f,m,n),p=a.curry(k,d,f,h,i);return h===-1&&m===-1?b.none():h===-1?o():m===-1?p():mi?p():hn?o():h=0?e.value("image/png"):a.indexOf("\\jpegblip")>=0?e.value("image/jpeg"):e.error("errors.imageimport.unsupported")},h=function(a){return a.replace(/\r/g,"").replace(/\n/g,"")},i=function(a,b){var c=a.match(b);return c&&c[1]&&c[1].length%2===0?e.value(c[1]):e.error("errors.imageimport.invalid")},j=function(a){var b=a.match(/\\shplid(\d+)/);return null!==b?d.some(b[1]):d.none()},k=function(c){var d=c.bower(),e=c.regex();return j(d).map(function(f){var h=c.idRef()+f;return g(d).fold(function(a){return b.unsupported(h,a)},function(c){return i(d,e).fold(function(a){return b.unsupported(h,a)},function(d){return b.supported(h,c,a.convert(d,c))})})})},l=function(a){for(var b=[],c=function(){return a.length},d=function(a){var c=k(a);return b=b.concat(c.toArray()),a.end()},e=0;e0?(f.each(b,m.remove),t(e.incomplete(d,c,o,"errors.local.images.disallowed"))):t(e.paste(d,c,o))}})};e.cata(c.response(),j,o,j,o)})}}}),g("1p",["2z","30","31","32","33","34","35","36","2t","p","n","2c","37","11"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=l.immutable("data","rtf"),p=i.detect(),q="^image/",r="file",s=[q,r],t="html",u="rtf",v=function(a){return m.contains(a,"0?k.some(c):k.none()}):k.none()},D=function(a,b,c,d){return{label:j.constant(a),getAvailable:b,steps:j.constant(c),capture:j.constant(d)}},E=function(c,d,h,i){var k=j.curry(z,i);return D("Within Textbox.io (tables) pasting",k,[a.normal(g(d,c,h,i,b.ignore)),a.normal(e.fixed(!0,!0)),a.normal(f.internal(h,i))],!1)},F=function(c,i,j,k,l,m,n){return D("Outside of Textbox.io pasting (could be internal but another browser)",x,[a.normal(g(k,j,l,n,b.background)),a.normal(e.fromConfigIfExternal(c,i)),a.normal(f.external(l,n)),a.blocking(h(m,i)),a.normal(d(i))],!1)},G=function(b,c,d,g){return D("GWT pasting",w,[a.normal(f.setBundle({isWord:!0})),a.normal(e.fromConfig(c,d)),a.normal(f.gwt(b)),a.blocking(h(g,d))],!0)},H=function(b){return D("Image pasting",y,[a.normal(b.allowLocalImages===!1?f.noImages(j.noop):f.images())],!0)},I=function(){return D("Only plain text is available to paste",B,[a.normal(f.plain),a.normal(f.autolink)],!0)},J=function(){return D("Plain text pasting",A,[a.normal(f.plain),a.normal(f.autolink)],!0)},K=function(){return D("There is no valid way to paste",k.some,[a.normal(f.none)],!1)};return{internal:E,pastiche:F,gwt:G,image:H,text:J,onlyText:I,none:K}}),g("5b",["5c","2t","j","27","k","6h","29"],function(a,b,c,d,e,f,g){var h=function(){var a=b.detect(),c=a.os.isOSX();return c?["\u2318"]:["Ctrl"]},i=function(a){return e.fromHtml("

"+a("cement.dialog.flash.press-escape")+"

")},j=function(b){var c=e.fromTag("div");d.add(c,a.resolve("flashbin-helpcopy"));var f=h(),j=e.fromHtml("

"+b("cement.dialog.flash.trigger-paste")+"

"),k=e.fromHtml('
'+f+' + V
');return d.add(k,a.resolve("flashbin-helpcopy-kbd")),g.append(c,[j,k,i(b)]),c},k=function(b){var c=e.fromTag("div");d.add(c,a.resolve("flashbin-helpcopy"));var f=e.fromHtml("

"+b("cement.dialog.flash.missing")+"

");return g.append(c,[f,i(b)]),c},l=function(b){var h=e.fromTag("div");d.add(h,a.resolve("flashbin-loading"));var i=e.fromTag("div");d.add(i,a.resolve("flashbin-loading-spinner"));var j=e.fromTag("p"),k=b("loading.wait");return f.set(j,k),c.set(j,"aria-label",k),g.append(h,[i,j]),h};return{paste:j,noflash:k,indicator:l}}),h("5e",navigator),g("38",["5b","5c","2t","p","27","5d","k","1x","29","5e"],function(a,b,c,d,e,f,g,h,i,j){var k=c.detect(),l=function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash")},m=function(){try{var a=k.browser.isIE()?l():j.plugins["Shockwave Flash"];return void 0!==a}catch(b){return!1}},n=function(b,c,e,f){var g=a.noflash(f);return h.append(b,g),{reset:d.noop}},o=function(b,c,d,e){var g=a.paste(e),h=a.indicator(e);i.append(b,[h,g,c.element()]);var j=function(){f.setAll(h,{height:"0",padding:"0"})},k=function(){f.set(g,"display","block"),f.set(h,"display","none"),d()},l=function(){f.set(g,"display","none"),f.set(h,"display","block"),f.remove(h,"height"),f.remove(h,"padding"),d()};return c.events.spin.bind(l),c.events.reset.bind(k),c.events.hide.bind(j),{reset:k}};return function(a,c,f){var h=g.fromTag("div"),i="flashbin-wrapper-"+(k.os.isOSX()?"cmd":"ctrl");e.add(h,b.resolve(i));var j=m()?o:n,l=j(h,a,c,f.translations);return{element:d.constant(h),reset:l.reset}}}),h("5k",clearInterval),h("5m",setInterval),g("5f",["n","21","22","z","5k","5m"],function(a,b,c,d,e,f){var g=function(){var g=d(a.none()),h=c.create({crashed:b([]),timeout:b([])}),i=function(b,c,d,i){var j=c,k=f(function(){d()?e(k):j<=0?(h.trigger.timeout(),e(k)):i()&&(e(k),h.trigger.crashed()),j--},b);g.set(a.some(k))},j=function(){g.get().each(function(a){e(a)})};return{start:i,stop:j,events:h.registry}};return{responsive:g}}),g("5g",["1b","g","5k","5m"],function(a,b,c,d){return function(e,f,g){var h=function(c){return b.forall(f,function(b){return a.isFunction(c[b])})},i=function(){var b=e.dom();a.isFunction(b.PercentLoaded)&&100===b.PercentLoaded()&&h(b)&&(l(),g())},j=!0,k=d(i,500),l=function(){j&&(c(k),j=!1)};return{stop:l}}}),g("6t",["72"],function(a){var b=function(a,b){return void 0!==a[b]&&null!==a[b]||(a[b]={}),a[b]},c=function(c,d){for(var e=d||a,f=c.split("."),g=0;g ';if(A.browser.isIE()&&10===A.browser.version.major){var d=f.generate("flash-bin");return p.fromHtml(''+c+"")}return p.fromHtml(''+c+"")},L=K(),M=function(){o.setAll(L,{width:"2px",height:"2px"})};M();var N=b(L,e.keys(J),D);r.append(s,L);var O=function(){return s},P=function(){A.browser.isFirefox()&&y.getSelection().removeAllRanges(),q.focus(L)},Q=null,R=function(){n.add(s,c.resolve("flash-activate")),o.remove(L,"height"),o.remove(L,"width"),h.trigger.hide()},S=function(){t(Q),n.remove(s,c.resolve("flash-activate")),M()},T=function(){Q=w(R,3e3),h.trigger.spin(),o.set(s,"display","block"),P()},U=function(){o.set(s,"display","none"),B.each(function(a){d.each(a,function(a){a.unbind()})})},V=function(){U(),d.each(e.values(J),function(a){z.unregister(a)}),z.unregister(E),N.stop()};return{focus:P,element:O,activate:T,deactivate:U,destroy:V,events:h.registry}}}),g("1q",["38","39","21","22","w","k","11"],function(a,b,c,d,e,f,g){return function(h,i){var j=i.translations,k=d.create({response:c(["rtf","hide"]),cancel:c([]),error:c(["message"]),failed:c(["message"])}),l=function(){var c=b(i.swf);c.deactivate();var d=f.fromDom(g),l=e.bind(d,"mouseup",c.focus),m=function(){q()},n=function(){m(),k.trigger.cancel()};c.events.cancel.bind(n),c.events.response.bind(function(a){k.trigger.response(a.rtf(),m)}),c.events.error.bind(function(a){m(),k.trigger.error(a.message())}),c.events.failed.bind(function(a){m(),k.trigger.failed(a.message())});var o=h();o.setTitle(j("cement.dialog.flash.title"));var p=a(c,o.reflow,i);p.reset(),o.setContent(p.element()),o.events.close.bind(n),o.show(),c.activate();var q=function(){l.unbind(),c.destroy(),o.destroy()}};return{open:l,events:k.registry}}}),g("5p",[],function(){var a=function(a,b){return d(function(c,d,e){return d(a,b)})},b=function(a){return d(function(b,c,d){return b(a)})},c=function(a){return d(function(b,c,d){return d(a)})},d=function(a){return{fold:a}};return{on:a,before:b,after:c}}),g("5o",["5p","2c","k"],function(a,b,c){var d=b.immutable("start","soffset","finish","foffset"),e=b.immutable("start","soffset","finish","foffset"),f=b.immutable("start","finish"),g=function(b){var d=c.fromDom(b.startContainer),e=c.fromDom(b.endContainer);return f(a.on(d,b.startOffset),a.on(e,b.endOffset))};return{read:d,general:e,write:f,writeFromNative:g}}),g("5q",[],function(){var a=function(a,b){if(a.getSelection)return b(a,a.getSelection());throw"No selection model supported."};return{run:a}}),g("6v",["3n","3f"],function(a,b){var c=function(c,d,e,f){var g=b.owner(c),h=g.dom().createRange();h.setStart(c.dom(),d),h.setEnd(e.dom(),f);var i=a.eq(c,e)&&d===f;return h.collapsed&&!i};return{after:c}}),g("6u",["5o","6v","k","3f"],function(a,b,c,d){var e=function(a){return b.after(c.fromDom(a.anchorNode),a.anchorOffset,c.fromDom(a.focusNode),a.focusOffset)},f=function(b,d){var f=c.fromDom(d.startContainer),g=c.fromDom(d.endContainer);return e(b)?a.read(g,d.endOffset,f,d.startOffset):a.read(f,d.startOffset,g,d.endOffset)},g=function(a){return e(a)},h=function(a,b,c,e){return function(f){if(f.extend)f.collapse(a.dom(),b),f.extend(c.dom(),e);else{var g=d.owner(a).dom().createRange();g.setStart(c.dom(),e),g.setEnd(a.dom(),b),f.removeAllRanges(),f.addRange(g)}}},i=function(a,c,d,e){return b.after(a,c,d,e)},j=function(){return{flip:f,isRtl:g}},k=function(){return{flip:h,isRtl:i}};return{read:j,write:k}}),g("5s",["5o","6u","n","6v","k"],function(a,b,c,d,e){var f=function(b,d){var f=h(b,d.start(),d.finish());if(f.collapsed===!0){var g=h(b,d.finish(),d.start());return g.collapsed===!0?c.none():c.some(a.general(e.fromDom(g.endContainer),g.endOffset,e.fromDom(g.startContainer),g.startOffset))}return c.none()},g=function(a,b){var c=h(a,b.start(),b.finish());return c.collapsed===!0?h(a,b.finish(),b.start()):c},h=function(a,b,c){var d=m(a);return b.fold(function(a){d.setStartBefore(a.dom())},function(a,b){d.setStart(a.dom(),b)},function(a){d.setStartAfter(a.dom())}),c.fold(function(a){d.setEndBefore(a.dom())},function(a,b){d.setEnd(a.dom(),b)},function(a){d.setEndAfter(a.dom())}),d},i=function(a,b){return h(a,b.start(),b.finish())},j=function(a,b,c,e,f){var g=d.after(b,c,e,f),h=a.document.createRange();return g?(h.setStart(e.dom(),f),h.setEnd(b.dom(),c)):(h.setStart(b.dom(),c),h.setEnd(e.dom(),f)),h},k=function(a,b){var c=i(a,b);return function(a){a.addRange(c)}},l=function(a,c){var d=f(a,c);return d.fold(function(){return k(a,c)},function(a){return b.write().flip(a.start(),a.soffset(),a.finish(),a.foffset())})},m=function(a){return a.document.createRange()};return{create:m,build:l,toNative:i,forceRange:g,toExactNative:j}}),g("5r",["g","5s","k","1d","2a","2h"],function(a,b,c,d,e,f){var g=function(a,b,c){return a.selectNodeContents(c.dom()),a.compareBoundaryPoints(b.END_TO_START,b)<1&&a.compareBoundaryPoints(b.START_TO_END,b)>-1},h=function(b,c,d,h){var i=b.document.createRange(),j=f.is(c,h)?[c]:[],k=j.concat(e.descendants(c,h));return a.filter(k,function(a){return g(i,d,a)})},i=function(a,e,f){var g=b.forceRange(a,e),i=c.fromDom(g.commonAncestorContainer);return d.isElement(i)?h(a,i,g,f):[]};return{find:i}}),g("6w",["g","5o","5p","1d"],function(a,b,c,d){var e=function(b,e){var f=d.name(b);return"input"===f?c.after(b):a.contains(["br","img"],f)?0===e?c.before(b):c.after(b):c.on(b,e)},f=function(a){var d=a.start().fold(c.before,e,c.after),f=a.finish().fold(c.before,e,c.after);return b.write(d,f)};return{beforeSpecial:e,preprocess:f}}),g("6x",["g","k","1g"],function(a,b,c){var d=function(d,e){var f=e||c,g=f.createDocumentFragment();return a.each(d,function(a){g.appendChild(a.dom())}),b.fromDom(g)};return{fromElements:d}}),g("5t",["5o","6u","5s","6w","n","k","6x"],function(a,b,c,d,e,f,g){var h=function(a){return function(b,e){var f=d.preprocess(a),g=c.build(b,f);void 0!==e&&null!==e&&(e.removeAllRanges(),g(e))}},i=function(a){return function(b,d){var e=c.create(b);e.selectNodeContents(a.dom()),d.removeAllRanges(),d.addRange(e)}},j=function(a,b){var c=b.getRangeAt(0),d=b.getRangeAt(b.rangeCount-1),e=a.document.createRange();return e.setStart(c.startContainer,c.startOffset),e.setEnd(d.endContainer,d.endOffset),e},k=function(c,d){var e=f.fromDom(d.startContainer),g=f.fromDom(d.endContainer);return b.read().isRtl(c)?b.read().flip(c,d):a.read(e,d.startOffset,g,d.endOffset)},l=function(a,b){return void 0!==b&&null!==b&&b.rangeCount>0?e.from(j(a,b)):e.none()},m=function(a,b){var c=l(a,b);return c.map(function(a){return k(b,a)})},n=function(a){return function(b,c){var d=l(b,c);d.each(function(c){o(b,c,a)})}},o=function(a,b,c){var d=g.fromElements(c,a.document);b.deleteContents(),b.insertNode(d.dom())},p=function(a,b){return function(e,f){var g=d.preprocess(a),h=c.toNative(e,g);o(e,h,b)}},q=function(a,b,d,e){return function(f,g){var h=c.toExactNative(f,a,b,d,e);h.deleteContents()}},r=function(a,b,d,e){return function(g,h){var i=c.toExactNative(g,a,b,d,e),j=i.cloneContents();return f.fromDom(j)}},s=function(a,b,d,f){return function(g,h){var i=c.toExactNative(g,a,b,d,f),j=i.getClientRects(),k=j.length>0?j[0]:i.getBoundingClientRect();return k.width>0||k.height>0?e.some(k):e.none()}},t=function(a){return function(b,d){var f=c.create(b);f.selectNode(a.dom());var g=f.getBoundingClientRect();return g.width>0||g.height>0?e.some(g):e.none()}},u=function(a,b){a.getSelection().removeAllRanges()},v=function(a,b,d,e){return function(f,g){var h=c.toExactNative(f,a,b,d,e);return h.toString()}};return{get:m,set:h,selectElementContents:i,replace:n,replaceRange:p,deleteRange:q,cloneFragment:r,rectangleAt:s,bounds:t,clearSelection:u,stringAt:v}}),g("3a",["5o","5p","5q","5r","5s","5t","3n","k"],function(a,b,c,d,e,f,g,h){var i=function(a){return c.run(a,f.get)},j=function(a,b){c.run(a,f.set(b))},k=function(c,d,e,f,g){var h=a.write(b.on(d,e),b.on(f,g));j(c,h)},l=function(a,b){c.run(a,f.selectElementContents(b))},m=function(a,b){c.run(a,f.replace(b))},n=function(a,b,d){c.run(a,f.replaceRange(b,d))},o=function(a,b,d,e,g){c.run(a,f.deleteRange(b,d,e,g))},p=function(a,b,d,e,g){return c.run(a,f.cloneFragment(b,d,e,g))},q=function(a,b,c,d){return g.eq(a,c)&&b===d},r=function(a,b,d,e,g){return c.run(a,f.rectangleAt(b,d,e,g))},s=function(a,b){return c.run(a,f.bounds(b))},t=function(a,b,c){return d.find(a,b,c)},u=function(c,d,e,f,g,h){var i=a.write(b.on(d,e),b.on(f,g));return t(c,i,h)},v=function(b,c){var d=e.forceRange(b,c);return a.general(h.fromDom(d.startContainer),d.startOffset,h.fromDom(d.endContainer),d.endOffset)},w=function(a){c.run(a,f.clearSelection)},x=function(a,b,d,e,g){return c.run(a,f.stringAt(b,d,e,g))};return{get:i,set:j,setExact:k,selectElementContents:l,replace:m,replaceRange:n,deleteRange:o,isCollapsed:q,cloneFragment:p,rectangleAt:r,bounds:s,findWithin:t,findWithinExact:u,deriveExact:v,clearAll:w,stringAt:x}}),g("5u",["p","3n"],function(a,b){return function(c,d,e,f){var g=b.eq(c,e)&&d===f;return{startContainer:a.constant(c),startOffset:a.constant(d),endContainer:a.constant(e),endOffset:a.constant(f),collapsed:a.constant(g)}}}),g("3b",["5u","k","1x","1y","3f"],function(a,b,c,d,e){return function(f){var g=b.fromTag("br"),h=function(a,b){a.dom().focus()},i=function(a){var b=e.owner(a);return b.dom().defaultView},j=function(b,d){var e=i(d);e.focus(),c.append(d,g),f.set(e,a(g,0,g,0))},k=function(){d.remove(g)};return{cleanup:k,toOn:h,toOff:j}}}),g("3c",["p"],function(a){return function(){var b=function(a,b){a.dom().focus()},c=function(a,b){b.dom().focus()},d=a.identity;return{toOn:b,toOff:c,cleanup:d}}}),g("6y",["g","k","1x","29","1y","3f"],function(a,b,c,d,e,f){var g=function(a,b){f.nextSibling(a).filter(b).each(function(b){var c=f.children(b);d.append(a,c),e.remove(b)}),i(a,b)},h=function(a,g){var h=f.children(a),i=b.fromTag("div",f.owner(a).dom());d.append(i,h),c.before(a,i),e.remove(a)},i=function(b,c){var d=f.children(b);a.each(d,function(a){c(a)&&h(a,b)})};return{consolidate:g}}),g("6z",["3g"],function(a){var b=a.create("ephox-sloth");return{resolve:b.resolve}}),g("70",["5d"],function(a){var b=function(a,b){return function(d){return"rtl"===c(d)?b:a}},c=function(b){return"rtl"===a.get(b,"direction")?"rtl":"ltr"};return{onDirection:b,getDirection:c}}),g("5v",["1s","2c","6y","6z","j","27","3q","5d","70","k","6h","1x","1y","20","3f"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=d.resolve("bin"),q=p+a.generate(""),r=i.onDirection("-100000px","100000px");return function(a){var d=j.fromTag("div");e.setAll(d,{contenteditable:"true","aria-hidden":"true"}),h.setAll(d,{position:"fixed",top:"0px",width:"100px",height:"100px",overflow:"hidden",opacity:"0"}),g.add(d,[p,q]);var i=function(a){m.empty(d),h.set(d,"left",r(a)),l.append(a,d)},s=function(){var b=n.ancestor(d,"body");b.each(function(b){a.toOff(b,d)})},t=function(a){return f.has(a,q)},u=function(){c.consolidate(d,t);var a=b.immutable("elements","html","container"),e=o.children(d),f=k.get(d);return a(e,f,d)},v=function(){m.remove(d)},w=function(){return d};return{attach:i,focus:s,contents:u,container:w,detach:v}}}),g("3d",["p","2x","21","22","2y","5v","3f"],function(a,b,c,d,e,f,g){return function(h,i){var j=f(h),k=function(){h.cleanup();var a=j.contents();j.detach(),n.trigger.after(a.elements(),a.html(),j.container())},l=b.tap(function(){n.trigger.before(),j.attach(i),j.focus(),e.run(g.owner(i),l,k)}),m=function(){l.instance()},n=d.create({before:c([]),after:c(["elements","html","container"])}),o=a.noop;return{instance:a.constant(m),destroy:o,events:n.registry}}}),g("1r",["2t","3a","21","22","3b","3c","3d","1d"],function(a,b,c,d,e,f,g,h){var i=a.detect(),j={set:function(a,c){b.setExact(a,c.startContainer(),c.startOffset(),c.endContainer(),c.endOffset())}},k=function(a){var b=i.browser.isIE()&&"body"!==h.name(a)?f:e;return b(j)};return function(a){var b=d.create({after:c(["container"])}),e=k(a),f=g(e,a);f.events.after.bind(function(c){e.toOn(a,c.container()),b.trigger.after(c.container())});var h=function(){f.instance()()};return{run:h,events:b.registry}}}),g("5y",["w","k","1g"],function(a,b,c){var d=function(d){if("complete"===c.readyState||"interactive"===c.readyState)d();else var e=a.bind(b.fromDom(c),"DOMContentLoaded",function(){d(),e.unbind()})};return{execute:d}}),g("3e",["2t","5h","p","5w","n","5x","5i","5d","w","k","1x","5y","1y"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=b.install("ephox.keurig.init"),o=e.none(),p=a.detect(),q=p.browser,r=q.isIE()||q.isSpartan()||p.deviceType.isiOS()||p.deviceType.isAndroid(),s=r?c.noop:d.cached(function(a){var b=j.fromTag("div");if(void 0===a)throw"baseUrl was undefined";var c=j.fromTag("iframe");h.setAll(b,{display:"none"});var d=i.bind(c,"load",function(){var g=function(a){o=e.some(a),q.isSafari()||m.remove(b)},h=n.ephemeral(g),i=a+"/wordimport.js";f.write(c,'"),d.unbind()});l.execute(function(){k.append(g.body(),b),k.append(b,c)})}),t=function(a,b){return o.map(function(c){return c(a,b)})},u=function(){return o.isSome()};return{load:s,cleanDocument:t,ready:u}}),g("1t",["3e"],function(a){return function(b){return a.ready()||a.load(b),{cleanDocument:a.cleanDocument}}}),g("l",["1o","1p","1q","1r","g","1s","1t","p","n"],function(a,b,c,d,e,f,g,h,i){return function(j,k,l,m){var n=g(m.baseUrl),o=h.curry(c,k),p=d,q=function(){return{clipboardType:f.generate("clipboard-type"),findClipboardTags:i.none}},r=void 0!==m.intraFlag?m.intraFlag:q(),s=e.flatten([void 0!==m.intraFlag?[b.internal(l,p,j,r)]:[],[b.onlyText()],[b.gwt(n,k,m,o)],[b.image(m)]]),t=b.pastiche(k,m,l,p,j,o,r);return a(s,t)}}),g("m",["1o","1p"],function(a,b){return function(){return a([b.text()],b.none())}}),g("q",[],function(){return{officeStyles:"prompt",htmlStyles:"clean"}}),g("r",["j","k","1x","1y","1z","20","1g"],function(a,b,c,d,e,f,g){var h="powerpaste-styles",i="#"+h,j=function(d){if(!e.any(i)){var g="",j=b.fromHtml(g);a.set(j,"type","text/css"),a.set(j,"id",h);var k=f.first("head").getOrDie("Head element could not be found.");c.append(k,j)}},k=function(){if(e.any(i)){var a=f.first("head").getOrDie("Head element could not be found."),b=f.descendant(a,i).getOrDie("The style element could not be removed");d.remove(b)}};return{injectStyles:j,removeStyles:k}}),g("v",["g","k","j","1g"],function(a,b,c,d){var e=function(a){var b=d.createElement("div");b.appendChild(a.cloneNode(!0));var c=b.innerHTML;return b=a=null,c},f=function(d){a.each(a.map(d.getElementsByTagName("*"),b.fromDom),function(a){c.has(a,"data-mce-style")&&!c.has(a,"style")&&c.set(a,"style",c.get(a,"data-mce-style"))})};return{nodeToString:e,restoreStyleAttrs:f}}),g("t",["21","22","v","j","k","1x","1y","20"],function(a,b,c,d,e,f,g,h){return function(i){var j=function(){var j,k="",l="",m=[],n=null,o=b.create({close:a([])}),p=function(a){k=a},q=function(a){var b=c.nodeToString(a.dom());l=[{type:"container",html:b}],n=a},r=function(a){var b=[];a.forEach(function(a,c,d){b.push({text:a.text,onclick:a.click})}),m=b},s=function(a){o.trigger.close()},t=function(){j.off("close",s),j.close("close")},u=function(){0===m.length&&(m=[{text:"Close",onclick:function(){j.close()}}]);var a={title:k,spacing:10,padding:10,minWidth:300,minHeight:100,layout:"flex",items:l,buttons:m};j=i.windowManager.open(a);var b=e.fromDom(j.getEl()),c=h.descendant(b,"."+d.get(n,"class")).getOrDie("We must find this element or we cannot continue");f.before(c,n),g.remove(c),j.on("close",s)},v=function(){t()},w=function(){t()},x=function(){};return{events:o.registry,setTitle:p,setContent:q,setButtons:r,show:u,hide:v,destroy:w,reflow:x}};return{createDialog:j}}}),g("24",["2c","n"],function(a,b){var c=a.immutable("url","html"),d=function(a){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(a)},e=function(a){return d(a)&&/.(gif|jpe?g|png)$/.test(a)},f=function(a){var d=/^([^<]+)<\/a>$/.exec(a);return b.from(d).bind(function(d){var e=c(d[1],a);return d[1]===d[2]?b.some(e):b.none()})};return{isAbsoluteUrl:d,isImageUrl:e,parseUrlFromLinkHtml:f}}),g("u",["g","n","23","24"],function(a,b,c,d){var e=function(a){return"extra"in a.undoManager},f=function(a,c,d){return e(a)?(a.undoManager.extra(function(){k(a,c)},d),b.some(!0)):b.none()},g=function(a,b){return f(a,b.html(),function(){a.insertContent('')})},h=function(a,b){return f(a,b.html(),function(){a.execCommand("mceInsertLink",!1,b.url())})},i=function(a,c){return d.parseUrlFromLinkHtml(c).bind(function(c){var e=a.selection.isCollapsed()===!1&&d.isAbsoluteUrl(c.url());return e?h(a,c):b.none()})},j=function(a,c){return d.parseUrlFromLinkHtml(c).bind(function(c){return d.isImageUrl(c.url())?g(a,c):b.none()})},k=function(a,c){return a.insertContent(c,{merge:a.settings.paste_merge_formats!==!1,paste:!0}),b.some(!0)},l=function(a,b,d){var e=function(c){return c(a,b)};return c.findMap(d,e)};return{until:l,linkSelection:i,insertImage:j,insertContent:k}}),g("8",[],function(){var a=function(a,b){return a.hasEventListeners(b)},b=function(a,b){return a.fire("PastePreProcess",{content:b}).content},c=function(a,b){var c=a.dom.add(a.getBody(),"div",{style:"display:none"},b),d=a.fire("PastePostProcess",{node:c}).node.innerHTML;return a.dom.remove(c),d},d=function(c,d){return a(c,"PastePreProcess")?b(c,d):d},e=function(b,d){return a(b,"PastePostProcess")?c(b,d):d},f=function(a,b){return e(a,d(a,b))},g=function(a){var b=a.settings,c=a.plugins.powerpaste;b.paste_preprocess&&a.on("PastePreProcess",function(d){b.paste_preprocess.call(a,c,d)}),b.paste_postprocess&&a.on("PastePostProcess",function(d){b.paste_postprocess.call(a,c,d)})};return{process:f,registerEvents:g}}),g("6",["l","m","g","n","o","p","d","q","r","s","t","u","8","v","w","k","x","2"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return function(s,t,u,v,w){var x,y,z,A,B;B=(v?v.jsUrl:u)+"/js",y=(v?v.swfUrl:u)+"/flash/textboxpaste.swf",z=(v?v.imgUrl:u)+"/img/spinner_96.gif",A=(v?v.cssUrl:u)+"/css/editorcss.css";var C=function(a){return a.settings.smart_paste!==!1},D=function(a){return function(b,c){return b.undoManager.transact(function(){l.insertContent(b,c),n.restoreStyleAttrs(b.getBody()),w.prepareImages(a)}),d.some(!0)}},E=function(a,b,c){var d=C(a)?[l.linkSelection,l.insertImage]:[];l.until(a,b,d.concat([D(c)]))},F=function(){x&&s.selection.moveToBookmark(x),x=null};s.on("init",function(d){i.injectStyles(z),s.dom.loadCSS(A);var l={baseUrl:B,swf:y,officeStyles:s.settings.powerpaste_word_import||h.officeStyles,htmlStyles:s.settings.powerpaste_html_import||h.htmlStyles,translations:g.translate,allowLocalImages:s.settings.powerpaste_allow_local_images!==!1,enableFlashImport:s.settings.powerpaste_enable_flash_import!==!1,preprocessor:function(a){return e.pure(a)}},r=k(s),u=p.fromDom(s.getBody()),v=function(a){a.events.cancel.bind(function(){F()}),a.events.error.bind(function(a){F(),s.notificationManager?s.notificationManager.open({text:g.translate(a.message()),type:"error"}):j.showDialog(s,g.translate(a.message()))}),a.events.insert.bind(function(a){var b=c.map(a.elements(),function(a){return n.nodeToString(a.dom())}).join("");s.focus(),q(function(){F(),E(s,m.process(s,b),a.assets()),w.uploadImages(a.assets())},1)})},C=a(u,r.createDialog,f.noop,l),D=b();c.each([C,D],v),o.bind(u,"paste",function(a){x||(x=s.selection.getBookmark());var b=t.isText()?D:C;b.paste(a.raw()),t.reset(),q(function(){s.windowManager.windows[0]&&s.windowManager.windows[0].getEl()&&s.windowManager.windows[0].getEl().focus()},1)})}),s.on("remove",function(a){1===r.editors.length&&i.removeStyles()})}}),g("7",["y","z"],function(a,b){var c=function(a){return tinymce.util.VK.metaKeyPressed(a)&&86==a.keyCode&&a.shiftKey};return function(d){var e=b(d.settings.paste_as_text),f=b(!1);d.on("keydown",function(a){c(a)&&(f.set(!0),tinymce.Env.ie&&tinymce.Env.ie<10&&(a.preventDefault(),d.fire("paste",{})))});var g=a(function(){var a=d.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");d.notificationManager.open({text:a,type:"info"})}),h=function(){var a=this,b=!e.get();a.active(b),e.set(b),d.fire("PastePlainTextToggle",{state:b}),b===!0&&0!=d.settings.paste_plaintext_inform&&g(),d.focus()},i=function(){f.set(!1)},j=function(){return f.get()||e.get()};return{toggle:h,reset:i,isText:j}}}),g("10",[],function(){var a=0,b=1,c=-1,d=function(a){return parseInt(a,10)},e=function(a){return function(){return a}},f=function(a,b,c){return{major:e(a),minor:e(b),patch:e(c)}},g=function(a){var b=/([0-9]+)\.([0-9]+)\.([0-9]+)(?:(\-.+)?)/.exec(a);return b?f(d(b[1]),d(b[2]),d(b[3])):f(0,0,0)},h=function(d,e){var f=d-e;return 0===f?a:f>0?b:c},i=function(b,c){var d=h(b.major(),c.major());if(d!==a)return d;var e=h(b.minor(),c.minor());if(e!==a)return e;var f=h(b.patch(),c.patch());return f!==a?f:a};return{nu:f,parse:g,compare:i}}),g("9",["10"],function(a){var b=function(a){var b=[a.majorVersion,a.minorVersion].join(".");return b.split(".").slice(0,3).join(".")},c=function(c){return c?a.parse(b(c)):null},d=function(b,d){return a.compare(c(b),a.parse(d))<0};return{getVersion:c,isLessThan:d}}),g("a",["11"],function(a){var b=function(a,b){return function(){var c=a.console;c&&b in c&&c[b].apply(c,arguments)}};return{log:b(a,"log"),error:b(a,"error"),warn:b(a,"warm")}}),g("1",["3","4","5","6","7","8","9","a","2"],function(a,b,c,d,e,f,g,h,i){return function(j){return g.isLessThan(i,"4.0.0")?(h.error('The "powerpaste" plugin requires at least 4.0.0 version of TinyMCE.'),function(){}):function(g,h){var k=e(g),l=function(){var b=a(g);d(g,k,h,j,b),g.settings.powerpaste_block_drop||c(g,h,j,b)},m=function(){b(g,k,j)},n=function(){var a=this;a.active(k.isText()),g.on("PastePlainTextToggle",function(b){a.active(b.state)})};i.Env.ie&&i.Env.ie<10?m():l();var o=function(a){g.dom.bind(a,"drop dragstart dragend dragover dragenter dragleave dragdrop draggesture",function(a){return i.dom.Event.cancel(a)})};g.settings.powerpaste_block_drop&&g.on("init",function(a){o(g.getBody()),o(g.getDoc())}),f.registerEvents(g),g.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:k.toggle,onPostRender:n}),g.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,onclick:k.toggle,onPostRender:n})}}}),g("0",["1","2"],function(a,b){return function(c){b.PluginManager.requireLangPack("powerpaste","ar,ca,cs,da,de,el,es,fa,fi,fr_FR,he_IL,hr,hu_HU,it,ja,kk,ko_KR,nb_NO,nl,pl,pt_BR,pt_PT,ro,ru,sk,sl_SI,sv_SE,th_TH,tr,uk,zh_CN,zh_TW"),b.PluginManager.add("powerpaste",a(c))}}),d("0")()}();